from Crypto.Cipher import AES
import StringIO
import time
import subprocess
import threading
import os,sys
import pyinotify
import xml.dom.minidom
import codecs
import psycopg2
from threading import Thread
import datetime

MelChioR='GSDGJSVPIGJVGBJPOGJPJGPGJPSP11VSEGTSBSSVVDVSVDG353553BDBHYFHDJHDIHTHBYHDHYYHYDHYDD'    
ElGrandeMatadoR='HY6YYHTD8HN68DFY48HYRH74T876H4DR3H43HGGJJ8Y8TY4D34GHR8RY38FYH4348RHDRFDV5843YH4374YH874DTY38H4DY384R3D8H4DY34D3K84OU8HL45843Q84AG84AZ84RFTHDFY38JU4834FKU4K4K8ULO4Y3RY13DET463J434JR3T84J43I6U87KL4Y38937TR94R3J8448K3R864783R684786I438'
ElCondoR='4YBD3H4DERRTYTYYH834DFHY384H7HDFY384HDFY84GUH3HYF3JH4JY3O8L43H843V8FY4VD84D384H3V8UT4K3B1T3BK43F8K43I84N54V38D8FY789EY874DY1HC836168H46UI4OGM6I84FCD6T8C4X6ER46SG84TY686TY4GHVSRHY46CRY8HC6Y87468RSX4XS84SEG7BV76F8JU4IUL86OM486I4GJUV864F86DYT4C6'
ElMatadoR='HY68HYHTYN68DFY48HTYHTHYYRH74T876H4DR3H438DDSDY8TY4D34GHR8RY38FYH4348RHDR843YH4374YH874DTY38H4DY384R3D8H4DY34D3K84OU8HL45843Q84AG84AZ84RFTHDFY38JU4834FKU4K4K8ULO4Y3RY13DET463J434JR3T84J43I6U87KL4Y38937TR94R3J8448K3R864783R684786I438'
def ElBrassoR():
    global ElChaloR
    ElChaloR=MelChioR[4:6]+ElGrandeMatadoR[8:10]+ElCondoR[18:20]+ElMatadoR[11:13]+MelChioR[5:7]+ElCondoR[20:22]+ElGrandeMatadoR[25:27]+ElCondoR[28:30]+ElMatadoR[17:19]+ElGrandeMatadoR[21:23]+MelChioR[12:14]+ElMatadoR[30:32]
ElBrassoR()
jak='2164691737824342'
encodings={}
i=1
for arg in sys.argv:
    if int(i)==2:
        verbose=arg
        if str(verbose)=='-v':
            print str(verbose)
    if int(i)==3:
        oscdir=arg
        if str(verbose)=='-v':
            print str(oscdir)
        oscurdir=oscdir
    if int(i)==4:
        period=arg
        if str(verbose)=='-v':
            print str(period)
    if int(i)==5:
        user=arg
        if str(verbose)=='-v':
            print str(user)
    if int(i)==6:
        poste=arg
        if str(verbose)=='-v':
            print str(poste)
    if int(i)==7:
        serverip=arg
        if str(verbose)=='-v':
           print str(serverip) 
    if int(i)==8:
        syncrotip=arg
        if str(verbose)=='-v':
            print str(syncrotip)
    if int(i)==9:
        poste_adminid=arg
        if str(verbose)=='-v':
            print str(poste_adminid)
    i=i+1
