2Yc@sddlZddlZddlZddlZddlZddljZddlm Z m Z ddl Z ddl Z ddl TddlmZejjZdddYZdS(iN(t ConfigObjtConfigObjError(t*(tTunedExceptiontcommandscBseZedZdZdZdZdZdZdddZ ddZ d Z d Z d Z d'd d Zd'dZeedZdedZedZedZedZedZdZdZedZed'gedZedZdZdZdZdZ dZ!d Z"d!Z#ed"Z$d#Z%d$Z&d%Z'd&Z(RS((cCsd|_||_dS(N(tNonet _environmentt_logging(tselftlogging((s8/usr/lib/python2.7/site-packages/tuned/utils/commands.pyt__init__s cCs|jrtj|ndS(N(Rtlogterror(Rtmsg((s8/usr/lib/python2.7/site-packages/tuned/utils/commands.pyt_errors cCs|jrtj|ndS(N(RR tdebug(RR ((s8/usr/lib/python2.7/site-packages/tuned/utils/commands.pyt_debugs cCs`t|jj}idd6dd6dd6dd6dd6dd6dd 6dd 6j||S( Nt1tYtYEStTtTRUEt0tNtNOtFtFALSE(tstrtuppertstriptget(Rtvaluetv((s8/usr/lib/python2.7/site-packages/tuned/utils/commands.pytget_boolscCstjdd|jS(Ns\s+t (tretsubR(Rts((s8/usr/lib/python2.7/site-packages/tuned/utils/commands.pyt remove_ws!scCstjdd|S(Ns^"(.*)"$s\1(R#R$(RR ((s8/usr/lib/python2.7/site-packages/tuned/utils/commands.pytunquote$ss\cCs|j|d||fS(Ns%s%s(treplace(RR%t what_escapet escape_by((s8/usr/lib/python2.7/site-packages/tuned/utils/commands.pytescape(scCs|j|dS(Nt(R((RR%t escape_char((s8/usr/lib/python2.7/site-packages/tuned/utils/commands.pytunescape,scCs|d|t||S(NR"(tlen(Rts1tposts2((s8/usr/lib/python2.7/site-packages/tuned/utils/commands.pyt align_str0scCsFg}|dk rBx-t|jD]}|t|7}q%Wn|S(N(Rtsortedtitemstlist(Rtdtlti((s8/usr/lib/python2.7/site-packages/tuned/utils/commands.pyt dict2list6s  cCs0|dkrdStjddj|jS(Ns(%s)s)|((RR#tcompiletjointkeys(RR7((s8/usr/lib/python2.7/site-packages/tuned/utils/commands.pytre_lookup_compile>s ics{dkr|dkrA|Sn"tdks=|dkrA|S|dkr_|j}n|jfd||S(Nicsj|jdS(Ni(tvaluest lastindex(tmo(R7(s8/usr/lib/python2.7/site-packages/tuned/utils/commands.pytOs(RR/R>R$(RR7R%trtflags((R7s8/usr/lib/python2.7/site-packages/tuned/utils/commands.pytmultiple_re_replaceFs   cCsnt|dks|dkr"dS|dkr@|j|}n|j|}|rj|j|jdSdS(Nii(R/RR>tsearchR?R@(RR7R%RCRA((s8/usr/lib/python2.7/site-packages/tuned/utils/commands.pyt re_lookupUs c Cs|jd||f|rMtjj|}tjj|rMt}qMnyL|rftj|nt|d}|jt ||j t }Wn?t t fk r}t}|s|jd||fqnX|S(NsWriting to file: '%s' < '%s'tws Writing to file '%s' error: '%s'(RtostpathtdirnametisdirtFalsetmakedirstopentwriteRtclosetTruetOSErrortIOErrorR( Rtftdatatmakedirtno_errorR7tfdtrcte((s8/usr/lib/python2.7/site-packages/tuned/utils/commands.pyt write_to_file_s"   R,cCs|}y)t|d}|j}|jWn9ttfk rj}|sk|jd||fqknX|jd||f|S(NRCs"Error when reading file '%s': '%s's Read data from file: '%s' > '%s'(ROtreadRQRSRTRR(RRUterr_retRXt old_valueR[((s8/usr/lib/python2.7/site-packages/tuned/utils/commands.pyt read_filers cCs{|jd|tjj|rwytj||Wqwtk rs}|sotjd|t |fnt SXnt S(NsRemoving tree: '%s'scannot remove tree '%s': '%s'( RRIRJtexiststshutiltrmtreeRSR R RRMRR(RRURXR ((s8/usr/lib/python2.7/site-packages/tuned/utils/commands.pyRc~s cCsx|jd|tjj|rtytj|Wqttk rp}|sltjd|t|fnt SXnt S(NsRemoving file: '%s'scannot remove file '%s': '%s'( RRIRJRatunlinkRSR R RRMRR(RRURXR ((s8/usr/lib/python2.7/site-packages/tuned/utils/commands.pyRds cCso|jd||fytj||Wn=tk rj}|sftjd||t|fntSXtS(NsRenaming file '%s' to '%s's%cannot rename file '%s' to '%s': '%s'( RRItrenameRSR R RRMRR(RtsrctdstRXR ((s8/usr/lib/python2.7/site-packages/tuned/utils/commands.pyRes#cCsmy/tjd||ftj||tSWn7tk rh}|sdtjd|||fntSXdS(Nscopying file '%s' to '%s's!cannot copy file '%s' to '%s': %s(R RRbtcopyRRRTR RM(RRfRgRXR[((s8/usr/lib/python2.7/site-packages/tuned/utils/commands.pyRhscCsM|j|}t|dkr%tS|j|tj|||dtjS(NiRD(R`R/RMR\R#R$t MULTILINE(RRUtpatterntreplRV((s8/usr/lib/python2.7/site-packages/tuned/utils/commands.pytreplace_in_filescCsJ|j|}t|dkr%tS|j||j||dtjS(NiRD(R`R/RMR\RER#Ri(RRUR7RV((s8/usr/lib/python2.7/site-packages/tuned/utils/commands.pytmultiple_replace_in_filescCs|j|}x|D]}t|}t||}tjd|d|dtjdkr|rt|dkr|ddkr|d7}n|d||f7}qqtjd|d d |d |dtj}qW|j||S( Ns\bs\s*=.*$RDiis s%s="%s" s\b(s\s*=).*$s\1s"s\1"( R`RR#RFRiRR/R$R\(RRUR7taddRVtopttoR ((s8/usr/lib/python2.7/site-packages/tuned/utils/commands.pytadd_modify_option_in_files  )" 2c Csd}|jdkr7tjj|_d|jd|dkr|d@r|j|n|dL}|d7}qvW|S(Nt,R,iisinvalid hexadecimal mask '%s'i(RRR(tintt ValueErrorR R tappend(RtmaskRtcpusR((s8/usr/lib/python2.7/site-packages/tuned/utils/commands.pyt hex2cpulists     c Cspg}|dkr|St|tkr1|}nt|jd}g}g}t}d}x|D]}t|} |rt| dkrt}|j|d}qB|| 7}qe| dd!jdkrt }| }qe| r | ddks| ddkr |jt | dqet| dkre|j| qeqeWt|dkrh|j|nx|D]}|jd } |dd!jdkr||j |7}qoy[t| dkr|t t | dt | dd7}n|jt | dWqot k r"gSXqoWttt|} x*|D]"} | | krF| j| qFqFW| S( NRR,iit0xt^t!it-(RttypeR6RRRMR/RtlowerRRRRtrangeRR4tsettremove( RR8trltlltll2t negation_listthexmaskthvR tsvtvltcpu_listR((s8/usr/lib/python2.7/site-packages/tuned/utils/commands.pytcpulist_unpacksT        & .    cCs?|j|}|dks-t|dkr1|Sd}|}g}x|dt|kr||d||dkr||kr|jt||dt||n|jt|||d}n|d7}qFW|dt|kr$|jt||dt|dn|jt|d|S(NiiRi(RRR/RR(RR8R9tjR((s8/usr/lib/python2.7/site-packages/tuned/utils/commands.pyt cpulist_packNs" , ,cCsA|j|}|j|jd}tt|t|S(Ns/sys/devices/system/cpu/present(RR`R6R(RR8Rtpresent((s8/usr/lib/python2.7/site-packages/tuned/utils/commands.pytcpulist_invertdscs|dkrdSd}|j|}|dkr5dSx!|D]}|td|O}q<Wd|t}|ddkr|d|d7}nj|djfdtdtdDS(Niis%xiRc3s |]}||d!VqdS(iN((t.0R9(R%(s8/usr/lib/python2.7/site-packages/tuned/utils/commands.pys xs(RRtpowR/tzfillR<R(RR8RtulR tls((R%s8/usr/lib/python2.7/site-packages/tuned/utils/commands.pyt cpulist2hexjs     c Csd}ytjj|sdSt|dtdt}x|jD]}t}x^||jD]L}|||}|dkrd}n|dkrtj ||j ddtj st}qqa|dkrtj ||j t jtj st}qqa|d d krTtjj| sHtj ||j |tj  rt}qqa|d d !d kratj}|jt|jtj|d krt}qqaqaW|rDtjd } | jd|}PqDqDWWn3tttfk r} tjd|| fnX|S(Nt list_valuest interpolationR,s^$tvirts virt-whatitsystemit/itprocesss,[^,]*$serror processing '%s', %s(RRIRJtisfileRRMR=RRR#RRtSR`tconststSYSTEM_RELEASE_FILERatprocfstpidstatstreload_threadsR/t find_by_regexR;R$RTRSRR R ( Rtfnametmatching_profiletconfigtsectionRtoptionRtpsRCR[((s8/usr/lib/python2.7/site-packages/tuned/utils/commands.pytprocess_recommend_filezs@   %  $ 5   $ c Cs$tj}|r|S|jtj}|dk r5|Si}xtjD]}g}ytj|}Wn?tk r}|j t j krt j d||fqnXx-|D]%}tj j||} | ||RRERGRMR\R`RcRdReRhRlRmRqRRRRRRRRRRRRRR(((s8/usr/lib/python2.7/site-packages/tuned/utils/commands.pyRsH             #   8    #    ((Rt tuned.logsttunedRhRIRbt tuned.constsRt configobjRRR#Rt subprocessttuned.exceptionsRtlogsRR R(((s8/usr/lib/python2.7/site-packages/tuned/utils/commands.pyts