mirror of
https://github.com/ntop/ntopng.git
synced 2026-04-28 23:19:33 +00:00
130 lines
2.8 KiB
Python
Executable file
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)
|