Пример #1
0
  print test
  return None


if __name__ == '__main__':
  if len(sys.argv) < 2:
    s = socket.socket(socket.AF_INET)
    s.connect(('www.fub.it', 80))
    ip = s.getsockname()[0]
    s.close()
    nap = '193.104.137.133'

    TOT = 10

    import sysmonitor
    dev = sysmonitor.getDev()
    t1 = Tester(dev, Host(ip = nap), 'nemesys', '4gc0m244')

    for i in range(1, TOT + 1):
      logger.info('Test Download %d/%d' % (i, TOT))
      test = t1.testftpdown('/download/1000.rnd')
      logger.info(test)

    for i in range(1, TOT + 1):
      logger.info('Test Upload %d/%d' % (i, TOT))
      test = t1.testftpup(2048, '/upload/r.raw')
      logger.info(test)

    for i in range(1, TOT + 1):
      logger.info('\nTest Ping %d/%d' % (i, TOT))
      test = t1.testping()
Пример #2
0
    print test
    return None


if __name__ == '__main__':
    if len(sys.argv) < 2:
        s = socket.socket(socket.AF_INET)
        s.connect(('www.fub.it', 80))
        ip = s.getsockname()[0]
        s.close()
        nap = '193.104.137.133'

        TOT = 10

        import sysmonitor
        dev = sysmonitor.getDev()
        t1 = Tester(dev, Host(ip=nap), 'nemesys', '4gc0m244')

        for i in range(1, TOT + 1):
            logger.info('Test Download %d/%d' % (i, TOT))
            test = t1.testftpdown('/download/1000.rnd')
            logger.info(test)

        for i in range(1, TOT + 1):
            logger.info('Test Upload %d/%d' % (i, TOT))
            test = t1.testftpup(2048, '/upload/r.raw')
            logger.info(test)

        for i in range(1, TOT + 1):
            logger.info('\nTest Ping %d/%d' % (i, TOT))
            test = t1.testping()
Пример #3
0
  def _dotask(self, task):
    '''
    Esegue il complesso di test prescritti dal task entro il tempo messo a
    disposizione secondo il parametro tasktimeout
    '''
    # TODO Mischiare i test: down, up, ping, down, up, ping, ecc...

    if not self._isprobe and self._progress != None:
      made = self._progress.howmany(datetime.fromtimestamp(timestampNtp()).hour)
      if made >= MAX_MEASURES_PER_HOUR:
        self._updatestatus(status.PAUSE)
        return

    bandwidth_sem.acquire()  # Acquisisci la risorsa condivisa: la banda

    logger.info('Inizio task di misura verso il server %s' % task.server)

    # Area riservata per l'esecuzione della misura
    # --------------------------------------------------------------------------

    # TODO Inserire il timeout complessivo di task (da posticipare)
    try:

      self._updatestatus(status.PLAY)

      # Profilazione iniziale del sistema
      # ------------------------
      base_error = 0
      if self._profile_system() != 0:
        base_error = 50000

