Esempio n. 1
0
def on_success(self):

    # Cambiamos statius del task a exitoso
    MiLinaje.task_status = "Successful"

    # Escribimos el tamano del archivo recien escrito
    ses = boto3.session.Session(profile_name="dpa", region_name='us-west-2')
    s3 = ses.resource('s3')
    bucket_name = "test-aws-boto"
    my_bucket = s3.Bucket(bucket_name)

    MiLinaje.tamano_zip = my_bucket.Object(
        key=MiLinaje.ruta_s3 + MiLinaje.nombre_archivo).content_length

    import psycopg2

    host = "rita-db.clx22b04cf2j.us-west-2.rds.amazonaws.com"

    connection = psycopg2.connect(
        user="******",  # Usuario RDS
        password="******",  # password de usuario de RDS
        host=host,  #"127.0.0.1", # cambiar por el endpoint adecuado
        port="5432",  # cambiar por el puerto
        database="postgres")  # Nombre de la base de datos

    cursor = connection.cursor()
    postgres_insert_query = """ INSERT INTO metadatos.extract (fecha, nombre_task, parametros, usuario, ip_ec2, tamano_zip, nombre_archivo, ruta_s3, task_status) VALUES ( %s, %s, %s, %s, %s, %s, %s, %s, %s ) """
    record_to_insert = MiLinaje.to_upsert(
    )  #(5, 'One Plus 6', 950, 'some_spec')
    cursor.execute(postgres_insert_query, record_to_insert)
    connection.commit()
    cursor.close()
    connection.close()
    print("PostgreSQL connection is closed")
Esempio n. 2
0
 def output(self):
     s3 = boto3.resource(service_name='s3', region_name='us-east-1')
     bucket_name = 'clean-data-assign2'
     path_files = 'labeled_data.csv'
     s3.Bucket(bucket_name).upload_file(Filename=path_files,
                                        Key='labeled-data/' +
                                        'labeled_data.csv')
     print('Upload Complete')
     return luigi.contrib.s3.S3Target(
         's3://clean-data-assign2/labeled-data/')
Esempio n. 3
0
    def output(self):
        s3 = boto3.resource(service_name='s3', region_name='us-east-1')
        bucket_name = 'clean-data-assign2'
        model_files = os.path.abspath(
            os.path.join(os.path.dirname(__file__), '.', 'Clean_data'))

        for files in os.walk(model_files):
            for filename in files[2]:
                path_files = model_files + '/' + filename
                s3.Bucket(bucket_name).upload_file(Filename=path_files,
                                                   Key='data/' + filename)
        print('Upload Complete')
        return luigi.contrib.s3.S3Target('s3://clean-data-assign2/data/')
