a 'Dgg @sNddlZddlZddlZeeZGdddZdddeeeddd Z dS) Nc@s:eZdZdZdddeeedddZdd Zd d Zd S) Timeda A context manager which measures and optionally logs context run time. :param msg: A message that describes the thing that is being measured :param threshold: Threshold, in seconds. When the context exceeds this threshold, a log will be made. :param log_mode: Control whether to log. Defaults to "threshold". Possible values include: "always" - Always log 'msg', even when 'threshold' is not reached. "threshold" - Log when context time exceeds 'threshold'. "skip" - Do not log. Context time and message are stored in the 'output' and 'delta' attributes, respectively. Used to manually coalesce with other logs at the call site. usage: this call: ``` with Timed("Configuring the network"): run_configure() ``` might produce this log: ``` Configuring the network took 0.100 seconds ``` {Gz? thresholdrlog_modemsgrrcCs(||_||_||_d|_d|_d|_dS)Ng)rrroutputstartdelta)selfrrrr9/usr/lib/python3.9/site-packages/cloudinit/performance.py__init__%s zTimed.__init__cCst|_|S)N)time monotonicr )r rrr __enter__3s zTimed.__enter__cCst|j|_d|jdd}d|jkr.wrapper..decorator) functoolswraps)r%r&rrr)r%rwrappercsztimed..wrapperr)rrrr*rr)rtimedHsr+) r'ZloggingrZ getLoggerrrrr!r"r+rrrrs  @