Advertisement
Guest User

Untitled

a guest
Apr 26th, 2019
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.33 KB | None | 0 0
  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
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement