Huiswerk 2
Huiswerk 2
Voor deze opgave gelden volgende richtlijnen:
Je dient een zip bestand in met een individueel bestand voor elke oefening. Gebruik onderstaande naamgeving:
rxxxxxxx_oefening_xx.pyVul je r-nummer vooraan in en het volgnummer van de oefening achteraan. Gebruik voorloopnullen, oefening 1 krijgt dus bijvoorbeeld de naam r0636326_oefening_01.py.
De beoordeling van deze oefeningen gebeurt aan de hand van geautomatiseerde unit tests, daarvoor hanteren we volgende richtlijnen:
- Files met een foute naamgeving worden niet beoordeeld.
- De geautomatiseerde tests houden rekening met typo's. Zolang er minder dan 8 verschillen toont met de verwachte uitvoer, wordt de oplossing als correct beschouwd.
Dit huiswerk is een individuele opdracht, elke vorm van samenwerking is verboden.
Kommagetallen moeten via een f-string geformatteerd worden met twee decimalen. Gebruik volgende code als voorbeeld:
pi = 3.14159265358 print(f"{pi:.2f}") # Uitvoer 3.14De uitlijning van de kolommen in de tabellen moet correct zijn. Gebruik hiervoor f-strings met een breedteparameter. Onderstaande code voegt achteraan de tekst 'server' 4 spaties toe zodat de totale breedte 10 tekens is. De
<geeft aan dat de tekst links uitgelijnd moet worden.demo_variabele = "server" print(f"{demo_variabele:<10}|") # Uitvoer 'server |'De parameters voor afronding en uitlijning kunnen gecombineerd worden.
pi = 3.14159265358 print(f"Pi tot op 4 decimalen: {pi:>8.4f}") # Uitvoer Pi tot op 4 decimalen: 3.1416
Opgave 1
Een monitoringsysteem levert de CPU-belasting van een aantal servers aan.
Vraag herhaaldelijk om een hostname en de bijbehorende CPU-belasting (een kommagetal), tot de gebruiker stop invoert als hostname. Bewaar de hostnames en de belastingen in twee afzonderlijke lijsten.
Een belasting kleiner dan 0 of groter dan 100 is ongeldig. Druk dan Ongeldige belasting, deze server wordt overgeslagen af en sla die server over met continue.
Werd er geen enkele server ingelezen, druk dan Geen servers ingevoerd af naar de standaard foutuitvoer en stop het programma met een exitcode van 1.
Bereken onderstaande gegevens en druk ze af in een overzichtelijk rapport:
- het aantal servers;
- de gemiddelde belasting;
- de hoogste en de laagste belasting, telkens met de bijbehorende hostname;
- een lijst met alle servers die meer dan 80% belast zijn.
Onderstaande uitvoer gebruikt 40 gelijktekens per lijn.
Voorbeeld 1:
Geef een hostname (of "stop"): web01
Geef de CPU-belasting van web01 (in %): 91.5
Geef een hostname (of "stop"): db01
Geef de CPU-belasting van db01 (in %): 12
Geef een hostname (of "stop"): app01
Geef de CPU-belasting van app01 (in %): 59.5
Geef een hostname (of "stop"): old01
Geef de CPU-belasting van old01 (in %): 120
Ongeldige belasting, deze server wordt overgeslagen
Geef een hostname (of "stop"): mail01
Geef de CPU-belasting van mail01 (in %): 83.25
Geef een hostname (of "stop"): stop========================================
BELASTINGSRAPPORT
========================================
Aantal servers: 4
Gemiddelde belasting: 61.56%
Hoogste: web01 (91.50%)
Laagste: db01 (12.00%)
Overbelast: ['web01', 'mail01']
Aantal overbelast: 2
========================================Voorbeeld 2:
Geef een hostname (of "stop"): stopGeen servers ingevoerdOpgave 2
Schrijf een script dat een reeks IP-adressen in een netwerk overloopt.
Vraag:
- de netwerkprefix (bijvoorbeeld
192.168.10) - het eerste hostnummer
- het laatste hostnummer
Is het eerste hostnummer groter dan het laatste, kleiner dan 1, of is het laatste groter dan 254, druk dan Ongeldig bereik af naar de standaard foutuitvoer en stop met exitcode 1.
Overloop alle hostnummers en toon per adres informatie. Hiervoor gelden volgende regels:
- hostnummer 1 is de gateway: druk
<ip>\tgateway, overgeslagenaf; - een hostnummer deelbaar door 10 is niet bereikbaar: druk
<ip>\tNIET BEREIKBAARaf en bewaar het adres in een lijst; - alle andere adressen zijn bereikbaar.
Toon daarna een samenvatting met het aantal gescande adressen, het aantal bereikbare adressen, het aantal onbereikbare adressen, de lijst met onbereikbare adressen en het percentage bereikbare adressen. De gateway telt mee als gescand, maar niet als bereikbaar.
De lijn die de IP adressen scheidt van de samenvatting bestaat uit 40 koppeltekens.
Voorbeeld 1:
Geef de netwerkprefix (bijvoorbeeld 192.168.10): 192.168.10
Geef het eerste hostnummer: 1
Geef het laatste hostnummer: 12192.168.10.1 gateway, overgeslagen
192.168.10.2 bereikbaar
192.168.10.3 bereikbaar
192.168.10.4 bereikbaar
192.168.10.5 bereikbaar
192.168.10.6 bereikbaar
192.168.10.7 bereikbaar
192.168.10.8 bereikbaar
192.168.10.9 bereikbaar
192.168.10.10 NIET BEREIKBAAR
192.168.10.11 bereikbaar
192.168.10.12 bereikbaar
----------------------------------------
Gescand: 12
Bereikbaar: 10
Niet bereikbaar: 1
Onbereikbare adressen: ['192.168.10.10']
Percentage bereikbaar: 83.33%Voorbeeld 2:
Geef de netwerkprefix (bijvoorbeeld 192.168.10): 10.0.0
Geef het eerste hostnummer: 30
Geef het laatste hostnummer: 25Ongeldig bereikOpgave 3
Schrijf een script dat logniveaus telt met een dictionary.
Vraag herhaaldelijk om een logniveau tot de gebruiker einde invoert. Verwijder spaties rond de invoer en zet ze om naar kleine letters.
De geldige niveaus zijn debug, info, warning, error en critical. Een ander niveau is ongeldig: druk Onbekend logniveau: <niveau> af.
Werd er geen enkele geldige regel ingelezen, druk dan Geen geldige logregels ingelezen af.
Toon anders per niveau het aantal en het percentage van alle geldige regels, in de volgorde debug, info, warning, error, critical. Gebruik een uitlijning van 10 tekens voor het niveau, 5 voor het aantal en 10 voor het percentage. Vul dus aan met spaties zodat de kolommen mooi uitgelijnd zijn.
Toon daarna het aantal geldige regels, het aantal ongeldige regels en het foutpercentage (error + critical ten opzichte van alle andere regels). Is dat percentage groter dan 20, druk dan Status: ALARM af, anders Status: OK.
Onderstaande uitvoer gebruikt 40 gelijktekens per lijn.
Voorbeeld 1:
Geef een logniveau (of "einde"): info
Geef een logniveau (of "einde"): INFO
Geef een logniveau (of "einde"): warning
Geef een logniveau (of "einde"): error
Geef een logniveau (of "einde"): notice
Onbekend logniveau: notice
Geef een logniveau (of "einde"): critical
Geef een logniveau (of "einde"): debug
Geef een logniveau (of "einde"): einde========================================
debug 1 16.67%
info 2 33.33%
warning 1 16.67%
error 1 16.67%
critical 1 16.67%
========================================
Geldige regels: 6
Ongeldige regels: 1
Foutpercentage: 33.33%
Status: ALARMVoorbeeld 2:
Geef een logniveau (of "einde"): warn
Onbekend logniveau: warn
Geef een logniveau (of "einde"): eindeGeen geldige logregels ingelezenVoorbeeld 3:
Geef een logniveau (of "einde"): warning
Geef een logniveau (of "einde"): info
Geef een logniveau (of "einde"): info
Geef een logniveau (of "einde"): info
Geef een logniveau (of "einde"): critical
Geef een logniveau (of "einde"): crash
Onbekend logniveau: crash
Geef een logniveau (of "einde"): debug
Geef een logniveau (of "einde"): info
Geef een logniveau (of "einde"): einde========================================
debug 1 14.29%
info 4 57.14%
warning 1 14.29%
error 0 0.00%
critical 1 14.29%
========================================
Geldige regels: 7
Ongeldige regels: 1
Foutpercentage: 14.29%
Status: OK