Get the App
SLTechnology News&Howtos  ›  Network Security  › 

Python grabs the traffic graph of cacti

Shulou Source: shulou.com Published: 2022-06-01 06:06:42 09月10日 Update

   has a functional requirement to crawl the traffic graph of yesterday's whole day on cacti every day, and make a table of min, max and average traffic on the traffic graph and send it by e-mail. (python2.7.5)

   1. Modules to be used

#! / usr/bin/env python#-*- coding: UTF-8-*-import time,datetime,cookielib,requests,sys,re,urllib2,urllib,socket,csv,heapqimport smtplibimport mimetypesimport timefrom email.mime.text import MIMETextfrom email.mime.multipart import MIMEMultipartfrom email.mime.base import MIMEBasefrom email import encodersfrom email.MIMEImage import MIMEImagedefault_encoding = 'utf-8'if sys.getdefaultencoding ()! = default_encoding: reload (sys)

   2. Login function of cacti

Def Login1 (): socket.setdefaulttimeout (10) global headers headers= {} cj = cookielib.CookieJar () global opener opener = urllib2.build_opener (urllib2.HTTPCookieProcessor (cj)) # cacti account password data = urllib.urlencode ({'action':'login','login_username':'admin') 'login_password':'123456'}) # Open the cacti home page page = urllib2.Request ("http://100.0.102.3/index.php", data, headers) # crawl page data html = opener.open (page). Read () # if there is a graph_settings.php link in the page data Indicates that the login is successful (return 1), otherwise the login fails (return 0) if re.findall ("graph_settings.php", html): return 1 else: return 0

   3. Define a few more functions that need to be used

# convert date to time stamp (start and end times need to be specified for cacti image URL) def datetime_timestamp (dt): time.strptime (dt,'% Y-%m-%d% HV% MV% S') s = time.mktime (time.strptime (dt,'% Y-%m-%d% HV% MV% S') return int (s) # convert bit to Gbit/Mbit/Kbit (the difference between levels is 1000 times) Keep 2 decimal places) def tobit (x): if x > = 1000000000: return str (round (xmab 1000000000 else 2)) +'G' elif x > = 1000000: return str (round (xhammer 1000000lance 2)) +'M 'elif x > = 1000: return str (round (xapwise 1000000 else 2)) +' K'else: return str (xMagne2))

   4. Start grabbing the picture and csv (as shown below, the blue download arrow on the right of the picture is csv).

Try: # if the login is successful if Login1 () = = 1: # the start time of the traffic graph, yesterday's 00:00:00 start_time=str (datetime_timestamp ((datetime.datetime.today ()-datetime.timedelta (days=1)). Strftime ('% Y-%m-%d 00start_time=str ('% Y-%m-%d 00start_time=str () # the end time of the traffic graph Today's 00:00:00 end_time=str (datetime_timestamp (datetime.datetime.today (). Strftime ('% Y-%m-%d 0000) # Traffic graph URL for the whole day yesterday (2687 is picture id) url1= "http://100.0.102.3/graph_image.php?action=zoom&local_graph_id=2687&rra_id=0&view_type=&graph_start="+start_time+"& Graph_end= "+ end_time # download pictures Save to local request = urllib2.Request (url1, None, headers) res = opener.open (request) .read () f=open ("/ myftpdir/2687.png" "wb") f.write (res) f.close () # download the csv corresponding to the picture (used to read values such as max, min, etc.) url2= "http://100.0.102.3/graph_xport.php?local_graph_id=2687&rra_id=0&view_type=&graph_start="+start_time+"&graph_end="+end_time request = urllib2.Request (url2, None) Headers) res = opener.open (request). Read () f=open ("/ myftpdir/2687.csv", "wb") f.write (res) f.close () # read the csv file f=open ('/ myftpdir/2687.csv' 'rb') reader = csv.reader (f) # csv saves the average upload (outbound) and download (inbound) rate every 5 minutes (288 lines) Generate 2 lists to store all upload and download rates inbounds= [] outbounds= [] nuplo0 for row in reader: # Lines 11 to 298 of the table are if n > = 10 and n

Tags: Rate traffic picture mail login data time maximum minimum table storage success function that is daily report maximum title format text Apple Docker Huawei Linux macOS MariaDB Microsoft MySQL NVidia OPPO Reno NVidia vpn Redmi Xiaomi Shulou Technology