in azurelinuxagent/common/protocol/wire.py [0:0]
def report_event(self, events_iterator, flush=False):
buf = {}
debug_info = CollectOrReportEventDebugInfo(operation=CollectOrReportEventDebugInfo.OP_REPORT)
events_per_provider = defaultdict(int)
def _send_event(provider_id, debug_info, flush):
try:
self._send_encoded_event(provider_id, buf[provider_id], flush)
except UnicodeError as uni_error:
debug_info.update_unicode_error(uni_error)
except Exception as error:
debug_info.update_op_error(error)
# Group events by providerId
for event in events_iterator:
try:
if event.providerId not in buf:
buf[event.providerId] = b""
event_str = event_to_v1_encoded(event)
if len(event_str) >= MAX_EVENT_BUFFER_SIZE:
# Ignore single events that are too large to send out
details_of_event = [ustr(x.name) + ":" + ustr(x.value) for x in event.parameters if x.name in
[GuestAgentExtensionEventsSchema.Name, GuestAgentExtensionEventsSchema.Version,
GuestAgentExtensionEventsSchema.Operation,
GuestAgentExtensionEventsSchema.OperationSuccess]]
logger.periodic_warn(logger.EVERY_HALF_HOUR,
"Single event too large: {0}, with the length: {1} more than the limit({2})"
.format(str(details_of_event), len(event_str), MAX_EVENT_BUFFER_SIZE))
continue
# If buffer is full, send out the events in buffer and reset buffer
if len(buf[event.providerId] + event_str) >= MAX_EVENT_BUFFER_SIZE:
logger.verbose("No of events this request = {0}".format(events_per_provider[event.providerId]))
_send_event(event.providerId, debug_info, flush)
buf[event.providerId] = b""
events_per_provider[event.providerId] = 0
# Add encoded events to the buffer
buf[event.providerId] = buf[event.providerId] + event_str
events_per_provider[event.providerId] += 1
except Exception as error:
logger.warn("Unexpected error when generating Events:{0}", textutil.format_exception(error))
# Send out all events left in buffer.
for provider_id in list(buf.keys()):
if buf[provider_id]:
logger.verbose("No of events this request = {0}".format(events_per_provider[provider_id]))
_send_event(provider_id, debug_info, flush)
debug_info.report_debug_info()
return debug_info.get_error_count() == 0