From 1bd874e0f136c6eb94b4d5035f842bfbe6a633e0 Mon Sep 17 00:00:00 2001 From: jamesread Date: Sun, 16 May 2021 08:12:04 +0100 Subject: [PATCH 1/3] added ping to the container - useful tool --- Dockerfile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Dockerfile b/Dockerfile index 8a05ab9..59f1c2e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -4,6 +4,8 @@ USER 1001 CMD mkdir -p /config /var/www/olivetin/ +CMD dnf install -y iputils && dnf clean all && rm -rf /var/cache/yum # install ping + EXPOSE 1337/tcp EXPOSE 1338/tcp EXPOSE 1339/tcp From 17bab284319d75678b2235ff3bf2dc7f490240c3 Mon Sep 17 00:00:00 2001 From: jamesread Date: Sun, 16 May 2021 08:13:40 +0100 Subject: [PATCH 2/3] webui provides better diagnostics, logo was too thin --- webui/OliveTinLogo.png | Bin 13877 -> 14762 bytes webui/OliveTinLogo.svg | 13 ++++++++----- webui/index.html | 2 +- webui/js/ActionButton.js | 32 ++++++++++++++++++++------------ webui/style.css | 25 ++++++++++++++----------- 5 files changed, 43 insertions(+), 29 deletions(-) diff --git a/webui/OliveTinLogo.png b/webui/OliveTinLogo.png index 64efd1ecd58f383dba0fa45d4486ee98c7b10a80..cfe102781e3db13945f733fa30aa263b7cbef983 100644 GIT binary patch literal 14762 zcmeHuWl$YauqLhnf;$9nfg&X-stf@E>HhvffCG-;=ETPU{}62@ zH60)zP*M==dY70^#d7Xy0}2p1O@26G!r2O|Sp69$mIY5Ex-0R+S+ z2q{rvRo9HuRTod9+f4A~yoGwZi#9`z$)X0wS^qD*fNqYDD$1YyVnjZjKG;biG*j9R zQTeSD@YxR)d}Iie$=CIrNN4W%C2QKy+acFXiZRBPsZrBix_UM;hBTE*ayE5wmN?(v zW=1Qo<6VCooaNsMn2*vWE8*1 zeuK3w@v-cC5W9FAR}i#;l7~RS>r@n#Eyzh$w1tH2+Ih3~1UvK0tb-R!lpR^#-dm^7znsb*eR%3knvBALqcTYF}z<(ZLG}t5MH)lN!MXZ zeDhz^TVjoU{q=%a5mWro52pPbo&@Fl4$zVZXG72*f}aIR+}0(W&?1?U+#&NjJ$S1A z_@u**z}uI7krvs5smk}^g&;ave^JAs%FWLq^-%V`_TB9g`9UInFB6d{7P>1B>EXxU zrS=0^(Z*cNkN~#*6&r#SO6^BRd3LZJ9HTu)d6)CX*N9p$r_#EQs`A9L0&`W1Pb-4a zU|tA*TNlGd;@j!hnRQZZteZ(jc#U7^CzebM31NZXaK#t0QQvfZ$EU)K6_K6}*bpD^ zY+?H~Tl@25D9xbsAV{F~pq|RUO315BNJJZMYDM0G?BDlnwIU>2@HK7@)MhB+)3$T2J>Ig)?qQjXdH!LK^^8+(Y*w}p~H`s>} zKtAbhvJ*?^;02X;ftU+NKUTNnZD?(Loa=n7Ge^FkLw>>DF62jF<|e)<&;b9OE*w27 zhkxK_LPt+e37%9pzfG4(Z;)JW@jcHW>%r*L>1t#i(<}4-W(fp z2QhA-V>{c~I(X3!$!SzZe#g_Y%|T0`hff0j@IsT;qf7Y_+|`8Hwss_vm*_80m(j)O zTdAcRBAHMMSJ8Vg6|1B?5iI}V;*)Lr?5~B$;azfW?$p3Q7z_*yNoi?v4vwUm8C63= z!@wGcz-OUK#Q&|TE-svznVC1Yx0}wbm+tLNt2TTjXvDpkH#(Xr#=^#Cb~;imluPgL z4aJ1_e|2;TNf|%CpPrat`uLKVn3#~9tfHhO?B>QzqmWhC(rf#`+b>(e0)^!6P+<6_ zfp6$YWF#&rslQCKmX?k#x2ehX(*lirhNNsnQfj2AO=Egk7*Z55Z-2GX0GHgoK1D;~|Ws zFPeY1`oiI#Muvxn7aObzpYP9$N=m{?N`#%OGMwJO6tB%H5W zqIP!7sKJ-(>#M7yfG=G)f8n}rM{=53SrOT_GBY!KKJ<|8owc4*3knLV?#kdbui7}D zEOgJ6YcICBu>$w%JHFM@om15Eg{qT$tirn4ql5jarQ2&B8XEdVuPr5!UfsSM7MIC% zEW_`I;OWI?&x#NDmG5yU9*AG>jpoDYqFUQck+85Z+Am*-xRwRI$g0}fGUU=Zs$D9X ze{%~8W=oKIB><-d?-M3e9UdI~*dNPmyX+^lT5C)7dcMoF>-6iZfXHfW36U(!;T&)z z|DgjC7l$iVuiX1bU%B%anURu#!DeDUF)8V4I{PgFg^=Szo5A$dlt#Ndd$O)G{&3P) z3K|+y(E-on^2Udy`3`X){QCO(+Fq`PDJdya?)as4-0oLhG&{Zd#|56hoVQ)eQwF}h z;^F=@K>(s@1@&bm4BFJ#*!Ff-z1C)xC+Vwp&@lVWpRv8YpWZLqq}PKK(I0NQ8FX6` z7`-pUfq)BISm-L;DlRE8JYA{>mh4%_vyDy1j{A(AEY>bo83fQ-OFPoh({F=(o(a(eUzomrHRw#H!!$y-#}5R|k3*B9 z-U@GRZ9U8s3G~Tvt^&bv8FGJobY%E=wadoFrl_dch30($UD33Kq+&@=Pj9sQFOiD~ z6_tofNL)Oq_*CZR;OuPguqb;k%i}D!tn7`T5$1{Ft>**o1_`xAXer z>YY#D0eBE^2LqvGZf5q0l{NnMcs@Qe)7m{!OiZkIU|@QB`rG&KiT>UnWF#dw;qkI$w4fxt&im{-9|G`g=>Z)K3yQh%7!F+N24Ikl-QQH8gOLct32$jFjPF zVzN#QkamB&q>KPSHCf-AdtTRtSl)DSe(AADk@Qnq@o_(qfXEBz(3Y#|W=f{{^=>(p z-{bDjJ@{o`aQx}^7;-zpvM&r<$9{;aOs_o+5tAB5SKq{hYB-s3VAHnBVP8J7m~W{9#p~3@EwjD%h^JBHei6V=ytg)$sBVL%mzMqkAf^E<)XL5`o+9~3D~+o-Dw&5fm(F1TPy^_+$y3(Pi|XnU zIM-YQA_+NbOoo#rTMsI7NP~d+pkv>h?>q7U&z}QV#}<-ay}}q68$}EB-1)u3$pW)8 zu+Gj_Te-bo9=gQpBO*RfD`d$^Ng*cd*dqdPjC$Khh65m{G4QP4(Mes;?N>_+PpJ$+ zl)pC~fE1!u6JUKQDXEbx{`6*teHNE99bo7c-21T61K)s+YPk_ano{#{Fqt3A6g?_Q zcMzPL!znQX^ZJ8YF0D6DEIfr1L{e)y{u6kv#wI43x=DeO`ue0MCMHCDt}(CA_q9MY z-kq(=C@4hF7QlWJ7W@EsE05;@K0Z5J0T^iQ&r!p>lf{t??s)U*LKJR_LeavfrzgMf z1=2Dy+^!d&B%+8y1H+4cs!X7L69%C!!@eqBU0j_44IGD&a)1$Vn!@B8FoJcnsfq7LlG%}*2rTy_Y z5K%UT$uAU>Mp;pj>7rgLo;uPjN$&Ae_PB(R5yg4OGedoSy{fvpinccIg`1q*Xo!Tw zVg}$n9#~8jAjwhE)RZzY*^Q}`l98bRHnNNiB6|mip`jr%Uf%ST6`iZAtHH4`YTyfy z$4pI4Sv}*5czEyvyZPLl+R^bbx7!sZkh`#PaG>&egXgUmM#&9+j=RK(QZ_C}E}xQI z&eQ|Oeisy=z<>{<&CSgzsiXRb{7sp)Aup3L8cg&2f{GRn$RLfXZ}#ip{S zw(j72OKWR>qu)}dru#w*?tCOXJUj=7hqWbkdt#1<=~=MbHjSU{A2h+#=*RJ#3I^Djdg==HnoEMaP@7s?Cq#>h&~JC#7!<7 zE+cJnw##{$sNZSkL}wIt77?jv7fLtM{zAQ{=Z$$Q;bQl2JHY)kH(fVJ+}Oevi*DCP zrPy?VQCQiOc1YTiwh(AMrkT3Lh1G}T3-}R62g;y@IfN1fBQi4NJSY?*1 zR0i`ALS2VE9#^L~0$D)%@`^rGhG5aX4?_#-i8fwWZ~T01UhzUQ9M($2l*P#28fHlsJ=Yza9-XxD|!4t zPHg2+s`tP|G4Z%~29SZ411mjcE-w{MF!nU^v`%GcCNOb&?KGD%DZclK9d``fl=L=pg$E~_ewGq9?8 zN8r;7!uifm%K#V16D`?T6)f9ws%q*Kh!UuKVr&;O{_q^a=pW~czGO{~$zUHls-cub zdSd>27-sY`LKTtSY`kH~Ph6hC=N(g6q6|#CSg<8L=&Ie-o#$(r>R&2u%Z$laPPan4 z?oL-o&G?@iA$D52X(_V8fW}aG*faf(2xbG z@D~2rkp(Htw!c5S9le?zwmm{a+8L5=5mq+MqZ@zx*13Lq?thAyO#2%-f>6Y?n4vqW6u#TLafDU6eGTM|j(H@`w=TRIIHLL<2&5(4pQ z{`l+nE^d@7se%H{>S_6nW8KuWcUYD@C*V(4_tuLW=jr)bzwu=WgVNY9Ln-pdP}NhpdbaOLQySHzE?!h;K^992a}%?3vY_Df ztf)D(wl#c01rZBs#Nt#+lbtwbZvuQ+F=P2J)ILul$_~^TH<^PP0LntX2rxPYujjgh z1^@6j{aTtTcdXAM`cAmkLBf-Ed|+0QUtE*ma^H68w;x~I&-|8gO{?RGsDfKb_O)|j z1SD)MiR6x73q%g>`W4hbLr2#oaplD79LChP6WhGf-Cb=$`|B47U}3Uc=ULJ&NNLPJ;&3`t(2(t-esU>z*bhPN_PDG`_iWg7_~esI#8QaCE$o`-bN?0nkv3 zUx)`Tf^qqV4X^K(5>Uz4Ta1aVmV7PjEjatU_S=0u{daWwzr5(Re;H^#Bt`UNNB`dU z3qwl)!mWHxa1(6Yu{y^sow!YBwbZ*y@7Koe27HF5jywA@WCV*?JrUFV^{k377X%vk zt}y?tx#M)Mn>uml&&_F!(s#an_Q(d4s`=c`N2FH|9>r0H(H-=u9YvoR5BCTbcpf8f z+-vK~PZ0dOzZkT}Wd;9ZtlsJ;{g@tOmou11Zu=ezk;Fi_`r_nZaKYU~*6@S$(JJ502-!%M zhpE8l$-Pa6a^>nLQo@W%K*#|xJR&)D)z(uY~OS`Cl0r38xO%-#X7WAfD{S80q^bHXgfjF?_wrozW47I7>mxmDdV0p8pKOPdnPU7l z#@82Y!cVgZS_6qASfnDpz+bR#9BArkH(!6}c-uQJYd>`%`y-l{>aRyW)gS?m=LEk5 zRIRQaMf?h-VsawcQGgxz^Csst?Qf1f1u8>w_6{?;Y)k!?wLm>H;!KF58$PUm(6U_)0BtF5a)sj^P@Kxplw( zN2vPYf<1yPwdd09$#v6|b9#9ZXDf_Si}rwG;$H!B83Wl#ix0w15vUj7AwT`1|4?DqBAFw0kmAwD(G#PUtJt6Gy zYKpJmrTMoFul8=c=m;D2y~Pkyly)IJBxd`cg!(nAu#KE=5DRhHY)W@?)e0_05Bi~? z*;_5k82m9aHYBQI8aHynH;VHYfO>pxY0j~=8ZnqUwLvu>9H9EUMgLg2=QM+)T+WrW?w9IMZAeEgZY45p%La*niT_b$xnu z?(epXp44`=7n!-w5tN1tJr*O}fF#iA&t1eteO-y)Bi<{k*gT=|dY{{FZ1%7G41>fS zo@U3EB=Nei_IS#$KJLvuu}jLnv=l}3->t7$(d%whD7zlAAYL+9H7}ebJ(No_jUuDJ z5xHOBh{RRAYDf=#VuQ4P; zYv*}?SC$5JuDfBQn6%1)JUp3o?i6D5joqiu?Yg#{0;22TA6P$DjKzgBpXCup6*Z>& z@Lim5((Zp4rfzOBSAt@oiY&MpC*7nj?7J8r#u${Z8SqJ5-`{=A_Rf0B-@E%cz-92J z)pP-eFks=4y1kjP8z49j^CECV1rdXk!RtStXyX|eKY$k0k^xC)hbq7-m}O}?a4ahT zwLrmd#Xv(B1j@+ns*#%X@mU5?B)~{ppQ(PdmrcV9bA&HDb` z5vB0?{qw@*4oE~V99lzlV@sPJBUO;$$w%*0M3|HcLkG1YlX!d|mokQcG_y$ZS?>vx zH=D(UBq_pE!-3T})8ucpVu;<}$9dFO+}`}Iex@1bsbxr1Yxjh)q@b8tJNc-1?PRK} z;^s@r<+4`hB_M+zX?~PH(@E`Z!MCFnpZv8H=A!p=8w6slAHAH8WPSYYsFF^cm>_Fp z)nOR}N#(uay;1&gK8Ee@yxX(;!t)lXoZwr86^*`b(qJ+U4HMP3Sd7q{PK;k$8Mbyx zUtG#$ck<|}(S01gtC-L+zU+v5>RsC;r8azIXhPMwEM&*8Dnq=;RlqZS04L)bvD6fO zbA8EDYI6o4Go2;T⁡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 + sodipodi:docname="OliveTinLogo.svg" + inkscape:export-filename="/home/xconspirisist/sandbox/OliveTin/webui/OliveTinLogo.png" + inkscape:export-xdpi="96" + inkscape:export-ydpi="96"> image/svg+xml - + diff --git a/webui/index.html b/webui/index.html index eefa134..52cee7d 100644 --- a/webui/index.html +++ b/webui/index.html @@ -19,8 +19,8 @@ diff --git a/webui/js/ActionButton.js b/webui/js/ActionButton.js index 5211b74..1995148 100644 --- a/webui/js/ActionButton.js +++ b/webui/js/ActionButton.js @@ -3,6 +3,7 @@ class ActionButton extends window.HTMLButtonElement { this.title = json.title this.states = [] this.stateLabels = [] + this.temporaryStatusMessage = null this.currentState = 0 this.isWaiting = false this.actionCallUrl = window.restBaseUrl + 'StartAction?actionName=' + this.title @@ -25,26 +26,22 @@ class ActionButton extends window.HTMLButtonElement { this.updateHtml() this.classList = [] // Removes old animation classes - window.fetch(this.actionCallUrl).then(res => { - if (!res.ok) { - return res.json() - } - }).then(json => { + window.fetch(this.actionCallUrl).then(res => res.json() + ).then((json) => { if (json.timedOut) { - this.onActionResult('actionTimedOut') + this.onActionResult('actionTimeout', "Timed out") } else if (json.exitCode != 0) { - this.onActionResult('actionNonZeroExit') + this.onActionResult('actionNonZeroExit', "Exit code " + json.exitCode) } else { - this.onActionResult('actionSuccess') + this.onActionResult('actionSuccess', "Success!") } }).catch(err => { this.onActionError(err) }) } - onActionResult (cssClass) { - this.disabled = false - this.isWaiting = false + onActionResult (cssClass, temporaryStatusMessage) { + this.temporaryStatusMessage = '[ ' + temporaryStatusMessage + ' ]' this.updateHtml() this.classList.add(cssClass) } @@ -73,7 +70,18 @@ class ActionButton extends window.HTMLButtonElement { } updateHtml () { - if (this.isWaiting) { + if (this.temporaryStatusMessage != null) { + this.domTitle.innerText = this.temporaryStatusMessage + this.domTitle.classList.add('temporaryStatusMessage') + this.isWaiting = false + this.disabled = false + + setTimeout(() => { + this.temporaryStatusMessage = null + this.domTitle.classList.remove('temporaryStatusMessage') + this.updateHtml() + }, 2000) + } else if (this.isWaiting) { this.domTitle.innerText = 'Waiting...' } else { this.domTitle.innerText = this.title diff --git a/webui/style.css b/webui/style.css index 118ab7a..b67e631 100644 --- a/webui/style.css +++ b/webui/style.css @@ -1,5 +1,5 @@ body { - background-color: #efefef; + background-color: #dee3e7; color: black; text-align: center; font-family: sans-serif; @@ -21,8 +21,12 @@ body { padding: 1em; } +.title.temporaryStatusMessage { + color: gray; +} + div.entity { - background-color: #222; + background-color: white; box-shadow: 0 0 10px 0 #444; display: grid; grid-column: auto / span 2; @@ -41,15 +45,11 @@ button { display: table-cell; text-align: center; border: 1px solid #999; - background-color: #dee3e7; + background-color: white; box-shadow: 0 0 6px 0 #aaa; user-select: none; } -button.good { - background-color: limegreen; -} - button:hover { box-shadow: 0 0 10px 0 #666; cursor: pointer; @@ -57,7 +57,7 @@ button:hover { button:disabled { color: gray; - background-color: black; + background-color: #333; cursor: not-allowed; } @@ -81,7 +81,7 @@ span.icon { @keyframes kfActionSuccess { 0% { background-color: black; } - 20% { background-color: green; } + 20% { background-color: limegreen; } 0% { background-color: inherit; } } @@ -91,7 +91,7 @@ span.icon { @keyframes kfActionNonZeroExit { 0% { background-color: black; } - 20% { background-color: blue; } + 20% { background-color: orange; } 0% { background-color: inherit; } } @@ -119,7 +119,6 @@ img.logo { @media (max-width: 320px) { .group { grid-template-columns: auto; - background-color: red; grid-gap: 0; padding: 0; } @@ -137,4 +136,8 @@ img.logo { box-shadow: 0 0 6px 0 #444; color: white; } + + button:disabled { + background-color: black; + } } From a874052dbb8dbeb9c63e7b6ce7d6d10973fa48ea Mon Sep 17 00:00:00 2001 From: jamesread Date: Sun, 16 May 2021 08:41:51 +0100 Subject: [PATCH 3/3] additional emoji --- pkg/grpcApi/utils.go | 1 + 1 file changed, 1 insertion(+) diff --git a/pkg/grpcApi/utils.go b/pkg/grpcApi/utils.go index 95138cd..46f6b89 100644 --- a/pkg/grpcApi/utils.go +++ b/pkg/grpcApi/utils.go @@ -3,6 +3,7 @@ package grpcApi var emojis = map[string]string { "poop": "💩", "smile": "😀", + "ping": "📡", } func lookupHtmlIcon(keyToLookup string) (string) {