ó à@Qc@s²ddlZddlZddlZddlZddlZddlZddlmZddlm Z m Z ddl Z ddl m Z ddlmZddlmZmZmZmZmZmZejjeƒZyddlZWnek rýnXdefd„ƒYZd efd „ƒYZd efd „ƒYZ d efd„ƒYZ!defd„ƒYZ"defd„ƒYZ#defd„ƒYZ$defd„ƒYZ%dS(iÿÿÿÿN(tApp(t QueryErrort MySQLError(twbaOS(tUsers(tlog_infot log_errort log_warningt log_debugt log_debug2t log_debug3t DataSourcecBseZd„Zd„ZRS(cCsvd|_d|_d|_||_||_|jƒ|_|dk rr|d|_|d|_|d|_ndS(Niii(tNonetwidgettlabel_cbtcalc_cbtnametmon_bet get_ctrl_betctrl_be(tselfRRR ((s..\modules\wba_monitor_be.pyt__init__+s        cCsdS(N((R((s..\modules\wba_monitor_be.pytpoll7s(t__name__t __module__RR(((s..\modules\wba_monitor_be.pyR )s tShellDataSourcecBs eZdZd„Zd„ZRS(cCs#tj||||ƒ||_dS(N(R Rtcmds(RRRRR ((s..\modules\wba_monitor_be.pyR>scCsg}|jj|jƒ}|ddkr|djdƒ}|dkryt|jddƒƒ}Wn-tk r•}dG|jGdG|GHd}nX|jdk r|j dk rÆ|j |ƒ}n|jj |ƒ|j dk r|j |ƒ}|jj |jj |ƒqqqndS( Niis ,:.tt,t.sError! Shell source s3returned wrong value. Expected int or float but got(Rtexecute_filtered_commandRtstriptfloattreplacet ValueErrorR R Rt set_valueRtuitasktset_description(Rtresultstresulttetlbl((s..\modules\wba_monitor_be.pyRBs"  N(RRR RRR(((s..\modules\wba_monitor_be.pyR;s tSourcecBs#eZd„Zd„Zd„ZRS(cCsp||_||_|d|_|d|_||_||_d|_dgt|ƒ|_t|ƒ|_ dS(Nii( RRR Rt variablestcalctvars_settlentvaluestvars_len(RRRR R+R,((s..\modules\wba_monitor_be.pyRXs       cCs ||j|<|jd7_dS(Ni(R/R-(Rtitvalue((s..\modules\wba_monitor_be.pytset_varcs cCsd}|j|jkrýd|_t|jƒ}|jdk rQ|j|ƒ}n |d}|dk rý|jdk rýyt|ƒ}Wn$tk r¬}d|fGHd}nX|jj |ƒ|j dk rú|j |ƒ}|j j |jj |ƒqúqýndS(NisOError! Calculation returned returned wrong value. Expected int or float but gotg(R R0R-ttupleR/R,R R R"R#RRR$R%(RR'targsR(R)((s..\modules\wba_monitor_be.pyt calculategs"    (RRRR3R6(((s..\modules\wba_monitor_be.pyR*Ws t SqlDataSourcecBsVeZdZdZdZdZd„Zd„Zd„Zd„Z d„Z d „Z RS( iiiicCs°tj|d|dƒ||_||_i|_i|_d|_|jj d|ƒ|jj d|ƒ|jj d|ƒ|j |_ t dt |jjfd|j ƒdS(Nt sql_sourcetserver_startedtserver_stoppedtshutdowns%s:%s.__init__()s)SqlDataSource created. poll_control = %i (R RR tsqlRtsourcest rev_sourcestdbconnRtadd_me_for_eventtstoppedt poll_controlR t _this_filet __class__R(RR<R((s..\modules\wba_monitor_be.pyRƒs      cCsw|j|_|jr%|jjƒnd|_|jjtƒ|_|j|_t dt |j j fd|jƒdS(Ns%s:%s.server_started_event()s0SqlDataSource server started. poll_control = %i ( tstartedRBR?t disconnectR Rtget_new_sql_connectiontTruetpollingR RCRDR(R((s..\modules\wba_monitor_be.pytserver_started_events    cCsb|j|_|jr%|jjƒnd|_|j|_tdt|jj fd|jƒdS(Ns%s:%s.server_stopped_event()s0SqlDataSource server stopped. poll_control = %i ( t skip_pollRBR?RFR RAR RCRDR(R((s..\modules\wba_monitor_be.pytserver_stopped_event™s     cCsb|j|_|jr%|jjƒnd|_|j|_tdt|jj fd|jƒdS(Ns%s:%s.shutdown_event()s*SqlDataSource shutdown. poll_control = %i ( RKRBR?RFR RAR RCRDR(R((s..\modules\wba_monitor_be.pytshutdown_event¡s     c Csâ|d}t||jjƒ|||dƒ}||j|tappendtset_value_range( RRt definitionR tstatus_variablestsrcR1tstatus_variable_nametrev_src((s..\modules\wba_monitor_be.pyt add_source©s %  c CsYtdt|jjfd|jƒ|j|jkrU|jrUd}y|jj|j ƒ}WnYt k r¹}d}|j ƒrº|jj ƒ|j ƒr¶|jjtƒ|_q¶qºnX|dk rUx‰|jƒrN|jdƒ}||jkrÉ|j|}t|jdƒƒ}x3|D](\}}|j||ƒ|jƒ}qWqÉqÉWqUndS(Ns %s:%s.poll()s&SqlDataSource poll. poll_control = %i t Variable_nametValue(R RCRDRRBRIR?R t executeQueryR<Rtis_connection_errorRFtis_error_recoverableRRGtFalsetnextRowt stringByNameR>R R3R6( RR'R(RRXR2RVR1tres((s..\modules\wba_monitor_be.pyRÅs($     ( RRRARERKRIRRJRLRMRYR(((s..\modules\wba_monitor_be.pyR7}s   tWBAWinRemoteStatscBsYeZd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Z d„Z RS( c Csf||_d|_d|_d|_tjƒ|_||_||_ ||_ ||_ |j j |_ |j ssdS|jjd|ƒd|_|jƒ|_|jjdƒ\}}|jdƒ}|dkrY|dk rY|dkrYtjƒjdƒ}d|d} td t|jjfd || fƒ|dk rb|d krbyÖt|ƒ} |jjd | ƒd } d } xÈ| D]À} | jdƒ} | jdƒ}t|ƒdkr|ddkrAt| ƒ| kr|jjd| jdƒƒ|jjd| d| ƒd } q>| d| d| 7} | d7} qAqqWt| ƒdkr}|jjd| jdƒƒd } nd| d|_td t|jjfd|jƒd|_d |_tjd|jjd|jt j!d|j"d|j#fƒ|_$|j$j%t&ƒ|j$j'ƒWqVt(k rR}|jj)ƒd|_|‚qVXqbn d|GHdS(NiR;scmd /C echo %USERPROFILE%s s %USERPROFILE%smysql_system_status_rmt.vbss"s\mysql_system_status_rmt.vbs"s%s:%s.__init__()s4Script local path is "%s". Will be uploaded to "%s" Rscmd /C echo. > is s t'scmd /C s &s cmd /C echo s >> secho s && scscript //NoLogo s /DoStdInsAbout to run "%s" ttargetR5is0Can't find a place to upload script dirpath='%s'(*RR tsshtcputmemt threadingtLocktmtxtrunningt cpu_widgett mem_widgettsettingstuses_sshtremote_admin_enabledR@tscripttopen_ssh_session_for_monitoringtexec_cmdRRtgettget_resource_pathRRCRDRtopenR.R tchantouttThreadRtCURRENTtreadert save_channelt read_threadt setDaemonRHtstarttIOErrortclose(RRtserver_profileRlRmRntdirpathtcodet script_pathtfilenametftmaxsizetcmdtlinettlineR(((s..\modules\wba_monitor_be.pyRàsl          $    $  ?  cCsZ|jrVt|jdd}nXz|jjƒ||_Wd|jjƒXdS(Ns g(RR R"RktacquireRgtrelease(RttextR2((s..\modules\wba_monitor_be.pyt parse_cpuHs    cCsž|jdƒ}d}yt|ƒ}Wntk r>d}nX|dk ry|jjƒz ||_Wd|jjƒXntdt |j j fd|ƒdS(Ns s%s:%s.parse_mem()s-Got mem stat value from remote script - "%r" ( RR R R"RkR“RhR”R RCRDR(RR•R2((s..\modules\wba_monitor_be.pyt parse_memWs     cCsTd}d}d}x|jdr2yÇ|jdƒ}d}|dkrR|j}n–|dkrj|j}n~|dks‚|dkrª|dk r›||ƒnd}d}n>|d krÃ||7}n%|d krÜ|d 7}n d}d}Wqtjk r.|d8}|dkr/|jƒtd ƒ‚q/qXqWt d t |j j fdƒdS(NRi iitCtMs s s 0123456789. RRs%Can't read from remote Windows scripts%s:%s.reader()s2Leaving monitor thread which polls remote windows ( R RltrecvR–R—tsocketttimeoutR‚t ExceptionRRCRDR(Rt ssh_sessiontwhatRyttimeoutstch((s..\modules\wba_monitor_be.pyR|is:               cCs-d}|jjƒ|j}|jjƒ|S(NR(RkR“RgR”(Rtret((s..\modules\wba_monitor_be.pyR’‹s    cCs-d}|jjƒ|j}|jjƒ|S(NR(RkR“RhR”(RR¢((s..\modules\wba_monitor_be.pyR”s    ( RRRRMR}RR–R—R|R’R(((s..\modules\wba_monitor_be.pyRcÞs L    " tWBAWinLocalStatscBs>eZd„Zd„Zd„Zd„Zd„Zd„ZRS(c Cs tjƒ|_d|_d|_||_||_||_||_t j ƒj dƒ}tj d|j ƒ|_|jjtƒ|jjd|ƒtjƒ}|jtjO_tj|_tjd|ddtjdtjd tjd |ƒ|_|jjƒdS( Nismysql_system_status.vbsReR;scscript //NoLogo s /DoStdIntstdintstdouttstderrt startupinfo(RiRjRkRgRhRlRmRnRRRuRvRztread_from_scriptR~RRHR@t subprocesst STARTUPINFOtdwFlagst _subprocesstSTARTF_USESHOWWINDOWtSW_HIDEt wShowWindowtPopentPIPEtSTDOUTR¡R€(RRRƒRlRmRnR†tsu((s..\modules\wba_monitor_be.pyR¢s         ;cCsA|jr=y'|jjjdƒ|jjjƒWq=q=XndS(Nsexit (R¡R¤twritetflush(R((s..\modules\wba_monitor_be.pyRM¹s  cCs½|jdtkr:|jjjdƒ|jjjƒdS|jjjdƒ|jjjƒ|jjjdƒ|jjjƒ|jƒ}yt|ƒ}Wn8tk rÖt dt |j j fd|ƒd}nX|dk r+|jdj|ƒ|jj|jdjdtt|ƒƒdƒn|jƒ}yt|ƒ}Wntk r`d}nX|dk r¹|jdj|d ƒ|jj|jdjd tt|ƒƒdƒndS( Nisexit scpu smem s %s:%s.poll()s(Can not convert mem value "%r" to float sMem: RŽidsCPU: (RlR_R¡R¤R´RµRR R"R RCRDRR RnR#RR$R%RR‘R’Rm(RR2((s..\modules\wba_monitor_be.pyRÂs4     4    cCsDd}x7|jdr?|jjjdƒ}|dkr@d}n|dkrPPn||7}|dkr |jdƒ}t|ƒdkrdGHq<|dd krÉ|jjƒ|d |_|jj ƒn:|dd kr|jjƒ|d |_ |jj ƒnd}t d t |j jfd ||j|j fƒq q WdS(NRiiRRs s %sRead empty string from scriptR˜iR™s%s:%s.read_from_script()s-WinLocalStats: line-"%s", cpu-"%s", mem-"%s" (RlR¡R¥treadRR.RkR“RgR”RhR RCRDR(RR‹tc((s..\modules\wba_monitor_be.pyR¨äs.         cCs-d}|jjƒ|j}|jjƒ|S(NR(RkR“RgR”(RR¢((s..\modules\wba_monitor_be.pyR’ÿs    cCs-d}|jjƒ|j}|jjƒ|S(NR(RkR“RhR”(RR¢((s..\modules\wba_monitor_be.pyRs    (RRRRMRR¨R’R(((s..\modules\wba_monitor_be.pyR£¡s   "  tWMIStatscBs#eZd„Zd„Zd„ZRS(cCsjt|jdƒs!tdƒ‚n||_||_||_||_d|_d|_ |jj |_ dS(Ntwmis"Current profile has no WMI enabled( thasattrtserver_controlRRRƒRmRnR t cpu_mon_idt total_memR¹(RRRƒRmRn((s..\modules\wba_monitor_be.pyRs      cCs d}|jj||ƒ}t|ƒdkrœt|d|ƒr…t|d|ƒ}yt|ƒ}Wq™dt|ƒGHd}q™Xqœd|GH|GHd}n|S(Nis!Wmi query: can't cast '%s' to intis/Wmi query: expected '%s' result attribute, got:(R R¹twmiQueryR.RºtgetattrR‘R(RtsessiontattrRNR2Rb((s..\modules\wba_monitor_be.pyRN s   cCs7|jjj}|j|ddƒ}|dk r||jdj|dƒ|jj|jdjdt t |ƒƒdƒn|j dkr¬t |j|ddƒƒ|_ n|j|d d ƒ}|dk r3t d ||j d d ƒ}|jdj|ƒ|jj|jdjd t t |ƒƒdƒndS(NtPercentProcessorTimes_SELECT PercentProcessorTime FROM Win32_PerfFormattedData_PerfOS_Processor WHERE Name = '_Total'igY@sCPU: RŽtTotalVisibleMemorySizes8Select TotalVisibleMemorySize FROM Win32_OperatingSystemtAvailableKBytessASelect AvailableKBytes FROM Win32_PerfFormattedData_PerfOS_MemoryidisMem: (RR»t!wmi_session_id_for_current_threadRNR RmR#R$R%RR‘R½R troundRn(Rt wmi_sessionR2tmem_perc((s..\modules\wba_monitor_be.pyR1s 4! (RRRRNR(((s..\modules\wba_monitor_be.pyR¸s tWBAdminMonitorBEcBsGeZd„Zd„Zd„Zd„Zd„Zd„Zd„ZRS(cCsg||_g|_tg|_i|_d|_||_|jjd|ƒ|jjd|ƒ|j t j kr_|j sƒ|j rW|j}|jdƒ}x¾|D]®}|jdƒ}|jdƒ} | dkr¢|| jdƒ} || djdƒ} | |j| \} }d} | |kr3|| } n|j| || ƒqW|jj|ƒd|_dS(NR9R:s s t=is is\WBAMonBE: Data sources were not added. Profile set to non-local or remote admin is disabled.t get_cpu_infot get_mem_infoRfsshow global status(RR=RHRltcommandsR t poll_threadtintervalR@t target_osRtwindowstis_localRqt sys_scripttsplitRtfindRRRR¸twmimontconnect_methodRcR7t iteritemsRY(RRÏRƒRtwidgetsR<RrtlinesR‹tidxRRR RŠtstatst sql_sourcesRN((s..\modules\wba_monitor_be.pyRDsN              #  cCs5t|jds0       . &aÃq1