try:
    encodings["Process","Active"]=False
    encodings["Files","Active"]=False
    encodings["Title","Active"]=False
    encodings["Process1"]=""
    encodings["Process1",'alias']=""
    encodings["Process1",'language']=""
    encodings["Process2"]=""
    encodings["Process2",'alias']=""
    encodings["Process2",'language']=""
    encodings["Files1"]=""
    encodings["Files1",'alias']=""
    encodings["Files1",'language']=""
    encodings["Files2"]=""
    encodings["Files2",'alias']=""
    encodings["Files2",'language']=""
    encodings["Title1"]=""
    encodings["Title1",'alias']=""
    encodings["Title1",'language']=""
    encodings["Title2"]=""
    encodings["Title2",'alias']=""
    encodings["Title2",'language']=""
    encodings["Title3"]=""
    encodings["Title3",'alias']=""
    encodings["Title3",'language']=""
    TchemFSF=oscurdir+os.sep+'conf'+os.sep+'languages.gwh'
    isconfig=os.path.isfile(TchemFSF)
    if isconfig==True:
        fft=open(TchemFSF, mode ='rb')
        output = StringIO.StringIO(fft.read())
        decoutput=StringIO.StringIO()
        fft.close()
        Gdecrypt(output,decoutput)
        lines={}
        p=0
        lines = decoutput.getvalue()

        for char in lines:
            if char=='\t':
                p+=1
                continue
            if char=='\n':
                glorb=True
                break
            if p==0:
                encodings["Process1"]=str(encodings["Process1"])+str(char)
                encodings["Process","Active"]=True
            if p==1:
                encodings["Process2"]=str(encodings["Process2"])+str(char)
                encodings["Process","Active"]=True
            if p==2:
                encodings["Files1"]=str(encodings["Files1"])+str(char)
                encodings["Files","Active"]=True
            if p==3:
                encodings["Files1"]=str(encodings["Files1"])+str(char)
                encodings["Files","Active"]=True
            if p==4:
                encodings["Title1"]=str(encodings["Title1"])+str(char)
                encodings["Title","Active"]=True
            if p==5:
                encodings["Title2"]=str(encodings["Title2"])+str(char)
                encodings["Title","Active"]=True
            if p==6:
                encodings["Title3"]=str(encodings["Title3"])+str(char)
                encodings["Title","Active"]=True
        decoutput.close()
        output.close()


except:
    encodings["Process1"]=sys.getdefaultencoding()
    encodings["Process1",'alias']=""
    encodings["Process1",'language']="workstation system encoding"
    encodings["Process2"]=""
    encodings["Process2",'alias']=""
    encodings["Process2",'language']=""
    encodings["Files1"]=sys.getdefaultencoding()
    encodings["Files1",'alias']=""
    encodings["Files1",'language']="workstation system encoding"
    encodings["Files2"]=""
    encodings["Files2",'alias']=""
    encodings["Files2",'language']=""
    encodings["Title1"]=sys.getdefaultencoding()
    encodings["Title1",'alias']=""
    encodings["Title1",'language']="workstation system encoding"
    encodings["Title2"]=""
    encodings["Title2",'alias']=""
    encodings["Title2",'language']=""
    encodings["Title3"]=""
    encodings["Title3",'alias']=""
    encodings["Title3",'language']=""

conn_string = "host='"+str(serverip)+"' dbname='chronos-monitor.com' user='chronos' password='gortex855'"
connec = psycopg2.connect(conn_string)
connec.set_client_encoding('UTF8')
cursex = connec.cursor()
class minuteView(Thread):
    global cursex,connec,user,poste,serverip,fanal,rept
    def __init__(self,resac):
        Thread.__init__(self)
        self.setDaemon(1)
        self.resac=resac
        self.start()
    def run(self):
        global cursex,connec,user,poste,fanal,rept
        def unchain(string):
            result=""
            if string:
                x=len(string)            
                for x in range(0,x):
                    if string[x] in ["'",'"']:
                        result=result+" "
                    elif string[x] in ["#"]:
                        pass
                    else:result=result+string[x]
            return result


        def chain(string):
            results=""
            if string:
                x=len(string)            
                for x in range(0,x):
                    if string[x]in ["\\"]:results=results+string[x]+string[x]
                    else:results=results+string[x]
            return results
        def formatFanal():
            global fanal
            fanal['client']="None"
            fanal['prestation']="None"

        #print 'good'
        Txzorbl={}
        final={}
        fanal={}
        #formatFanal()
        ses=0
        p=0
        Txzorbl[p]=""
        string=str(self.resac)
        ln=len(string)
        for x in range(0,ln):
            char=string[x:x+1]
            if char=="#":
                p+=1
                Txzorbl[p]=""
            else:
                Txzorbl[p]=Txzorbl[p]+char
        try:
            #print 'minute view1'
            hour=Txzorbl[1]
            dateprem=hour[0:8]
            date='20'+dateprem[6:8]+'/'+dateprem[0:2]+'/'+dateprem[3:5]
            houre=hour[9:18]
            procs=""
            chemin=""
            fen=""
            ncl=0
            #print 'must'
            datour=str(Txzorbl[1]) 
            inscript=False
            #print 'minutevie2'
            #if self.type=="full":
            intostr="""INSERT INTO logfull (file,line,date, heure, nomfenetre, processus, chemin, clicks, client,activite,action,userid,posteid,final_userid) VALUES """
                #sfile=ffile
            #elif self.type=="condensed":
                #intostr="""INSERT INTO logcondensed (file,line,date, heure, nomfenetre, processus, chemin, clicks, client,activite,action,userid,posteid,final_userid) VALUES """
                #sfile=cfile
            #print 'minute view3'
           #     print 'inT'
            chemin=Txzorbl[4]
            action=Txzorbl[2]
            line=Txzorbl[0]
            userid=unchain(Txzorbl[6])
            postepid=unchain(Txzorbl[7])
            action_process=unchain(Txzorbl[3])
            procs=chain(unchain(Txzorbl[5]))
            print str(procs)
            i=len(rept)
            for char in rept:
                if str(char)=='/':
                    sfile=""
                    continue
                if str(char)=='.':
                    break
                else:
                    sfile=str(sfile)+str(char)
            formatFanal()
            #if analyse==True:
             #   analyseFichier(chemin)
            chemin=chain(unchain(Txzorbl[4]))
            fen=chemin
            intostr=intostr+"('"+str(sfile)+"','"+ line+"','"+ date+"','" +houre+"','"+ fen+"','"+ action_process+"','"+chemin+"','"+str(ncl)+"','"+fanal['client']+"','"+fanal['prestation']+"','"+str(action)+"','"+user+"','"+poste+"','"+poste_adminid+"');"    
            inscript=True
            #print 'good2'
        #    print 'miuteview7'
            if inscript==True:
