in src/hpc/autoscale/cost/azurecost.py [0:0]
def __init__(self, config: dict):
self.config = config
self.retail_url = "https://prices.azure.com/api/retail/prices?api-version=2021-10-01-preview&meterRegion='primary'"
if config.get('cluster_name'):
self.clusters = config.get('cluster_name')
else:
raise ValueError("cluster_name must be present in config")
cost_config = config.get('cost', {})
if not cost_config or not cost_config.get('cache_root'):
log.info("Defaulting cost cache dir to /tmp")
self.cache_root = "/tmp"
else:
self.cache_root = cost_config.get("cache_root")
retail_name = f"{self.cache_root}/retail"
self.retail_session = CachedSession(cache_name=retail_name,
backend='filesystem',
allowable_codes=(200,),
allowable_methods=('GET'),
expire_after=172800)
#_az_logger = logging.getLogger('azure.identity')
#_az_logger.setLevel(logging.ERROR)
## If we have ACM data available use azcost format else use retail format.
## for nodearray, combine usage data with either azcost or retail format.
self.DEFAULT_AZCOST_FORMAT="sku_name,region,spot,meter,meterid,metercat,metersubcat,resourcegroup,rate,currency"
self.RETAIL_FORMAT="sku_name,region,spot,meter,meterid,metercat,rate,currency"
self.NODEARRAY_USAGE_FORMAT="nodearray,core_hours,cost"
self.NODEARRAY_USAGE_HOURLY_FORMAT="start,end,nodearray,core_hours,cost"
self.az_job_t = namedtuple('az_job_t', self.DEFAULT_AZCOST_FORMAT)
self.az_job_retail_t = namedtuple('az_job_retail_t', self.RETAIL_FORMAT)
self.az_array_t = namedtuple('az_array_t', (self.NODEARRAY_USAGE_FORMAT + ',' + self.DEFAULT_AZCOST_FORMAT))
self.az_array_retail_t = namedtuple('az_array_retail_t', (self.NODEARRAY_USAGE_FORMAT + ',' + self.RETAIL_FORMAT))
self.az_array_hourly_t = namedtuple('az_array_hourly_t', (self.NODEARRAY_USAGE_HOURLY_FORMAT + ',' + self.DEFAULT_AZCOST_FORMAT))
self.az_array_hourly_retail_t = namedtuple('az_array_hourly_retail_t', (self.NODEARRAY_USAGE_HOURLY_FORMAT + ',' + self.RETAIL_FORMAT))