in source/lambda/util/metrics.py [0:0]
def send_metrics_data(metrics, logger):
"""
Sends metrics data
:param metrics: metrics data
:param logger: logger
:return:
"""
try:
url = os.getenv(util.ENV_METRICS_URL, None)
if url is None:
logger.warning(WARN_ENV_METRICS_URL_NOT_SET, util.ENV_METRICS_URL)
return
solution_id = os.getenv(util.ENV_SOLUTION_ID, None)
if solution_id is None:
logger.warning(WARN_SOLUTION_ID_NOT_SET)
return
if solution_id is None:
logger.warning(WARN_SOLUTION_ID_NOT_SET)
return
stackId = os.getenv(util.STACK_ID, None)[-36:]
uuid_key = os.getenv(util.UUID_KEY) + str(stackId)
user_agent_extra_string = os.getenv(util.USER_AGENT_EXTRA)
try:
if user_agent_extra_string is not None:
solution_config = {"user_agent_extra": user_agent_extra_string}
config = botocore.config.Config(**solution_config)
else:
config = None
client = boto3.client("ssm", config=config)
response = client.get_parameter(
Name=uuid_key
)
uuid_parameter = response.get("Parameter", {}).get("Value")
except botocore.exceptions.ClientError as ex:
if ex.response.get("Error", {}).get("Code") == "ParameterNotFound":
uuid_parameter = str(uuid.uuid4())
try:
logger.info("creating a new parameter")
client.put_parameter(
Name=uuid_key,
Description="This is a unique id for each aws-instance-scheduler solution stack, for reporting metrics.",
Value=uuid_parameter,
Type="String"
)
except Exception as ex:
logger.info("Failed to create a new parameter")
logger.info(ex)
else:
logger.warning("Error creating UUID parameter.")
logger.info("uuid_parameter {} ".format(uuid_parameter))
data_dict = {
"TimeStamp": str(datetime.utcnow().isoformat()),
"UUID": uuid_parameter,
"Data": metrics,
"Solution": solution_id,
"Version" : VERSION
}
data_json = safe_json(data_dict, indent=3)
logger.info(INF_METRICS_DATA, data_json)
headers = {
'content-type': 'application/json',
"content-length": str(len(data_json))
}
response = requests.post(url, data=data_json, headers=headers)
response.raise_for_status()
logger.debug(INF_METRICS_DATA_SENT, response.status_code, response.text)
except Exception as exc:
logger.warning((WARN_SENDING_METRICS_FAILED.format(str(exc))))