}O"ddlZddlZddlZddlmZddlmZddlZddl m Z m Z ddl m Z ddlmZddlmZddlmZdd lmZd Zd Zd Zd ZejjjjddZdZGdde Z!dS)N)or_) sessionmaker)dbengine uidconverter)dateutil)prepare_data_json)lve_read_snapshot_parser)Snapshot)incidentz?Snapshots collected starting from %s to %s for lve id %d @ %s: zDone.. localhostcJ|jr |j\}}n|jr |j}|dz}nz tjd|j}tjd|j}n #t$rtdYdSwxYw||fS)Ng !? z:please use [YY]YY-MM-DD[ HH:MM] format for --from and --to)NN) period timestampr parse_datejoinffromto ValueErrorprint)optsstartends lvestats/snapshots/reader.py_calculate_periodrs { [ ss  h '(<(<==E%chhtw&7&788CC    N O O O::  #:sABBBc t}||}|js,|js%|t ddS t j|}n,#t j$r}t |Yd}~dSd}~wwxYw| dt}|jrZs;!X&''N4X5I!5L5LMMM HceZdZdZdZdZedejfdZ edZ dZ dZ d Z d Zd Zd Zd ZdZedZdZdS)r)c||_||_||_||_t ||_t ||_||_dddddddd|_d S) z :param start: datetime.datetime | int (unix timestamp) :param end: datetime.datetime | int (unix timestamp) :param uid: :param server_id: :param output_file: filename :param do_json: boolean CPUzVirtual memoryEPzPhysical memoryNPROCIOIOPS) cpu_fault mem_fault mep_fault memphy_fault nproc_faultio_fault iops_faultN) r3do_json output_filer5r>rrr fault_names)selfr3rrr5rrOrNs r__init__zLVEReadSnaphot.__init__hsr  &.u55 ,S11")-"   r?c |ttj|jktj|jkt tj|j|j tj |j|j  tj SN) queryr filterr5rrincident_start_timebetweenrrincident_end_timeorder_byall)rQsessions r get_incidentszLVEReadSnaphot.get_incidentss}}X&&--hldh.F.6.@DN.R.1(2N2V2VW[Wacgck2l2l2:2L2T2TUYU_aeai2j2j/l/l00199U0V0VWZWZW\W\  ]r?c g}||D]T}||jt|j|jpdd|j||dU|S)Nrrfromr incidents snapshotsduration)r]appendrWmax dump_timerYsnapshot_count get_duration)rQr\resultis rstats_by_incidentz LVEReadSnaphot.stats_by_incidents##G,,  A MM1#8!$Q[!2E2J!K!K()()(8'+'8'8';';       r?rct|j|}tt|j|jpd|}||z S)Nr)rerWminrfrY)rjfrom_to_s rrhzLVEReadSnaphot.get_durationsAA)511#ak1#6#;!< >ddHDVW[W_D`D`dddeee @ @D IIg    IIE!3DL!A!AEEE F F F IIAx1$t*==AAA B B B II;d;&7;;; < < < II;d;&7;;; < < < II>T*%5>>> ? ? ? ? r?c. tj|}|j|jz |kr|j|z |_d}n#t$rd}|dk}|sYnwxYwt |j} |r||}n|||}| |j r| |n| || dS#| wxYw)NFauto)bind)r parse_period2rrrrr3rkr} expunge_allrNrrclose)rQstats_unit_strrzgroup_by_incidentr\r-s rr-zLVEReadSnaphot.statss@  .~>>Ix$*$y00!X 1 %     I .& 8 $     1,DK00022   D..w77//CC    ! ! !| (%%e,,,,  ''' MMOOOOOGMMOOOOs8;AA4A4C>>Dctd|ji}|||j|jdS)Nr5)r r5report get_snapshotsrr)rQrbs rr/zLVEReadSnaphot.runsBeTX.//  I++DJAABBBBBr?c ptd|ji}||j|j}|}|jr#|t|n|dtj |jdtj |jd|jd|D]>}|tj ||d?|t| dS)Nr5zSnapshots timestamp list; from rz for lve id r) r r5 get_ts_listrrrrNrrrr REPORT_FOOTERr)rQrbsnapshots_listrtss rr,zLVEReadSnaphot.lists0eTX.// "..tz48DDiikk < % II'77 8 8 8 8 IIM(2DTZ2P2PMM(22MM@DMMM   %   (,R00111 $ IIm $ $ $ r?c|}|jrO|td|i|d|dS|t t j|jt j|j |j |j fz|D]}| |||t|dS)Nrbr)rrNrrr REPORT_HEADERrrrrr5rformat_snapshotr)rQrbr snapshot_datas rrzLVEReadSnaphot.reportsiikk <  II'Y)    IIdOOO IIKKK F -8#5dj#A#A8CUVZV^C_C_#'8T^#== > > >& 5 5M  m 4 4 4 4 -    r?cx|jr( t|jddS#t$rYnwxYwtjS)Nwzutf-8)encoding)rOrIOErrorsysstdout)rQs rrzLVEReadSnaphot.open$sT    D,cGDDDD    zs  --ci}|D]B\}}d|vr0|d}i}||d<|d|d<||d<|d|d<|||<:|d}|ddkr,t|ddd|d<|ddkrt|d|d<||vr|ddkr@||ddkr||dxx|dz cc<n|d||d<|ddkrA||ddkr||dxx|dz cc<*|d||d<=|||<Dt|}|S)a Aggregates process data by PID by summing CPU % and MEM for same PIDs :param process_data: input data. Dictionary: { u'151048': {u'MEM': u'1', u'CMD': u'bash', u'PID': u'151048', u'CPU': u'0%'}, u'151047': {u'MEM': u'1', u'CMD': u'su cltest1', u'PID': u'151047', u'CPU': u'0%'}, u'153642': {u'MEM': u'1', u'CMD': u'./threads', u'PID': u'153640', u'CPU': u'0%'}, u'153641': {u'MEM': u'1', u'CMD': u'./threads', u'PID': u'153640', u'CPU': u'0%'}, u'153640': {u'MEM': u'1', u'CMD': u'./threads', u'PID': u'153640', u'CPU': u'5%'} } :return: Output data - List of dictionaries: [ {u'MEM': u'1', u'CMD': u'bash', u'PID': u'151048', u'CPU': u'0%'}, {u'MEM': u'1', u'CMD': u'su cltest1', u'PID': u'151047', u'CPU': u'0%'}, {u'MEM': u'3', u'CMD': u'./threads', u'PID': u'153640', u'CPU': u'5%'}, ] PIDCMDMEMrBN/A%)itemsintreplacer,values) process_data thread_dict_ proc_datapidprocess_data_newout_datas r_process_data_aggregatez&LVEReadSnaphot._process_data_aggregate-s* (..00! -! -LAyI%% &#% *- '*3E*: '*- '*3E*: '#3 C E"C5((#&y'7'?'?R'H'H#I#I % 5((#&y'7#8#8 % k!!U#u,,"3'.%77#C(///9U3CC////2;E2B C(/U#u,,"3'.%77#C(///9U3CC////2;E2B C(/$- C   **,,--r?c |dtj|dd|dd|d|dD]:\}}|d|j||d |d;|d rz|d t jgd }tt|j |d || |d t}t|d D]; t D]}||>> rfz, UID r5rz Faults: snap_faultsz * z: snap_sqlz SQL Queries: )rTimez SQL-queryz Processes: snap_procrrz Memory (Mb)rBzCPU (%)rlc<g|]}|dS)r)r&).0krs r z2LVEReadSnaphot.format_snapshot..s'AAA!488Au--AAAr?z snap_httpzHttp requests: )PidDomainz Http typePathz Http versionr)rrrrrPr& prettytable PrettyTabler,mapadd_row get_stringsetrkeysaddrdalignrstr)rQrrrv sql_tablefieldskey data_keys table_columnstablesnap_proc_aggr http_tablers @rrzLVEReadSnaphot.format_snapshotis g+M+,FGGgg}]bOcggghhh -   !-06688 B BDAq II@T-11!Q77@@1@@@ A A A A  $ . II( ) ) )#/0L0L0LMMI Y& j(ABB C C C IIi**,, - - - "###{3::<<==  DDIIKK((   3 %MM  F??   / / /   U # # # F??   + + +   U # # # F??   ' ' '   U # # #' 66 M ! !!$EK 55mK6PQQ" C CD MMAAAAyAAA B B B B #e** &  %  II( ) ) )$01o1o1oppJ Z'{)CDD E E E IIc*oo & & & IIf        r?N)__name__ __module__ __qualname__rRr]rk staticmethodrmaxsizerhrvr}rrr-r/r,rrrrr?rr)r)gs,   8]]]   S[\ ,,\,$0      :CCC"$99\9v33333r?r)rT)"r:rr sqlalchemyrsqlalchemy.ormrlvestats.lib.commons.decoratorslvestats lvestats.librrlvestats.lib.commonsrlvestats.lib.jsonhandlerr/lvestats.lib.parsers.lve_read_snapshot_argparser lvestats.lib.snapshotr lvestats.orm.incidentr rrr'rlibcommons decorators no_sigpiper7r>objectr)rr?rrs` ''''''&&&&////////))))))666666TTTTTT************R        +) ) ) ,+) X    uuuuuVuuuuur?