def create_graph(ip, item): """Bak een grafiek van een item en data.""" plt.clf() # Plot leegmaken, zodat we fris kunnen beginnen. Nodig als de functie al een keer eerder is aangeroepen, maar kan geen kwaad. # TODO RAM Graph fixen ding = agent_module.agent(ip) # Agent module aanroepen. history = database.get_history(ding.ip, item) # Geschiedenis opvragen. history_time = [] history_value = [] for history_item in history: history_time.append(datetime.datetime.fromtimestamp(history_item[0]).strftime("%d-%m %H:%M")) # Tijd mooi maken. history_value.append(history_item[1]) if len(history_value) == 0: # Als er geen geschiedenis is, hoeven we ook geen grafiek te maken. return '' plt.gcf().subplots_adjust(bottom=0.15) # Beetje meer ruimte aan de onderkant maken. plt.plot(history_value, linewidth=2.0) # Tekenen. plt.xticks(range(len(history_time)), history_time, rotation=45) # Dingetjes op de x-as zetten. plt.title(item) plt.ylim(0, plt.ylim()[0] + 5) # Y-as limieten instellen. # Aangezien sommige waardes speciale dingen nodig hebben in de grafiek, hier een lelijke zooi if-jes. if item == 'cpu_load': plt.ylim(0, 100) elif item == 'no_processes': plt.ylim(0, max(history_value) + 10) elif item == 'ram_free': plt.ylim(0, max(history_value) + 100) buf = io.BytesIO() # Met BytesIO kunnen we een variabele misbr... gebruiken als file. plt.savefig(buf, format="png", dpi=48, transparent=True) # Opslaan naar file. buf.seek(0) base64_img = base64.b64encode(buf.getvalue()) #buf.seek(0) #data = buf.read() buf.close() #f = open('copy.png', 'wb') #f.write(data) #f.close() return '<img class="graph" id="%s" src="data:image/png;base64, %s"/>' % (item, base64_img.decode('ASCII'))
import agent_module ding = agent_module.agent('localhost') print("Discovery:", ding.discover()) # ding.execute_action(["ding1", "reboot", "helloworld", "demo script", "demo1"]) ding.execute_action(['reboot']) print("Actions:", ding.actions_result) ding.request_info() print("Data requested:", ding.data)
if config_loader.load_error: # Mocht er iets fout zijn gegaan bij het laden van de configuratie, dan wordt deze code uitgevoerd. logger.error(config_loader.load_error) logging.info("Cronjob is gestart.") agent_list = database.get_agents() agents_to_query = [] data_to_log = ['temperature', 'ram_total', 'ram_free', 'no_users', 'cpu_load', 'no_processes', 'no_services'] logger.debug('De volgende agents worden bevraagd: %s' % agent_list) # Maak een lijst met alle agents als een object. for agent_info in agent_list: agents_to_query.append( agent_module.agent(agent_info[0]) ) # Vraag per agent de informatie op. for agent_query in agents_to_query: try: agent_query.request_info() except: logger.warning("Data kon niet worden verkregen van %s." % agent_query.ip) agents_to_query.remove(agent_query) current_time = int(time.time()) try: f = open(config_loader.cfg['engine']['cron_csv_file'], 'at') # File openen voor toevoegen in text mode. writer = csv.writer(f)
import database import helper_web import logging import config_loader logging.basicConfig(filename=config_loader.cfg['logging_normal']['file'], level=config_loader.cfg['logging_normal']['level'], format=config_loader.cfg['logging_normal']['format']) logger = logging.getLogger('mainlogger') if config_loader.load_error: # Mocht er iets fout zijn gegaan bij het laden van de configuratie, dan wordt deze code uitgevoerd. logger.error(config_loader.load_error) logger.info('Dashboard pagina wordt gemaakt.') agent_list = [] for agent_record in database.get_agents(): agent_list.append(agent_module.agent(agent_record[0])) # Als we nu toch bezig zijn, vragen we meteen de informatie uit de database op. agent_list[-1].get_last_data() # Nu kunnen we de tabel gaan bakken. table = '<h1>Dashboard</h1><table id="dashboard_table"><tr><th>Hostname</th><th>RAM</th><th>CPU</th><th>Users</th><th>Procs</th><th>serv</th></tr>' for agent in agent_list: # We maken even een list met alle data. Dit maakt het maken van de tabel wat makkelijker. # TODO Icoontje voor Windows of Linux. current_agent_data = [agent.info['hostname'],] # Er is een redelijke kans dat een item niet in de database staat. Als dit het geval is, dan moet er een vraagteken komen te staan in de tabel. # Zo'n brei aan try en excepts is niet erg mooi, maar ik kan er nu even niets beters van maken. try: current_agent_data.append(str(int(agent.data['ram_free'] / agent.data['ram_total'] * 100))) except: current_agent_data.append('?')
logger.error(config_loader.load_error) logger.info('Pagina: Add Device') content = """<h1>Apparaat toevoegen</h1><form action="web_add_device.py" method="post"> <input type="text" name="newip" placeholder="DNS/IP"> <input type="submit" value="Voeg toe."> </form>""" try: # POST uitlezen. newip = form.getvalue('newip') logger.info('Add Device: IP aangevraagd:' + newip) content = content + "<p>Ingevoerd: " + newip + "<p>" try: agent_to_discover = agent_module.agent(newip) new_data = agent_to_discover.discover() agent_info_table = '''<table><tr><th>Hostname</th><td>%s</td> <tr><th>OS</th><td>%s</td></tr> <tr><th>Versie</th><td>%s</td></tr></table>''' % (new_data['hostname'], new_data['os'], new_data['version']) #TODO Checken of agent niet al in database staat. database.add_agent(newip, new_data['hostname'], new_data['os']) # Agent toevoegen aan de database. logger.warning('Agent wordt tegevoegd aan database: ip=%s, hostname=%s, os=%s' % (newip, new_data['hostname'], new_data['os'])) custom_actions_table = "<h2>Acties:</h2><table><tr><th>Naam</th><th>Beschrijving</th></tr>" if len(new_data['custom_actions']['names_list']) > 0: for custom_action in new_data['custom_actions']['names_list']: database.add_action(newip, custom_action, new_data['custom_actions']['descriptions'][custom_action]) current_row = '<tr><td>%s</td><td>%s</td></tr>' % (custom_action, new_data['custom_actions']['descriptions'][custom_action]) custom_actions_table = custom_actions_table + current_row custom_actions_table = custom_actions_table + '</table>' else:
import graph import traceback # Vppr depudding import logging import config_loader logging.basicConfig(filename=config_loader.cfg['logging_normal']['file'], level=config_loader.cfg['logging_normal']['level'], format=config_loader.cfg['logging_normal']['format']) logger = logging.getLogger('mainlogger') if config_loader.load_error: # Mocht er iets fout zijn gegaan bij het laden van de configuratie, dan wordt deze code uitgevoerd. logger.error(config_loader.load_error) logger.info('Pagina: Agent informatie.') arguments = cgi.FieldStorage() current_agent = agent_module.agent(arguments['id'].value) #current_agent = agent_module.agent('localhost') if len(current_agent.info) != 2 : warning = '<div class="warning"><p>Ongeldige agent!</p></div>' logger.error('Ongeldige agent opgevraagd.') print(helper_web.create_html(warning)) print(current_agent.info) exit(1) try: current_agent.request_info() except socket.timeout: print(helper_web.create_html('<div class="warning"><p>Timeout bij het opvragen van de data.</p></div>')) exit(1) except ConnectionRefusedError: print(helper_web.create_html('<div class="warning"><p>Verbinding geweigerd bij het opvragen van de data.</p></div>'))