示例#1
0
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'))
示例#2
0
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>'))