def test_level_critical(self):
     '''Alert ... if level > 100'''
     now = time.time()
     dt = datetime.datetime.utcfromtimestamp(now)
     data = [(dt - MINUTE, 100.1)]
     level, value = space_weather.process_data(now, data)
     self.assertEqual(level, space_weather.CRITICAL)
 def test_level_warning(self):
     '''Warning ... if level > 1'''
     now = time.time()
     dt = datetime.datetime.utcfromtimestamp(now)
     data = [(dt - MINUTE, 1.1)]
     level, value = space_weather.process_data(now, data)
     self.assertEqual(level, space_weather.WARNING)
 def test_level_none(self):
     '''[BAD] Info ... if level < 1 for at least 90 minutes'''
     now = time.time()
     dt = datetime.datetime.utcfromtimestamp(now)
     data = [(dt - 90 * MINUTE, 1.1), (dt - 85 * MINUTE, 0.9)]
     level, value = space_weather.process_data(now, data)
     self.assertEqual(level, space_weather.NOTSET)
 def test_level_info(self):
     '''[GOOD] Info ... if level < 1 for at least 90 minutes'''
     now = time.time()
     dt = datetime.datetime.utcfromtimestamp(now)
     data = [(dt - 2 * HOUR, 0.9)]
     level, value = space_weather.process_data(now, data)
     self.assertEqual(level, space_weather.INFO)
Exemple #5
0
def main():
    '''Main function'''
    global last_level
    now = time.time()

    url = config.get('data', 'url')
    data, filename = space_weather.retrieve_data(url)
    filename = space_weather.format_filename(now, filename, 'png')
    level, value = space_weather.process_data(now, data)

    if level > last_level:
        if level in [space_weather.INFO,
                     space_weather.ALERT,
                     space_weather.CRITICAL]:
            headers, body = (space_weather.generate_alert
                             (level, value, url))
            space_weather.call_api(config.get('alert', 'host'),
                                   config.getint('alert', 'port'),
                                   config.get('alert', 'url'),
                                   headers, body)
        if level >= space_weather.INFO:
            space_weather.generate_plot(now, data, filename)
            fromaddr = config.get('email', 'fromaddr')
            toaddrs = config.get('email', 'toaddrs').split(',')
            msg = (space_weather.generate_email
                   (level, value, filename,
                    fromaddr, *toaddrs))
            space_weather.send_email(config.get('email', 'host'),
                                     config.getint('email', 'port'),
                                     config.getboolean('email', 'tls'),
                                     config.get('email', 'username'),
                                     config.get('email', 'password'),
                                     msg, fromaddr, *toaddrs)
    last_level = level

    delay = space_weather.next_notify(now)
    schedule.enter(delay, NORMAL, main, ())