#!/usr/bin/python # -*- coding: utf-8 -*- # readFile v. 0.1 # - single instance timer # - invio multiplo x send eventi accodati #--------------------------------------------------------------- import time from datetime import datetime import urllib import ConfigParser import os, sys import logging import logging.handlers import Queue import argparse #-------------------------------------------------------------- # gestione parser argomenti in input parser = argparse.ArgumentParser() parser.add_argument("memFile") parser.add_argument("logFile") args = parser.parse_args() #definizione variabili BASE stepQueuePut=25000 stepQueueGet=250 NMAXSEND=500000 # limite invio file x fare prove... idxMacchina = "2003" #-------------------------------------------------------------- # Gestione coda (condivisa) x registrazione eventi ed invio URL #print "Creazione coda illimitata" Coda = Queue.Queue(0) #--------------------------------------------------------------- #Funzione di scrittura su coda con try-except def accoda(valore): try: Coda.put(valore) except Queue.Full: logPro.error( "Queue full" + dtEve + '#' + value + '#' + cont ) except: logPro.error( "NETWORK:Errore http-no com rete-timeout" + url ) #-------------------------------------------------------------- # svuotaCoda x invio dati al server def svuota_coda(): global NMAXSEND try: if not Coda.empty(): # invio SOLO i primi NMAXSEND eventi... SE minore del num eventi... if NMAXSEND > Coda.qsize(): NMAXSEND = Coda.qsize() i = 0 with open(args.logFile,"w") as outf: while i <= NMAXSEND: if not Coda.empty(): # formatto dataOra corrente dtCurr = datetime.utcnow().strftime('%Y%m%d%H%M%S%f')[:-3] #prendo primo elemento dalla coda resp = Coda.get() # recupero valori da elemento coda! dtEve = resp.split("#")[0] value = resp.split("#")[1] cnt = resp.split("#")[2] url = URLBASE + idxMacchina + URLADV1 + value url = url + '&dtCurr=' + dtCurr + '&dtEve=' + dtEve + '&cnt=' + cnt # CHIAMO URL response3 = urllib.urlopen ( url ) answ3 = response3.read() # registro chiamata + risposta # outf.write(url + " --> " + answ3 + "\n") # incremento e controllo se mostrare output i += 1 if (i % stepQueueGet) == 0: print "Inviati %d valori..." % i print "Inviati %d valori..." % i except: print "Errore in svuotamento coda!" #--------------------------------------------------------------- # MAIN try: config = ConfigParser.RawConfigParser() config.read ( 'IOB.cfg' ) # NMAXSEND = config.getint ( 'time' , 'NMAXSEND' ) # idxMacchina = config.get ( 'id' , 'idxMacchina' ) URLBASE = config.get ( 'web' , 'URLBASE' ) URLADV1 = config.get ( 'web' , 'URLADV1' ) LOGFILE = config.get ( 'log' , 'LOGFILE' ) LOGLEVEL = config.get ( 'log' , 'LOGLEVEL' ) except: print "\n\n" + PROGRAM_NAME + ' - Error 4 - in config file ' 'IOB.cfg' sys.exit(1) #--------------------------------------------------------------- dtCurr = datetime.utcnow().strftime('%H:%M:%S.%f')[:-3] print "Inizio elaborazione: %s" % dtCurr # Leggo il file! i = 0 with open(args.memFile, 'r') as inf, open(args.logFile,"w") as outf: data = inf.readlines() print "Trovate %d da processare..." % len(data) # leggo e metto in QUEUE... for line in data: accoda(line) i += 1 if (i % stepQueuePut) == 0: print "Accodati %d valori..." % i print "Completata lettura file! %d righe accodate da trasmettere" % Coda.qsize() dtCurr = datetime.utcnow().strftime('%H:%M:%S.%f')[:-3] print "Inizio invio: %s" % dtCurr # chiamo procedura x svuotare coda... svuota_coda() dtCurr = datetime.utcnow().strftime('%H:%M:%S.%f')[:-3] print "Completato invio: %s" % dtCurr