agent kan post request sturen naar master.
master doet er nog niets mee
This commit is contained in:
parent
b1afd1d30e
commit
87881aa466
|
@ -1,10 +1,10 @@
|
|||
<?xml version='1.0' encoding='utf-8'?>
|
||||
<agent>
|
||||
<!-- pas hier de ip/domain aan van de server waar de master script op draait -->
|
||||
<master_address></master_address>
|
||||
<master_address>localhost</master_address>
|
||||
|
||||
<!-- pas eventueel de poort aan -->
|
||||
<port>8080</port>
|
||||
<master_port>5000</master_port>
|
||||
|
||||
<!-- De naam waar de agent zich mee logt in het systeem. Als veld leeg is wordt automatisch de hostname van het systeem ingevuld -->
|
||||
<agent_name_override></agent_name_override>
|
||||
|
|
|
@ -0,0 +1,76 @@
|
|||
import xml.etree.ElementTree as ET
|
||||
import platform
|
||||
import psutil
|
||||
import time
|
||||
import requests
|
||||
|
||||
def load_config():
|
||||
tree = ET.parse('config.xml') # parseer xml
|
||||
root = tree.getroot()
|
||||
|
||||
# laad config items in python variabelen
|
||||
a = root.find('master_address').text
|
||||
b = root.find('master_port').text
|
||||
c = root.find('agent_name_override').text
|
||||
|
||||
# return de settings in een dict
|
||||
return {'master_address':a, 'master_port':b, 'agent_name_override':c}
|
||||
|
||||
def get_hostname(override):
|
||||
if override == None:
|
||||
return platform.node()
|
||||
else:
|
||||
return override
|
||||
|
||||
def get_os_release():
|
||||
return platform.release()
|
||||
|
||||
def get_os_type():
|
||||
return platform.system()
|
||||
|
||||
def get_cpu_usage():
|
||||
return psutil.cpu_percent(1)
|
||||
|
||||
def get_ram_usage():
|
||||
return {'total':psutil.virtual_memory()[0], 'used':psutil.virtual_memory()[3]}
|
||||
|
||||
def get_network_troughput():
|
||||
"""
|
||||
Eigen troughput meter implementatie om geen extra libraries te gebruiken.
|
||||
Uit tests lijkt het er op dat het redelijk accuraat is.
|
||||
"""
|
||||
pre = psutil.net_io_counters() # totaal aantal bytes verstuurd/gekregen opslaan
|
||||
time.sleep(1) # 1 seconde wachten
|
||||
post = psutil.net_io_counters() # totaal aantal bytes verstuurd/gekregen opslaan
|
||||
|
||||
ups = post[0] - pre[0] # totaal bytes per seconde verstuurd berekenen
|
||||
downs = post[1] - pre[1] # totaal bytes per seconde gekregen berekenen
|
||||
return {'bytes_upload_per_second': ups, 'bytes_download_per_second': downs}
|
||||
|
||||
def post_json(data, ma, mp):
|
||||
r = requests.post(f'http://{ma}:{mp}/api/v1/host/post', json=data)
|
||||
if r.status_code != 200:
|
||||
print(f'Error posting, got HTTP status code {r.status_code}, exiting with code 1!')
|
||||
exit(1)
|
||||
else:
|
||||
return
|
||||
|
||||
if __name__ == '__main__':
|
||||
config = load_config() # sla de dict op in een variabele
|
||||
|
||||
data = {} # hoofd dict wat omgezet gaat worden naar json
|
||||
static = {} # static dict waar waardes in opgeslagen worden die (meestal) statisch zijn
|
||||
proc = {}
|
||||
|
||||
static['hostname'] = get_hostname(config['agent_name_override'])
|
||||
static['os_release'] = get_os_release()
|
||||
static['os_type'] = get_os_type()
|
||||
|
||||
proc['cpu_usage'] = get_cpu_usage()
|
||||
proc['ram_usage'] = get_ram_usage()
|
||||
proc['network_troughput'] = get_network_troughput()
|
||||
|
||||
data['static'] = static
|
||||
data['proc'] = proc
|
||||
|
||||
post_json(data, config['master_address'], config['master_port'])
|
|
@ -1,6 +1,7 @@
|
|||
from flask import Flask, render_template, request
|
||||
import sqlite3 as sql
|
||||
import xml.etree.ElementTree as ET
|
||||
import json
|
||||
|
||||
tree = ET.parse('config.xml') # parseer xml
|
||||
root = tree.getroot()
|
||||
|
@ -18,6 +19,13 @@ def index():
|
|||
|
||||
|
||||
|
||||
# POST DATA
|
||||
@app.route('/api/v1/host/post', methods=['POST'])
|
||||
def host_post():
|
||||
data = request.get_json() # sla json data op in dict
|
||||
return '{"status": 200}'
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
Reference in New Issue