]A tddlZddlZddlZddlZddlmZmZmZddlZddl m Z m Z ddl Z ddlmZmZddlmZmZddlmZmZddlmZddlmZdd lmZmZdd lmZm Z dd l!m"Z"m#Z#dd l$m%Z%eid ej&ej'Z(e j)j*j+j,ddZ-de.e/e/fdej0j1j2de3e/de/fdZ4de.e/e/fde3e/dej5fdZ6de3ej0j7dedede/fdZ8Gdde3Z9de3ej0j7de:de:de3e9fdZ;dS) N)datetime timedeltatimezone)OperationalErrorProgrammingError)HistoryShowBurstingTableDoesNotExistError) ParseDatetimecheck_non_negative_int) gm_to_local local_to_gm)get_ascii_table) setup_logging) ConfigError read_config)make_db_engineMakeDbException)BurstingEventTypebursting_events_table)is_bursting_supportedzlve-bursting-info) caller_name file_level console_levelreturnc\ts#tdtjd t }t |}t ||tjdd}|rt|dSdS#t$rB}t|j tdtjdYd}~dSd}~wttttf$r;}td|tjdYd}~dSd}~wwxYw)Nz?Bursting Limits feature is not supported in current environment)cfgz2Enable Bursting Limits feature to create the tablez>Error occurred while executing the "lve-bursting-info" utility)exc_info)rprintsysexitrr_mainargvr messagerrrrlogerror)rdbengineoutputes /builddir/build/BUILDROOT/lve-stats-4.3.2-1.el9.x86_64/opt/cloudlinux/venv/lib/python3.11/site-packages/lvestats/lib/bursting/info.pymainr+"s7 " " OPPP   mm!c***sHchqrrl33   &MMMMM   ! ai BCCC  . _ M R      s$AB D+7C D+00D&&D+configr'r#ct||}tt|d}t|j}t ||||j|j}|}t|||}|S)Nfrom)r' period_from period_touid server_id) _parse_argsr getattrtoridr2get _build_table) r,r'r# namespaceperiod_from_utc period_to_utc history_showrowstables r*r"r"7sFD))I"')V"<"<==O --M&# L% L     D  > >E Lc tjd}|dtd|dt|ddd |}tj}td }|d dt||z ddd|ddt|ddd| |S)Nz1Utility for displaying bursting limits statistics) descriptionz--idz-display records only for the specified LVE id)typehelpz --server-idr2 localhostzFused with central database for multiple servers, default "%(default)s")rBdefaultrCr)hoursz-fz--from+zidisplay records from the specified date and time; if not provided, will assume the last 1-hour time framezYYYY-MM-DD[ HH:MM])actionrEnargsrCmetavarz-tz--tozodisplay records up to the specified date and time; if not provided, will include records up to the current time) argparseArgumentParser add_argumentr strr7add_argument_grouprnowrr parse_args)r,r#parser group_period datetime_nowdefault_timedeltas r*r3r3Ms:  $GIIIF  # <>>>    ; 44 U WWW,,..L<>>L"*** h00G$&&& fL$&&&   T " ""r?r=dt_fromdt_toct|||}t|gdd}|S)zt Build string representation of a console-displayable table using the rows retrieved from the DB table. )IDFromTor)fields padding_width)_build_table_rows timestampr)r=rVrW table_rowsr>s r*r8r8vs\#4#*#4#4#6#6#(??#4#466J J#7#7#7*+ - - -E Lr?c 8eZdZdZefdedededeffd ZxZS)TableRowz%Y-%m-%d %H:%M:%S.%flve_idstartendformat_cLttj|tj}ttj|tj}t |||||gdSN)r r fromtimestamprutcsuper__init__strftime)selfrcrdrerfdt_startdt_end __class__s r*rlzTableRow.__init__s x5eX\JJKKX3CFFGG &"++G44 //'224 5 5 5 5 5r?) __name__ __module__ __qualname__DEFAULT_FORMATintfloatrNrl __classcell__)rqs@r*rbrbsp+N !/ 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5r?rbts_fromts_toc g}tj|d}|D]P\}}t|}d}d\}} |dtjj|kr4d}|dtjjtjj kr|}t|t|D]} || tjjtjj kr ||| tjj}R|U|| tjj} | t||| d\}} |$| t|||R|S)zk Build table rows representing time frame intervals when bursting was enabled for each LVE id. c0|tjjSrh)rcrc)rows r*z#_build_table_rows..sc"7"9"@Ar?)keyr)NNr) itertoolsgroupbylistrr}r_ event_typerSTARTEDvaluerangelenappendrb) r=ryrzresult grouped_datarcgroupfirst_event_idxts_from_ts_to_is r*r^r^sy F$ AACCCL&== U %& 8)+5 6 @ @OQx-/:;?P?X?^^^"E 33 * *AQx-/:;?P?X?^^^#$Qx(=(?(IJH1X35?@F MM(68V<< = = =) Hff   MM(68U;; < < < Mr?)rN)rs 2222222222========&&&&UUUUUUUUUUUUUUUUBBBBBBBB55555577777788888888AAAAAAAAAAAAAAAAIIIIIImB 3&")-111   +,+($sCx.IN)S !,&#S#X&#d3i&#H