\c@sddlZddlZddlZddlZddlZddljZddlZddl Tddl m Z ej j ZdddYZdS(iN(t*(tTunedExceptiontcommandscBseZedZdZdZdZdZdZdddZ ddZ d Z d Z d Z d(d d Zd(dZeedZdedZedZedZedZedZdZdZedZedZed(igedZedZdZdZdZ dZ!d Z"d!Z#d"Z$d#Z%d$Z&d%Z'd&Z(d'Z)RS()cCs ||_dS(N(t_logging(tselftlogging((s8/usr/lib/python2.7/site-packages/tuned/utils/commands.pyt__init__scCs|jrtj|ndS(N(Rtlogterror(Rtmsg((s8/usr/lib/python2.7/site-packages/tuned/utils/commands.pyt_errors cCs|jrtj|ndS(N(RRtdebug(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_boolscCstjddt|jS(Ns\s+t (tretsubRR(Rts((s8/usr/lib/python2.7/site-packages/tuned/utils/commands.pyt remove_wsscCstjdd|S(Ns^"(.*)"$s\1(RR (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_str-scCsFg}|dk rBx-t|jD]}|t|7}q%Wn|S(N(tNonetsortedtitemstlist(Rtdtlti((s8/usr/lib/python2.7/site-packages/tuned/utils/commands.pyt dict2list3s  cCs6|dkrdStjddjt|jS(Ns(%s)s)|((R0RtcompiletjoinR3tkeys(RR4((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(Nicstj|jdS(Ni(R3tvaluest lastindex(tmo(R4(s8/usr/lib/python2.7/site-packages/tuned/utils/commands.pytLs(R0R+R;R (RR4R!trtflags((R4s8/usr/lib/python2.7/site-packages/tuned/utils/commands.pytmultiple_re_replaceCs   cCstt|dks|dkr"dS|dkr@|j|}n|j|}|rpt|j|jdSdS(Nii(R+R0R;tsearchR3R<R=(RR4R!R@R>((s8/usr/lib/python2.7/site-packages/tuned/utils/commands.pyt re_lookupRs 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'(R tostpathtdirnametisdirtFalsetmakedirstopentwriteRtclosetTruetOSErrortIOErrorR ( Rtftdatatmakedirtno_errorR4tfdtrcte((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(NR@s"Error when reading file '%s': '%s's Read data from file: '%s' > '%s'(RLtreadRNRPRQR R (RRRterr_retRUt old_valueRX((s8/usr/lib/python2.7/site-packages/tuned/utils/commands.pyt read_fileos cCs{|jd|tjj|rwytj||Wqwtk rs}|sotjd|t |fnt SXnt S(NsRemoving tree: '%s'scannot remove tree '%s': '%s'( R RFRGtexiststshutiltrmtreeRPRRRRJRO(RRRRUR((s8/usr/lib/python2.7/site-packages/tuned/utils/commands.pyR`{s cCsx|jd|tjj|rtytj|Wqttk rp}|sltjd|t|fnt SXnt S(NsRemoving file: '%s'scannot remove file '%s': '%s'( R RFRGR^tunlinkRPRRRRJRO(RRRRUR((s8/usr/lib/python2.7/site-packages/tuned/utils/commands.pyRas cCso|jd||fytj||Wn=tk rj}|sftjd||t|fntSXtS(NsRenaming file '%s' to '%s's%cannot rename file '%s' to '%s': '%s'( R RFtrenameRPRRRRJRO(RtsrctdstRUR((s8/usr/lib/python2.7/site-packages/tuned/utils/commands.pyRbs#cCsmy/tjd||ftj||tSWn7tk rh}|sdtjd|||fntSXdS(Nscopying file '%s' to '%s's!cannot copy file '%s' to '%s': %s(RR R_tcopyRORQRRJ(RRcRdRURX((s8/usr/lib/python2.7/site-packages/tuned/utils/commands.pyRescCsM|j|}t|dkr%tS|j|tj|||dtjS(NiRA(R]R+RJRYRR t MULTILINE(RRRtpatterntreplRS((s8/usr/lib/python2.7/site-packages/tuned/utils/commands.pytreplace_in_filescCsJ|j|}t|dkr%tS|j||j||dtjS(NiRA(R]R+RJRYRBRRf(RRRR4RS((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*=.*$RAiis s%s="%s" s\b(s\s*=).*$s\1s"s\1"( R]RRRCRfR0R+R RY(RRRR4taddRStopttoR((s8/usr/lib/python2.7/site-packages/tuned/utils/commands.pytadd_modify_option_in_files  )" 2cCs|jtj|jS(N(R]tconststMACHINE_ID_FILER(RRU((s8/usr/lib/python2.7/site-packages/tuned/utils/commands.pytget_machine_idscCsd}tjj}d|d<|j||jdt|d} d} yt|dtdtd|d |d |d t d t } | j \} } | j }|r||krd|kr| d } t | dkr| d } nd|d| f} |s|j | qnWnttfk r}|jdk rI|j nd }t||krd|krd|d|f} |s|j | qqnX|r|| | fS|| fSdS(NitCtLC_ALLs Executing %s.R(tstdouttstderrtenvtshelltcwdt close_fdstuniversal_newlinesisExecuting %s error: %s(RFtenvironRetupdateR RR0tPopentPIPEROt communicatet returncodeR+R RPRQterrnotabs(RtargsRwRxRvt no_errorst return_errtretcodet _environmenttoutterr_msgtprocterrterr_outRX((s8/usr/lib/python2.7/site-packages/tuned/utils/commands.pytexecutes>        cCs=tjd|}|r%|jdS|r9|jdS|S(Ns.*\[([^\]]+)\].*ii(Rtmatchtgrouptsplit(Rtoptionstdosplittm((s8/usr/lib/python2.7/site-packages/tuned/utils/commands.pytget_active_options  cCs;t|}|dkp:|jd|dtjdkS(NRs$/sys/devices/system/cpu/cpu%s/onlineRUR (RR]ROR(Rtcputscpu((s8/usr/lib/python2.7/site-packages/tuned/utils/commands.pyt is_cpu_onlines cCst|dkrdSt|jdd}yt|d}Wn)tk rftjdt|gSX|j|S(Nt,R(isinvalid hexadecimal mask '%s'(R0RR$tintt ValueErrorRRtbitmask2cpulist(RtmaskR((s8/usr/lib/python2.7/site-packages/tuned/utils/commands.pyt hex2cpulists  cCsQd}g}x>|dkrL|d@r5|j|n|dL}|d7}qW|S(Nii(tappend(RRRtcpus((s8/usr/lib/python2.7/site-packages/tuned/utils/commands.pyRs  c Csg}|dkr|St|tkr1|}nt|jd}g}g}t}d}xW|D]O}t|} |rt| dkrt}|j|d}q|| 7}qe| dd!jdkrt }| }qe| r| ddks| ddkr| djd } yat| dkrb|tt t | dt | dd7}n|jt | dWqt k rgSXqet| dkre|j| qeqeWt|dkr|j|nx|D]}|jd } |dd!jdkr%||j |7}qyat| dkrn|tt t | dt | dd7}n|jt | dWqt k rgSXqWttt|} x*|D]"} | | kr| j| qqW| S( NRR(iit0xt^t!it-(R0ttypeR3RRRJR+RtlowerROtrangeRRRR1tsettremove(RR5trltlltll2t negation_listthexmaskthvRtsvtnltvltcpu_listR((s8/usr/lib/python2.7/site-packages/tuned/utils/commands.pytcpulist_unpacksd        &    4    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(RR0R+RR(RR5R6tjR((s8/usr/lib/python2.7/site-packages/tuned/utils/commands.pyt cpulist_packbs" , ,cCsA|j|}|j|jd}tt|t|S(Ns/sys/devices/system/cpu/online(RR]R3R(RR5Rtonline((s8/usr/lib/python2.7/site-packages/tuned/utils/commands.pytcpulist_invertxscs|dkrdS|j|}|dkr/dS|j|}d|t}|ddkry|d|d7}nj|djfdtdtdDS(Ns%xiiRc3s |]}||d!VqdS(iN((t.0R6(R!(s8/usr/lib/python2.7/site-packages/tuned/utils/commands.pys s(R0Rtcpulist2bitmaskR+tzfillR9R(RR5tulRtls((R!s8/usr/lib/python2.7/site-packages/tuned/utils/commands.pyt cpulist2hex~s    cCs.d}x!|D]}|td|O}q W|S(Nii(tpow(RR5RR((s8/usr/lib/python2.7/site-packages/tuned/utils/commands.pyRs cCs,y|j|tSWn|j|SXdS(N(twaitRJ(Rt terminatettime((s8/usr/lib/python2.7/site-packages/tuned/utils/commands.pyRscCst|jj}xddddgD]}|j|}|dkrRq+nyt|| }||}|dkr|d9}nG|dkr|d9}n.|dkr|d 9}n|dkrd}n|SWq+tk rdSXq+WdS( NtKBtMBtGBR(iiiii@(RRRtrfindRR0R(RR!tunittunit_ixtvaltu((s8/usr/lib/python2.7/site-packages/tuned/utils/commands.pytget_sizes&           c Csd}d}y1ttjd}|jj}WdQXWn`tk rw}|jtjkrtd|qn)t t fk r}td|nXybttj dJ}|jj}|dtj tj gkrtdtj nWdQXWn`tk r<}|jtjkretd|qen)t t fk rd}td|nX|dkrzd}n|tj k}|dkrd}n||fS(NR(R@s!Failed to read active profile: %ssInvalid value in file %s.sFailed to read profile mode: %s(RLRotACTIVE_PROFILE_FILERZRRQRtENOENTRRPtEOFErrortPROFILE_MODE_FILEtACTIVE_PROFILE_AUTOtACTIVE_PROFILE_MANUALR0(Rt profile_nametmodeRRRXtmanual((s8/usr/lib/python2.7/site-packages/tuned/utils/commands.pytget_active_profiles4     cCsy?ttjd'}|dk r8|j|dnWdQXWn,ttfk rm}td|jnXyHttj d0}|rtj ntj }|j|dWdQXWn,ttfk r}td|jnXdS(NREs s!Failed to save active profile: %ssFailed to save profile mode: %s( RLRoRR0RMRPRQRtstrerrorRRR(RRRRRRXR((s8/usr/lib/python2.7/site-packages/tuned/utils/commands.pytsave_active_profiles N(*t__name__t __module__RORR R RR"R#R'R*R/R7R;R0RBRDRJRYR]R`RaRbReRiRjRnRqRRRRRRRRRRRRRR(((s8/usr/lib/python2.7/site-packages/tuned/utils/commands.pyR sJ              '   C      ((Rt tuned.logsttunedReRFR_t tuned.constsRoRt subprocessttuned.exceptionsRtlogsRRR(((s8/usr/lib/python2.7/site-packages/tuned/utils/commands.pyts