##                    conn_string = "host='"+str(users['serverip'])+"' dbname='chronos-monitor.com' user='chronos' password='gortex855'"
##                    conn = psycopg2.connect(conn_string)
##                    conn.set_client_encoding('UTF8')
##                    curs = conn.cursor()
##                    presult=curs.execute("SELECT action FROM logview WHERE userid='"+userid+"';")
##                    rresult=curs.fetchone()
##                    if rresult:
##                        intostr="UPDATE logview SET date='"+str(date)+"', heure='" +str(houre)+"', nomfenetre='"+ fen+"', processus='"+ procs+"', chemin='"+chemin+"', clicks='"+str(ncl)+"', client='',activite='',action='"+str(action)+"',posteid='"+str(poste['PID'])+"',final_userid='"+poste['ADMINID']+"' WHERE userid='"+str(userid)+"';"
                result=cursex.execute(intostr)
                connec.commit()
                #print 'hmmm'

           #     print 'good'
##                    curs.close()
##                    conn.close()
        except:
            pass
         #   print 'error'


def Gdecrypt(outputin,result):
    xdecryptor=AES.new(str(ElChaloR[0:24]), AES.MODE_CBC,jak)
    chunksize=(64*1024)
    rep=''
    while True:
        chunk=''
        chunk=outputin.read(n=chunksize)
        if len(chunk)==0:
            break
        elif len(chunk)%16!=0:
            chunk += ' ' * (16-len(chunk) % 16 )
        rep=rep+xdecryptor.decrypt(chunk)
    logfile.close()
    result.write(rep)
    return result
def startX():
    global ElChalor,jak,rept
##    today = date.today()
##    ts = time.time()
##    sts=str(ts).replace('.', '')
##    zrept=oscurdir+os.sep+'wok'+os.sep+'need'+os.sep+'zero.gwh'
##    rept=oscurdir+os.sep+'wok'+os.sep+'need'+os.sep+'file_access'+str(today)+'_'+str(sts)+'.gwh'
##    logfileT = open(zrept, mode ='rb')
    logfile=open(rept, mode ='rb')
    def Gdecrypt(outputin,result):
        xdecryptor=AES.new(str(ElChaloR[0:24]), AES.MODE_CBC,jak)
        chunksize=(64*1024)
        rep=''
        while True:
            chunk=''
            chunk=outputin.read(n=chunksize)
            if len(chunk)==0:
                break
            elif len(chunk)%16!=0:
                chunk += ' ' * (16-len(chunk) % 16 )
            rep=rep+xdecryptor.decrypt(chunk)
        logfile.close()
        result.write(rep)
        return result
                
    outputin = StringIO.StringIO(logfile.read())
##                        outputin.write(logfile.read())
    result = StringIO.StringIO()
    #detr=obj.decrypt(outputin.getvalue())
    Gdecrypt(outputin,result)
    #result.write(detr)
    drunk=result.getvalue()
    #print repr(drink)
    xim=xml.dom.minidom.parseString(drunk)
##            zrept=oscurdir+os.sep+'wok'+os.sep+'need'+os.sep+'zero.xml'
##            logfile = open(zrept, mode ='r')
##            xim =xml.dom.minidom.parse(logfile)
##            logfile.close()
    return xim
