From 2b20f13cc99f1257d4945cb190a9128e41697cd6 Mon Sep 17 00:00:00 2001 From: alokgoswami-ag Date: Fri, 24 Oct 2025 14:57:27 +0530 Subject: [PATCH] refactor exception handling --- __pycache__/constants.cpython-312.pyc | Bin 0 -> 691 bytes __pycache__/monitor.cpython-312.pyc | Bin 0 -> 56046 bytes monitor.py | 99 ++++++++++++++++---------- 3 files changed, 60 insertions(+), 39 deletions(-) create mode 100644 __pycache__/constants.cpython-312.pyc create mode 100644 __pycache__/monitor.cpython-312.pyc diff --git a/__pycache__/constants.cpython-312.pyc b/__pycache__/constants.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1a06b7a535c03fc4395719d868319ab8392cf4ee GIT binary patch literal 691 zcmbtSPixyS6qlQ}``3)nF$(J_fgMH??+4}CS;$Q8!X|n#y25GrqLUzvgj8cFK>xKJ&wh_uz%21Bc^rrWdlK>|uY75d1NtU5dR9g|Fc08kq<(Lyz zsQ+{UYj=Io960uoKQ`f!KXUqujkmVp_f6|vU2P5zyG9@S4(!A35Y}f~ui)4pIIx!d z4Q#)8KY-5I9NLcGvn>nu4o%zgq2t)jqP1iimp-4tc{K(^YH%t@8VF1>Pkw=HLMFIIXN%kWDTz)KbinRO%WA;*Q@Q+T oD2h_H%(G^BUpw0SOrW{pYqoKUi4Gp|h*8Zz2#oP?86GV48O=g^jR z<8bzD_WN%=0W=@7J;`KKByLq#-FxfaTUGb}|L=d?f0>t;YruAZFBmNO)L{5C`k`zV z`QWo}84ZRv4V-~94jax%d*eAH`)xXB!rnA&9ABsMq_$v7zGBEzw8#xP)} z0`g|Zo_>E8m!7jRY358xOH3X|1D;*N%$eiJ@}5a5(`~reYA__N4ns_>X-Iirq%15= z;2Ch%_jBHpb0u>UIYTyG2Kn$kd2ci%a_F5nWw00~4Yh`td_RL>h+4U3(_Lk6@#@Q$ zO?3wTMA8<^Q_gd?g!L^0XHVGPGJM;jy(bB4!h8*P;_G#J9SIBa=6>6(<%_wMnua{e zk+x6hY8-XxYI15deARFk-$>GS({}qEX@A{#-EhNv)^Obza`pY3hUw?j=bzKyANV=l z@Lf|T=amRQczH5oqenP45sTZqVzJ1`cq|xq1TTjNha+5PFzz}TiSd(zqgR51qrtc{ z7>x{!jdIb}*4B94vG9!`kIRFRDE8rjs}Zg>crxSNc~IUSKD)p3!kK7< zk6!2+9=mpMEP6dWGI(K}9~+7c#4ZdBwv3F84#viC^D8a*1ja_f)UFHi+1ByNj8pDa zKeeR_b<;zP{s74>!+lrYt%K=Y=dGR-i8m6n z`{%6-{8C`wRBzhlUv|}tuKFd{hP1Ej>&JiLF!)2i`aIWAP_pa^iJs8=+n1Ynip@I( z_pVHhXzL7h#^%GC^r=CKgXxEZwciL0kb>)~o$f@1eY5gG7 zW!tya`r%e9ehjFeFEZuekA335#7Fw30iP{SNZXM5i796chJ=AW_M|apRn8@hoRKrV zZ&p8KQ^GVvwXWGX%e6*4bmPh1sDXmIc6IM*QJ$NQG zffi|XDMv|L!WK2&_Hua%+baef1roNQ66LD4=kk?0xg5I8<rvSg%l<85_#y~cJwbFqngiJYft2Vfl+-@-gTp@ zjO^|Ab?}n)906G|p za6w{_f@7CK7KbC@XoTfEz|;J~(j6wgv7#GO|x_h4Qf9_<@^M`s~Se2C~LvRMTQN|pdjAks68-p>P z2vf#>d2p2L4-XG#a-v{UMz3V7(edFyFcNeD42OKjee!KHx$H997>V*k$ay~{G&yH1 zLs4)f?!%{!_jQ8@;v#GuLLOo}*fZvdaPlq-Z90ydN1xBIqhlFC3T| zI)Qt|!hEcs-W0x;oe%fN!dEhR>Qf+|B9pKEBsL~vWv$CtXvbHeT$CCrGc@XsCut|+ zy&Q=RTq5t3+qj?B+#h!-}_T*}GZvZl1p)dUsFlUkTLAZl0T1xU>}L0te#`EW2w( zckOI+(cJ_FL@3^|(D=_<{-kB0N+>$C{zL5S+3h7*6q1lc=weLD#W_J>0>MPo8~L-P6*GxxKw|3x-T85UkW8zDz&`%8e==ad<_+>zc-hw-aY3LIaJ9H>{$-yqS_KRRwvk~Q-)Ap z{P{@4n_ocFOK=0NHFt_g}Er-K_?(_V0y=-4nc7w!c*<+=Vkhd zqS{>SxHK_1%+cvg9;K{_5IOmbeIho{&o0;pqcPnPP01Ora*jk)$bF#d657Ekh!S~S zGuwKk*_Pdp)yAJkrjz)K{sEF(hR^K=Pua}o*@^i}OYR-FdeauyvZX?_R4iGl6wz$^ z+q>`VPI*GN4yFASGee?3BsA?7{d;a5`;?~Epy&?HRtTHAQ|_Kyz4zULZ-wTn=T9z` zZWrC#QKOotH09oi-zC+{B~4;U)7-XH$!5V)l+G`jj=nZ5l(mTYEx3o%FIfDap>>9g zb6~K4XzWsdY;ru3$$=~lre@V=NirS#EJtzhCgeHJNb*b6iX#(~(0n?+n{uz&B)I1k zm6Rm9C*`-&YkkTvnG>?b#Z@o$b0?3#K#W50mGJOHBzOrt78e{F4GxTrjL>^c)G-+5 zuS^i#4JzHrWpz9k=EHb>BYY?ONl#JN^+t(P2zAO;<9m2QrBs2waay%fRh_}-StC)C z(rlJp;s%WIcrDu3aux5}7(dx|CE5nO;mY7>3*ZNQ9kDiWY|*xiX*?WnT9c73w~P;m zWAuu)fIXNPjzy*XeIXMMG|iB49X`IV|LCEQjl}wacwA=) z#sDtRU$h$uxC6hz?wcN1w3UGV?O&{DTX7dJyX!@Fz0hz(bRQAyN74@ejAhYLuDfzl zbe|OLCm)y%xfT2csxd2UU}v*CU<36ky;907xz&(-A`bYTTrvr&K>w7oK>UoSfb_Ma zr`Lh}oi!No?<+Vbp<)m-RG2}B_hq344DV}6nzWf8xTR?g44`6xLxe-E**G172f@XZ zG~F~!qOG*o;dIvc|H591qcq2n_z(_W=Ep{YVZ42#mj|x|FN5E1ee?^=GWAm??FHVi zl?;yJm6wal@{0DFa)Sf0&S1BCPu(5q?!XC2qycYF8Kt(-B+<$moH6o!@p`>b03n14 z1xy~&n$RgpGr;XEW8;xgX->D$oSv~AKgBBGcVX~&V(9tJlx#r~GGk`adY8$Oen_k@ zO-K0pq&L|~bwOC5;o`4RdHh93kl;lw%CY)a@(QM#X9kw?YG$vk6qdYs_KmYMUrrS^ zPaXJAW1n1`}$q=LsHgl=G*A{2fd7&K0}! zb^B}f>4MjtuQ~tnffZREMoGH*s%xj=e=2G<|Dj{2;g77_ZGUXpX;?7tH2l+&eMa*K z{@Six<_~sRaZDeZx~Vg46He(FpKN%V!sMJXylbSd-GVY1^XS<1cMa^LlLo~D$+CZ7 zg6A<0N&>(*^8F3`Md@X|WdPsz`mWb@ePfScDOvxqQl&J=pApr4Qj7GTZxXB-m=RNa zn7t+YrPnALl%_;_nee_v*vllnODtQKshNmzr(En&FECZb%JWCjOnEGLqP*ZXEK~!e zFp`|v2t;X^m6s-8I!_dW^6^B$rtlXf(F!EH*xm+!hL^{9yA@~h=}fW!@Lm>3Fj1h~ z#b~(QgAvUKqvM{mP1>Fc1oMKH*pl9x-bs(Ne<~16D^;MD^0TfZ8B*ae<&43=KrpS8 zS1F}}V7~ajV_)9ENGuvWH9mP|I2?^01;|5!1dtadOyKK^5@IxPHF!1r3WSS^QDW8@ zfsm#qOazm3DjeK@=+RV;u_<8ft_3wB7rYjkygtTr!3kmkF|S;S02slijGBlIye84i zbwqC%{FYox6wIE!=}~GswVCxy2ix)07#Y3>2>_)5esDb2mvNwz`$)uyKFqriZQ6~$ z#@432p`8r7%h*m4$^+RU=Okm#GPdV>`nnJG9n84&w|tld3#8tn4~p`NZ>F1Xq@)E& z$e*z*?4%?qZK6vw|41UzRyukHNyfy3p^rww{J_n+tn;j=5 zADowj{iT*{EE4MOw2RPp|4 z>rVlRRn)wF{?7Tig126p?p>*C{O;j*4$s|4)oq_XzEa(us@}X@yh4taff;+ctadh$D%-qZUg-Ukyn7|7?I+XC zt#dcU<~=h<)8$ReVYX$|y5dbmfE>p#(vYx5JxHK3xQ$CGO-rd_~6GP#CUE*tzr#F%O8 zu$RfTJ((ku>l~g3xrRk^rBWL43@Ufk_G?NJ$z`Qf;^~e5=O+`-4Wk=^5b+`EGn%9)o)U%lZPQC- z5*!US!sr6DadcwjQiLa>sB6bx30dV|!RYnz*OBr!C?Wk9Pbd)oWl9p1Bq>=#3=8<1 zbe8xm{!w(0{|a5bMaip_5U428z^~GghZ1_8Oy46>yaN7ra3W(IT|@5puTegdqWHf_ z$={-c#0LH~O1@6XHz>J{B$G2LQIFT@3^AKgLVlHDR`(LIDIj7q3Z2aWNoGGPlkKH*o zS35T)vMm;jSX29|c(2Va4$(AWNkmhw)hS^dpp)DrNQ#5)PU)g1%54Y=bzs+NkYO zwlI?IL0yahXtoW}H?n5SZbhO993&uecA7;YayTGvsIXNw(G9bhnIN>uTwOlznj7M$ zn$HIb~Z(4LvSYCWZn-xh$0OAh&Fhw(gPa-&YIXD;# zUJpkhFhnN?1|m^h=9$ge1TR4Wtcomn0+i7GYefh>C%#^efEJeIim-GWLSvb1L$mRt z00{;7J&d-Jumd50dcfNBa~hq#hxu*LK@UdBW{xz=Yo!cA;0eynSbI*MJbqG}@8Z>Z ztc}=TQoygO>s_Y={pKaJO><@~98^C~6h<`s7bQ*v&87$q*?tu8|s_{$34z8dof9bTj# z=CHKFisMz20pZCcdwup0OrahqOQ>kV1+bY(V-k#H0%l75zt7olZP zVc`#GjhXWT`J$PWZ9}EXk+x4blqad;bGbUiDK{H7#QBt|TG=O^oS(fl)`XKQjAP1A zI)BY^E~4HgOq6l~N|P?GnAKhNYt~pI)q<9lUb}!dpb2{OGGgOl`>YCF*@Pu!WLR7D z?|3<#k=s}y)xPR|cYUEZqwY6+GvxQ1o;Zjl@ri63dK?k-=<;PJf)Y_Jh^gc|8_LOu zr5(i5oV4GxLtJ5djadG5Yfq>${%;wTV|d_d;w=-5AQu@Q9-Cx}SrCx%wZ!zlHO<~H z(Y0W=)=WM5&X`9AB0PaWeGi>&!1e|&!@e!r7O!u+3Z)nyy*hX~)`C1OgJj?~Jp6b% zA9o$w-_vra4>oW|j|TZaK)t{W&+OmdbLv!l^V%xM$F4{C7Rku4WfVqe<6~oMZV>n8 zQjO0Yf1&4O%l?x+U8j43{9CA2V<8^qHeTSGFSH^F@$`XaY!l;G_%Ijw^Dq1V=-{8m zzqa>bUfbaKpwfkwc#(3rx;L=68y$-`v`y&pvNpaFZNZh*nXmle`0m{0?|7aCut)uP zB^u9LRg%Ahw!or};Jf|-0+I(W4@P*#%<$i)E@<-IlUW!|+=C?^RD&@l^@Z~Ize_!q z&_FVEU}&JCM9=u}nDbXpQU0d*CTUh1(cojM$JqDo+bunY*3#@$(g}P zy&}{RHAYEgtO|Z~ATdmZ3R5M0BMR5_kCD5AxTZhH(_*k=Mf2SDRQVRsQgW+z>O$J) znzoC!;+4t`%avQj%B>6by9IZ>3ofy;`)*RKJT1J?FIM(HAWi&X(=QB$s>3G1UiQFJ z>?ni%o>2SD!o)oo@SRv^z*k-W-O_hT=X$?)?A>Do5fV5#UwPLqwjUC!581Y#hY>M~s)~{-H}I!C${p)g(0U zx_d@A{rpnZ3)8*nK-F@fSqwDKMHd4dE1{O}mA+d#-}{4O-#?ZL?VHI@7dHq^d+$~X z&%G#iofVtTip6Jfwk$N)D3)!WpIj_^Hr?{fOkcXHMJR5$UltU1HI$g``+?^xh4z=mp{2pjb304CD9)diiDJDe7h5 zlxYe^j-KgW(OJGyTDx4@E|#{>_b!}RI5~e*EPeLwZn5+^;naDt^gK%S8xK;cvV*3n zBln%&>F%%Zp1Cl0cCq4_CzKUl8WBrJgz^D=iXaWN8i^$1S= zeVfV&K8jDb6DJMF5IcBrl|Mk+XoW9O*+vl=Tr3xJo{7j%8L6x%{YCL8XZqn<5Q2k_Eb2pGHymZkx3IcL6skU z1neSloIYK?BIOxtdlkmp+LEta|Zl0FC z`z<0ejG8k3jQ>M)i+>l1j(=h1nJu8ht+5-i12BlAuSZhs(#Md=InZ_JXivA~c|j6( z#x^{7>6Jk~7IzLuUWp91fFl{>fBs*v$!B(7hUwIBJcnKAjJN6m8fFtp2#qpKGH<~g z34;VCX?$78#lKIDX{BThzr%oL>cj*M?z=Kl6b{m5c|WU;o-^XV3hw5#b^qTW{`mO@fyJTY)h4ImRTR>jt~;Pp}B+e zUGw|qj)>lE3oWAe;JrrCdr~;ViC#{)5*58sP{vn`eMA|3eWqKWjP)>c2e|a*`T8Z_ z_9?qgTMKW5`&Ap>PTolhuJW|IY-V!N-I%W1vRt=Atb;#8s&2pFsZKXMBW&vxwjB~0 z4lg&H5gX2=8eR}QwdwM|&7yB(x~X%yX|D(-Cok31C-^s{15I<676Y5oZF`s7y2ZBcyDz5N z`h?<*>DE2M-c!Qf(?aW+<<>8WtzSyDUJ{C%@7HZxFfA0M>UPd_uasBM)_t39UcU=B zZ`&*EJxPUHPcOIji>>{s*6`y?z|VANpRn_|(DdAL(|NJ!e5&apH7d9nV;xQfx6fEs ziYsO~xE+`c)jK}VA-4nXzE52HA2b`h&A1zR3Q+wq+Lao2{P4TcXZ zx|*>2$lge4JEb3&Iw{@YJ5XT$c$XLHk32@C+10t{@TNQ!9B+`(HAbx^`kf@DuLjBk zf#WRiTUA`mtf5mw+3+>h`zGz94a-)?PJm}n_P9Mbv*wHtSKO!%CqI^RrA`KDUCF785``X$6>H4spM#a z%Q%jmIePjKtd)B*Io-!eBwhnfhjN(s#wNH-5t)7Wt0H(mH^^)FbfMH7Om1xQW*1=x zQbp3&W%#tBVYy<9Sg~dP z#$DrG(|kg#*nf9KtT-h+|B_hol3*!)U~#dDN2uDm5V;3f`?)FmO0ed;x$oo(%{x=U zU4p$L-LP}HVV~Hr@9y>=@BU!-(#g}yCtngzzO>XIUhcmt;{VC3sfIzpUVGo!AUHeH zzQBE7@l(Lv^4C_3w*K9&;68)lLxXQ$llj9!FQp+P(p3zzs^gMfaZpa$9;xG6^--`7*_dF3{bA;gSy*7`z#a!<;{(N~lEXd~^|N{`q-T3dNYAc*Dh}yW zfv#sY*P%Ir>c0|6YojClOke#G1|d_{d-l1Wlg}SIb^K)i{^NapJ^N1|I^NeWsfKPL zhh*}#h9R&@P)8oSxdJ^%%s?K)s$Ln4BK!ir3g4=q^4G9NnNuWv47!|*RP!Qk{}1Q` zAoVuviTxGJ{$|nNJa={e<#~Q?SoC)ayN`+fW4DeW?14mclk;cp?pyL5#G4P3rQAEY zf4F10wpXm}O%)%S%1c)^FIRSml^yfjf3W-eyHk~204vhYO2OIm>%8c1b>(+88$M|E z?JG2YXz)_%HzLjcqCfL%QIFs3Mb}y8>U_*VE57h+t$Y;Z{h)hYRmlL4NZxc;v*6Rr z@4<(7EdeDz%ykgEL<@iLRU=}JtXACGWy?Ri+A0unO zK>(zag22z2NQdF ztUq#NdTk^6i z?wU`g>IqHce}WqSDSbQN!~uxMW4|4%^_YXC{uzSGfKfg-s;Nfsxf>}Q@gL&{Gl~}pU?cE&x+$!-;b*QoB~Ao1Z0H} z7`7##(^PpEGD=_$Wqb~dAxupFW*oKR*eo5#EK0eozML#7kj&BLF#VCFFO_^FEiiwx zKEY^$9NA!mQL6D%Ia3Y6)^Y)+r!!6#qy7@AKWgDh6Bd+49a+nktu7m_U?oZ0SHemf`A6I}p^g<-F5k6c zvTCvtGnI-%3=wCtW>XP~pe|qOnoRhq=Bri-a83Mw%_W9T)kcxdWW7Dfqb=wZ8wkC@ z`Cpl}NFOy$(ltrGRi_`i+g5Yc(96gtSYQQ755-vVc(G0yH8#*cFv3OKsJl`A?_+Qz zOFH6F`8g!I={aNR>pIqRofMgvDittc1^~E zr^et$Os$3e4PYM3#mY4{wvo7>=6QZ>n4A+wBO6D;WGTXv#1!9vtjsY$IvHe5WYtWJ zvne0;GNS-Y`0pUMBqKn-mdTNt!NOW-bx0>4Sx3Bx4Jij-<-y@7vLP(h*u*FoFYkh9 zf_7(gfb~pjy-sk+mjD^!@pYs`vm^Y6bm3J>m}ZK}FxCOwBDRL0gq)h(!ho4fxkMX4 z?y?9M85cE9W!W^N!at@#DNrvez5yBeDMd3b+iGWHi?-&p-2+-9+UsAl-?w|F zkBj!&Df_3s@?~F>=xdsL5l(WK<}Qf79cg>vFU&@NQMx!t`|5PfF52(DbrhIHUg@oa zE4i-ML$8IV56<+?o|rv3b2OD3LdYycwyJ-#`Hkk8@Hbmiu4+WmvXLgmR-X0*W-M>G z5JfAe5bR|6hB?>5nS1+|%8!Etrkw>sVZ(A^vxxuBW(tMn|N70@jq{s$?_e+|VOWMSewyC3Ocgf5J(H%+$cBBg`mJ4ddf?A=jGgYv2;pN4GXVZaa)4rMnPN0*PjBp!W9=)aOWdQ})6Sv)%Oz+jj#cA2p2F&#Gjl71bgU&l=^ z((X&9VFI3xV~1ZnTtEL4?Yhl4NjoZMK5G7qejTG4UYj->hMrMbnNU77=CE=Q(D@I^rL{U$7ud&qZjGN1|!l{R9qGJzJxac(HY57 z$;c-;6Wia=d+I7wK(T6iqP_&8pG=*ZUPRWHFiO47nn{Y6AoB_ER?E$9&jcz}quF+F zsz(^&KG2)bHcmA>Uv*ZOchaKEou~8*sJeyzfjX&(O*Vm2r8@b#d>-ZQ+Fs4)R;iOG zKF_GrezKCoR0_X!7UwQX_Ko4uNj5_vq)<3Yep9eI9DtV#SZ7RE%ymjKRQRt(yl4tx zvoik=&@Dab*~p9qFy~)x;UbqNuC!d^CPv0v6w(EdTSuF8q$loR8C&5Z^{~3>Nn1R~ zLznXR&<@_?5uFQ%=G^eu4jz>2+KovRi@;O zSNo~VxY0G-zek$k*<{Uf^Zy6xdPoy35fnHjdkywHHl@uL&RvDW&q`tKY;UTt<+a=? z_!O@cS1%X0iN$U6jSKAy9rGK-;yrgO#Ns~Ee;2=qS>l4E%`Z7@n#y}%aXPlIRBxQS zcz3IC^7K;m8NpSVc9#m3n_F}RjZvUU2JZD3 z6lu$bD{-bF8rn4*Liy?jRGNxgZitFJ6#wmvEk`>TLxLqbkf)@CX@q_;nCATPH6TquD z3RyGW^@AyKYgX2Uj59t4RT;*WK(l=HhlC!l`TQNkW=WC3K;;d7$i>kq98fR?iqWNUei@b=R4sezL{Hu9iIiu#8h{meJ=yzd!r?_^@Q^k5D^ghkV5ZiPL-qQGDS$jnI;C+k$$L*&$e%Ea#<= znQ$(HwEb_ni)J7@) z+g7do?eAL*oIBfOqQwM8fCW#u48z4fDmIsl4qmw$1Ee-Mf(U}lm*L6t1`N`)kCtiT zHFpP^0Pw!+y)V?MWc|nT#b=&i7rc@OWAGHFNvCmqeBhZa2rLM@g6QTQn{Lp-2;3kB zL(*N>O*wKriOyi(BRbBL%$u>n*Mh*tOpfHj2A5*0HI4v>(XnCTB9wqv8Dk6LA7cO- zFPv%)#W$T{{uRI!F%J#W$inIFl|c?A#wUh{TcYEU0XAVN<>R@*3yrMoh0p;eb)SwG zpBW8bLa$J(G+QZ8DPEzUvVtv;ql0WRk>u2jF;|(vZlM>_RHaQ{U!`+2b0Ik4*x+a= zS3)TNPdZJ?|4hy}*v1GVZGkdSXdr|hq!Sst>{yKxOdi(E6{EQ*M~t4dNdlvj35?SC z^8YU~G}2t=!F$K%vJIQ&cZ&_rP7Tf!i+MG7Z`>Wabs(MZxpnZ*3Ic2rx@_c)!bD;* zlE75tsh%yL&7TX;Tj#FN4+^el)9$@@T?;qwowzq~?}~7yUvPct7gm%1l98mI>e<3s z+w7#^YNu@0h3j{R1lNfNR`WhnE?mPL1rPEK1w~WVp9QL>4zBo%-aPcip_wbfh8@cr z_J|wyd}R8u>jT%n;{VO$Kc5tzeKF-fJJpkM`yoNTng2%q%*5MYzVqd|_P1^>d0G+m z5B}1gLbxaw2Y(6o>cX_k_j=!JeL}_7`QiDO?zZ1ObN8Td3M_=#)iL9M}C`~Z&3 zp4WH0wqyE*l(RyxWQlg9&Z+)GF`$d9B`pLIX4qvLFg+(j8*^~vV)(0RG#AH`-51%P6+RYtBDAe*Yk}@AEwbN5Iaj#4{A2p6FQ2z&9CX(ZrOKSJTn5t!2WI&Q z(x$4k%;t=zyXuu%uTPoQrW1B_psslO_?Fo-^lGlzToI$YfkZBJIVw{MI#sA?da_}# za0i#EGPwfcEzP}|J8it(Bpqq~2%+L|^(uO#XZ;?{+cMdgNR2Wv>d6-)ZvU;k0$BSs z>ZmfT`hKYdQE9%GpQzGsY&|*dV_+zM3{Ow8rXZaeqZT^x7J*_8E*x{ zmx0()z<&zCfkgqLP^aas6`)BWA|ao|;WE;&2KSUCYl8QA(j+P{=%3RGB2oNbAj#O| z$DVPHgl~YgW=jh21o2B0t&ENsS!3SQ#Fxngigpr_DkLJsL0%ueYd)94X0h6TRrJ~FVID=4?Hy@_V+wagDnN}KQdQ+=lD;28!3?g z21m_$sk?ZlS9I4AZn%T2y8OY}KGEOt#?f?P_3YWj!d5!d3nkt3Q3&}$&6fFL7OrEZ zw0?F(*m@9wHA+vtVY^>I^%T^lJ>|1@(bG8X%APxrDm|gg?W5ej#&m55sxL>RzU>Pe zQ{@NW=(%6pq?{2tkEhC?o9Lmuq&4HPSK$7Do-iw9RwIJ8g^Z5DOaI zGIwq6;zIM?@ZD1g8~lmq@Tbbs1xudl|MH(7I8f+elpOCqFz>f?7nnXOsO@RBezc{n zCuIFNWX16+V3Py}CfYRMHDH(nRE&&lK&-)<1UM^g+3<%1U{IAdQm3{@kS_U7(sC$37F1%a%cV}XoQ(-rIb2TC@)emxJfe(hq^*{*Ke3Fakdy8M zqjIfGC^!6jXe^t3d!#7dlI<@LgdoLilK@LO`s6A;mPIbqtI2)~7$rg*(u_nzf*=gF z0eU>+QSR7E0c~DB6eBnz3^8eZjHfWU&r)H>zXWIO)Z;W=c z)5!cq(3N0gJBJ2peFK{X{3@IEqsoo3Yq96$)D zF}O=^9eiLXJd+%e(%y3T+PLyxKlIw6=_@l=Q?3oSdj8brO8bi6-1)}NnU}x02fp0C zvN!j>v3GWJ%C}+44sPFHa_eZ?=KfpBSCi9cQ?{zvjzwF2IuM+4J#fL0bo!{^3_=41 z4n5cVdc|uM(~~Jj_3X(-2h3zClU<+5revB(IVxtoi;miKpnS>&D_^A^2>_9qK=i|4 zpl_PZ5`TfSZyEq~m~^m$J}1i#7u9u99rSJ>Os%2L6EJT8QwHY`x&t<5BANxN;F$9V z|L-(5J)8BLW_UpBcw_@5063_uq;yA0b+H+;C@FMTv#^(|uu`}|zxo=CBC?qmXhE!P zzsdM1VXburx%M?~)O0KYU!7?HQ0H^MUeGM?s1|G(cd& zZ(%A|BlNAFQx%vgEJfB(I6P(Y)|+4)SrhY5ovE`-(`%|_^lTlBM9}~{gGZ5)JMyFZ zt~3f$XJ_yj!j2HiCTr`MIi#YblW4+fB^iaimE40dVJmjhQjBMnmb48`0I6!zNde3^ zCBCtd1$(BJ0Vsoa?F0f{^OODZ^Xcz6|5EG4rVA{VNQem%8S800GpvU}I~aLDZSb(; zz^WBT6or8lYM2^DH(`1MiX=>fS^cn#$|K4OyPssmry5c`WrZ-z2Ed2t)>NaWk$bpF zYYqi60YC;yi7>2k?BjI}s(!aXXNJK{E;ivE*D!t^qOZYZuTmD~FZ@+HqG?a_nvvo> zNlw9x=)nV6TJx(P(czWh&J@wWFyNm(pVg-3jcN(XB$w$|o)C>Bg)=0TLG#n)l)@c` zo-Q+9#f(dB9tJp*t322K4i^13oH4})qyQ}h$|&zJ+e^YzISEhHaD;2r-<5swJR!_~ z4C)tM!2zg!xuFbTS77DwrtS|6hD*lh$n2r=ITN#cFSEWt28?>ccb(G>tu3-`#}DG) zj|=-=PHp1_*OqkWrRB~+v2#!u;+Kc6i$m9!Ccg}&NZfdU>ZRT12E#$qAu^{pXks^$ zcX8Yrnv$I-OoD6MeRrqeK9JsZWqH?#xNAfh9ZT&R7d$(@NDt7RQ{ernI|&nnql(74 za%Of?aeO*A?Wcc&|BX19H7WX6;(ZeA|#5Q{tJ zJLWHczjNWTxVh((;sZcLt2W**Yn`_UWm^RQ790wjIH8Oa{M`LOld$oS5I7`w4#7i6 zXuKf!E(op*tL^-^r`PAF<%*JnN?zZ;d)_5kQQFZ8eFUJ=d zQ~uvR0Z_DN3znnsR>>!a$Z;!ql|6X4zXOv9%u`7xI3Cwfwen_ZdroyWzGb{!j6Aj4 zHRXuYoQ(6p`LVU^V)e?^gv#4q!<}H3o2%p@-f+~&SrJ;AN&$T3yeu4!k_TthJnlq3 zT5uLIE+5+h1eo52dDnP*G~q`6mlN)%%>OsR$!<{EtnCx(dkpS%hHXjdGT&;Y*qPv4 z*J3*JMXVKICG203E})5vGxS2MZLghXY(lmgADI1^C#Hkpl6$Hu{U zL&D2=AN86!gR?<-EUQ|}ipk@;o|%d%xP?ym3DAiu&`30aNQA$Gi5^u=nGY;kV$vq=SvlB4JEyMU`MFQ$pvY{Tp6$ z-1l#qay)@46vCWX0hjV|v0@xNVN9~msXWM7TvMgB?=dVct#a4a{=N9SaiQ~Ks_iAg zwK3gsa=GKI*l|`kcWL?D74h7arNL{w(Q#=`ZmmMUi7uDlvU8;RCC44p&epqN2;t7{_TzJ^L0N6eLu8tIMs3R zCyl*#Tr=jGUc?D!SxXQrTrAt0Zr=R8UGMH%$VoNtMV#=Rdlp{)ldT_Zz8m}Dj>Vlv z=ep;8^C!Mv_z#W)<=uVa?!J4kq;@|qoV%Rb zeOb7618n&)`h?ybHoZX7z+uyQ>J;s8@`C9SNdt!gvEbJgQ&jpDHKl{wq(%7_5}yQ* zKFBkK4jExmP`-J-TPWKu__yB=fFD051da(F#GeH}{w2ZpC738YC^Pume)W0zDhKyn zX*alZXf<{&+IOyE#gBpC#-*cz`{<(m=!!G%_1&-SCikm8>B2F=ee4taF~*4Zfe}B0 zIp8042M!h+KF;kjVD}@ZpVFX-(pq-By$HuYcAF{nv9vhQ8#4d6y$I<&hnLbab8nsb zUZs(a>#RsuEz(XJ3PK}4Bmd1e4TDgHCk)`DzCrx7rW4T&ju>}kg=qqnV%wT)6sO$y zDqNouMi`D8Z#U@pM^)WSk;>(@!;H7LX+FRSi?&F}1>7O&NamnEM>ZXag5jaHFyLeD z$^q9%szIq;DxZe6$s`^MZb>T6=S-MkGLR3oyYq(WhKcwx$<1s4G7L#Uw+m^3`h=4m z1LwQF1%H3rV$jt2S_E}ijb_o}C@thHUjx^oEmyDbt4S9dZ_}$q2@~1{T`KTLXTl|~ z3G7NRWKwNI0T~H^Lj!gfvW1W0fia%vw6=DvGJ(R?64Z=z7S{)3R}m-|C)fh5qXUyt z)b1|+N>p3^Ne&tk4K@-AhIrq!BN&X?cPR^Zj7B0@m@CQ&!fQBFk2cXiWh63NMLqGGCL7fES_=Bm!jk0mPcf*`5<=ym}ZOS?o zPCMO#vuxHncUla#r(OP)z{a^3Qh}{g`Dtg#%vqwlm2LC31v`AnUpqc^WX3pCjny-j z%QlK-8-G&P`Ua%y>G~C4(e%VOJ7=iVKtPuJt#2v%dzHaarw6n%ZKF5fF|o0520d zD1Ndkv|OBrk-P#*6@sKHv=m4HDkcUAtbzufTA`%@1DXQtaSE+$z(87*Hl*B8pgFQ76m(4+jXW?K?yJHDiV+>$rk4@%#>+3r_(` z`ASM=@Uu?}zD5#1Uxj3yLaXi(3a#~uEIyYiaZ=))qpJXs|31xP~qdcj!N zO}$QsZ>H?3NX&1fpDmQMQbKYoUrb2}B}CpNQIwSG#PevIq(dpz$)NxaRB9jP525TH zB5Hqu0}!=J!(WByS!O-|7}1loD~jkDPPJY7^+ZqMuTu2<;u@8<<>F_=;%Dahg@*6P z?>30r4t-L5Sk|a?s1jURhp+`!+gAnu)kjHlt2HW5FUIK>NIx$La_0p1xliopm>_pv z)~NiW{X4q18$Q}-rgRfax3F}3;DE#YaX}HKAupvn%?B*zkM|gH{3DAMX?BguQI+uP zq_i&al@1AU8X;g&#n4bJhtX5>x!7BYQbv&lx~ z4>UO~n`fQovdgqBWM#T$L+ze5r|?r3Nqbag z#=x!{8~d8EaXdjY;&{Af1S|kq!LHdjRR;vp|BNI{W?fo9)tf*^;vA}8Qw@Hu(vdWP zfv8=dC!uqyzP){w9szbNjA>xZ1DJ(6rSv0~mz1noWa|`Izi9bYeS%U0BmPo;XenfC z8BL3jT}zRlBxXToMxZ^&&MXv#`!P4KV-}*5FntD>fCv&WU?BHQm3{ahL}~EY5l~3r zlQ{)8vZwhp9wq-%N_0FzR`$Rv*;&Z9kG2BBjn}Tz9AwGlY;9{(9ui-JhsswYiB}&c zyBbLsklmIgzFCSarABO(bO6~0fc$F7qe`bkXgjb*hp@inYJEZxiyioDC>3g{S9O%s zBZ2Y*v0EYeGsS_VLij2TG0l)VLzfWpu40U;< z0a&=yJt2#vH}KLE(wWncSrFs3+Nf7dMUbaFM1~4Ip7m-W)=Rqa`aY@k$jy%OCvcOO zi68q9IAE%PP_tmE{{mr79&h;~gkxew3??t>#wOJJz!b1@3Tt-eUdNKJZ{0#hn>v1w z`~6&mT1{0sS=UGKQ&F8(CA z6T$lHHh%Z$J4fe>XerTS2;I-}pG^hY!~g=V>{u>-RxEz@ZpA0X#~;`X)w^JwTfAeT zP6+G~JbUg3wnGCV1TG4mi}!t7glDb^zH5T(+G;-R09dL`LPw9_?pd_=tisdDeg&7v zer3`Aybe$2qzeOrd*BoM0As^AuwlFLB7b1q-`?Xje6+a;>BqTdO7mIj4IHR7f81Pz z^hahdrG@4LmF6E68|k>xigXnpWJk&j{x|xHJRXwPokc7*>t7 zICU7hj&oyIb0NsXYJf9;3s#ys1l`41^a4AqlQrvN7iV2{%>oxd3f{62f%|CR2$yTx z*XcNuwfD^fzhzJ4;m(e4nb+JocUA4?(Kc2;uu4`hg$<+o82DNZ^3jKPWBvL9^(RaT zDU?35@qvxABas7egW6?FxDfo^b{S}R$Qk|_9)U);F%2r#o62`D3;NvPWgwd{^r!PM zX9PAXgB`(1bhSRM zq3csw1rP+>8SF+1P6o!KI#X9|uz>s1AkqnGkTgI*DlbvV5y|#78U&0@@vacGf`fk_ zS&d>cj*<339%#*O6t=@kR}o0QGq|4$QX^sr^sxT9vCIsU?*shp)QRz#f_2k8e+usb ze;P^LvZb|s3rjaM|A>&8UCh{I4LQrj!$FDM9!NH41cAZi%+!&oia{v}{?6FshmtAN z-Cw1X2(w0gSg(9nFDMOFQF*z9d))~|e-AT&{;^9#85a%^91MqGJ*6HL>f4}RX8qBI zL_H5EU$W?g@h9~*`UvEL-$`RY$sZC?B=mz3#o9W-QkAY`T5>5Z3fwxLE-FRhE4+1d zCDe6y!@Uiu&`HtKaO;Rr(C}&Vi^5sNvACLQ9uzH&f(21#8t(_2g?*<)&*@u-KCP*r z9h}b-8}_7X_M-BY%IevWuyL^TGxGtlcKh9}_YR8tPpwq% zUbu4iN~*d~v5nN?07qb;2bRzvXq&Bm+HK2T&sd<~1gI6ovee zW{)5Rs@gJ}iwVk-#%s;?9(qI@xt&N$F~eLeAA%meU2MxHngg{pvqePRx_nuLbTywx z=Zca=Tt~j#WDY!$p^UznGg%<*b?C1*+>C~@DMSvhrTcb*r&SsdjNFI}Ofb<-iiY?9 zw@IJLW>Qc|Hq~b7xiry!2M_NtAnqMpUJK$%%avJsXrj_2A!)U-Zy|rkCg~8L$D?3y zYsN=J0TFs5a_m7hUOQ7PN?bmnN-~|0kX4@)NGlfA734`pE7E-RV`OKVLinE9L|Z^- z$)hg0ba0_-Vc+}_v2^d<7P0iWaPq8JdRDm5FP8QTm#&GW*M!lVV(Cp7wbPoT0cND$ z0W+AICEu}iy!vl>(b2$)yNL0r0cp|Ec`Q2GVfdiKw{M&ILz|b8auR!2O)vr-TEH&0vkM`Y^VvI9pI1E z$w@;CwWWwSX)1Imez_=V=NQMBw9|_4w|gIPf1paRr+q=I9sFw!yy?^y+>TfbqXj@T z&8)31Eho<9>h5RdJAgwzeoW94*)|23BJQi}74GWPYSZ0C9W5y2(343co}aX|>P5}^ zWF2o!GJ`X^SJ!LR0*0)i<&m${?!)P9fth6td_(Zm)KS;Q8trhic2F%CKfYMYrQwbU zn5Z8seSk&dq!)dVmVtWyiG65&LLWl9yMMtxj5@Wl30(`dvl{w|{W13;{vQGT?AC;hFYzMHC(wUPzl35K4bpaE2T49N?rEw?G0;Y593}%e2 z8FSb0aNMJw431*~$Osqj)y`ZEBSgH!)WR*ASrq|@yG(B3V~S@utd~Zwv4~6~l3XW6 zeS^dkFQu9!(J#ojx@^RjqFZzp0yp3IngMo ztr=U_zT+oP_jJeWSve*^={O8Entk{Zv%_JOvJX^}h?&HO@1i5J*kO?~u)ZctXbG=E z@C{~;L!>n0rjF=|;eI-sOU;zT3;qJtu!E9rx?~)b>~qWzM_{BgIU+B!BncNV2AUjU zg3P1Lb$l!?X+Pd^P4wYkM$Ny(v>E+ZI6&CoQUew%+AzN%Rn&Rw_2tH?X{T!{zT~W&Iq`|JGF{QQT+u34wEm=G(;JRy^K?(zUpNi4Og6>& z-95B~QseCA+2oRcD>KW%l0)Abn5};6^6aTQLv!9GEQVBCHq&*d_Kp$eI8}9@=NO7g zW(vP~ZnpiK{ZzVs)-2RL^ND}kFA5Bm?TEUWUp!O&^_M8ZFrx2WS#n+dQ)eJu5n8Tj z6D!(&Qqe9oB;zZl(zQZm=aPRXtLXQS0?VrGfSBSbx$h{RIkf1&Dwap@y&#;qkgB>U z+RLZRSTgFT?y8kQ>CEPD-eAiu;${hoYEiU($+P2UCFRpyR9W@!_d-=!T5&%ROc#{Q zocP@emS^jd=NY)Of9fg_yfsU%+O)464)5M7xWMO@{H8a=GEJow7#~`ui7Nlpo+spQ zU9vxub{FG#>dNhWgyN9o8JQq5x@&A8Fl~#RK_iahXTNiBLKqTRh?;2Verr%RVxIBtQg& zM9Cw8CX&apX0(YQITQS7@H9Wc{EwB)tA+!kqZ>3fG{ML)+-&8-2Vi*!kc)Wj(+5H( zZ34n7OPcN9b2NdlxdqOlv4JQv2F&CztH0>FC6nY;VwCo<=>k(HKY?1HC^Rr6mc4?nbI`J0kHMo_cw@;J&|d*we;Ic+Ea#oN7ori)RijI%|IF3&1e0a03fy zx&G}W7L2`}b-00k<*x)&&$2KK>ibBmOmL?6%?iWE!Z6VLy=LPq#OlB`a7xFHSh6a$ ztqL2*LNVaoUc2emcUiTf#CsSN+OTGX4Xl@{=*}iV1DMs;4Rv5Oi(EuibC78>?}3Rl z8K|z=ledJauuAG+u--s zZP}FUi6Z66qMmNV@$@DGPZ$kEWK&0@I8iJ=+3rMfwlPtkY)PzIX-A?&7m=T*DoP~Lk)Ls$C%g?%aKXZf9)t0Pya^+KOlmqXXjN&lo{(g7T(LAl>hb_KqK z0|j*XvMcVTe8svoKeD?O7ADJdEh^F440OnmEW24Y>6i98bf`33i%&0?X1;?F*vBi( zJ7)T*v{qL%h;=9ws&WNO6OB?}0!*FZ(JP8#U^Rh3T+r(Sg9K>kXw3dYEF#4O7+K;` zrRbkDyVIRCI2_OuAM0l~(7^wF5wNZ-9zvw?zy!rd4Y3wet0M?;wkCTQi`Ygd8=pfQ zXDRPmvO%`_+8q>2eboa%COul?)*(JMc)AEDz{PXhkn8+QdulE=v1rbH{42P`U#H{- zCB*CVlavsQ$$y!W1QIOzj!4dJdlAa{!rs>A(~Jp@Kf^#IS%aXe;N_7*tPEJHD;z&V zgBXcCb12??fC&>cxX?S0T7Dc+n;<2SaVHh0$AYIoHE0l3yh$s@7E*!V07g!ZJ3+;w z1Bi_TWl{J_D8S#Owrk-gh?YpPShv#A5MHGoy!)jUJ7GTp2^kTLLSo} z*11>S6uy`mLZ3Xphc4vCxcE$9avq2yzywf`sFaO8Mk&y(%(DO6a3ex z#=k+y-=ySkQ8GozYm|JQl5bFQo08WlnWp3oBpIjFQA9q+(zEgp=>}3G*pSFCXU58& zy95zZH|R5X)W&c_K28sYk|V@;)R~x+Qf@#5sB>a&)vf&xEYBJl*f$fM+qwX(Z#N4= zg@v-5Rid*BfvI3L=?l&lf4AbDiut^hZ_iZs{gR5eEACXx#!@94rw*@_R?G~&)i!k` z9c&R?6)Tm&w+HVG3XMA!np2errjDnJOQ#N{-IcR-i|&SWdGm64yI9_i)oZ66_bY4O z9=S6z*PE)`ii{0Sf~)qk90P*(<)^FLmaCt^dH~b;8DDieP%}Ha7}%2TcvdKG`)P3n z#DUt5UwRCl4RB$AlU`-R%(>a5P`Y*6_9<4=bKG&vZV;OHv510y>MKrH)VzKE&iT25 zw_cj=U8!sQ?%{V1gYSaY{`k+TT4&5F)ot_U`9t5&PgU=ovEMJNoxQPCwtK$wCuO_u z*51APL5pzeLTcZIbaU(6O|f~;3}Om4N&T4L_(}O*v?kbw(0{d?r;n`E)O|PfPH67P zf+JP4Z~6!|om&hvrJJ@cH|-RgcBYzk3&o+8%3T5+_->>sU!1YtFAL6g|H1B+@>Zek z*}J9pdY8)2Ktd^R68s@BeU-JdR~9Q;u#~M(b8e~p{7P8}7npRkcL~9R;VsdQz+v#* z^KAIl=X+MU8!zLs;er0bXX)1(72k;|Q^rIYN69 zo;#zE;}SVM4=xn}y1)-Qzz^m=fdk4#j9H8dZ3JcVCt;qLg{#$Ztu8ID?T~5)DAhoz zW~4|QEyvvHq(END{1`EUY)hzyli*#A2{(hhjgxuoxEm8l-lS3EAy>hjZmhJ6f8cpk zPHHH-hl9k+cy#%K^6hmyRrgg8Q#D>gHM$J)A@UW1yH@#H{YvoQd2AFYVbU$_bv%zR zyjS6Qm{iSHnITfg_y|ybMtkI?BXrCUP4$o?5$6hdKuIB0jtz4x6k~W)Wkj;d++c?o zq0rCcUz|BoD44FK#Ori}*U2s&@5ADbk??3Imh~brIjYLZYF(>)q3=2y4xN}B4eI3N zto#t;eEQb1KJ+d#{^vBGq{Fu;X{Lnu*m&1^4utU?~^CybZ<&4=fF`E^pI9;XTum@5nk` z-WuwTXie*g@}JeTKOIT_1%k#u1xfztV@YzlV&mKippf$pv7!_7x?#)wi>Zb^)5l?9 zH@kN+(2=gHO_x;99$zfkj3~V_mbZ1u^$d|hr=fJq12@q_C!>dTzZN|_v1C7~qlaWW z_l>TS{dI;9>MfKub=6__L${UELMNqlzV0pNAMWrX{V0#6RnG1<^G9t~oEgv)Eiy+S z68G7EM7kPE)GY25Lcr(gj2m>0YFFTWOAC>3vb7y~txp>%{tv9~RJ~(1A_yxo4MqXk z$_k8_6(JH@NQ#)oHk89VMjHSXEM_K&%dnNR(oxikqa1dQ77sBa3NOwARLGU%c^Yq@ z0C9h;kp#l=BWjiGQ{W`2Dd~)Kn?uQ0PFmuKUt{3C|v2+42i;_S|z`>S3s9;706cJ2gHN+D@)hv zTDzN_B^F}4j;Zr2rMNPB!fM|dxN`M4r~w*UUy?-69 z0%S&fEw}H0NwZLdQY==Jn{=I}b1gT_XARelU}*q_NgLRWvSfkw9dfQjfqo%ql+H_f zz6pzCsVcNKS>T!4*kRB(ZsIcmh^2 zRZfy`KM^Ki=&&t3#Nq|0SINm;20k_h$Htije1r%Y;|{9n=*D1-hkAnhn8M>w_s^ZU z1>%BYee1YiV?$(ciq7UALgZ_DCX(UM>4ybUS(upuVqq(BXRJplssjryov}REb?Q{y zd76}^l4rz#JXf-Ji01pv`1_1r*&}%0D2l>GSQ;daSl*c}Qt@|;ZyEuXI-vkE{6q6~ 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 4.15 and job_platform == "libvirt": workers="compute-" @@ -506,7 +517,7 @@ def check_node_crash(spy_link): crash_log_url = constants.PROW_VIEW_URL + spy_link[8:] + "/artifacts/" +job_type + "/ipi-conf-debug-kdump-gather-logs/artifacts/" try: - crash_log_response = requests.get(crash_log_url, verify=False, timeout=15) + crash_log_response = request_url(crash_log_url, verify=False, timeout=15) if "kdump.tar" in crash_log_response.text: print("*********************************") print ("ERROR- Crash observed in the job") @@ -594,7 +605,7 @@ def get_quota_and_nightly(spy_link): build_log_url = constants.PROW_VIEW_URL + spy_link[8:] + "/build-log.txt" for attempt in range(1, max_retries + 1): try: - build_log_response = requests.get(build_log_url, verify=False, timeout=15) + build_log_response = request_url(build_log_url, verify=False, timeout=15) if 'ppc64le' in spy_link: if job_platform == "libvirt": job_platform += "-ppc64le-s2s" @@ -695,7 +706,7 @@ def get_failed_monitor_testcases(spy_link,job_type): test_log_junit_dir_url = constants.PROW_VIEW_URL + spy_link[8:] + "/artifacts/" + job_type + "/openshift-e2e-libvirt-test/artifacts/junit/" try: - response = requests.get(test_log_junit_dir_url, verify=False, timeout=15) + response = request_url(test_log_junit_dir_url, verify=False, timeout=15) if response.status_code == 200: monitor_test_failure_summary_filename_re = re.compile(r'(test-failures-summary_monitor_2[^.]*\.json)') @@ -704,7 +715,7 @@ def get_failed_monitor_testcases(spy_link,job_type): if monitor_test_failure_summary_filename_match is not None: monitor_test_failure_summary_filename_str = monitor_test_failure_summary_filename_match.group(1) test_log_url=constants.PROW_VIEW_URL + spy_link[8:] + "/artifacts/" + job_type + "/openshift-e2e-libvirt-test/artifacts/junit/" + monitor_test_failure_summary_filename_str - response_2 = requests.get(test_log_url,verify=False, timeout=15) + response_2 = request_url(test_log_url,verify=False, timeout=15) if response_2.status_code == 200: data = response_2.json() for tc in data['Tests']: @@ -745,7 +756,7 @@ def get_failed_monitor_testcases_from_xml(spy_link,job_type): test_type = "openshift-e2e-libvirt-test" test_log_junit_dir_url = constants.PROW_VIEW_URL + spy_link[8:] + "/artifacts/" + job_type + "/" + test_type + "/artifacts/junit/" try: - response = requests.get(test_log_junit_dir_url, verify=False, timeout=15) + response = request_url(test_log_junit_dir_url, verify=False, timeout=15) if response.status_code == 200: test_failure_summary_filename_re = re.compile(r'(e2e-monitor-tests__2[^.]*\.xml)') @@ -754,7 +765,7 @@ def get_failed_monitor_testcases_from_xml(spy_link,job_type): if test_failure_summary_filename_match is not None: test_failure_summary_filename_str = test_failure_summary_filename_match.group(1) test_log_url=constants.PROW_VIEW_URL + spy_link[8:] + "/artifacts/" + job_type + "/"+ test_type +"/artifacts/junit/" + test_failure_summary_filename_str - response = requests.get(test_log_url,verify=False,timeout=15) + response = request_url(test_log_url,verify=False,timeout=15) if response.status_code == 200: root = ET.fromstring(response.content) for idx,testcase in enumerate(root.iter('testcase')): @@ -838,7 +849,7 @@ def get_failed_e2e_testcases(spy_link,job_type): test_type = "openshift-e2e-libvirt-test" test_log_junit_dir_url = constants.PROW_VIEW_URL + spy_link[8:] + "/artifacts/" + job_type + "/" + test_type + "/artifacts/junit/" try: - response = requests.get(test_log_junit_dir_url, verify=False, timeout=15) + response = request_url(test_log_junit_dir_url, verify=False, timeout=15) if response.status_code == 200: test_failure_summary_filename_re = re.compile(r'(test-failures-summary_2[^.]*\.json)') @@ -847,7 +858,7 @@ def get_failed_e2e_testcases(spy_link,job_type): if test_failure_summary_filename_match is not None: test_failure_summary_filename_str = test_failure_summary_filename_match.group(1) test_log_url=constants.PROW_VIEW_URL + spy_link[8:] + "/artifacts/" + job_type + "/"+ test_type +"/artifacts/junit/" + test_failure_summary_filename_str - response_2 = requests.get(test_log_url,verify=False, timeout=15) + response_2 = request_url(test_log_url,verify=False, timeout=15) if response_2.status_code == 200: data = response_2.json() for tc in data['Tests']: @@ -893,13 +904,13 @@ def get_junit_symptom_detection_testcase_failures(spy_link,job_type): test_log_junit_dir_url = constants.PROW_VIEW_URL + spy_link[8:] + "/artifacts/" + job_type + "/artifacts/junit/" symptom_detection_failed_testcase = [] try: - response = requests.get(test_log_junit_dir_url,verify=False,timeout=15) + response = request_url(test_log_junit_dir_url,verify=False,timeout=15) if response.status_code == 200: junit_failure_summary_filename_re = re.compile('junit_symptoms.xml') junit_failure_summary_filename_match = junit_failure_summary_filename_re.search(response.text, re.MULTILINE|re.DOTALL) if junit_failure_summary_filename_match is not None: test_log_junit_url = constants.PROW_VIEW_URL + spy_link[8:] + "/artifacts/" + job_type + "/artifacts/junit/junit_symptoms.xml" - response_2 = requests.get(test_log_junit_url,verify=False,timeout=15) + response_2 = request_url(test_log_junit_url,verify=False,timeout=15) root = ET.fromstring(response_2.content) for testcase in root.findall('.//testcase'): testcase_name = testcase.get('name') @@ -982,7 +993,7 @@ def check_ts_exe_status(spylink,jobtype): test_type = "openshift-e2e-libvirt-test" test_exe_status_url = constants.PROW_VIEW_URL + spylink[8:] + "/artifacts/" + jobtype + "/" + test_type + "/finished.json" try: - response = requests.get(test_exe_status_url, verify=False, timeout=15) + response = request_url(test_exe_status_url, verify=False, timeout=15) if response.status_code == 200: cluster_status = json.loads(response.text) return cluster_status["result"] @@ -1102,7 +1113,7 @@ def get_jobs_with_date(prowci_url,start_date,end_date): url = PROW_URL + prowci_url try: - response = requests.get(url, verify=False, timeout=15) + response = request_url(url, verify=False, timeout=15) if response.status_code == 200: @@ -1183,7 +1194,7 @@ def get_next_page_first_build_date(ci_next_page_spylink,end_date): ci_next_page_link = PROW_URL + ci_next_page_spylink try: - response = requests.get(ci_next_page_link, verify=False, timeout=15) + response = request_url(ci_next_page_link, verify=False, timeout=15) if response.status_code == 200: soup = BeautifulSoup(response.text, 'html.parser') script_elements = soup.find_all('script') @@ -1262,7 +1273,11 @@ def get_brief_job_info(build_list,prow_ci_name,zone=None,job_filter='All'): continue build_status = check_job_status(build) cluster_status=cluster_deploy_status(build) - sensitive_info_expose_status=check_if_sensitive_info_exposed(build) + try: + sensitive_info_expose_status = check_if_sensitive_info_exposed(build) + except RuntimeError as e: + print(f"Warning: Could not check sensitive info exposure: {e}") + sensitive_info_expose_status = False i=i+1 job_dict = {} job_dict["Job"] = prow_ci_name @@ -1340,6 +1355,12 @@ def get_detailed_job_info(build_list, prow_ci_name, zone=None, job_filter="all") print("Build start time:", time) except (requests.exceptions.RequestException, KeyError, ValueError) as e: print("Error fetching build time:", e) + build_status = check_job_status(build) + try: + sensitive_info_expose_status = check_if_sensitive_info_exposed(build) + except RuntimeError as e: + print(f"Warning: Could not check sensitive info exposure: {e}") + sensitive_info_expose_status = False build_status = check_job_status(build) sensitive_info_expose_status = check_if_sensitive_info_exposed(build)