From 534c94e15967864381cfc38db33ad6404b8962cc Mon Sep 17 00:00:00 2001 From: Frostebite Date: Mon, 25 Sep 2023 18:26:32 +0100 Subject: [PATCH] Include log chunk when task runner sees log update, clarify if we can pull logs from same line or next line --- dist/index.js | Bin 19481955 -> 19482632 bytes dist/index.js.map | Bin 13785414 -> 13786261 bytes .../providers/k8s/kubernetes-task-runner.ts | 12 ++++++--- .../remote-client/remote-client-logger.ts | 23 +++++++++++++++--- .../e2e/cloud-runner-remote-client.test.ts | 4 +-- 5 files changed, 31 insertions(+), 8 deletions(-) diff --git a/dist/index.js b/dist/index.js index 0190c6d5dccb6ef002e3d028d43dd192a0a30a60..07bc41939a58327888f389b3deba07d0a4c0f94e 100644 GIT binary patch delta 1553 zcmYM!X;hR|7{Ku}?>jr9zz8!aGA}asWwyv9$WY@9#n8S`nH!eC zh&MA!O03jOOB=0BEL+uF%B-xgEZd7pD{cKhdOCgh{lDDhJon2zFsH*YtGUC`INh{X zYfYGgq580D-@VGEc9eRYYX2UGCDD1KLIGc2&e20I*(^%V3#Dte+9(vXe}xX>G!$buUlWTOxIA_x7D3oi`h!3RJ3V*v6| zfB*_{0#3w9D8k7&1p{#^PQ&RKguxhsGjJx(LNU(9IT(s_F$}{|f)N;rQ5cO1r#h8Fga49C@GEBndxB^$=DojQtLbw`JP=#ttMGeBJ#WlDV z5lllAG1TEYT#tIh(SRFpBW}XYxCOW3Hr$Roa3>mZ7w*PAn2vif12ZuTvoQxvn2Y;x zKjxtsEoemo^U;O{P+WUXi`GBuZQv*&{PV=*kb-WXqPlXI8ds+4~|h z>-!w%;E&Juyyra6^Y1%lR+{eNv@~7(MAde6vdOMaRGcv;EZP_u7$GmkySdt3iM_7! z$+&4!_f{GH&Et%*;Sn*4+2HJIGW%)&EKN^QM`)GI1?pVg-%TZc#7HN_Q*UXl1n*9= zRL&>p9pxe;FI63y_}`u?MB}Jr^|8__=|wg7l-O*IRyh=?amX+SXp&UQ)J_&Q%F0x= zAt5J711&6IiF~kv4%X1a2KiwNJIGxD*uw#ia6&;i!v(HzgF8G>2!-JZFL1WMLV=d2XsUybVe6+MK^RuIC>xgJrRjs=#3~uqYq-x z7yV#Ff5c({24WBfBMw6_6vHqaBQO%9FdAbp7V#K|@tA;#n1snlz!XfyG$dj=W*`YO zF$=Si3=`%c1#_Wb9_C{KQn3(=uoz3Q6w9z2E3gu2ScTPCgSA+P_1J)oNXI5@#ujYF zHf+ZZ>_i53VK??*FZN+S4&WdT;V_QiD30McPT(X?;WRRF24`^&=Wzj9xQI)*j4QZ` zYq*XZ$i_|F!fo8aUEITcJU|W};t?L>37+B^p5p~x;uT)w4c@|xcX*Ev$i+u|!e@NJ zSA0VrzT*de;#Xo$kZL9*YKcaol~_nDCHW*)5}m|aqLQ2BfO22&cE=Kufz diff --git a/dist/index.js.map b/dist/index.js.map index 3911b7d819cacf96636360e8992745fdc0d6dbf5..2c2d23f0e600644767427e0d9ab910a4613ca033 100644 GIT binary patch delta 1331 zcmZY5d2G{V7{KwAmG0Y0Q#;0R8?~*hRXlM{ z7@llgj~8WlARe28sXy?5dQGQ8aI%<~h$O}s69`K*k-yY$xA>QTeDc1@`#kS+^dB0q z>^d@F=}lIPZ;8!qc$yvaOgr?#oIY=G`sl?tmv8Gg^@VB|m}KNnn^m%Z%?KNzX49UG z(YWg6J58N|fP^k&SdEGc){1eRfxPrfn>X0*4Vo|x88Bl!EXYI_vXKKTaxnoHArCg# z;lM;pLOu#G8HI2{GrYkm+t1|q>slI1>l+i1_0n24SCd$;(=2BOr??HhTx~R&7be1C zW1mO;VHV$6x1}W96lu`wqmg)BQ=~<&Em^v3QH_UFk2f|%^p=G|m z?$OVzV`1x}iO5=M?Qu?&nFX$FN&QxAkuGuNN$jB0DSw~UVv;CTeS zRFx?~pPDUu{i;BG-O4N{D^-r9)=bMXQa<&2r=)&Vlf|~V$Sgmfr|Rh;HA}X6RJJ)i zTsqG!BP+G>GICn8ONY|T#9{$h0-PAP|U`BlF3oKlsN%A>erSQSg}FV0Ny{ou08(N)?c=~&^( zltAKeuAEq1G(l>&s@(SEutE`BD29%UQ35xnVj8C75|rXnl;JX5jw^5_W?&|+!Ys_j z)wl-NVh-k_93EVU3RJ?2dGMhM*JD0zzyd79BKWZw)mVb1xDhvD83MQ&x1a{gu>vb` zD}uNUtFRiixE*)kPJ~d0HK@m0G+-U>LL-{cjP(fPZbT484EJCIS`bG9_u@Wm#Qk^x z58@#_j7P8ukD?Wip$(5?Gq#`|Tk!;*#8Y@0&)`{XLkBvs9XqfSyRaLA=kPpUz>9bZ zdyvFlbYUM}#w&OguVFu4#{s;7H}MwUMmKu!4tjAAhtP+2@gClXfx|e05AY#A!pAs@ mV@Tl>e2UNTIle$YzQk7;z}NT&gE)?FaRMie^aYH(9HctE~H2=Q>M?rO16R)~%!-XNNNsDfO4D zTxs2mG23`y_PrTqn7sA%YF~U_{EotUkEW^Gqp2!REifB{6=!Wof=V|2((7yVwja8p zKY@BB&T0ry{a;-UyW3$`Apn6;qYX6BA_zJJLyr&`&=&0wiuUM$FmyyXA`l59qF_=S z_ULauU2;aQGs~9gOjE4!qCw@)br$hkEx#vTwQ_0eDlUka*B21cFghr|OA}Uof#wQHY(k#N=tzLmn=!_Vc(FI-6 z4c!ro9_Wc)=#4(;i+<>j0f@su48mXx!B7mtaE!o6#A6gJ7!51NAOVROizFmt9L8e; zCSnp&kc!E$VG5>V8m40gW?~j*V-DuRj(M1m1z3nhSPTc2U@4YiIaXjL(vXf-$Ur7m zBMWP=7EY|gdSoL98?X_%*o4j4g00ww?bv~x*oEELgT2@X7xv=-4#JH?IE*7WieosA z6F7-HGY2T*75s!Bt$tb(G@I{PgDTub zHEM7VwWx!F`>4kQJj5eB#uGH45l`_9&+!5;(S%oMh6k_l25<2W@9_a2l~(Vk64yTy Cc4M;u diff --git a/src/model/cloud-runner/providers/k8s/kubernetes-task-runner.ts b/src/model/cloud-runner/providers/k8s/kubernetes-task-runner.ts index e9588591..b777c4d2 100644 --- a/src/model/cloud-runner/providers/k8s/kubernetes-task-runner.ts +++ b/src/model/cloud-runner/providers/k8s/kubernetes-task-runner.ts @@ -43,13 +43,13 @@ class KubernetesTaskRunner { CloudRunnerLogger.log(`Log Start found in logs`); } if (chunk.includes(`LOGHASH:`)) { - RemoteClientLogger.HandleLogChunkLine(chunk); + RemoteClientLogger.HandleLogHash(chunk); CloudRunnerLogger.log(`Loghash found`); } if (chunk.includes(`LOGS:`)) { // remove "LOGS: " and decode base64 remaining const unpacked = Buffer.from(chunk.split(`LOGS: `)[1], 'base64').toString('ascii'); - const result = RemoteClientLogger.HandleLogChunkLine(unpacked); + const result = RemoteClientLogger.HandleLogFull(unpacked); CloudRunnerLogger.log(`Logs found HandleLogChunkLineResult:${result}`); } } @@ -73,13 +73,19 @@ class KubernetesTaskRunner { const splitLogs = logs.split(`\n`); for (const chunk of splitLogs) { const message = CloudRunner.buildParameters.cloudRunnerDebug ? chunk : chunk.split(`Z `)[1]; + + // if line contains "LOGS: " then stop + if (message.includes(`LOGS:`)) { + CloudRunnerLogger.log(`LOGS: found`); + break; + } ({ shouldReadLogs, shouldCleanup, output } = FollowLogStreamService.handleIteration( message, shouldReadLogs, shouldCleanup, output, )); - const result = RemoteClientLogger.HandleLogChunkLine(message); + const result = RemoteClientLogger.HandleLog(message); if (result) { FollowLogStreamService.DidReceiveEndOfTransmission = true; } diff --git a/src/model/cloud-runner/remote-client/remote-client-logger.ts b/src/model/cloud-runner/remote-client/remote-client-logger.ts index b3bb5e2c..ce9f94ce 100644 --- a/src/model/cloud-runner/remote-client/remote-client-logger.ts +++ b/src/model/cloud-runner/remote-client/remote-client-logger.ts @@ -68,10 +68,9 @@ export class RemoteClientLogger { await new Promise((resolve) => setTimeout(resolve, 15000)); } } - public static HandleLogChunkLine(message: string): boolean { + public static HandleLog(message: string): boolean { if (message.includes('LOGHASH: ')) { - RemoteClientLogger.md5 = message.split(`LOGHASH: `)[1]; - CloudRunnerLogger.log(`LOGHASH: ${RemoteClientLogger.md5}`); + RemoteClientLogger.HandleLogHash(message); } else { if (RemoteClientLogger.value !== '') { RemoteClientLogger.value += `\n`; @@ -88,6 +87,24 @@ export class RemoteClientLogger { return false; } + public static HandleLogHash(message: string) { + if (message.includes('LOGHASH: ')) { + RemoteClientLogger.md5 = message.split(`LOGHASH: `)[1]; + CloudRunnerLogger.log(`LOGHASH: ${RemoteClientLogger.md5}`); + } else { + throw new Error(`LOGHASH: not found`); + } + } + public static HandleLogFull(message: string): boolean { + const hashedValue = md5(message); + if (RemoteClientLogger.md5 === hashedValue) { + CloudRunnerLogger.log(`LOG COMPLETE`); + + return true; + } + + return false; + } static value: string = ''; static md5: any; } diff --git a/src/model/cloud-runner/tests/e2e/cloud-runner-remote-client.test.ts b/src/model/cloud-runner/tests/e2e/cloud-runner-remote-client.test.ts index ba1f4051..e08e67d2 100644 --- a/src/model/cloud-runner/tests/e2e/cloud-runner-remote-client.test.ts +++ b/src/model/cloud-runner/tests/e2e/cloud-runner-remote-client.test.ts @@ -9,10 +9,10 @@ describe('Cloud Runner Remote Client', () => { const testLogStream = 'Test \n Log \n Stream'; const splitLogStream = testLogStream.split('\n'); - RemoteClientLogger.HandleLogChunkLine(`LOGHASH: ${md5(testLogStream)}`); + RemoteClientLogger.HandleLog(`LOGHASH: ${md5(testLogStream)}`); let completed = false; for (const element of splitLogStream) { - completed = RemoteClientLogger.HandleLogChunkLine(element); + completed = RemoteClientLogger.HandleLog(element); } expect(completed).toBeTruthy(); }, 1_000_000_000);