def createrept():
    global period,oscurdir,rept,sts
    try:
        now = datetime.datetime.now()
        if str(period)=="m":
            sts=str(now.hour)+'_'+str(now.minute)
        else:
            sts=str(now.hour)
        zrept=oscurdir+os.sep+'need'+os.sep+'zero.gwh'
        rept=oscurdir+os.sep+'enc'+os.sep+'file_access'+str(now.year)+'-'+str(now.month)+'-'+str(now.day)+'_'+str(sts)+'.gwh'
        logfileTH = open(zrept, mode ='rb')
        with open(rept, "wb") as binary_file:
            binary_file.write(logfileTH.read())
        logfileTH.close()
    except:
        return False
    return True
def startX1():
    global ElChalor,jak,sts,period,rept,oscurdir,rept
    zrept=oscurdir+os.sep+'need'+os.sep+'zero.gwh'
    logfileT = open(zrept, mode ='rb')
    with open(rept, "wb") as binary_file:
        binary_file.write(logfileT.read())
    def Gdecrypt(outputin,result):
        xdecryptor=AES.new(str(ElChaloR[0:24]), AES.MODE_CBC,jak)
        chunksize=(64*1024)
        rep=''
        while True:
            chunk=''
            chunk=outputin.read(n=chunksize)
            if len(chunk)==0:
                break
            elif len(chunk)%16!=0:
                chunk += ' ' * (16-len(chunk) % 16 )
            rep=rep+xdecryptor.decrypt(chunk)
        result.write(rep)
        return result
                
    outputin = StringIO.StringIO(logfileT.read())
##                        outputin.write(logfile.read())
    result = StringIO.StringIO()
    #detr=obj.decrypt(outputin.getvalue())
    Gdecrypt(outputin,result)
    #result.write(detr)
    drunk=result.getvalue()
    #print repr(drink)
    xim=xml.dom.minidom.parseString(drunk)
    logfileT.close()
##            zrept=oscurdir+os.sep+'wok'+os.sep+'need'+os.sep+'zero.xml'
##            logfile = open(zrept, mode ='r')
##            xim =xml.dom.minidom.parse(logfile)
##            logfile.close()
    return xim
def loadlog():
    global XTstring
    XTstring=startX()
    #print repr(drink)
def TSave():
    global XTstring,XCstring,rept
    def Gencrypt(results,outputfile):
        encryptor=AES.new(str(ElChaloR[0:24]), AES.MODE_CBC,jak)
        #decryptor=AES.new(str(ElChaloR[0:24]), AES.MODE_CBC,jak)
        chunksize=(64*1024)
        mlogfile = open(outputfile, 'wb')
        ret=''
        while True:
            chunk = results.read(n=chunksize)
            if len(chunk)==0:
                break
            elif len(chunk)%16!=0:
                chunk += ' ' * (16-len(chunk) % 16 )                
            ret=ret+chunk
        djunky=encryptor.encrypt(ret)
        mlogfile.write(djunky)
        mlogfile.close()
    class TTransPak:
        def write(self,data):
            outputin.write(data.encode('utf-8'))
    outputin = StringIO.StringIO()
    XTstring.writexml(TTransPak(), encoding='utf-8')
    results = StringIO.StringIO(outputin.getvalue())        
    Gencrypt(results,rept)
    outputin.close()
    results.close()


def Twrite(string):
    global rept,XTstring,syncrotip,sts,period,fl
    now = datetime.datetime.now()
    if str(period)=="m":
        msts=str(now.hour)+'_'+str(now.minute)
    else:
        msts=str(now.hour)
    if str(sts)!=str(msts):
        mes=createrept()
        fl=0
        XTstring=xml.dom.minidom.parseString('<PrsPC></PrsPC>')
    else:
        loadlog()
    try:
        racine=XTstring.documentElement
        element =XTstring.createElement("PrsP")
        element.setAttribute('ReportLine',string)
        racine.appendChild(element)
        TSave()
    finally:
        if syncrotip=='cont':
            minuteView(string)

def unchain(string):
    result=""
    if string:
        x=len(string)            
        for x in range(0,x):
            if string[x] in ["'",'"']:
                result=result+" "
            elif string[x] in ["#"]:
                pass
            else:result=result+string[x]
    return result
