in azurelinuxagent/common/protocol/wire.py [0:0]
def _build_health_report(incarnation, container_id, role_instance_id,
status, substatus, description):
# The max description that can be sent to WireServer is 4096 bytes.
# Exceeding this max can result in a failure to report health.
# To keep this simple, we will keep a 10% buffer and trim before
# encoding the description.
if description:
max_chars_before_encoding = 3686
len_before_trim = len(description)
description = description[:max_chars_before_encoding]
trimmed_char_count = len_before_trim - len(description)
if trimmed_char_count > 0:
logger.info(
'Trimmed health report description by {0} characters'.format(
trimmed_char_count
)
)
# Escape '&', '<' and '>'
description = saxutils.escape(ustr(description))
detail = u''
if substatus is not None:
substatus = saxutils.escape(ustr(substatus))
detail = (u"<Details>"
u"<SubStatus>{0}</SubStatus>"
u"<Description>{1}</Description>"
u"</Details>").format(substatus, description)
xml = (u"<?xml version=\"1.0\" encoding=\"utf-8\"?>"
u"<Health "
u"xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\""
u" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">"
u"<GoalStateIncarnation>{0}</GoalStateIncarnation>"
u"<Container>"
u"<ContainerId>{1}</ContainerId>"
u"<RoleInstanceList>"
u"<Role>"
u"<InstanceId>{2}</InstanceId>"
u"<Health>"
u"<State>{3}</State>"
u"{4}"
u"</Health>"
u"</Role>"
u"</RoleInstanceList>"
u"</Container>"
u"</Health>"
u"").format(incarnation,
container_id,
role_instance_id,
status,
detail)
return xml