ntopng/python/examples/event_handler.py
2023-02-03 17:33:12 +01:00

130 lines
2.8 KiB
Python
Executable file

#!/usr/bin/env python3
#
# Sample script to be used as event handler in /usr/share/ntopng/scripts/shell/
#
import os
import sys
import time
import json
from redmail import EmailSender
from pathlib import Path
from ntopng.ntopng import Ntopng
from ntopng.report import Report
###############################################
### ntopng Connection Settings
ntopng_url = "http://localhost:3000"
auth_token = "532b8dbe1092e591435c7a13d561db71"
username = None
password = None
### SMTP Server Configuration
smtp_host = "mail.example.org"
smtp_port = 25
smtp_username = "sender"
smtp_password = ""
### Email sender/recipient
email_sender = "sender@example.org"
email_recipient = "example@gmail.com"
email_subject = "Automatic Report"
###############################################
# Defines
entity_host = 1
custom_host_lua_script = 24
external_host_script = 27
# Log
logfile = open("/tmp/python-script.log", "a")
def log(line):
logfile.write(line + "\n")
# Send report by mail
def send_report(my_ntopng, iface_id, host_ip):
output_file = "/tmp/report.pdf"
generator = Report(my_ntopng, iface_id, host_ip)
log("Generating PDF " + output_file + "...")
generator.build(output_file)
if email_recipient is None:
return
log("Sending report " + output_file + " by email...")
email = EmailSender(
host = smtp_host,
port = smtp_port,
username = smtp_username,
password = smtp_password
)
email.send(
sender = email_sender,
receivers = [email_recipient],
subject = email_subject,
attachments = {
"report.pdf": Path(output_file)
}
)
# Debug tracing
"""
for line in sys.stdin:
log(line)
"""
# Alert JSON decode
lines = sys.stdin.readlines()
alert = json.loads(lines[0])
#log("Processing alert...")
# Filter external host alerts
if alert["entity_id"] == entity_host and alert["alert_id"] == external_host_script:
alert_info = json.loads(alert["json"])
log("=> Custom Alert")
log(alert["ip"])
log(alert_info["message"])
log("Connecting to ntopng...")
# Connect to ntopng to get more data
my_ntopng = None
try:
my_ntopng = Ntopng(username, password, auth_token, ntopng_url)
except:
log("Invalid credentials or URL specified")
if my_ntopng is not None:
iface_id = alert["ifid"]
host_ip = alert["ip"]
"""
my_historical = my_ntopng.get_historical_interface(iface_id)
epoch_end = int(time.time())
epoch_begin = epoch_end - 3600
rsp = my_historical.get_alerts_stats(epoch_begin, epoch_end)
for row in rsp:
print("\n--------------------------\n"+row['label'])
print(row['value'])
"""
# Send a report
send_report(my_ntopng, iface_id, host_ip)
logfile.close()
os._exit(0)