diff options
Diffstat (limited to 'kpov_judge/tasks')
-rw-r--r-- | kpov_judge/tasks/snmp_agent_uptime/task.py | 80 |
1 files changed, 60 insertions, 20 deletions
diff --git a/kpov_judge/tasks/snmp_agent_uptime/task.py b/kpov_judge/tasks/snmp_agent_uptime/task.py index da55b42..13abf92 100644 --- a/kpov_judge/tasks/snmp_agent_uptime/task.py +++ b/kpov_judge/tasks/snmp_agent_uptime/task.py @@ -16,7 +16,7 @@ vklopljen. Postavi ga na SNMPClient v domaci imenik uporabnika test z geslom test. Poskrbi, da bo SNMP strežnik prek SNMP pod -NET-SNMP-EXTEND-MIB::nsExtendOutput2Table sporocal, koliko casa je vklopljen +NET-SNMP-EXTEND-MIB::nsExtendOutpucd k t2Table sporocal, koliko casa je vklopljen v sekundah. Napiši skripto, poimenovano beri.sh, ki prek SNMP prebere vrednost s strežnika @@ -93,10 +93,45 @@ networks = { 'net1': {'public': False}, 'test-net': {'public': True} } params_meta = {'SNMP_VALUE': {'descriptions': {'si': 'Vrednost, dostopna prek SNMP'}, 'w': False, 'public':True, 'type': 'number', 'generated': True}, 'SNMP_OID_ON_SERVER': {'descriptions': {'si': 'OID, na katerem je vrednost dostopna'}, 'w': False, 'public':True, 'type': 'str', 'generated': True}, 'SNMP_OID_ON_CLIENT': {'descriptions': {'si': 'OID, ki naj ga klient bere'}, 'w': False, 'public':True, 'type': 'OID', 'generated': True}, } def task(SNMP_VALUE, SNMP_OID_ON_SERVER, SNMP_OID_ON_CLIENT): - print SNMP_VALUE - print SNMP_OID_ON_SERVER - print SNMP_OID_ON_CLIENT - + #<== Aleksander Fujs 6310020 ==> + # TODO popravi IPje + import netsnmp + from paramiko import SSHClient + return_results = {} + + client = SSHClient() + client.load_system_host_keys() + client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + + client.connect('10.173.146.199', username='root', password='kaboom') + stdin, stdout, stderr = client.exec_command('uptime=$(</proc/uptime); uptime=${uptime%%.*}; echo $uptime') + return_results['server_uptime'] = stdout.readlines() + + try: + session = netsnmp.Session(DestHost='10.173.146.199', Version=2, Community='studentje') + results_objs = netsnmp.VarList(netsnmp.Varbind(SNMP_OID_ON_SERVER)) #117.112.116.105.109.101 <-uptime + session.walk(results_objs) + for result in results_objs: + return_results['server_OID'] = ('%s.%s: %s') % (result.tag, result.iid, result.val) + except Exception as exception_error: + # Check for errors and print out results + print ('ERROR: Occurred during SNMPget for OID %s from %s: ' + '(%s)') % (SNMP_OID_ON_SERVER, '10.173.146.194', exception_error) + sys.exit(2) + + + client.connect('10.173.146.194', username='test', password='test') + stdin, stdout, stderr = client.exec_command('/bin/bash /home/test/upminutes.sh') + #TODO preverit da ni v skripti hardcodan + return_results['client_script'] = stdout.readlines() + stdin, stdout, stderr = client.exec_command('uptime=$(</proc/uptime); uptime=${uptime%%.*}; echo $(( uptime/60 ))') + return_results['client_uptime'] = stdout.readlines() + + #TODO add 3 part of assigement + return return_results + + + #<== Aleksander Fujs 6310020 ==> # TODO (polz) start working on this. If gen_params doesn't yet work, change it to set the parameter values manually # run cpu temp script on client @@ -120,33 +155,38 @@ def gen_params(user_id, params_meta): params = dict() # TODO (polz) this is wrong. Try something like: r = random.Random(user_id) - params['SNMP_VALUE'] = r.randint(0, 255) - params['SNMP_OID_ON_SERVER'] = '1.3.6.1.4.1.8072.1.3.2.4.1.4' - params['SNMP_OID_ON_CLIENT'] = '1.3.6.1.4.1.8072.1.3.2.4.1.4.' + #params['SNMP_VALUE'] = r.randint(0, 255) + #params_meta['SNMP_OID_ON_SERVER'] = '1.3.6.1.4.1.8072.1.3.2.4.1.4' + #params_meta['SNMP_OID_ON_CLIENT'] = '1.3.6.1.4.1.8072.1.3.2.4.1.4.' # You can also create an OID creation function in kpov_random_helpers. # this should probably return params_meta + #<== Aleksander Fujs 6310020 ==> + #TODO better random value + params['SNMP_VALUE'] = str(r.randint(0, 255)) + params['SNMP_OID_ON_SERVER'] = 'NET-SNMP-EXTEND-MIB::nsExtendOutput2Table' + #TODO possible upgrade for last number to bi random between 0 and 255 + params['SNMP_OID_ON_CLIENT'] = '1.3.6.1.4.1.8072.1.3.2.4.1.4' + #<== Aleksander Fujs 6310020 ==> + return params def task_check(results, params): -# TODO (polz) Zacnite s pisanjem testov glede na to, kar vidite v task() + #TODO improve regex import re score = 0 - if results['NM_nslookup'].find('Server:\t\t{0}\r'.format(params['DNS_NM'])) > -1: + print results + if re.search(results['client_script'][0].strip(), results['client_uptime'][0].strip()): score += 3 - if results['static_nslookup'].find('Server:\t\t{0}\r'.format(params['DNS_static'])) > -1: + #TODO +- second or two of allowed error time + if re.search(results['server_OID'].split(':')[1].strip(), results['server_uptime'][0].strip()): score += 3 - if re.search(r'eth0 +802-.*connected', results['NM_nmcli']): - score += 2 - if not re.search(r'eth0 +802-.*connected', results['static_nmcli']): - score += 2 + + print results['server_uptime'][0].strip() + print results['server_OID'].split(':')[1].strip() + print score return score def prepare_disks(templates, params): # d = templates['simpleArbiterDhcp'] pass - - - - - |