def main(): # Ensure Python version if sys.version_info < (3, 0): print('Please use python 3 to run this program') # Get arguments from execution parser = ArgumentParser() parser.add_argument("-t", "--target", required=True, help="Target website to monitor") parser.add_argument("-c", "--config", required=True, help="Path to config file") parser.add_argument("-i", "--interval", required=False, default=1, help="Time interval in seconds to polling data") args = parser.parse_args() # Read configuration file with open(args.config) as fh: config_file = json.load(fh) kafka_config = config_file.get("kafka", {}) # Initialise kafka producer producer = KafkaProducer( bootstrap_servers=kafka_config["kafka_url"], security_protocol="SSL", ssl_cafile=kafka_config['ssl_ca_file'], ssl_certfile=kafka_config['ssl_access_certificate_file'], ssl_keyfile=kafka_config['ssl_access_key_file'], ) while True: monitor = Monitor(args.target) monitor.fetch() # Format monitoring data into JSON message = json.dumps(monitor.__dict__, indent=4) print("Sending: ", format(message)) producer.send("monitoring", message.encode("utf-8")) # Force sending of all messages producer.flush() zzz = float(args.interval) print("sleeping for {} seconds Zzz...".format(zzz)) time.sleep(zzz)
def test_fetch(self, mock_get): # Assert requests.get calls url = 'http://up.com' expected = Monitor(url, 200, 1, "html text", 1592379760.808488) actual = Monitor(url) actual.fetch() actual.date_time = 1592379760.808488 # setting of date_time is not part of the self.assertEqual(expected, actual) url = 'http://exceotion.com' expected = Monitor(url, None, None, None) actual = Monitor(url) actual.fetch() self.assertEqual(expected, actual)