Esempio n. 1
0
def run():
    parser = argparse.ArgumentParser(description="Monitor your W3C formatted HTTP access log.  See:\nhttp://www.w3.org/Daemon/User/Config/Logging.html")
    parser.add_argument("file",
                        help="The http access log file you want to monitor")
    parser.add_argument("--format", default="common",
                        help="The format of your access log")
    parser.add_argument("--period", type=int, default=10,
                        help="How often (in seconds) scout will display monitoring statistics")
    parser.add_argument("--alert-period", type=int, default=2,
                        help="How long (in minutes) the high traffic alert period will last.")
    parser.add_argument("--alert-threshold", type=int, default=10,
                        help="The number of requests in the alert period that will trigger a high traffic warning.")
    parser.add_argument("--max-frequent-sections", type=int, default=10,
                        help="The maximum number of most-frequently-requested sections to show.")

    args = parser.parse_args()
    monitor = Monitor(args.file, args.format, args.period, args.alert_period, args.alert_threshold, args.max_frequent_sections)
    while True:
        monitor.run_monitor()
        time.sleep(args.period)
Esempio n. 2
0
 def setUp(self):
     unittest.TestCase.setUp(self)
     self.monitor = Monitor(None, "common", None, None, 2, None)
Esempio n. 3
0
class Test(unittest.TestCase):
    def setUp(self):
        unittest.TestCase.setUp(self)
        self.monitor = Monitor(None, "common", None, None, 2, None)

    def testGetSection(self):
        self.assertEqual(
            self.monitor._get_section({'%r': "GET /section/ HTTP/1.1"}),
            "section")
        self.assertEqual(
            self.monitor._get_section(
                {'%r': "GET /section/subsection HTTP/1.1"}), "section")
        self.assertEqual(
            self.monitor._get_section(
                {'%r': "GET /section/?key=value HTTP/1.1"}), "section")
        self.assertEqual(
            self.monitor._get_section({'%r': "GET /section/#anchor HTTP/1.1"}),
            "section")
        self.assertEqual(
            self.monitor._get_section({'%r': "GET /section HTTP/1.1"}), None)
        self.assertEqual(self.monitor._get_section({'%r': "GET / HTTP/1.1"}),
                         None)

    def testGenerateNewAlert(self):
        current_time = datetime.now()
        self.monitor._log_cache = [1, 1]
        self.monitor._alert_state = False
        self.monitor._add_alert = Mock()

        self.monitor._check_alert_state(current_time)

        self.monitor._add_alert.assert_called_with(
            "High traffic generated an alert - hits = 2, triggered at %s" %
            current_time)
        self.assertTrue(
            self.monitor._alert_state,
            "Creation of alert should set monitor's alert_state to True")

    def testNoAlertGeneratedWhenAlertStateTrue(self):
        current_time = datetime.now()
        self.monitor._log_cache = [1, 1]
        self.monitor._alert_state = True

        self.monitor._check_alert_state(current_time)

        self.assertEquals([], self.monitor._alerts,
                          "Monitors _alerts should be empty")
        self.assertTrue(self.monitor._alert_state,
                        "alert_state should remain True")

    def testNoAlertGeneratedWhenCacheSmallerThanThreshold(self):
        current_time = datetime.now()
        self.monitor._log_cache = [1]
        self.monitor._alert_state = False

        self.monitor._check_alert_state(current_time)

        self.assertEquals([], self.monitor._alerts,
                          "Monitors _alerts should be empty")
        self.assertFalse(self.monitor._alert_state,
                         "alert_state should remain False")

    def testRecoveryMessageGeneratedWhenCacheSmallerThanThreshold(self):
        current_time = datetime.now()
        self.monitor._log_cache = [1]
        self.monitor._alert_state = True
        self.monitor._add_alert = Mock()

        self.monitor._check_alert_state(current_time)

        self.monitor._add_alert.assert_called_with(
            "Traffic alert recovered at %s" % current_time)
        self.assertFalse(self.monitor._alert_state,
                         "alert_state should become False")
Esempio n. 4
0
 def setUp(self):
     unittest.TestCase.setUp(self)
     self.monitor = Monitor(None, "common", None, None, 2, None)
Esempio n. 5
0
class Test(unittest.TestCase):

    def setUp(self):
        unittest.TestCase.setUp(self)
        self.monitor = Monitor(None, "common", None, None, 2, None)

    def testGetSection(self):
        self.assertEqual(self.monitor._get_section({'%r': "GET /section/ HTTP/1.1"}), "section")
        self.assertEqual(self.monitor._get_section({'%r': "GET /section/subsection HTTP/1.1"}), "section")
        self.assertEqual(self.monitor._get_section({'%r': "GET /section/?key=value HTTP/1.1"}), "section")
        self.assertEqual(self.monitor._get_section({'%r': "GET /section/#anchor HTTP/1.1"}), "section")
        self.assertEqual(self.monitor._get_section({'%r': "GET /section HTTP/1.1"}), None)
        self.assertEqual(self.monitor._get_section({'%r': "GET / HTTP/1.1"}), None)

    def testGenerateNewAlert(self):
        current_time = datetime.now()
        self.monitor._log_cache = [1, 1]
        self.monitor._alert_state = False
        self.monitor._add_alert = Mock()

        self.monitor._check_alert_state(current_time)

        self.monitor._add_alert.assert_called_with("High traffic generated an alert - hits = 2, triggered at %s" % current_time)
        self.assertTrue(self.monitor._alert_state, "Creation of alert should set monitor's alert_state to True")

    def testNoAlertGeneratedWhenAlertStateTrue(self):
        current_time = datetime.now()
        self.monitor._log_cache = [1, 1]
        self.monitor._alert_state = True

        self.monitor._check_alert_state(current_time)

        self.assertEquals([], self.monitor._alerts, "Monitors _alerts should be empty")
        self.assertTrue(self.monitor._alert_state, "alert_state should remain True")

    def testNoAlertGeneratedWhenCacheSmallerThanThreshold(self):
        current_time = datetime.now()
        self.monitor._log_cache = [1]
        self.monitor._alert_state = False

        self.monitor._check_alert_state(current_time)

        self.assertEquals([], self.monitor._alerts, "Monitors _alerts should be empty")
        self.assertFalse(self.monitor._alert_state, "alert_state should remain False")

    def testRecoveryMessageGeneratedWhenCacheSmallerThanThreshold(self):
        current_time = datetime.now()
        self.monitor._log_cache = [1]
        self.monitor._alert_state = True
        self.monitor._add_alert = Mock()

        self.monitor._check_alert_state(current_time)

        self.monitor._add_alert.assert_called_with("Traffic alert recovered at %s" % current_time)
        self.assertFalse(self.monitor._alert_state, "alert_state should become False")