# Legacy approach when manually downloading CSVs from cost explorer import pandas as pd import time import argparse from datetime import date import core from accounts import accountListLegacy def parse_arguments(): parser = argparse.ArgumentParser() parser.add_argument('--path', default='', help='Path to external CSVs (only works if from-external-csv has been set)') # Create dataframe from CSV file with report based on Services for untagged resources def createDfFromUntaggedCsv(filename: str) -> pd.DataFrame: df = pd.read_csv(filename ,index_col='Service') df = df.fillna(0) df = df.drop(index='Service Total') df = df.drop(columns=['Total cost ($)']) return df # Create dataframe from CSV file with report based on plat_env_project_service tag # Ignores summary and untagged costs def createDfFromTaggedCsv(filename: str) -> pd.DataFrame: df = pd.read_csv(filename ,index_col='plat_env_project_service') df = df.fillna(0) df = df.drop(index='plat_env_project_service Total') df = df.drop(columns=['No Tagkey: plat_env_project_service($)','Total cost ($)']) return df # Generate reports from CSV files downloaded from # CloudOps CostExplorer. You should have these files: # amortized_costs.csv from "CF- Data Strategy Costs - Amortized Costs" report # .csv from "CF - 1 – 475275892927" report def createReportFromCsvFiles(path: str) -> pd.DataFrame: resultDf = core.createEmptyDf() for acc, id in accountListLegacy().items(): file = path + id + '.csv' input = createDfFromUntaggedCsv(file) accountDf = core.generateAccountCost(input, acc.split('-')[0], acc.split('-')[1]) resultDf = pd.concat([resultDf, accountDf], ignore_index=True) print(resultDf) amortizedDf = core.generateAmortizedCosts(createDfFromTaggedCsv(path + 'amortized_costs.csv')) print(amortizedDf) concatDf = pd.concat([resultDf, amortizedDf], ignore_index=True) concatDf = core.sortBillingDf(concatDf) summarizedDf = core.generateSummaries(concatDf) print(summarizedDf) reportName = path + 'amortized_fully_tagged_costs_' + date.today().strftime("%Y-%m-%d") + '.csv' summarizedDf.to_csv(reportName, index=False) return summarizedDf if __name__ == '__main__': args = parse_arguments() start = time.time() createReportFromCsvFiles(args.path) end = time.time() print(end - start)