class EventProcessor(pyinotify.ProcessEvent):
    _methods = ["IN_CREATE",
                "IN_OPEN",
                "IN_ACCESS",
                "IN_ATTRIB",
                "IN_CLOSE_NOWRITE",
                "IN_CLOSE_WRITE",
                "IN_DELETE",
                "IN_DELETE_SELF",
                "IN_IGNORED",
                "IN_MODIFY",
                "IN_MOVE_SELF",
                "IN_MOVED_FROM",
                "IN_MOVED_TO",
                "IN_Q_OVERFLOW",
                "IN_UNMOUNT",
                "default"]

def process_generator(cls, method):
    global rept
    def _method_name(self, event):
        global rept,resac,fl
        def openlog():
            global rept
            logfile = open(rept, mode ='rb')
            def Gdecrypt(outputin,result):
                xdecryptor=AES.new(str(ElChaloR[0:24]), AES.MODE_CBC,jak)
                chunksize=(64*1024)
                rep=''
                while True:
                    chunk=''
                    chunk=outputin.read(n=chunksize)
                    if len(chunk)==0:
                        break
                    elif len(chunk)%16!=0:
                        chunk += ' ' * (16-len(chunk) % 16 )
                    rep=rep+xdecryptor.decrypt(chunk)
                logfile.close()
                result.write(rep)
                return result
                        
            outputin = StringIO.StringIO(logfile.read())
##                        outputin.write(logfile.read())
            result = StringIO.StringIO()
            #detr=obj.decrypt(outputin.getvalue())
            Gdecrypt(outputin,result)
            #result.write(detr)
            drunk=result.getvalue()
            return drunk

        def flsearch():
            logln=openlog()
            result=0
            listreport={}
            if logln:
                x=len(logln)
                find=False
                z=1
                for u in range(0,x):
                    if logln[u:u+11]=='ReportLine=':
                        listreport[z]=int(u)+11
                        listreport['total']=z
                        z=z+1
                        find=True
                        result=""
                        next
                if find==True:
                    for u in range(listreport[listreport['total']],x):
                        if logln[u]=='#':
                            find=False
                            break
                        elif logln[u] in ['"']:
                            next
                        else:
                            result=result+logln[u]
                
            return int(result)
        fl=flsearch()
        if str(verbose)=='-v':print (fl)
            #self.dc.DrawBitmap(self.syncf, 51, 168, True)

        #print "Method name: process_"+str(method)+"\n"+"Path name: "+event.pathname+"\n"+"Event Name:"+event.maskname+"\n"

##                  #
##                  # ReadDirectoryChangesW takes a previously-created
##                  #  handle to a directory, a buffer size for results,
##                  #  a flag to indicate whether to watch subtrees and
##                  #  a filter of what changes to notify.
##                  #
##                  # NB Tim Juchcinski reports that he needed to up
##                  #  the buffer size to be sure of picking up all
##                  #  events when a large number of files were
##                  #  deleted at once.
##                  #
##                  results = win32file.ReadDirectoryChangesW (
##                    hDir,
##                    1024,
##                    True,
##                    win32con.FILE_NOTIFY_CHANGE_FILE_NAME |
##                     win32con.FILE_NOTIFY_CHANGE_DIR_NAME |
##                     win32con.FILE_NOTIFY_CHANGE_ATTRIBUTES |
##                     win32con.FILE_NOTIFY_CHANGE_SIZE |
##                     win32con.FILE_NOTIFY_CHANGE_LAST_WRITE |
##                     win32con.FILE_NOTIFY_CHANGE_SECURITY,
##                    None,
##                    None
##                  )
##                  for action, file in results:
        timec=time.strftime('%m/%d/%y %H:%M:%S')
