ó ±2öYc@sžddlmZddlZddlZddlmZddlZddljZddlm Z dgZ ej j ƒZ dejjjfd„ƒYZdS(iÿÿÿÿ(texportsN(tTunedException(tcommandst ControllercBs eZdZd„Zd„Zd„Zejdƒd„ƒZej ddƒdd„ƒZ ej ddƒdd „ƒZ ej ddƒdd „ƒZ d „Zej d d ƒdd„ƒZej dd ƒdd„ƒZej dd ƒdd„ƒZej ddƒdd„ƒZej ddƒdd„ƒZej ddƒdd„ƒZej ddƒdd„ƒZej ddƒdd„ƒZej d dƒdd„ƒZej dd ƒdd„ƒZej ddƒdd„ƒZej ddƒdd„ƒZRS(s‘ Controller's purpose is to keep the program running, start/stop the tuning, and export the controller interface (currently only over D-Bus). cCsGt|j|ƒjƒ||_||_tjƒ|_tƒ|_ dS(N( tsupert __class__t__init__t_daemont_global_configt threadingtEventt _terminateRt_cmd(tselftdaemont global_config((s;/usr/lib/python2.7/site-packages/tuned/daemon/controller.pyRs   cCsžtjdƒ|jƒ}|jjtjtjƒ}| rN|rNtjƒn|rƒ|j j ƒx|j j |j dƒsqdWntjdƒ|j ƒdS(s1 Controller main loop. The call is blocking. sstarting controlleristerminating controllerN(tlogtinfotstartRtget_booltconstst CFG_DAEMONtCFG_DEF_DAEMONRR tclearR twaittstop(R tresR((s;/usr/lib/python2.7/site-packages/tuned/daemon/controller.pytruns      cCs|jjƒdS(N(R tset(R ((s;/usr/lib/python2.7/site-packages/tuned/daemon/controller.pyt terminate-stsbscCsdS(N((R t profile_nametresultterrstr((s;/usr/lib/python2.7/site-packages/tuned/daemon/controller.pytprofile_changed0sttbcCsa|dkrtS|jjtjtjƒrT|jjƒr>tS|jj ƒsTtSn|jj ƒS(NR#( tFalseRRRRRRt is_runningtTruet is_enabledR(R tcaller((s;/usr/lib/python2.7/site-packages/tuned/daemon/controller.pyR9s cCs4|dkrtS|jjƒs#tS|jjƒSdS(NR#(R%RR&R'R(R R)((s;/usr/lib/python2.7/site-packages/tuned/daemon/controller.pyRDs  cCs=|dkrtS|jjƒs#tS|jƒo8|jƒSdS(NR#(R%RR&RR(R R)((s;/usr/lib/python2.7/site-packages/tuned/daemon/controller.pytreloadMs  cCs |jjƒ}d}t}t}z«y3|rC|jjdtƒn|jj||ƒWnqtjjk rÊ}t}t |ƒ}|r¶|jj j |kr¶t j d|ƒt}qËt j d|ƒnXWd|r|rït jd|ƒn|st jdƒn|jjƒnX||fS(NtOKtprofile_switchs@Failed to reapply profile '%s'. Did it change on disk and break?sFailed to apply profile '%s's>Applying previously applied (possibly out-dated) profile '%s'.s$Applying previously applied profile.(RR&R'R%Rt set_profilettunedt exceptionsRtstrtprofiletnameRterrortwarnRR(R Rtmanualt was_runningtmsgtsuccesstreapplyte((s;/usr/lib/python2.7/site-packages/tuned/daemon/controller.pyt_switch_profileVs.  tss(bs)cCs&|dkrtdfS|j|tƒS(NR#t Unauthorized(R%R;R'(R RR)((s;/usr/lib/python2.7/site-packages/tuned/daemon/controller.pytswitch_profileqs  cCs2|dkrtdfS|jƒ}|j|tƒS(NR#R=(R%trecommend_profileR;(R R)R((s;/usr/lib/python2.7/site-packages/tuned/daemon/controller.pyt auto_profilews   cCs7|dkrdS|jjdk r/|jjjSdSdS(NR#(RR1tNoneR2(R R)((s;/usr/lib/python2.7/site-packages/tuned/daemon/controller.pytactive_profile~s   s(ss)cCs°|dkrdS|jj}|dkrŽy4|jjƒ\}}|dkr[|dk }nWqŽtk rŠ}d}t|ƒ}||fSXn|rtjntj }|dfS(NR#tunknownR=(sunknowns Unauthorized( RR5RAR tget_active_profileRR0RtACTIVE_PROFILE_MANUALtACTIVE_PROFILE_AUTO(R R)R5R1R:tmodeR3((s;/usr/lib/python2.7/site-packages/tuned/daemon/controller.pyt profile_mode‡s     cCs^|dkrtS|jjƒr/|jjƒn|jjƒrZ|jjdddtƒntS(NR#tsave_instantly(R%RR&RR(R-RAR'(R R)((s;/usr/lib/python2.7/site-packages/tuned/daemon/controller.pytdisable™s cCs|dkrtS|jjƒS(NR#(R%RR&(R R)((s;/usr/lib/python2.7/site-packages/tuned/daemon/controller.pyR&£s tascCs#|dkrgS|jjjjƒS(NR#(Rtprofile_loadertprofile_locatortget_known_names(R R)((s;/usr/lib/python2.7/site-packages/tuned/daemon/controller.pytprofiles©s sa(ss)cCs#|dkrgS|jjjjƒS(NR#(RRLRMtget_known_names_summary(R R)((s;/usr/lib/python2.7/site-packages/tuned/daemon/controller.pyt profiles2¯s s(bsss)cCsw|dkrttdddƒS|dks7|dkrF|jƒ}nt|jjjj|tj tj gdgƒƒS(NR#( ttupleR%RARBRRLRMtget_profile_attrsRtPROFILE_ATTR_SUMMARYtPROFILE_ATTR_DESCRIPTION(R RR)((s;/usr/lib/python2.7/site-packages/tuned/daemon/controller.pyt profile_infoµs  cCs9|dkrdS|jjd|jjtjtjƒ ƒS(NR#t hardcoded(R R?RRRtCFG_RECOMMEND_COMMANDtCFG_DEF_RECOMMEND_COMMAND(R R)((s;/usr/lib/python2.7/site-packages/tuned/daemon/controller.pyR?½s cCs#|dkrtS|jjdtƒS(NR#tignore_missing(R%Rtverify_profile(R R)((s;/usr/lib/python2.7/site-packages/tuned/daemon/controller.pyR[Ãs cCs#|dkrtS|jjdtƒS(NR#RZ(R%RR[R'(R R)((s;/usr/lib/python2.7/site-packages/tuned/daemon/controller.pytverify_profile_ignore_missingÉs N(t__name__t __module__t__doc__RRRRtsignalR"texportRARRR*R;R>R@RBRHRJR&RORQRVR?R[R\(((s;/usr/lib/python2.7/site-packages/tuned/daemon/controller.pyR sH       (R.Rt tuned.logsttuned.exceptionsRR t tuned.constsRttuned.utils.commandsRt__all__tlogstgetRt interfacestExportableInterfaceR(((s;/usr/lib/python2.7/site-packages/tuned/daemon/controller.pyts