HEX
Server: Apache
System: Linux msm5694.mjhst.com 3.10.0-1160.119.1.el7.x86_64 #1 SMP Tue Jun 4 14:43:51 UTC 2024 x86_64
User: camjab_ssh (1000)
PHP: 5.3.29
Disabled: NONE
Upload Files
File: //lib/python2.7/site-packages/Uptrack.pyc

`c@sddlmZddlZddlZddlZddlZddlZddlZddlZddl	Zddl
Z
ddlZddlZddl
Z
ddlZddlZddlZddlZddlZddlZddlZddlZddlZy$ddlmZddlmZWn1ek
rcddlmZddlmZnXddlmZddl m!Z!yddl"Z"e#Z$Wnek
re%Z$nXej&d	d
fkrddl'm(Z)ddl'm*Z+n dd
l,m)Z)ddl,m*Z+ejZ-dZ.de-Z/dZ0e#Z1dZ2dZ3dZ4dZ5dZ6dZ7dZ8dZ9dZ:dZ;dZ<dZ=dZ>dZ?dZ@d ZAd!ZBd"ZCd#ZDd$ZEd%ZFd&ZGe5d'ejHd(d
ejIejJBejKBejLBejMBfgZNe8d)ZOd*ZPd+ZQd,ZRd-d.ZSd/ZTeUd0ZVd1ZWd2ZXd3ZYeUaZeUd4Z[d5Z\d6Z]d7Z^d8Z_d9Z`d:eafd;YZbd<Zcd=edfd>YZeeeeCd?e0fZfd@eafdAYZgdBZhdCeafdDYZidEeafdFYZjdGeafdHYZke#eUdIZldJeafdKYZmdLZndMedfdNYZodOZpdPZqdQZrdRZsdSZtdTZudS(Ui(tBytesION(tCSafeLoader(tCSafeDumper(t
SafeLoader(t
SafeDumper(tversion(tparseii(tSafeConfigParser(tError(tConfigParsert2sUptrack/sksplice-support_ww@oracle.coms/etc/uptrack/uptrack.confs/var/lib/uptrack/uuids/var/lib/uptrack/serials/var/cache/uptracks/var/run/ksplice-ems!/var/run/ksplice-em/kernel_statuss-https://updates.ksplice.com/update-repositorys!/var/lib/uptrack/effective_kernelii
iii
iiiiiiiiiitadmcCsPy7|tkrtStj|d}tjd|SWntk
rKtSXdS(Nis0.*\.(ksplice|oracle|oraclecloud)\.com(:[0-9]+)?$(tUPDATE_REPO_URLtTrueRturlparsetretmatcht	ExceptiontFalse(turltnetloc((s+/usr/lib/python2.7/site-packages/Uptrack.pytserver_is_oraclets
cCsxtD]\}}}}|j|rytj|Wn+tk
rf}|jtjkrqqXtj||tj|||qqWytj|Wn+tk
r}|jtjkrqnXdS(s
    Essentially, mkdir -p
    N(	t	dir_permst
startswithtostmakedirstOSErrorterrnotEEXISTtchmodtchown(tdirtnametuidtgidtmodete((s+/usr/lib/python2.7/site-packages/Uptrack.pytmkdirps
cCs2t|d}z|j|Wd|jXdS(Ntw(topentwritetclose(tpathtdatatfh((s+/usr/lib/python2.7/site-packages/Uptrack.pyt
write_filescCs)t|d}|j|WdQXdS(Ntwb(R'R((R*R+R,((s+/usr/lib/python2.7/site-packages/Uptrack.pytwrite_file_binarystrcCs/t||}z|jSWd|jXdS(N(R'treadR)(R*R#R,((s+/usr/lib/python2.7/site-packages/Uptrack.pyt	read_filescKstj|dt|S(NtLoader(tyamltloadtyaml_loader(tstreamtkwargs((s+/usr/lib/python2.7/site-packages/Uptrack.pyt	yaml_loadscKstj||dt|S(NtDumper(R4tdumptyaml_dumper(tobjR7R8((s+/usr/lib/python2.7/site-packages/Uptrack.pyt	yaml_dumpscCsl|j||rdy|j||SWqhtk
r`}d|t||f}td|qhXn|SdS(s
    Return the value of a boolean config option, or `default` if no value is
    given.

    Raise a ResultException on invalid (non-boolean) values.
    saUnable to read %s setting from %s.
%s
Please check that %s is set to 'yes' or 'no' and try again.iN(t
has_optiont
getbooleant
ValueErrortUPTRACK_CONFIG_FILEtResultException(tconfigtsectiontoptiontdefaultR$tmsg((s+/usr/lib/python2.7/site-packages/Uptrack.pytgetConfigBooleanOrDiescCsytjddddgdtjdtj}|jdjdj}|jdkrb|Stjdd	ddgdtjdtj}|jdjdj}|jdkr|SWn:tjtfk
rt	j
d
t	j
tjnX|S(Ntsetarchtlinux64tunames-mtstdouttstderrisutf-8tx86_64s+Unable to determine the kernel architecture(
t
subprocesstPopentPIPEtcommunicatetdecodetstript
returncodetCalledProcessErrorRtloggingtdebugt	tracebackt
format_exc(tuserarchtptout((s+/usr/lib/python2.7/site-packages/Uptrack.pyt
queryRealArchs!!
cCsmtj\}}}}}t|}|dkr<d}n|dkrQd}n||||||f}|S(s;
    Gets the uname, but lies a little, since the arch field is
    actually governed by 'personality' and not the real architecture.

    Note that this returns both the architecture Uptrack is being run
    under, as well as the architecture of the kernel itself (i.e.
    'uname -m' and 'linux64 uname -m').
    ti686ti586ti486ti386(R`RaRb(R`RaRb(RRLR_(tsysnamethostnametreleaseRR\tarchRL((s+/usr/lib/python2.7/site-packages/Uptrack.pytgetUnames			cCsBtdkr>tjatjtjttjtjdtjtjdtjtjdtjtj	d|r|j
rx*|j
D]\}}tj||qWntjtjdtjtjd|r|j
dk	rtjtj|j
n|r>t|dddkr>tjtjdq>ndS(	s6Initialize the shared cURL object for getCurl().

    iitiiXtverboseiN(t__curltNonetpycurltCurltsetoptt	USERAGENTtOPT_FILETIMEtFOLLOWLOCATIONt	MAXREDIRStENCODINGtssl_ca_certstCONNECTTIMEOUTtTIMEOUTtproxytPROXYtgetattrtVERBOSE(RDttypetvalue((s+/usr/lib/python2.7/site-packages/Uptrack.pytinitCurls cCstS(s6Return a shared cURL object for use by Uptrack.

    For performance, this always returns the same cURL object, in
    order to allow libcURL to reuse connections as much as
    possible. In order for this to work properly, callers should
    always explicitly set the HTTP method they desire before calling
    `.perform()`, and should reset any other unusual properties they
    set on the cURL object to a reasonable default value when they're
    done.

    Needless to say, this is not thread-safe.

    You must call initCurl() before using this function.
    (Rk(((s+/usr/lib/python2.7/site-packages/Uptrack.pytgetCurl
scCs||k||kS(sG
    Replacement for built-in function cmp that was removed in Python 3

    Compare the two objects x and y and return an integer according to
    the outcome. The return value is negative if x < y, zero if x == y
    and strictly positive if x > y.
    From https://portingguide.readthedocs.io/en/latest/comparisons.html
    ((txty((s+/usr/lib/python2.7/site-packages/Uptrack.pytmy_cmps
c	Csd}d}x|s!|rxs|r;|djsR|r|djrt||d ||d }|r|S|d}|d}q$Wtjd|j\}}tjd|j\}}t||||}|r|SqWdS(s,Emulates dpkg's verrevcmp() in lib/vercmp.c.cSsN|dkrdS|jr dS|s*dS|jr@t|St|dS(Nt~iii(tisdigittisalphatord(R((s+/usr/lib/python2.7/site-packages/Uptrack.pytorder-s
cSs|s
dSt|S(Ni(tint(ts((s+/usr/lib/python2.7/site-packages/Uptrack.pytnum8siis
^([0-9]*)(.*)(RRRRtgroups(tatbRRtdtantbn((s+/usr/lib/python2.7/site-packages/Uptrack.pyt	verrevcmp+s		1#
cCsd|kr3|jdd\}}t|}nd}|}d|krf|jdd\}}n
|d}}|||fS(s3Emulates dpkg's parseversion(), in lib/parsehelp.c.t:iit-Ri(tsplitR(tvtepochstrtresttepochRtrevision((s+/usr/lib/python2.7/site-packages/Uptrack.pytparseversionMs
cCsUt|\}}}t|\}}}t||pTt||pTt||S(s?Emulates dpkg --compare-versions.  Returns -1, 0, 1 like cmp().(RRR(RRtaetavtartbetbvtbr((s+/usr/lib/python2.7/site-packages/Uptrack.pytcompareversions^stResultcBseZdddZRS(iRicCs^||_||_g|_g|_d|_d|_d|_d|_t	|_
d|_dS(N(tcodetmessaget	succeededtfailedRlRYtalerttdesupportedttray_icon_errorRt	newkerneltuptrack_log(tselfRR((s+/usr/lib/python2.7/site-packages/Uptrack.pyt__init__fs									(t__name__t
__module__R(((s+/usr/lib/python2.7/site-packages/Uptrack.pyRescCs|jdtjtjtjgkr2dt}n|jdtjkr^d|jtf}n|jdtjkrd|j	tf}nc|jdtj
krd}t|j	r|dtf7}q|dttf7}n
dtf}t
j|d	|jd
d}tt|S(Nis-Could not connect to the Ksplice Uptrack server. A network connection is needed to ensure you have the latest list of updates to install. Please check your Internet connection and try again. If this computer does not have direct access to the Internet, you will need to configure an https proxy in %s.sCould not resolve your proxy server (%s) while trying to connect to the Ksplice Uptrack server.  You should check that this machine can directly connect to the proxy server configured in %s.sbMalformed URL <%s> for Uptrack server.  Please correct the value of Network.update_repo_url in %s.s?Could not verify the Ksplice Uptrack server's SSL certificate. shCheck your network configuration, and contact %s for assistance if you are unable to resolve this error.sYou may need to update ssl_ca_cert_file or ssl_ca_cert_dir in %s with the path to an appropriate CA. Please consult %s for assistance if you are unable to resolve this error.sUnexpected error communicating with the Ksplice Uptrack server. Please check your network connection and try again. If this error re-occurs, e-mail %s. s

(Network error: it)(targsRmtE_COULDNT_RESOLVE_HOSTtE_COULDNT_CONNECTtE_OPERATION_TIMEOUTEDRBtE_COULDNT_RESOLVE_PROXYRxtE_URL_MALFORMATt
remoteroottE_SSL_CACERTRt	BUG_EMAILttextwraptfillRtERROR_NO_NETWORK(RDR$RH((s+/usr/lib/python2.7/site-packages/Uptrack.pytresultFromPycurlss,

"RCcBseZdZRS(cCs)tj|||t|||_dS(N(RRRtresult(RRR((s+/usr/lib/python2.7/site-packages/Uptrack.pyRs(RRR(((s+/usr/lib/python2.7/site-packages/Uptrack.pyRCssThe Ksplice Uptrack service has experienced a transient error. Please
wait a few minutes and try again. If this error persists, please
contact %s for assistance.tActionResultcBseZdZdZRS(cCsvd|_d|_||_||_d|_d|_d|_g|_g|_	t
|_d|_|j
|_dS(NiRi(RRtupdatetcommandRlt
abort_codetstack_check_processestnomatch_modulestlocked_modulestusedby_modulesRt
depmod_neededRYtgetCoreVersiontcore_version(RRR((s+/usr/lib/python2.7/site-packages/Uptrack.pyRs											cCsi}|j|d<|jj|d<|jj|d<|j|d<|j|d<|j|d<|j|d<|j|d<|j	|d	<|j
|d
<|S(NtCommandtIDtNametMessagetAbortsCore VersionsStack ChecksNonmatching ModulessLocked ModulessUsedBy Modules(RRtidR RRRRRRR(RR((s+/usr/lib/python2.7/site-packages/Uptrack.pytasDicts







(RRRR(((s+/usr/lib/python2.7/site-packages/Uptrack.pyRs	cCs;tj\}}}}}i|d6|d6|d6|d6S(NtSysnametReleasetVersiontUserArchitecture(RRL(Rdt_RfRR\((s+/usr/lib/python2.7/site-packages/Uptrack.pyt
getKernelDictstStatuscBseZdZdZdZddZeeZedZ	dZ
edZdZdZ
d	Zd
ZdZRS(
cCsm||_tjj|d|_tjj|d|_tjj|d|_tjj|d|_dS(Ntstatustresultstupgrade_plansresults.server-stamp(t	statusdirRR*tjoint	statusloct
resultsloct
upgradeloctstamploc(RR((s+/usr/lib/python2.7/site-packages/Uptrack.pyRs
	cCsoy)t|j}t|}|jWntk
r}|jtjkrtjj	drhd}nd}i}i|d<d|dd<d||dd<|S|jtj
krdSi}i|d<d|dd<d	|jtj|jf|dd<|SnXy6t|j
}t|}|j|j|Wntk
r}|jtj
krlg|d
<qg|d
<i|d<d|dd<d|j
tj|jf|dd<|SnXy6t|j}t|}|j|j|Wnutk
rj}i|d<|jtj
kr2d
|dd<qkd|dd<d|jtj|jf|dd<nX|S(Ns/etc/debian_versionssudo adduser $USER adms(gpasswd -a <your username> adm (as root)RitCodesPermission denied reading the status file.  You need to be in the adm group in order to use the the Ksplice Uptrack Manager; you can add yourself by running

%s

You will need to log out and back in for this change to take effect.Rs#Error reading status file (%s): %s
tPlanis$Error reading upgrade plan (%s): %s
iis$Error reading results file (%s): %s
(R'RR9R)tIOErrorRtEACCESRR*texiststENOENTRltstrerrorRRR(RtfRR$trecommendationtupgradeR((s+/usr/lib/python2.7/site-packages/Uptrack.pyt
readStatussd	

$



$

(c	Csptjj|}tjj|s4tj|nt|d}t||dddtdt|jdS(NR&Ritexplicit_starttexplicit_end(ii(	RR*tdirnametisdirRR'R>R
R)(RtcontentstfileRR((s+/usr/lib/python2.7/site-packages/Uptrack.pyt
_writeFiles
c	CsAi|d<t|dd|dd<t|dd|dd<|j|dd<|j|dd<|jr}|j|dd<n|jr|j|dd	<n|j|dd
<t|dd<y"tdj	d
|dd<Wn2t
k
rtjt
jd|dd<nXy6tttjj|jdj|dd<WnWt
k
r}|jtjkr{d
|dd<qd|dd<tjt
jnXtrt|dd<n|j|dd<d|jkr|jd|dd<n|jd|dd<i|dd<t|dt|ddd<t|dddk	rit|d|ddd<nt|dt|ddd<t|dd<t|d d}|dk	r||dd!<ni|dd"<xd4d5gD]\}}i}yttj||d'<Wnt k
r.d6|d'<nXytj!||d(<Wnt k
rcd)|d(<nX||dd"|<qWi|d*<|j"|d*d+<|j#|d*d,<|j$|d*d-<|j%|d*d.<|j&|d*d/<|j'r|j'|d0<n
|j(|d1<|dk	r=|j)}|dk	r0|d2}n||d3<ndS(7NtClientRetHostnametfullhostnametFullHostnametKeytUUIDtNewUUIDtOldUUIDtCPUInfotUptrackVersions/proc/uptimeitUptimeit
reboots_savedtRebootsSavedt
VirtualBoxtVMInfotIPtLocalIPRt
LocalIP_errortConfigtcron_autoinstalltAutoinstalltinittInittcrontCrontMmapMinAddrtserial_statt
SerialStattToolstDepmods/sbin/depmodtModprobes/sbin/modprobetStattLinkRitKernelRRRtArchitectureRtRunUUIDt
RunUUID_errortPackageVersiontClientEffectiveKernel(Rs/sbin/depmod(Rs/sbin/modprobe((*RzRlt	accesskeytuuidtnewuuidtolduuidtcpuinfot__version__R2RRRXRYRZR[tlenR'RR*Rt	localroott	readlinesRRtinVirtualBoxR
tvminfotlocalipRtgetMmapMinAddrttupletstatRtreadlinkRdRfRRgR\trun_uuidtrun_uuid_errortgetEffective(	RDRtlocal_statusR$R
tkeyR*tvalt	effective((s+/usr/lib/python2.7/site-packages/Uptrack.pytaddIdentity#s
		"
!	


	

c
Csi}t|d<tjj|d<|sE|j|j|d|ni|d<g|dd<t|}|jddxC|D];}i}|j|d<|j|d	<|ddj	|qW||d
<|rt
}	n	|j}	tt
jj|	|j||	dS(NsStatus format versiontTimeR-tUpdatest	InstalledR.cSs|jS(N(R(tu((s+/usr/lib/python2.7/site-packages/Uptrack.pyt<lambda>zsRRs
New client(tSTATUS_FILE_FORMAT_VERSIONtdatetimetutcnowR1t
client_configtlisttsortRR tappendtUPTRACK_EM_STATUSRR%RR*RR(
Rtlocalt
new_clienttinstalled_updatestpublicRtinstalled_sortedR5Rtoutfile((s+/usr/lib/python2.7/site-packages/Uptrack.pytwriteStatusos(





		cCsi}t|d<tjj|d<|j|j|d|i|d<g|dd<x2|jD]'}|j}|ddj|q^Wg|dd<x2|jD]'}|j}|ddj|qW|j	|dd<|j
|dd<|jdk	r
|j|d	<n|j
dk	r,|j
|d
<n|jdk	rO|j|dd<n|jdk	rr|j|dd<n|jdk	r|j|dd
<n|jrt|dd<n|jjrt|dd<n|j||jdS(NsResults format versionR2R-Rt	SucceededtFailedRRtDebugt
UptrackLogtAlerttDesupportedt
TrayIconErrors
New KerneltUninstalled(R7R8R9R1R:RRR=RRRRYRlRRRRRR
t	uninstallRR(RR?tresRtactionR((s+/usr/lib/python2.7/site-packages/Uptrack.pytwriteResultss<

	cCsi}t||jd<tjj|d<g|D];}tgd
D]"}||krD|||f^qD^q4|d<|rtjjtd|d	}ntjj|j	|d	}|j
||dS(Ns plan format versionR2RRRtEffectiveKernelRtkernel_t_plan(sCommandsIDsNameRR(R7ttitleR8R9tdictRR*RtUPTRACK_EM_STATUS_DIRRR(RR tactionsRBtplantacttkRD((s+/usr/lib/python2.7/site-packages/Uptrack.pyt	writePlansI cCs*|jd||jd|dtdS(NRRB(R\R
(RRY((s+/usr/lib/python2.7/site-packages/Uptrack.pytwriteUpgradePlanscCs|jd|dS(NR(R\(RRY((s+/usr/lib/python2.7/site-packages/Uptrack.pyt
writeInitPlanscCs|jd|dS(Ntremove(R\(RRY((s+/usr/lib/python2.7/site-packages/Uptrack.pytwriteRemovePlanscCs2i|d6td6|d6}|j|tdS(NRRtOriginalKernelR4(RRtUPTRACK_EFFECTIVE_KERNEL_FILE(RR0tidsR^((s+/usr/lib/python2.7/site-packages/Uptrack.pytwriteEffectiveKernelscCsyt|j}Wntk
r'dSXt|d}y)tt|j}||kr`dSWnttjtfk
rnXtj	|j
tjd}t
}|jtj|jd|jtjd|fg|jtjd|jt|t|jddS(NR2Rs
ISO-8859-1cSsdS(N(Rl(R+((s+/usr/lib/python2.7/site-packages/Uptrack.pyR6sR&(R2RRR9RR4t	YAMLErrort	TypeErrort	posixpathRtremoteRtquoteRRoRmtURLtencodetHTTPPOSTt
WRITEFUNCTIONtperformR>R'(RRDRtresults_timet
stamp_timet
status_urltc((s+/usr/lib/python2.7/site-packages/Uptrack.pytsendResultToServers&
	
N(RRRRRRlR1tstaticmethodRRERQR\R]R^R`RdRs(((s+/usr/lib/python2.7/site-packages/Uptrack.pyRs		<		J	!
				tLocalStatuscBskeZdZdZdZdZdZdZdZdZ	dZ
d	Zd
ZRS(cCsI||_|j|_t|_t|_d|_||_	||_
dS(N(R:R?Rtsett	installedRR@Rlteffective_kerneltremote_repotlogger(RRDRyRz((s+/usr/lib/python2.7/site-packages/Uptrack.pyRs				cCsg}xctjdD]R}ttjj|djdkr|jtjd|j	dqqWxTtjdD]C}t|jdkr||jtjd|j	dq|q|W|S(Ns/sys/module/ksplice_*/ksplicetstagetapplieds"^/sys/module/ksplice_(.*)/ksplice$is/sys/kernel/ksplice/*/stages ^/sys/kernel/ksplice/(.*)/stage$(
tglobR2RR*RRUR=RRtgroup(Rt
installed_idsR((s+/usr/lib/python2.7/site-packages/Uptrack.pytgetInstalledIDss'cCsS|djd\}}}}i|d6|d6|d6|d6|dd6|_dS(	Nit/RRRRiR(RRx(RR0RdRgRfR((s+/usr/lib/python2.7/site-packages/Uptrack.pytsetEffectivescCs|jdk	r|jSy)ttd}t|}|jWnttjfk
r\dSXyat	|dkrwdSt
|d}t
|j}||krdS|d|_|jSWntt
fk
rdSXdS(sReturns the effective kernel, either as set in this run or as
           loaded from disk.  Returns None if the effective kernel cannot
           be determined.R0RaR4RRN(RxRlR'RbR9R)RR4ReRRvRRftKeyError(RRR0twere_installedt
now_installed((s+/usr/lib/python2.7/site-packages/Uptrack.pyR,s&
cCs[g}x<|jD].}|jj|}|r|j|qqWt||_|jS(N(RRyt
idToUpdateR=RvRw(Rtlist_installedRR5((s+/usr/lib/python2.7/site-packages/Uptrack.pytgetInstalledUpdatesscCs@x9|D]1}|jj|d|d<|dj|d<qWdS(s:Augment a plan we read or downloaded with some extra info.RtUpdateRN(RyRR (RRYRZ((s+/usr/lib/python2.7/site-packages/Uptrack.pyt
unpackPlan#s
cCsPttjj|j|dd}t|d}|j|j||S(NRTR0R(R'RR*RRR9R)R(Rt
which_planRRX((s+/usr/lib/python2.7/site-packages/Uptrack.pytreadPlan)s
%

cCst|j}tjdy|j|j}|j||j||j||j|dt|dk	r|j
dkr|jj|_
n|j||n|dk	r|j|n|dk	r|j|n|dk	r|j|n|jdk	r9|j|jg|D]}|j^q nWn2tk
rntjdtjtjtSX|jjr
|s|j
s|j
tttfkr
tjdy#|dk	r|j|jnWq
tk
r	tjdtjtjtSXntS(NsWriting status to file.RBis Unable to write out status filessSending result to server.s*Unable to send status to management server( RRRXRYR,RRER@R
RlRRztgetDebugLogRRQR]R^R`RxRdRRtwarningRZR[RR:tallow_no_netRtERROR_INVALID_KEYtERROR_MISSING_KEYRs(RRORt	init_plantremove_planRRwR5((s+/usr/lib/python2.7/site-packages/Uptrack.pytwriteOutStatus0sJ

0





cCs
|jdS(NR(R(R((s+/usr/lib/python2.7/site-packages/Uptrack.pytreadInitPlanZscCs
|jdS(NR_(R(R((s+/usr/lib/python2.7/site-packages/Uptrack.pytreadRemovePlan]scCs
|jdS(NR(R(R((s+/usr/lib/python2.7/site-packages/Uptrack.pytreadUpgradePlan`s(
RRRRRR,RRRRRRR(((s+/usr/lib/python2.7/site-packages/Uptrack.pyRus						
			*		tPackageListcBseZddZRS(cCs?|dkrt|}n||_d|_d|_d|_d|_d|_d|_d|_	d|_
|d|_|dd|_|d}|d|d|d|_|_|_|djd	d|_
|djd
d|_	g|_i|_
x7|dD]+}|jj|d||j
|d<qWdS(
Nt0sProtocol versionRsKsplice Tools API versionRRRRsVersion to ParsesVersion to InstallR3R(RlR9tpackage_list_yamlterrortprotocolVersiontkspliceToolsApiVersionRfRRgtclientVersionToInstalltclientVersionToParsetgetRctpackageDataR=(Rttexttpltkerntitem((s+/usr/lib/python2.7/site-packages/Uptrack.pyRes,									

)		N(RRRlR(((s+/usr/lib/python2.7/site-packages/Uptrack.pyRdsc
Cs*z|ryEttj|j}|jtj||jtjtjWqt	k
r{}|j
t
jkr|q|qXn|r|}n	t}|jtj
|jd|jtjd|jtj|j|j|jtj}|dkrttjj|yt||jWn[tk
r}ytj|Wn.t	k
r}	|	j
t
jkr|	qnX|nX|jtj}|dkrtj|||fqn>|dkr|dkrtjd|tj|jn|SWd|jtjtj XdS(	sDownloads a file to disk with PycURL.

`c` - A pycurl.Curl() object. You probably want getCurl().
`url` - URL to download.
`filename` - Filename to download to.
`ifmodified` - If `filename` exists, only re-download it if the server's
               copy of `url` is newer (i.e., do the If-Modified-Since / 304
               Not Modified thing).
`bytesio` - A (c)BytesIO object that will be used to read content
             from the server. This can be useful if a caller needs the
             content of the response even if the server doesn't return
             a 200 OK.

Returns the HTTP response code; if you want more information, use
c.getinfo().

Raises non-ENOENT errors from os.stat, and any error from pycurl.
s
ISO-8859-1iiiiis"The server returned error code %d:N(!RRR(tst_mtimeRoRmt	TIMEVALUEt
TIMECONDITIONtTIMECONDITION_IFMODSINCERRRRRjRktHTTPGETRmR(Rntgetinfot
RESPONSE_CODER%R*RR/tgetvalueRR_t
INFO_FILETIMEtutimeRXRYtTIMECONDITION_NONE(
RrRtfilenamet
ifmodifiedtbytesiottR$R7trcodetee((s+/usr/lib/python2.7/site-packages/Uptrack.pytdownloadsH
		


t
UptrackConfigcBseZdZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZ
dZd
ZdZdZdZdZRS(cCst\|_|_|_|_|_|_d|_t	}y|j
tgWn)tk
r~}t
dd|jnX||_|j|j|j|j|j|j|j|j|j|jd|_dS(NisUnable to parse config file: (RhRdt
orig_hostnameRfRRgR\RlReR	R1RBtConfigParserErrorRCRRDtsetMisctsetProxytsetSSLtsetOCIRegiont
setRemoteRoott
setLocalPathst
setCPUInfot
setModulest	setVMInfotsetIPtremovableModules(RRDR$((s+/usr/lib/python2.7/site-packages/Uptrack.pyRs&-			









cCsi}d}yxtdjD]t}|jdrz|jddd}||krm||cd7<qzd||<n|jdr"|d7}q"q"WWn3tk
rtjtjddg|_	nFX|ikrd|g|_	n't
|jt|j
g|_	dS(Nis
/proc/cpuinfosphysical idRis
processor	(R'R"RRRRXRYRZR[RR tkeystsumtvalues(Rtsocketst
processorstlinetpid((s+/usr/lib/python2.7/site-packages/Uptrack.pyRs"

cCsg|_yex^tdjD]J}|jdd!\}}|jdrSqn|jj||gqWWn$tk
rtjt	j
nX|jjdS(Ns
/proc/modulesiitksplice(tmodulesR'R"RRR=RRXRYRZR[R<(RRR tsize((s+/usr/lib/python2.7/site-packages/Uptrack.pyRs	
cCsd}y>tjdgdtj}|jdjdj}Wn#tjk
ritddnXy+t	t
jjt
tt
|dWn:ttfk
r}tddt
d	t|nX|S(
NtuuidgenRMisutf-8is&Unable to generate a new Uptrack UUID.s
s&Unable to write the Uptrack UUID file s:
 (RlRPRQRRRSRTRURWRCR%RR*RtUPTRACK_UUID_FILER-RRtstr(RRtprocR$((s+/usr/lib/python2.7/site-packages/Uptrack.pytnewUUIDs#cCstjdgdtjdtj}|jdjd}|jdkritjdtj|nyBt	j
t	jj|j
dt	j
t	jj|j
dWntk
rnXdS(	Ns#/usr/lib/uptrack/regenerate-crontabRMRNisutf-8sError regenerating crontab.sbackoff-countertbackoff(RPRQRRtSTDOUTRSRTRVRXRYRtunlinkR*RR!R(RR]toutput((s+/usr/lib/python2.7/site-packages/Uptrack.pytregenerateCrons	
#
cCsyt|jd}Wntk
r0d}nX|t|dkrt|jdt|dt|jdttjd|dndS(Ns/backoffs
s/backoff-counteri(R2R!RRlRR-trandomt	randrange(RRtold((s+/usr/lib/python2.7/site-packages/Uptrack.pyt
updateBackoffs


cCs|jjddr|jjdd}ySt|j|_|_|js|tjdtjdt	j
dnWqttfk
rtjd|ftjdt	j
dqXnI|j
|_ytj|jd|_Wntjk
rd|_nXd	S(
s]
        Adjust `hostname` if hostname_override_file is set, and set `fullhostname`.
        tSettingsthostname_override_files%You must supply a non-empty hostname.sLPlease check the hostname_override_file option in /etc/uptrack/uptrack.conf.is Unable to read hostname from %s.iRiN(RDR?RR2RURReRXRtsystexitRRRtsockett
gethostbyaddr(RR((s+/usr/lib/python2.7/site-packages/Uptrack.pytconfigureHostname)s"	


cCs@d|_d|_|jjddrB|jjdd|_nd|_d|_d|_t	|jddt
|_t	|jddt|_
t	|jddt|_d|_d|_yAtjd	gd
tj}|jdjdj|_Wn#tjk
r&tj|_nXtjjd
|_dS(Ns/var/lib/uptrack/lockRitAuthRRtdebug_to_servertuse_hw_uuidtno_rmmodRRMisutf-8s/etc/redhat-release(tlockfileRRDR?RRlRRRRIR
RRRRR*R+RPRQRRRSRTRURWRZR[RR*Rt
rh_derivative(RR]((s+/usr/lib/python2.7/site-packages/Uptrack.pyR@s*							&cCsd|_d|_d}|jrQ|jjdj}|dkrQd}qQn|dkryattj	}yt
ttj	|_Wn)tk
rt
tjt|_nXWqttfk
rqXn|s|j}n|j||jdS(NiRs$00000000-0000-0000-0000-000000000000(tserialRlR
RR$RtlowerR2RRURtUPTRACK_SERIAL_FILERAR'RR(RRRtsetUUIDR(RR((s+/usr/lib/python2.7/site-packages/Uptrack.pytinitWithLock]s(			
 
cCs|j}|jd7_y5td}t|d|jftj|tWnEttfk
r}tjddt	t
ddt|fnX|S(sj Increment self.serial and write the result to disk.

        Returns the previous serial number.
        is.tmps%d
sUnable to store new serialtexc_infos6Unable to increment the Uptrack serial number (%s):
%s(RRR-RtrenameRRRXRYR
RC(RRttmp_serial_fileR$((s+/usr/lib/python2.7/site-packages/Uptrack.pytincrementSerialys	
cCsEd|_|jjddrm|jjddj}|rm|jdkr]d|_n	||_dSnx:dddgD])}|tjkr}tj||_dSq}Wt	|jddt
}to|sdSy[tj
}|jd	r,|jd
}|jd}d|d
t||_nWntk
r@nXdS(s Set self.proxy based on config and the environment.

        Set self.proxy to the value of a proxy server to use to talk to the
        Uptrack server, based on the config file, the envrionment, and the
        global GConf database if available.

        Upon return, self.proxy will be set in one of three ways:

        - None: No proxy setting was detected. Uptrack will let pycurl attempt
                to choose a proxy based on its own defaults.
        - '':   The user explicitly requested that no proxy be used. Uptrack will
                force pycurl not to use a proxy.
        - Any other string: The URL of an HTTPS proxy server to use with
                the CONNECT method.

        In order to allow the user to explicitly specify "no proxy" globally, we
        accept the value 'none' (case insensitive) in the Network.https_proxy
        setting in uptrack.conf, and translate it to self.proxy = ''. An empty
        setting is taken to be unset, and will result in self.proxy being None.

        (Note that, confusingly, this means that "Network.https_proxy = none"
         corresponds to self.proxy = '', and vice versa.)
        tNetworkthttps_proxytnoneRiNtHTTPS_PROXYt
http_proxytgconf_proxy_lookups!/system/http_proxy/use_http_proxys/system/http_proxy/hosts/system/http_proxy/portshttp://R(RlRxRDR?RRURRtenvironRIR
t
have_gconftgconftclient_get_defaulttget_boolt
get_stringtget_intRR(RRxR.tenable_gconftclientthosttport((s+/usr/lib/python2.7/site-packages/Uptrack.pyRs0		"
cCsg|_|jjddrI|jjtj|jjddfn|jjddr|jjtj|jjddfndS(NRtssl_ca_cert_filetssl_ca_cert_dir(RuRDR?R=RmtCAINFORtCAPATH(R((s+/usr/lib/python2.7/site-packages/Uptrack.pyRs	cCsd|_d|_t|jddtr;tjddSy^tddI}|j	j
dj}d|jkrtjd|dSWdQXWnt
k
rtjd	dSXytjd
t}tj}|jtjt|jtjd|jtjd|jtjd|jtjd
|jtjdjd|jtjd|jtj|j|jtjd|jtjdg|j|jtj }|dkrd|j!}t"j#|}y?|dd|_|dd|_tjd|j|jWqtt$k
r`tjdtjd|qtXntjd|Wn$t
k
rtjd
ddnXdS(NRtbypass_oci_region_reposBypassing OCI region checks-/sys/devices/virtual/dmi/id/chassis_asset_tagtrbsutf-8toracleclouds'Chassis tag is "%s". Not an OCI system.s4Unable to find chassis_asset_tag. Not an OCI system.s)We are an OCI system. Determining region.iiRis'http://169.254.169.254/opc/v2/instance/s
ISO-8859-1sAuthorization: Bearer Oracleit
regionInfotregionIdentifiertrealmDomainComponents"OCI host running in %s (domain %s)sUnable to determine OCI region.sMetadata contents:
%ssMetadata response: %sR(%Rlt
oci_regiont
oci_domainRIRDRRXRYR'R1RTRURRRRmRnRoRpRqRrRsRtRjRkRRmR(Rwt
HTTPHEADERRnRRRtjsontloadsR(RRRR7RrRtmetadata_stringtmetadata((s+/usr/lib/python2.7/site-packages/Uptrack.pyRsX		



	



cCst|_|jjddrN|jjddj}|rN||_qNn|jrtj|j}t	j
d|drd|j|jf}tjd|f|d|_t
jd|jqndS(	NRtupdate_repo_urls0.*\.(ksplice|oracle|oraclecloud)\.com(:[0-9]+)?$isupdates.ksplice.%s.oci.%sthttpsis"Region-local remote root set to %s(RRRDR?RRURRRRRRt
urlunparseRXRY(RRhRtregion_host((s+/usr/lib/python2.7/site-packages/Uptrack.pyRs		 cCs=t|_tjj|j|j|j|j|j|_	dS(N(
tUPTRACK_CACHE_DIRR!RR*RRdRgRfRR?(R((s+/usr/lib/python2.7/site-packages/Uptrack.pyRs	cCsC||_tj|jtj|jdtj|j|_dS(Ns+uuid(RRgRRRRiRRh(RR((s+/usr/lib/python2.7/site-packages/Uptrack.pyR's	cCs"t|dst|_ndS(NR$(thasattrt	getVMInfoR$(R((s+/usr/lib/python2.7/site-packages/Uptrack.pyR-scCst|jddtr,idd6|_dSy"|j}|jrM|j}ntj|}|jr|jdrtjd|}n|j	r9t
j|j	}tj
dd	d
|gdtjdtj}|jd
jd}d|kr"i||jdjdd6|_qMid|d6|_nid|d6|_Wn9tk
r}idt||j	|fd6|_nXdS(s.
        Set localip to a dictionary of the form {"IP": "X.X.X.X"}.

        If the suppress_ip config option is enabled, set a dummy
        address. Otherwise, try to get it from the 'ip' command. Upon failure,
        set localip to an error dict of the form {"Error": "error_msg"} instead.
        Rtsuppress_ips0.0.0.0RNs://shttp://tiptrouteRRMRNisutf-8s src is/Could not parse IP address from route data (%s)Rs4Could not parse hostname out of remote or proxy (%s)s%s (host = %s, uri = %s)(RIRDRR%RRxRturlsplittcontainsReRt
gethostbynameRPRQRRRRSRTtindexRRR(Rturit	split_urltremoteipR]t	routedataR$((s+/usr/lib/python2.7/site-packages/Uptrack.pyR1s*			*(RRRRRRRRRRRRRRRRRRRR(((s+/usr/lib/python2.7/site-packages/Uptrack.pyRs$						
					7			:				cCscyEx>tddD]-}|j}|ddd!dkrtSqWWnttfk
r^nXtS(Ns/proc/bus/pci/devicesR0iiit80ee(R'RR
Rt
IndexErrorR(Rtfields((s+/usr/lib/python2.7/site-packages/Uptrack.pyR#UstTimeoutExceptioncBseZRS((RR(((s+/usr/lib/python2.7/site-packages/Uptrack.pyR+bscCstdd}tj|dtjd|}tj|jggg|dr|j}|dkr|jjjdj	Stj
||n|jtdS(Ns	/dev/nullR&RMRNisutf-8(
R'RPRQRRtselectRMtwaitR1RTRURWtkillR+(Rtoutput_timeouttdevnullRt	exit_code((s+/usr/lib/python2.7/site-packages/Uptrack.pyt
call_timedfs"
cCsTi}tdd}ytddgd|d<WnFttjfk
r`}t||d<ntk
rzd|d<nX|jdd	krRd
|d<|d=trEyOtdd
gdj	d|d<y|dj
d	Wntk
rnXWqOttjfk
r'}t||d<qOtk
rAd|d<qOXqkd|d<nd|krkd|d<nd|kryftdd}|jj
|d<WdQXtdd#}|jd|jj
WdQXWqtttjfk
r}t||d<qXny ttdj|d<Wntk
rOd|d<nX|S(s;Find the UUID of this machine and of any VMs it is hosting.s	/dev/nullR&tcats/sys/hypervisor/uuidiRt	xen_errors=Read of /sys/hypervisor/uuid timed out; is xenstored running?s$00000000-0000-0000-0000-000000000000sXen dom0R|s
xenstore-lists/vms
tchildrens3xenstored-list /vm timed out; is xenstored running?sxenstored isn't runningsXen paravirt domUs/sys/class/dmi/id/product_uuidR0Ns/sys/class/dmi/id/product_nametdmidecode_errors/proc/vz/veinfotnum_containersi(R'R2RRPRWRR+Rtxenstored_is_runningRR_RAR1trstript
setdefaultRR R"(R$R0R$RR ((s+/usr/lib/python2.7/site-packages/Uptrack.pyRtsL

	"



& 
cCsDd}x7|dkr?tdr%tStjd|d8}q	WtS(Niit	xenstoredi(tproc_is_runningR
ttimetsleepR(ttimeout((s+/usr/lib/python2.7/site-packages/Uptrack.pyR8s
cCs4x-tD]"}|tjj|kr
tSq
WtS(N(tprocess_listRR*tbasenameR
R(R R((s+/usr/lib/python2.7/site-packages/Uptrack.pyR<scCst}gtjdD]}|jr|^q}x|D]}ymttjjd|ddj}|jd}|r|dj}|r|j	|dqnWq>t
k
rq>q>Xq>W|S(Ns/proctcmdlineR
ti(RvRtlistdirRR'R*RR1RtaddR(t	processesRtpidsRBR ((s+/usr/lib/python2.7/site-packages/Uptrack.pyR@s	.
'
cCs4ytdj}Wntk
r/d}nX|S(s4Return the value of `mmap_min_addr` on this machine.s/proc/sys/vm/mmap_min_addrN(R2RURRl(t
mmap_min_addr((s+/usr/lib/python2.7/site-packages/Uptrack.pyR&s


(vtioRR8RR}tgrpRRXRtos.pathRgRmRRR,RR(RPRRR=RZR4RR6RR<tImportErrorRRtuptrackRtsix.moves.urllibRRR
RRtversion_infotsix.moves.configparserRR	RRtconfigparserRR7RpRtUSE_SERVER_RESOLVERRBRRRRWR>RRbtERROR_GENERIC_ERRORRtERROR_INTERNAL_ERRORtERROR_USER_NO_CONFIRMtERROR_UNSUPPORTEDRtERROR_TOO_OLD_INSTALLtERROR_TOO_OLD_PARSEt
ERROR_EXPIREDtERROR_INTERNAL_SERVER_ERRORtERROR_MACHINE_NOT_ACTIVATEDRtERROR_SYS_NOT_MOUNTEDtERROR_MALFORMED_YAMLtgetgrnamtS_IRUSRtS_IWUSRtS_IXUSRtS_IRGRPtS_IXGRPRRR%R-R/R2R9RlR>RIR_RhRkR~RRRRRtobjectRRRRCtserver_error_exceptionRRRRuRRRR#R+R2RR8R<R@R&(((s+/usr/lib/python2.7/site-packages/Uptrack.pyt<module>s



	
+										"			*	B	
		?