Esempio n. 4
0
    def run(self):

        # Recolectamos parametros de mes y anio de solicitud descarga a API Rita para metadatos
        MiLinaje.year = str(self.year)
        MiLinaje.month = str(self.month)

        # Recolectamos IP para metadatos
        MiLinaje.ip_ec2 = str(socket.gethostbyname(socket.gethostname()))

        ## Escribimos los archivos que se consultan al API Rita en S3

        # Autenticación en S3 con boto3
        ses = boto3.session.Session(profile_name='dpa', region_name='us-west-2')
        s3_resource = ses.resource('s3')
        obj = s3_resource.Bucket("test-aws-boto")
        print(ses)

        #Leemos los datos de la API en binario, relativos al archivo en formato zip del periodo en cuestion
        url_act = self.BASE_URL+str(self.year)+"_"+str(self.month)+".zip" #url actualizado
        r=requests.get(url_act)
        data=r.content # Peticion a la API de Rita, en binario

        # Escribimos el archivo al bucket, usando el binario
        output_path = "RITA/YEAR="+str(self.year)+"/"+str(self.year)+"_"+str(self.month)+".zip"
        obj.put_object(Key=output_path,Body=r.content)`

        # Recolectamos nombre del .zip y path con el que se guardara consulta a
        # API de Rita en S3 para metadatos
        MiLinaje.ruta_s3 = "s3://test-aws-boto/"+"RITA/YEAR="+str(self.year)+"/"
        MiLinaje.nombre_archivo =  str(self.year)+"_"+str(self.month)+".zip"

        # Recolectamos tamano del archivo recien escrito en S3 para metadatos
        ses = boto3.session.Session(profile_name="dpa", region_name='us-west-2')
        s3 = ses.resource('s3')
        bucket_name = "test-aws-boto"
        my_bucket = s3.Bucket(bucket_name)
        MiLinaje.tamano_zip = my_bucket.Object(key=MiLinaje.ruta_s3+MiLinaje.nombre_archivo).content_length

        # Cambiamos status del task a exitoso
        MiLinaje.task_status = "Successful"
Esempio n. 5
0
    def run(self):

        # Obtiene anio y mes correspondiente fecha actual de ejecucion del script
        now = datetime.now()
        current_year = now.year
        current_month = now.month

        # Obtiene anio y mes base (tres anios hacia atras)
        base_year = current_year - 0
        base_month = current_month

        # Recolectamos IP para metadatos
        MiLinaje.ip_ec2 = str(socket.gethostbyname(socket.gethostname()))

        for anio in reversed(range(base_year, current_year + 1)):
            for mes in reversed(range(1, 12 + 1)):

                # Recolectamos parametros de mes y anio de solicitud descarga a API Rita para metadatos
                MiLinaje.year = str(anio)
                MiLinaje.month = str(mes)

                # Verificamos si en metadatos ya hay registro de esta anio y mes
                # En caso contario, se intenta descarga

                #URL para hacer peticion a API rita en anio y mes indicado
                url_act = self.BASE_URL + str(anio) + "_" + str(
                    mes) + ".zip"  #url actualizado
                tam = EL_verif_query(url_act, anio, mes)

                if tam == 0:

                    #Leemos los datos de la API en binario, relativos al archivo en formato zip del periodo en cuestion

                    r = requests.get(url_act)

                    if r.status_code == 200:

                        print("Carga: " + str(anio) + " - " + str(mes))

                        data = r.content  # Peticion a la API de Rita, en binario

                        ## Escribimos los archivos que se consultan al API Rita en S3
                        # Autenticación en S3 con boto3
                        ses = boto3.session.Session(profile_name='educate1',
                                                    region_name='us-east-1')
                        s3_resource = ses.resource('s3')
                        obj = s3_resource.Bucket("test-aws-boto")
                        print(ses)

                        # Escribimos el archivo al bucket, usando el binario
                        output_path = "RITA/YEAR=" + str(anio) + "/" + str(
                            anio) + "_" + str(mes) + ".zip"
                        obj.put_object(Key=output_path, Body=r.content)

                        # Recolectamos nombre del .zip y path con el que se guardara consulta a
                        # API de Rita en S3 para metadatos
                        MiLinaje.ruta_s3 = "s3://test-aws-boto/" + "RITA/YEAR=" + str(
                            anio) + "/"
                        MiLinaje.nombre_archivo = str(anio) + "_" + str(
                            mes) + ".zip"

                        # Recolectamos tamano del archivo recien escrito en S3 para metadatos
                        ses = boto3.session.Session(profile_name="educate1",
                                                    region_name='us-east-1')
                        s3 = ses.resource('s3')
                        bucket_name = "test-aws-boto"
                        my_bucket = s3.Bucket(bucket_name)
                        MiLinaje.tamano_zip = my_bucket.Object(
                            key="RITA/YEAR=" + str(anio) + "/" + str(anio) +
                            "_" + str(mes) + ".zip").content_length

                        # Recolectamos tatus para metadatos
                        MiLinaje.task_status = "Successful"

                        # Insertamos metadatos a DB
                        #InsertExtractMetada()
                        EL_metadata(MiLinaje.to_upsert())

                        # Insertamos datos de consulta hacia esquema raw
                        ## lectura del zip consultado
                        zf = ZipFile(BytesIO(r.content))
                        ## extraemos csv y lo renombramos
                        DATA_CSV = 'On_Time_Reporting_Carrier_On_Time_Performance_(1987_present)_' + str(
                            anio) + "_" + str(mes) + '.csv'
                        zf.extract(DATA_CSV)
                        os.rename(DATA_CSV, 'data.csv')
                        ## Inserta archivo y elimina csv
                        os.system('bash insert_to_rds.sh')
                        os.system('rm data.csv')

        os.system('echo OK > Tarea_EL.txt')
Esempio n. 6
0
def on_success(self):
    if MiLinaje.url != "MALO":

        # Cambiamos status del task a exitoso
        MiLinaje.task_status = MiLinaje.url
        # Escribimos el tamano del archivo recien escrito
        ses = boto3.session.Session(profile_name="dpa",
                                    region_name='us-west-2')
        s3 = ses.resource('s3')
        bucket_name = "test-aws-boto"
        my_bucket = s3.Bucket(bucket_name)

        # Recolectamos tamano del zip subido a S3 para metadatos
        MiLinaje.tamano_zip = my_bucket.Object(
            key=MiLinaje.ruta_s3 + MiLinaje.nombre_archivo).content_length

        # Task para insertar metadatos de extraccion en DB
        #InsertExtractMetada()

        # host="rita-db.clx22b04cf2j.us-west-2.rds.amazonaws.com"
        #
        # connection = psycopg2.connect(user="******", # Usuario RDS
        #                           password="******", # password de usuario de RDS
        #                           host=host,#"127.0.0.1", # cambiar por el endpoint adecuado
        #                           port="5432", # cambiar por el puerto
        #                           database="postgres") # Nombre de la base de datos
        #
        #
        # cursor = connection.cursor()
        # postgres_insert_query = """ INSERT INTO metadatos.extract (fecha, nombre_task, parametros, usuario, ip_ec2, tamano_zip, nombre_archivo, ruta_s3, task_status) VALUES ( %s, %s, %s, %s, %s, %s, %s, %s, %s ) """
        # record_to_insert = MiLinaje.to_upsert() #(5, 'One Plus 6', 950, 'some_spec')
        # cursor.execute(postgres_insert_query, record_to_insert)
        # connection .commit()
        # cursor.close()
        # connection.close()
        # print("PostgreSQL connection is closed")

        # Conexion a BD y query para verificacion
        import psycopg2

        # Lectura de archivo de credenciales en directorio (no subirlo a git)
        credentials = pd.read_csv("postgres_credentials.csv")
        user = credentials.user[0]
        password = credentials.password[0]
        database = credentials.database[0]
        host = credentials.host[0]

        # Conexion y cursor para query
        connection = psycopg2.connect(
            user=user,  # Usuario RDS
            password=password,  # password de usuario de RDS
            host=host,  # endpoint
            port="5432",  # cambiar por el puerto
            database=database)  # Nombre de la base de datos
        cursor = connection.cursor()

        # Query para verificacion a la base de datos
        query = "INSERT INTO metadatos.extract (fecha, nombre_task, parametros, usuario, ip_ec2, tamano_zip, nombre_archivo, ruta_s3, task_status) VALUES ( %s, %s, %s, %s, %s, %s, %s, %s, %s )" + "';"

        cursor.execute(query, MiLinaje.to_upsert())

        print("Insertando metadatos")

        cursor.close()
        connection.close()
        print("PostgreSQL insertion of extract metadata ")