#       ip = sysmonitor.getIp(task.server.ip, 21)
      dev = sysmonitor.getDev(task.server.ip, 21)
      t = Tester(dev = dev, host = task.server, timeout = self._testtimeout,
                 username = self._client.username, password = self._client.password)

      # TODO Pensare ad un'altra soluzione per la generazione del progressivo di misura
      start = datetime.fromtimestamp(timestampNtp())
      id = start.strftime('%y%m%d%H%M')
      m = Measure(id, task.server, self._client, __version__, start.isoformat())

      # Set task timeout alarm
      # signal.alarm(self._tasktimeout)

      # Testa gli ftp down
      # ------------------------
      i = 1;
      while (i <= task.download):
        self._updatestatus(status.Status(status.PLAY, "Esecuzione Test %d su %d" % (i, task.download + task.upload + task.ping)))
        try:
          # Profilazione del sistema
          error = self._profile_system(sysmonitor.CHECK_ALL);

          # Esecuzione del test
          logger.info('Starting ftp download test (%s) [%d]' % (task.ftpdownpath, i))
          test = t.testftpdown(task.ftpdownpath)

          # Gestione degli errori nel test
          if error > 0 or base_error > 0:
            test.seterrorcode(error + base_error)

          # Analisi da contabit
          self._test_gating(test, DOWN)

          # Salvataggio della misura
          logger.debug('Download result: %.3f' % test.value)
          logger.debug('Download error: %d, %d, %d' % (base_error, error, test.errorcode))
          m.savetest(test)
          i = i + 1

          # Prequalifica della linea
          if (test.value > 0):
            bandwidth = int(round(test.bytes * 8 / test.value))
            logger.debug('Banda ipotizzata in download: %d' % bandwidth)
            task.update_ftpdownpath(bandwidth)

          sleep(1)

        # Cattura delle eccezioni durante la misura
        except Exception as e:
          if not datetime.fromtimestamp(timestampNtp()).hour == start.hour:
            raise e
          else:
            logger.warning('Misura sospesa per eccezione %s' % e)
            self._updatestatus(status.Status(status.ERROR, 'Misura sospesa per errore: %s Aspetto %d secondi prima di proseguire la misura.' % (e, TIME_LAG)))
            sleep(TIME_LAG)
            logger.info('Misura in ripresa dopo sospensione. Test download %d di %d' % (i, task.download))
            self._updatestatus(status.Status(status.PLAY, 'Proseguo la misura. Misura in esecuzione'))

      # Testa gli ftp up
      i = 1;
      while (i <= task.upload):
        self._updatestatus(status.Status(status.PLAY, "Esecuzione Test %d su %d" % (i + task.download, task.download + task.upload + task.ping)))
        try:
          # Profilazione del sistema
          error = self._profile_system(sysmonitor.CHECK_ALL);

          # Esecuzione del test
          logger.debug('Starting ftp upload test (%s) [%d]' % (task.ftpuppath, i))
          test = t.testftpup(self._client.profile.upload * task.multiplier * 1000 / 8, task.ftpuppath)

          # Gestione degli errori nel test
          if error > 0 or base_error > 0:
            test.seterrorcode(error + base_error)

          # Analisi da contabit
          self._test_gating(test, UP)

          # Salvataggio del test nella misura
          logger.debug('Upload result: %.3f' % test.value)
          logger.debug('Upload error: %d, %d, %d' % (base_error, error, test.errorcode))
          m.savetest(test)
          i = i + 1

          # Prequalifica della linea
          if (test.value > 0):
            bandwidth = int(round(test.bytes * 8 / test.value))
            logger.debug('Banda ipotizzata in upload: %d' % bandwidth)
            self._client.profile.upload = bandwidth

          sleep(1)

        # Cattura delle eccezioni durante la misura
        except Exception as e:
          if not datetime.fromtimestamp(timestampNtp()).hour == start.hour:
            raise e
          else:
            logger.warning('Misura sospesa per eccezione %s' % e)
            self._updatestatus(status.Status(status.ERROR, 'Misura sospesa per errore: %s Aspetto %d secondi prima di proseguire la misura.' % (e, TIME_LAG)))
            sleep(TIME_LAG)
            logger.info('Misura in ripresa dopo sospensione. Test upload %d di %d' % (i, task.upload))
            self._updatestatus(status.Status(status.PLAY, 'Proseguo la misura. Misura in esecuzione'))

      # Testa i ping
      i = 1
      while (i <= task.ping):
        self._updatestatus(status.Status(status.PLAY, "Esecuzione Test %d su %d" % (i + task.download + task.upload, task.download + task.upload + task.ping)))
        try:
          # Profilazione del sistema
          error = self._profile_system(sysmonitor.CHECK_MEDIUM);

          # Esecuzione del test
          logger.debug('Starting ping test [%d]' % i)
          test = t.testping()

          # Gestione degli errori nel test
          if error > 0 or base_error > 0:
            test.seterrorcode(error + base_error)

          # Salvataggio del test nella misura
          logger.debug('Ping result: %.3f' % test.value)
          logger.debug('Ping error: %d, %d, %d' % (base_error, error, test.errorcode))
          m.savetest(test)
          i = i + 1

          if ((i - 1) % task.nicmp == 0):
            sleep(task.delay)

        # Cattura delle eccezioni durante la misura
        except Exception as e:
          if not datetime.fromtimestamp(timestampNtp()).hour == start.hour:
            raise e
          else:
            logger.warning('Misura sospesa per eccezione %s' % e)
            self._updatestatus(status.Status(status.ERROR, 'Misura sospesa per errore: %s Aspetto 10 secondi prima di proseguire la misura.' % e))
            sleep(10)
            logger.info('Misura in ripresa dopo sospensione. Test ping %d di %d' % (i, task.ping))
            self._updatestatus(status.Status(status.PLAY, 'Proseguo la misura. Misura in esecuzione'))

      # Unset task timeout alarm
      # signal.alarm(0)

      # Spedisci il file al repository delle misure
      sec = datetime.fromtimestamp(timestampNtp()).strftime('%S')
      f = open('%s/measure_%s%s.xml' % (self._outbox, m.id, sec), 'w')
      f.write(str(m))

      # Aggiungi la data di fine in fondo al file
      f.write('\n<!-- [finished] %s -->' % datetime.fromtimestamp(timestampNtp()).isoformat())
      f.close()

      if (not self._local):
        upload = self._upload(f.name)
        if upload:
          self._updatestatus(status.Status(status.OK, 'Misura terminata con successo.'))
        else:
          self._updatestatus(status.Status(status.ERROR, 'Misura terminata ma un errore si è verificato durante il suo invio.'))
      else:
        self._updatestatus(status.Status(status.OK, 'Misura terminata.'))

      logger.info('Fine task di misura.')

    except RuntimeWarning:
      self._updatestatus(status.Status(status.ERROR, 'Misura interrotta per timeout.'))
      logger.warning('Timeout during task execution. Time elapsed > %1f seconds ' % self._tasktimeout)

    except Exception as e:
      logger.error('Task interrotto per eccezione durante l\'esecuzione di un test: %s' % e)
      self._updatestatus(status.Status(status.ERROR, 'Misura interrotta. %s Attendo %d secondi' % (e, self._polling)))

    bandwidth_sem.release() # Rilascia la risorsa condivisa: la banda