!V1fA dZddlZddlZddlZddlmZmZmZmZm Z m Z ddl m Z dZ ee eeeeffZdadZej$Gddej&Zd eeefd eeeffd ZGd d Zy)a$ This module is responsible for handling all events that must be raised to the user somehow. The main idea behind this module is to centralize all events that happens during the execution of Pro commands and allows us to report those events in real time or through a machine-readable format. N)AnyDictListOptionalSetUnion) safe_dumpz0.1c.t tatSN) _event_logger EventLogger7/usr/lib/python3/dist-packages/uaclient/event_logger.pyget_event_loggerrs# rc:eZdZdZeZeZeZy)EventLoggerModea Defines event logger supported modes. Currently, we only support the cli and machine-readable mode. On cli mode, we will print to stdout/stderr any event that we receive. Otherwise, we will store those events and parse them for the specified format. N)__name__ __module__ __qualname____doc__objectCLIJSONYAMLrrrrrs (C 8D 8Drrstatusreturnc.ddlm}t|jDcgc] \}}||d c}}|d<|j dd|j dg|j dgD]}d|vs|j d|Scc}}w) Nr)get_pro_environment)namevalueenvironment_varsoriginservicesvariants) uaclient.utilrsorteditemspop setdefaultget)rrr r!services rformat_machine_readable_outputr.,s1""5"7"="="?@" D%&"F   JJx j"% ::j"-$  KK #$ M'"sBc^eZdZdZdZdefdZdefdZde fdZ d$d ed e efd Z d%d ede ede e eefde ede ede e eeff dZ d&dede ede ede ede e eeff dZd'dede efdZdefdZde efdZdefdZdefdZd Zd!Zd"Zd(d#Zy ))r cg|_g|_t|_t|_d|_d|_i|_tj|_ y)NFr$ _error_events_warning_eventsset_processed_services_failed_services _needs_reboot_command_output_contentrr_event_logger_modeselfs r__init__zEventLogger.__init__FsM!#&5 #" !#2"5"5rcg|_g|_t|_t|_d|_d|_i|_tj|_ y)z/Reset the state of the event logger attributes.Fr$Nr1r;s rresetzEventLogger.resetSsK!#&5 #" !"1"5"5r event_modec||_y)z_Set the event logger mode. We currently support the CLI, JSON and YAML modes. N)r:)r<r@s rset_event_modezEventLogger.set_event_mode^s #-rcommandc||_y)zSet the event logger command. The command will tell the process_events method which output method to use. N)r8)r<rCs r set_commandzEventLogger.set_commandes   routput_contentc||_y)zSet the event logger output content. The command will tell the process_events method which content to use. N)r9)r<rFs rset_output_contentzEventLogger.set_output_contentms .rNinfo_msgendc|stj}|jtjk(rt |||yy)zL Print the info message if the event logger is on CLI mode. )filerJN)sysstdoutr:rrprint)r<rI file_typerJs rinfozEventLogger.infous5 I  " "o&9&9 9 ( 4 :rmsgr- event_dictcode event_typeadditional_infocR||rdnd}||||d}|r||d<|j|y)Nr-system)typer-message message_coderV)append)r<rRr-rSrTrUrV event_entrys r_record_dict_eventzEventLogger._record_dict_eventsF  &-8J   -,>9Ix--x!11z  " "o&:&: : >   8D   $ $(<(< < )Fu= >=rc|jtjk7r1|jdk(r|j y|j yy)z Creates a json response based on all of the events stored in the event logger. The json response will only be created if the event logger is not on CLI mode. rN)r:rrr8rrr;s rprocess_eventszEventLogger.process_eventssA  " "o&9&9 9}}(++---/ :r)NN)NNN)NNNNr )rN)rrrr=r?rrBstrrErrHrrQrEventFieldErrorTyper^rcrfrjrmroboolrrrwrrrrrrr r Esv 6 6-- 3 ..5S5x}5#$(48' '#'c#6678 ' sm ' SM '"$sCx.1'6%)!%$(48 SM#  SM  "$sCx.1 0 3 # ../S /+c+-D-K "?" 0rr )renumrrMtypingrrrrrr uaclient.yamlr rrrr runiqueEnumrr.r rrrrs 88#uS$sCx.%89:  dii   4S>d38n2z0z0r