import ast import csv import functools import os import re from datetime import datetime, timedelta, timezone from io import BytesIO from urllib.parse import urlparse import boto3 import pandas as pd import requests from google.cloud import bigquery @functools.lru_cache def gw_access(begin, epoch=None): if epoch is None: S3_BUCKET = os.getenv("S3_BUCKET") s3 = boto3.client("s3") gw_access_df = pd.DataFrame() d = begin while d < datetime.now(timezone.utc): try: df = pd.read_csv( s3.get_object( Bucket=S3_BUCKET, Key=f"data/gw_access_log/{d.date()}.sample.csv", )["Body"], low_memory=False, ) gw_access_df = pd.concat([gw_access_df, df]) except: pass d += timedelta(days=1) return gw_access_df gw_access_df = gw_access(begin, epoch=None) gw_access_df = gw_access_df[gw_access_df.time < epoch] return gw_access_df @functools.lru_cache def dbaas_clusters(epoch=None): if epoch is None: client = bigquery.Client() r = client.query("SELECT * FROM `gcp-digital-bi.metadb.dbaas_clusters`") return pd.DataFrame.from_records([dict(row) for row in r]) df = dbaas_clusters(epoch=None) return df[df.created_at < epoch]