SHARE
TWEET

Untitled

a guest Apr 26th, 2019 73 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. from datetime import datetime,timedelta
  2. import pandas as pd
  3. pd.set_option('display.max_rows', 10000)
  4. ------------------------------------------------------------------------------------------------------------------------------------------------------
  5. hoy = datetime.now().strftime('%Y%m%d')
  6. ayer = datetime.strftime(datetime.now() - timedelta(1), '%Y%m%d')
  7. preDF = []
  8. rutas = []
  9. ## NOTA: Descomentar al menos una de las siguientes rutas
  10. ## Rutas de STAGING de los proyectos vigentes de LIVE
  11. ## rutas += ['/in/staging/ratransmit/algorithmics/tepr','/in/staging/ratransmit/analitica/xexc','/in/staging/ratransmit/clan/tedt','/in/staging/ratransmit/deltaonsite/xexc','/in/staging/ratransmit/digital_units/kexc','/in/staging/ratransmit/host/rrrg','/in/staging/ratransmit/host/tlsm','/in/staging/ratransmit/intranet_es/ewvp','/in/staging/ratransmit/ldap/peng','/in/staging/ratransmit/marketing_cs/kexc','/in/staging/ratransmit/mcg/kwue','/in/staging/ratransmit/mentor/eezt','/in/staging/ratransmit/mentor_es/eezt','/in/staging/ratransmit/Metakninght/kmkn','/in/staging/ratransmit/monitoring/xexc','/in/staging/ratransmit/pfd/ezwf','/in/staging/ratransmit/piva/eyvr','/in/staging/ratransmit/pricing/xexc','/in/staging/ratransmit/ptcib_es/endf','/in/staging/ratransmit/ptcib_es/endg','/in/staging/ratransmit/ptcib_es/endt','/in/staging/ratransmit/ptcib_es/endv','/in/staging/ratransmit/ptcib_es/enwf','/in/staging/ratransmit/ptcib_es/enyd','/in/staging/ratransmit/quality_rules/xexc','/in/staging/ratransmit/quotepad/kyum','/in/staging/ratransmit/rdr/kytl','/in/staging/ratransmit/smart_data/xexc','/in/staging/ratransmit/swift_es/sxsx']
  12. ## Rutas de RAW de los proyectos vigentes de LIVE
  13. rutas += ['/data/raw/eezt/data','/data/raw/endg/data','/data/raw/endv/data','/data/raw/ewvp/data','/data/raw/ezwf/data','/data/raw/kexc/kexc/data','/data/raw/kwue/data','/data/raw/peng/data','/data/raw/rrrg/data','/data/raw/tlsm/data','/data/raw/xcsf/eezt/data','/data/raw/xcsf/endf/data','/data/raw/xcsf/endt/data','/data/raw/xcsf/enwf/data','/data/raw/xcsf/enyd/data','/data/raw/xcsf/eyvr/data','/data/raw/xcsf/kytl/data','/data/raw/xcsf/kyum/data','/data/raw/xcsf/sxsx/data','/data/raw/xcsf/tedt/data','/data/raw/xcsf/tepr/data','/data/raw/xexc/ebdm/data','/data/raw/xexc/xexc/data']
  14. ## Rutas de MASTER de los proyectos vigentes de LIVE
  15. rutas += ['/data/master/cib/master_data/xdrd/data','/data/master/cib/reference_data/xrda/data','/data/master/cib/xdip/data','/data/master/commercialdelivery/kcha/data','/data/master/commercialdelivery/kdtm/data','/data/master/corporatefunctions/xpng/datatmp','/data/master/ebdm/data','/data/master/finance/investments_cost/xivg/data','/data/master/finance/xbfp/data','/data/master/finance/xfmd/data','/data/master/finance/xrro/data','/data/master/finance/xyat/data','/data/master/kcdo/data','/data/master/kdtm/kdtm/data','/data/master/people/xsag/data','/data/master/productsservices/agreements_services/xase/data','/data/master/productsservices/settlements/xset/data','/data/master/productsservices/xgug/data','/data/master/productsservices/xmol/data','/data/master/productsservices/xpan/data','/data/master/risk/market_risk/xmqr/data','/data/master/risk/xctk/data','/data/master/structuraldata/corporate_catalogs/xcca/data']
  16. ## Rutas de OUT de los proyectos vigentes de LIVE
  17. ## rutas += ['/out/staging/ratransmit/escd']
  18. ## Bucle que se repite para cada una de las rutas de las que están definidas arriba
  19. for i in rutas:
  20.    
  21.     ## Conexión a la ruta
  22.    
  23.     hadoop = sc._jvm.org.apache.hadoop
  24.    
  25.     fs = hadoop.fs.FileSystem
  26.     conf = hadoop.conf.Configuration()
  27.     path = hadoop.fs.Path(i)
  28.     f = hadoop.fs.FileStatus
  29.    
  30.     ## El TRY/EXCEPT es para evitar el error cuando el usuario no tiene permisos en la ruta
  31.    
  32.     try:
  33.    
  34.         ## Añadir a una lista los subdirectorios (tablas) de todas las rutas definidas arriba
  35.        
  36.         for f in fs.get(conf).listStatus(path):
  37.             existeCarpetaLog = 'No'
  38.  
  39.             ficheroNombre = f.getPath().toString().replace('hdfs://gldaaslive.sces1p100.isi','')
  40.             ficheroFecha = datetime.fromtimestamp(int(f.getModificationTime())/1000.0).strftime('%Y%m%d')
  41.        
  42.             ruta1 = hadoop.fs.Path(ficheroNombre)
  43.             existeSuccess = 0
  44.             fechaActualizacionSuccess = 'N/A'
  45.        
  46.             ## Buscar el fichero '_SUCCESS' dentro de la tabla
  47.        
  48.             for g in fs.get(conf).listStatus(ruta1):
  49.                 nombreArchivo = g.getPath().toString().replace('hdfs://gldaaslive.sces1p100.isi','').replace(ficheroNombre + '/','')
  50.                 fechaArchivo = datetime.fromtimestamp(int(g.getModificationTime())/1000.0).strftime('%Y%m%d')
  51.                 if nombreArchivo == '_SUCCESS':
  52.                     existeSuccess = 1
  53.                     fechaActualizacionSuccess = fechaArchivo
  54.                
  55.             ## Si no existe fichero '_SUCCESS' en principio no buscar nada más, y añadir registro en el DataFrame
  56.        
  57.             if existeSuccess == 0:
  58.                 ## print(ficheroNombre, ': No existe el fichero "_SUCCESS" en este directorio')
  59.                 preDF += [[i,ficheroNombre.replace(i + '/',''),'N/A','N/A','Sí','No','N/A','N/A','N/A','N/A']]
  60.            
  61.             ## Si existe fichero '_SUCCESS', hacer lo siguiente
  62.        
  63.             else:
  64.        
  65.                 lista = [ficheroNombre]
  66.            
  67.                 numBytesTabla = 0
  68.            
  69.                 ## Iterar en las subcarpetas de las tablas
  70.            
  71.                 while lista != []:
  72.            
  73.                     primerElemento = lista[0]
  74.                     lista.pop(0)
  75.                
  76.                     ruta2 = hadoop.fs.Path(primerElemento)
  77.                
  78.                     numBytes = 0
  79.                
  80.                     for h in fs.get(conf).listStatus(ruta2):
  81.                         subFicheroNombre = h.getPath().toString().replace('hdfs://gldaaslive.sces1p100.isi','')
  82.                         subFicheroFecha = datetime.fromtimestamp(int(h.getModificationTime())/1000.0).strftime('%d/%m/%Y %H:%M:%S')
  83.                         ##print(subFicheroNombre)
  84.                         ## Si la "subcarpeta" es un directorio, se añade a la lista de carpetas a revisar y se comprueba si contiene la carpeta LOG
  85.                         if h.isDirectory():
  86.                             lista += [subFicheroNombre]
  87.                             if subFicheroNombre == ficheroNombre + '/log':
  88.                                 existeCarpetaLog = 'Sí'
  89.                         ##elif subFicheroFecha == hoy and h.isFile():
  90.                         ## Si la "subcarpeta" es un archivo, se suma el tamaño del archivo al resumen de la subcarpeta
  91.                         elif h.isFile():
  92.                             numBytes += h.getLen()
  93.                     ## print(ficheroNombre, ': SE HA MODIFICADO HOY', ': ' + str(numBytes) + 'bytes añadidos al HDFS')
  94.                     ficheroNombreLimpio = ficheroNombre.replace(i + '/','')
  95.                     ## print(ficheroNombreLimpio)
  96.                    
  97.                     ## Se añade información al DataFrame dependiendo de si la subcarpeta es carpeta raíz o no
  98.                     subRuta = primerElemento.replace(ficheroNombre + '/','').replace(primerElemento,'(Carpeta Raíz)')
  99.                     if subRuta == '(Carpeta Raíz)':
  100.                         preDF += [[i,ficheroNombreLimpio,subRuta,subFicheroFecha,'Sí','Sí',fechaActualizacionSuccess,numBytes,existeCarpetaLog,'N/A']]
  101.                     else:
  102.                         preDF += [[i,ficheroNombreLimpio,subRuta,subFicheroFecha,'Sí','Sí',fechaActualizacionSuccess,numBytes,'N/A','N/A']]
  103.                    
  104.     ## Si no se tienen permisos para acceder a la carpeta, se muestra un registro en el DataFrame
  105.     except:
  106.         ## print('ERROR : ' + i + ' : puede que no tengas permisos suficientes')
  107.         preDF += [[i,'(Toda La Ruta)','N/A','N/A','No','N/A','N/A','N/A','N/A','N/A']]
  108. ------------------------------------------------------------------------------------------------------------------------------------------------------
  109. df1 = pd.DataFrame(preDF,columns = ['Ruta','Tabla','Sub-Ruta','Fecha Actualización','Se Ha Accedido','Existe _SUCCESS en Tabla','Fecha Actualización Success','Nº Bytes Añadidos','Log','Información Log'])
  110. df1 = df1.loc[(df1['Se Ha Accedido'] == 'Sí') & (df1['Sub-Ruta'] == '(Carpeta Raíz)')][['Ruta','Tabla','Fecha Actualización Success','Log','Información Log']]
  111. df1 = df1.set_index(['Ruta','Tabla'])
  112. df1
  113. ------------------------------------------------------------------------------------------------------------------------------------------------------
  114. df2 = pd.DataFrame(preDF,columns = ['Ruta','Tabla','Sub-Ruta','Fecha Actualización','Se Ha Accedido','Existe _SUCCESS en Tabla','Fecha Actualización Success','Nº Bytes Añadidos','Log','Información Log'])
  115. df2['Fecha Actualización'] = df2['Fecha Actualización'].map(lambda x: datetime.strptime(x, '%d/%m/%Y %H:%M:%S') if x != 'N/A' else None)
  116. dateTimeAyerAux = datetime.strftime(datetime.now() - timedelta(1), '%d/%m/%Y') + ' 18:00:00'
  117. dateTimeAyer = datetime.strptime(dateTimeAyerAux,'%d/%m/%Y %H:%M:%S')
  118. df2 = df2.loc[(df2['Se Ha Accedido'] == 'Sí') & (df2['Sub-Ruta'] != '(Carpeta Raíz)') & (df2['Fecha Actualización'] >= dateTimeAyer)][['Ruta','Tabla','Sub-Ruta','Fecha Actualización','Nº Bytes Añadidos']]
  119. df2 = df2.set_index(['Ruta','Tabla','Sub-Ruta'])
  120. df2
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top