Topic: test funzionalità connessione dati  (Letto 1355 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline roadrunner

  • python unicellularis
  • *
  • Post: 2
  • Punti reputazione: 0
    • Mostra profilo
test funzionalità connessione dati
« il: Gennaio 19, 2018, 08:04 »
buongiorno a tutti

per lavoro mi occupo di assistenza hardware e software a piccoli uffici, in pratica tutte quelle piccole realtà che non devono scontrarsi con grossi sistemi client/server, software gestionali mastodontici , ecc ecc

a causa di varie problematiche di connessione internet di alcuni miei clienti (rallentamenti, cadute di connessione) mi è venuta la malsana idea di monitorare la funzionalità di una connessione con uno script in python

premesso che sono 'partito' con  l'idea dal test ping di alcuni router dotati di  load balancer, ho deciso di espandere il meccanismo con:

ping del router  - log del risultato
ping di N indirizzi - log dei successi/totali
test di velocità di download da un tot di server - log del tempo di download
ripetizione ciclica per N ore ogni X secondi/minuti

il log sarebbe in formato csv per rianalizzare successivamente il tutto con un foglio di calcolo, grafici, ecc

requisito essenziale.. connessione SINGOLA ad internet ed un pc connesso VIA CAVO direttamente al router principale

prima domanda: è meglio postare qui o in networking.... ?
seconda domanda: mi sto sbattendo per qualcosa che esiste già ma non ho trovato?

in base alle risposte posterei la prima bozza pseudo funzionante e i miei dubbi

grazie

Offline RicPol

  • python sapiens sapiens
  • ******
  • Post: 3.154
  • Punti reputazione: 9
    • Mostra profilo
Re:test funzionalità connessione dati
« Risposta #1 il: Gennaio 19, 2018, 17:11 »
Mah, vedo che qualcuno aveva scritto qualcosa del genere una volta: https://github.com/fopina/pyspeedtest
però dovresti vedere se funziona ancora, al limite puoi guardare il sorgente e prendere spunto...

Offline roadrunner

  • python unicellularis
  • *
  • Post: 2
  • Punti reputazione: 0
    • Mostra profilo
Re:test funzionalità connessione dati
« Risposta #2 il: Gennaio 20, 2018, 10:48 »
grazie per la segnalazione

l'avevo già visto ma penso che la integrerò in futuro

la mia meta è quella di poter verificare, per più giorni consecutivi, un ampio numero di server e poter avere dei dati semi-attendibili per capire se le connessioni vanno ko, rallentano e in che modo (sicuramente potrebbero verificarsi dei rallentamenti per i flussi interni della rete in esame, ma penso siano trascurabili)

ammetto di essere completamente ignorante in programmazione 'seria' e di aver buttato giù codice scopiazzando a destra e a manca...

a questo punto, a parte una eventuale gestione degli errori, come potrebbe migliorare il codice?

......ho trovato enormi problemi a barcamenarmi tra codice valido in python  2 e python 3... sono l'unico? questo lo sto testando in 3 su windows.

PS non devo vendere nulla... è diventato più uno sfizio mio... ma visto che in rete non ho trovato nulla di simile mi sto chiedendo: ma è una stupidaggine o potrebbe veramente funzionare?

grazie!!!!!!!!!!!



#!/usr/bin/python3

import subprocess as sp
import datetime
import datetime as dt
import time
import os
import urllib.request

# carica il file config.cfg che contiene il percorso per la cartella dei file di log e dei parametri
with open('config.cfg') as configfolder:
    for line in configfolder:
        fold = line.strip()
configfolder.close()

os.system('cls')
# carica il file ore.txt che contiene il numero di ore per cui ripetere il test
with open(fold + 'ore.txt') as pas:
    for line in pas:
        y = int(line.strip())
pas.close()


# carica il file pausa.txt che contiene la pausa in secondi tra LA FINE di ciclo e il seguente
with open(fold+'pausa.txt') as pausa:
    for line in pausa:
        z = int(line.strip())
pausa.close()

# calcola il numero di cicli da effettuare dividendo le ore per la pausa in secondi
y = int((y*60*60)/z)
for x in range(0, y):
    risultatoping =0 # risultato ping dei server
    risultatopingr = 0 # risultato ping router
    totaleping = 0 # numero totale dei server pingati
    tempi = ""
    print("--------------  PING test  -------------- " +str(x) + " --- " + str(y))
    # carica il file iprouter.txt contenente l'ip del router che gestisce la rete
    # in questo modo verifico se il router è raggiungibile o no
    with open(fold + 'iprouter.txt') as r:
        for line in r:
            ri = line.strip()
            status,result = sp.getstatusoutput("ping -c1 -w2 " + ri)
            if status == 0:
                print("System " + ri + " is UP !")
                risultatopingr += 1
            else:
                print("System " + ip + " is DOWN !")
    r.close()

    # carica il file serverping.txt per verificare se N server es: DNS operatore , DNS google, DNS opendns, ecc
    with open(fold + 'serverping.txt') as g:
        for line in g:
            ip = line.strip()
            status,result = sp.getstatusoutput("ping -c1 -w2 " + ip)

            if status == 0:
                print("System " + ip + " is UP !")
                risultatoping += 1
                totaleping +=1
            else:
                print("System " + ip + " is DOWN !")
                totaleping +=1
    time.sleep(5)
    os.system('cls')
    print("--------------  OPEN URL test  -------------- " + str(x) + " --- "+ str(y))
    # carica il file server.txt per effettuare prove di download e calcolo tempo approssimativo in millisecondi
    with open(fold + 'server.txt') as f:
        for line in f:
            ip = line.strip()
            apriurl = 'http://'+ip
            print (apriurl)
            try:
                search_response = urllib.request.urlopen(apriurl)
            except urllib.error.HTTPError:
                print("KO")
                tempo = 0
                pass
            else:
                print("ok")
                start = dt.datetime.utcnow()
                with urllib.request.urlopen(apriurl) as response:
                    html = response.read()
                stop = dt.datetime.utcnow()
                tempo = (stop - start)
                tempo = tempo.total_seconds()
                tempo = int(tempo * 1000000)
            print(tempo)
            tempo = str(tempo)
            # crea stringa per file csv contenente i tempi di download dai server
            tempi = tempi  + tempo +";"
    time.sleep(5)
    now = datetime.datetime.now()
    data = now.strftime("%Y/%m/%d")
    datafile= now.strftime("%Y_%m_%d")
    nomefile = fold + datafile + "_log.csv" # crea il nome per il file di log giornaliero
    ora = now.strftime("%H:%M")
    # crea il file di log giornaliero
    # data; ora; risultato ping router; numero ping server con successo; totale server provati; tempi di download in millionesimi di secondo;
    file = open(nomefile,"a")
    file.write(data + ";" + ora + ";" + str(risultatopingr) + ";" +str(risultatoping) + ";" + str(totaleping) + ";" +  tempi +"n")
    file.close()
    # visualizza un indicatore di avanzamento in secondi durante la pausa tra un ciclo x di y e l'altro
    for t in range (0,int(z/1)):
        print(str(x) + " * - * " + str(t) + "/" + str(z) + " * - * " + str(y))
        time.sleep(1)
        os.system('cls')
print("TEST TERMINATO")



struttura file serverping.txt


www.google.it
www.ducati.com
www.ebay.com
www.libero.it
www.punto-informatico.it
8.8.8.8
8.8.4.4
208.67.222.222
208.67.220.220
193.204.114.232


struttura file server.txt


www.google.it
www.ducati.com
www.ebay.com
www.libero.it
www.500px.com
www.cri.it
www.zeusnews.it
www.ilsoftware.it
www.camcom.gov.it
www.rai.it
www.mediaset.it
www.garr.it
www.tim.it
« Ultima modifica: Gennaio 20, 2018, 11:02 da roadrunner »

Offline riko

  • python deus
  • *
  • moderatore
  • Post: 7.453
  • Punti reputazione: 12
    • Mostra profilo
    • RiK0 Tech Temple
Re:test funzionalità connessione dati
« Risposta #3 il: Gennaio 23, 2018, 09:17 »
Ma c'e' un motivo per cui pinghi 20 siti esterni? Di solito una volta che l'egress dalla rete locale ha avuto successo, non e' che cambia molto. Se e' un problema specifico, invece, ok. Strano.

Detto questo: -c4. non -c1.

Secondo: vuoi bene a te stesso. Di sta roba fanne metriche. E' piu' semplice ragionarci. Metriche -> allarmi.

E comunque, va bene il fatto in casa, ma almeno integrati con cose esistenti:

- questo e' essenzialmente lo stato dell'arte fra le cose rilasciate: https://prometheus.io/
- questo si paga, non e' altrettanto carino, e' molto piu' vecchio... ma magari fa comodo sapere che esiste https://www.nagios.org/