1
Fork 0

agent kan post request sturen naar master.

master doet er nog niets mee
This commit is contained in:
Ventilaar 2021-10-21 11:39:29 +02:00
parent b1afd1d30e
commit 87881aa466
3 changed files with 86 additions and 2 deletions

View File

@ -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>

View File

@ -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'])

View File

@ -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}'