##                    try:
##                        hwnd = win32gui.GetForegroundWindow()
##                        # we want the desktop window
##                        objid = pyAA.Constants.OBJID_WINDOW
##                        # get the object
##                        ao = pyAA.AccessibleObjectFromWindow(hwnd, objid)
##                        pr= ao.GetProcessAndThreadID()
##                        p = psutil.Process(pr[0])
##                        processactif=p.exe
##                    except:
##                        processactif="None"
        try:
            command = "xprop -root _NET_ACTIVE_WINDOW"                                       
            output = subprocess.Popen(["/bin/bash", "-c", command], stdout=subprocess.PIPE)
            frontmost = output.communicate()[0].decode("utf-8").strip().split()[-1]
            fixed_id = frontmost[:2]+"0"+frontmost[2:]
            command = "wmctrl -lp"
            output = subprocess.Popen(["/bin/bash", "-c", command], stdout=subprocess.PIPE)
            window_list = output.communicate()[0].decode("utf-8")
            window_name = [l for l in window_list.split("\n") if fixed_id in l][0].split(socket.gethostname()+" ")[-1]
            fen1= window_name
            print str(fen1)
        except:
            fen1="None"
        try:
            w_id = subprocess.check_output(["xdotool", "getactivewindow"]).decode("utf-8")
            name = subprocess.check_output(["xprop", "-id", w_id, "WM_CLASS"]).decode("utf-8").strip()
            processactif= name
        except:
            processactif= "None"
        full_filename = unchain(processactif)
        try:
            if encodings["Process1"]!="":
                pencod=encodings["Process1"]
                try:
                    tprocess=processactif.decode(pencod)
                except:
                    try:
                        if encodings["Process2"]!="":
                            pencod=encodings["Process2"]
                            tprocess=processactif.decode(pencod)
                        else:
                            pencod='utf-8'
                            tprocess=processactif.decode(pencod)
                    except:
                        pencod='utf-8'
                        tprocess=processactif.decode(pencod)
                        
            else:
                pencod=sys.getdefaultencoding()
                tprocess=processactif.decode(pencod)

        except:
            pencod=sys.getdefaultencoding()
            tprocess=processactif.decode(pencod)
        try:
            full_filenamer=unchain(full_filename)
            if encodings["Files1"]!="":
                fencod=encodings["Files1"]
                try:
                    full_filename=full_filenamer.decode(fencod)
                except:
                    try:
                        if encodings["Files2"]!="":
                            fencod=encodings["Files2"]
                            full_filename=full_filenamer.decode(pencod)
                        else:
                            pencod='utf-8'
                            full_filename=full_filenamer.decode(fencod)
                    except:
                        pencod='utf-8'
                        full_filename=full_filenamer.decode(fencod)
                        
            else:
                fencod=sys.getdefaultencoding()
                full_filename=full_filenamer.decode(fencod)

        except:
            pencod=sys.getdefaultencoding()
            full_filename=full_filenamer.decode(fencod)
        fl=int(fl)+1
        resac=str(fl)+'#'+str(timec)+'#'+method+'#'+str(_method_name.__name__)+'#'+full_filename+'#'+unchain(tprocess)+'#'+str(user)+'#'+str(poste)+'\n'
        #self.Twrite(resac)
        Twrite(resac)
        #print full_filename + ACTIONS.get (action, "Unknown") + processactif
        minuteView(resac)
        if str(verbose)=='-v':print str(method)
        if str(verbose)=='-v':print str(full_filename)
        if str(verbose)=='-v':print str(_method_name.__name__)
    _method_name.__name__ = "process_{}".format(method)
    setattr(cls, _method_name.__name__, _method_name)

    def run(self):
        global oscdir
fl=0
mes=createrept()
if mes==False:
    print 'erreur repertoire'
try:
    chemFS= oscdir + os.sep + "conf"+os.sep+"resap.gwh"
    isdos=os.path.isfile(chemFS)
    if isdos==True:
        logfile = open(chemFS,'rb')
    else:
        chemFS= oscdir +os.sep+ "need"+os.sep+"zero.gwh"
        logfile = open(chemFS,'rb')
except:
    chemFS= oscdir + os.sep+ "need"+os.sep+"zero.gwh"
    logfile = open(chemFS,'rb')
outputin = StringIO.StringIO(logfile.read())
##                        outputin.write(logfile.read())
result = StringIO.StringIO()
#detr=obj.decrypt(outputin.getvalue())
Gdecrypt(outputin,result)
#result.write(detr)
drunk=result.getvalue()
dossier={}
xim=xml.dom.minidom.parseString(drunk)
logfile.close()
racine=xim.documentElement
unem = xim.getElementsByTagName('DIR')
x=1
for method in EventProcessor._methods:
    process_generator(EventProcessor, method)

watch_manager = pyinotify.WatchManager()
event_notifier = pyinotify.Notifier(watch_manager, EventProcessor())

dossier['nombre']=0
for unam in unem:
    dossier['path',x]=unam.getAttribute('PATH')
    dossier['nombre']=x
    #watcher[x]=watch(dossier['path',x])
    watch_this = os.path.abspath(dossier['path',x])
    watch_manager.add_watch(watch_this, pyinotify.ALL_EVENTS)
    x+=1
event_notifier.loop()

