mirror of
				https://github.com/librenms/librenms-agent.git
				synced 2024-05-09 09:54:52 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			67 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			67 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/env python3
 | |
| 
 | |
| import os
 | |
| import json
 | |
| 
 | |
| CONFIGFILE = '/etc/snmp/pureftpd.json'
 | |
| 
 | |
| pureftpwho_cmd = '/usr/sbin/pure-ftpwho'
 | |
| pureftpwho_args = '-v -s -n'
 | |
| 
 | |
| 
 | |
| output_data = {}
 | |
| output_data['version'] = 1
 | |
| output_data['errorString'] = ""
 | |
| output_data['error'] = 0
 | |
| 
 | |
| 
 | |
| if os.path.isfile(CONFIGFILE):
 | |
|     with open(CONFIGFILE, 'r') as json_file:
 | |
|         try:
 | |
|             configfile = json.load(json_file)
 | |
|         except json.decoder.JSONDecodeError as e:
 | |
|             output_data['error'] = 1
 | |
|             output_data['errorString'] = "Configfile Error: '%s'" % e
 | |
| else:
 | |
|     configfile = None
 | |
| 
 | |
| if not output_data['error'] and configfile:
 | |
|     try:
 | |
|         if 'pureftpwho_cmd' in configfile.keys():
 | |
|             pureftpwho_cmd = configfile['pureftpwho_cmd']
 | |
|     except KeyError:
 | |
|         output_data['error'] = 1
 | |
|         output_data['errorString'] = "Configfile Error: '%s'" % e
 | |
| 
 | |
| 
 | |
| output = os.popen(pureftpwho_cmd + ' ' + pureftpwho_args).read()
 | |
| 
 | |
| data = {}
 | |
| 
 | |
| for line in output.split('\n'):
 | |
|     if not len(line):
 | |
|         continue
 | |
| 
 | |
|     pid, acct, time, state, file, peer, local, port, transfered, total, percent, bandwidth = line.split('|')
 | |
| 
 | |
|     if "IDLE" in state:
 | |
|         state = "IDLE"
 | |
|     elif "DL" in state:
 | |
|         state = "DL"
 | |
|     elif "UL" in state:
 | |
|         state = "UL"
 | |
| 
 | |
|     if acct not in data.keys():
 | |
|         data[acct] = {}
 | |
|     if state not in data[acct]:
 | |
|         data[acct][state] = {'bitrate': 0,
 | |
|                              'connections': 0
 | |
|                              }
 | |
|     bandwidth_bit = int(bandwidth) * 1024 * 8
 | |
|     data[acct][state]['bitrate'] += bandwidth_bit
 | |
|     data[acct][state]['connections'] += 1
 | |
| 
 | |
| output_data['data'] = data
 | |
| 
 | |
| print (json.dumps(output_data))
 |