112 lines
2.6 KiB
Python
Executable File
112 lines
2.6 KiB
Python
Executable File
#!/usr/bin/python3
|
|
#from netaddr import IPNetwork
|
|
#from netaddr import IPAddress
|
|
from xmlrpc.client import ServerProxy
|
|
#import sqlite3
|
|
import socket
|
|
import csv
|
|
import queue
|
|
import threading
|
|
import sys
|
|
import http.client
|
|
|
|
WORKERS = 10
|
|
|
|
inFilePath = sys.argv[1]
|
|
|
|
|
|
def GetStatusCode(host, path="/"):
|
|
try:
|
|
conn = http.client.HTTPConnection(host)
|
|
conn.request("GET", path)
|
|
return conn.getresponse().status
|
|
except Exception:
|
|
return None
|
|
|
|
|
|
class Worker(threading.Thread):
|
|
|
|
def __init__(self, Settings, Results):
|
|
self.__Settings = Settings
|
|
self.__Results = Results
|
|
self.parent = threading.current_thread()
|
|
threading.Thread.__init__(self)
|
|
|
|
def run(self):
|
|
retry = False
|
|
socket.setdefaulttimeout(5)
|
|
while 1:
|
|
DevSettings = self.__Settings.get()
|
|
if DevSettings is None:
|
|
self.__Results.put(None)
|
|
break
|
|
|
|
IP = DevSettings.pop('IP', None)
|
|
|
|
for k in list(DevSettings.keys()):
|
|
if k.startswith('Alarm-Name'):
|
|
DevSettings.pop(k)
|
|
|
|
if GetStatusCode(str(IP), "/languages") == 200:
|
|
#print((self.getName() + ' processing: ' + str(IP)))
|
|
while True:
|
|
proxy = ServerProxy('http://%s/xmlrpc' % IP)
|
|
try:
|
|
#print(((DevSettings)))
|
|
Result = proxy.db.set(DevSettings)
|
|
except socket.timeout:
|
|
retry = True
|
|
continue
|
|
|
|
if retry:
|
|
retry = False
|
|
else:
|
|
break
|
|
|
|
if len(Result) > 0:
|
|
Result['IP'] = str(IP)
|
|
self.__Results.put(Result)
|
|
else:
|
|
print((self.getName() + ' skipping: ' + str(IP)))
|
|
|
|
|
|
def Input():
|
|
with open(inFilePath, 'r', newline='') as inFile:
|
|
csvReader = csv.DictReader(inFile)
|
|
|
|
for row in csvReader:
|
|
Settings.put(row)
|
|
inFile.close()
|
|
|
|
for i in range(WORKERS):
|
|
Settings.put(None)
|
|
|
|
|
|
def Output():
|
|
Count = WORKERS
|
|
while 1:
|
|
Row = Results.get()
|
|
if Row is None:
|
|
if Count > 1:
|
|
Count -= 1
|
|
else:
|
|
break
|
|
else:
|
|
print(((Row['IP'] + ':' + Row['resultString'])))
|
|
|
|
Settings = queue.Queue(0)
|
|
Results = queue.Queue(0)
|
|
|
|
Input()
|
|
|
|
for i in range(WORKERS):
|
|
Worker(Settings, Results).start()
|
|
|
|
if threading.current_thread() is not threading.main_thread():
|
|
sys.exit(0)
|
|
|
|
Output()
|
|
|
|
sys.exit(0)
|
|
|