From 340f9951ac502c47cfd8f98ebeb4c4fc10f1b0ea Mon Sep 17 00:00:00 2001 From: ruri <215561737+ruriww@users.noreply.github.com> Date: Mon, 10 Aug 2026 22:31:55 -0700 Subject: [PATCH] admin: make paths relative (#10709) * admin: make paths relative * admin: make filer browser link and nav path checks prefix-relative * admin: add isCurrentPath and currentPathStartsWith helpers --------- Co-authored-by: Chris Lu --- weed/admin/static/js/admin.js | 23 +- weed/admin/static_gz/js/admin.js.gz | Bin 15597 -> 15649 bytes weed/admin/view/app/admin.templ | 5 +- weed/admin/view/app/admin_templ.go | 413 ++++++++++---------- weed/admin/view/app/cluster_filers.templ | 2 +- weed/admin/view/app/cluster_filers_templ.go | 8 +- weed/admin/view/app/plugin_lane.templ | 6 +- weed/admin/view/app/plugin_lane_templ.go | 27 +- 8 files changed, 261 insertions(+), 223 deletions(-) diff --git a/weed/admin/static/js/admin.js b/weed/admin/static/js/admin.js index ad9db59c0..175a424c5 100644 --- a/weed/admin/static/js/admin.js +++ b/weed/admin/static/js/admin.js @@ -5,6 +5,15 @@ function basePath(path) { return (window.__BASE_PATH__ || '') + path; } +// Current-location checks against app paths, ignoring the URL prefix +function isCurrentPath(path) { + return window.location.pathname === basePath(path); +} + +function currentPathStartsWith(path) { + return window.location.pathname.startsWith(basePath(path)); +} + // Global variables let bucketToDelete = ''; @@ -16,7 +25,7 @@ document.addEventListener('DOMContentLoaded', function () { setupFileManagerEventHandlers(); // Initialize delete button visibility on file browser page - if (window.location.pathname === basePath('/files')) { + if (isCurrentPath('/files')) { updateDeleteSelectedButton(); } }); @@ -71,7 +80,7 @@ function initializeTooltips() { function setupAutoRefresh() { // Refresh dashboard data every 30 seconds setInterval(function () { - if (window.location.pathname === basePath('/dashboard')) { + if (isCurrentPath('/dashboard')) { htmx.trigger('#dashboard-content', 'refresh'); } }, 30000); @@ -88,9 +97,9 @@ function setActiveNavigation() { if (href === currentPath) { isActive = true; - } else if (currentPath === '/' && href === '/admin') { + } else if (isCurrentPath('/') && href === basePath('/admin')) { isActive = true; - } else if (currentPath.startsWith('/s3/') && href === '/s3/buckets') { + } else if (currentPathStartsWith('/s3/') && href === basePath('/s3/buckets')) { isActive = true; } // Note: Removed the problematic cluster condition that was highlighting all submenu items @@ -105,10 +114,8 @@ function setActiveNavigation() { // Set up submenu behavior function setupSubmenuBehavior() { - const currentPath = window.location.pathname; - // If we're on a cluster page, expand the cluster submenu - if (currentPath.startsWith('/cluster/')) { + if (currentPathStartsWith('/cluster/')) { const clusterSubmenu = document.getElementById('clusterSubmenu'); if (clusterSubmenu) { clusterSubmenu.classList.add('show'); @@ -123,7 +130,7 @@ function setupSubmenuBehavior() { } // If we're on an object store page, expand the object store submenu - if (currentPath.startsWith('/object-store/')) { + if (currentPathStartsWith('/object-store/')) { const objectStoreSubmenu = document.getElementById('objectStoreSubmenu'); if (objectStoreSubmenu) { objectStoreSubmenu.classList.add('show'); diff --git a/weed/admin/static_gz/js/admin.js.gz b/weed/admin/static_gz/js/admin.js.gz index 67efcbc7991c17532d4e061f31a953e821d1f475..b530847926c532772560261ab7852872bb1bd647 100644 GIT binary patch delta 15575 zcmV;|JSfBMd7*lLABzY8000000{`s2ZF}1`(kT4hzXH)_L+L~>ZnD|?scof~V<&A+ z<0L0`dhh+DIWa^+5^9Rz5|C`g^?yGX1^@|wpk5rO+wHa=QVRqIgTY`hm>CQP19VF8 zB_YX+Q*?~^bi{Cxp#O~*_%tqPE_QYX1N8pgE0h;xOs~*?l%zQ+(3lm7&qoO@NGw>f zLhmt5lZ+KK zn;amJ2GN(4be6h-?``(;K2#VP$vP*Tq9<&uUCr2!Q6S55IMqN}6xNXKo%YI4*YIpX% zPXPD_oFyqKxcSV9nCCB8G5ZOpGy!tBpJ+->aE2$OsI`Y$-Y69XMsp!ph8C355lyLB zB9@^sO$izm?2?lL<#<9Aeq+>jSt1(9nmp>5(aHbjd4dH|1U@Axi3LfXK`#c~o1Ghp zQ^jY0A)082u;v7s=jeyClYby0M}|^Ob6$;Jel=6kG-Sb8Drn9w`Gzr(p;?^L1R4#$En2+Ht+PGFi$t3&wkx-1WL$mgRO$>wN8rg%YFQFVB# zzC6<(0&Qn(Bd=KwQa}&c?-yY5f|0+(M4WcxfqKjdc2D`iCLDEV(w)oNU^|a zyS}e93Fs2CE2M!z#O$gs)HvJGU&@-jSnXm_7e#u2k*0!@-tcc1J>K2j-F3)PlYEE@ zGIK~#mw_6qm`U}-QVh_rarfW1T4Z?fie?ua4bciF>l>-q&+wv`((EEKOVI#-=#N?P z9LH0OxU!y2HPz#^AY(K{@?(EO#Gw!c9nA%4NAinJDyeZ$u7-?;XpB=%bgyQ<6tLmY z9=ShJ76?(yi8U37q?`ojJ?fwb4^Roc)RCeAPG&T#bHgT`gw?iaz#p&Zk3SwLt&4Bd zY5CV+fL=2}_Ru>rV+)diwwf1zY?P827Boh2I_H8Ea&i(1^CqTPpi9irluo88olJ$? z0C1X?+pAk*geMij3xi?x@uAn&w&8AGi~#SFZY|k+N5Rd%W*49azFG0=NZNfqZ{IWna78l(Mkfdz5UH@@c z^%}oh&a0#PN8-M>g*vAg$v7_93~5}XjE4hzoYMG0{*v@{1b&mW+CYKumb9x!)FsoV z8U<_-bxj|J;41h2Bn<}Wm}QYbxu%Kau}bsmqF?45mR_zzy`C_C_gHBDBYj!%ZNYLp zaV!gFUvdsFP0Mf-G6oiJjg$?L|ET1w&Vmy14AZRKnAJ+E^X-`uB6qPRS$nR6>Ihu> z!|e!5`kJE0WQ^yjX!}x94UB(@-cW&|{J9n`XlP(s;!B=vFwJ;_z*c&ofe;dlg8@3y zQ(ya5@6Jd|(^*Y_P);fLcaqhTRW?{7QQ?$P6R9EnR1ZjvcZ1`!sJX?OTD94FnnitW)js~K*Vk%I>CZLx=Ni+;(-YUwtTkGx^p9|S zkrXU%I>}AFU&SKKm9eXE|3WC2rsxN(sO1o}EsFaGMl<{ho zKs7GuM7dIviQ-99zCr|9Bk!#21533DG%>3e)MlA>P;}~ZuH;|QEPGq(xa3RV=r1-$ zd~6wam?{i^sGqphHTN2jjl(P6D@->0OBq_Z=AT*JGU}(gWWx(0u31HnU^4!*8*UrCq z@W2NC*p;!=8$O(t*Al?&DlQEw%}TiomDj4GOu*S>(S@a?4^7$;G}mr41eN!qE+Pxj zPl&)Ywf&k?cBy(of?=tx6=+5{Hx6mZivZz76}BS-cZ_LDl0JHy63ht_#Zm=8^hA0Ws9q9MX;wx-k3zRn^?Q zhPVn8sn$59ldK0;jb2PLI4hDX(Yu^dLC|Q@OK>(J1sbs;Aw_RDvf;VfK*3TXl>nTQ zLbx3V)P|HURBg^lVcW4ATVTOvG`7_Yt3J(tGE)3-cJc}h(Rs=32MJv$o*lN5-Z&*! zt*4F{vnv3go@8RL5>%w7+8A>*mTFI&;u##ud!nE?ld8*%^d7aI9t>z5!2N4Izc(%d zgM=} z^LqhYyVwqYxDbaj*R90FcuM~+(c#i7iLa}95GyGW%3Yk)+CdyNF~-Zx`jg$IU>M(Ea=}OURXk`_1l?Csu9Gai8ZT zOOB>AP1+uH95LFY^f2uAG1w21#OQuj|u`tKu2??i5XMM*dqpckxvm|=lN zOF_5_D^i+%B_+pD^}ONZB$8SlG6<61GJ02L%V3NEZTPt@}Ff-=tHD{cTx1?Gx_fc{QEupdj|i$eHMLm z`le`zPOzBv$0=h)8~#k$L}A~5K?78lTy)GN=)vT;;N(ThuxRVS>e@NGY+rN{?R5Hr zy^t*0PG+4BdWa$vp@$0J5A>r)_G~^Ik%FsDBxbW2=04$HLzQ+mpLwCm*?iU)>{Jvq zo3uOqg5)WVNqg|~v-Wqx_Rq=nEbJR&}(}f#RlrE5USca{4bo zxG8QpI{gWetDF_W$LpB#i!)iTotVGQ$dzz{&0x33*%E=w7kI+KY8R&jXK1cGTXH9} zhvh)4Ms@Jv|33Zrzn;p0M3FsO{t(Jg)ai?Y&Z;xj5zEH3m_d*jlW=j$CKh>P_5Bcj znT@}TVw|QU9ADUcE$P93#wI*Wu1*77@_J-II>wQD)yy}FKP)%)f+SG{imZs7CL zjLNMqK_h8yMpRi(Cw(h|1)O-qglxv4oO!K z=by6OZHZzv{%XXi!fe$LhiV&rnMtxVfz&N}fS?@NufL+*5NN3IJd=_zS&5_?Dp56~ zjuPE)NO8eR`2mQYumq>p%ype%be*1q!IeAC%t~y;8$DUYGewUy45veS0J0UZAY(sIWB83iogK!$TV6pEUUUbumBW$h=I=` zVKc?qgsk+7SQBtcgrM1kubl)_F&O3s9#e@@*w^d;SnXI?>*iep%d*pN635Uy-KuCN zSHn(t-EA^|(RTeB3wv;C-0Xe-^0}s;$>#HIRlfb4TR`q)-dDogaPG_K?|H7o)1tiU z=Q+~-dw`WTok7)9JNUl$`542#nvqL5 zS<0VnS?&fcK=-<8MMF7rdnFV(C+$e>^d!%pq_T;fR+Cve} z^OUM9N`qgxLo#($$_?RQ$#M_<@6$K0`y7k~bi8a=ywGvvLVe8hRFoq&Bo6sSXrJq~*SddQq1KmwY zQf*r9xS-sLmH}nY36SDa9eFM|H*=WA-{zishfK$vVTIf z+XPD*76K(C#Y>mAM4ZtXVRO;;!-mRe5_8Y3ASuI1Eq0@ezIg&S?pAI|Qg@Jt@P?Ux zRV<`z1+dm$fUg`0<_glNiz4Mj4%}2iF&6O@wUx!8*-`?CD7ZA6Xvko!uuK&$e$i_p zE?IHmSt!uulp0xIfvO{Ewhz5ImfHgChp_onJ869na`yrg(V=$9CV9WW>0AmSsMm*I z_Giig6*NSH|N8;=KJWIv?e{)Dyg%rF3wh*&`fzs+{_3YBn}{iTIz*3ag$G0Q_s5zQ zI&`DR|e| zN4qFtf_K4qI9=vbl5y02-23}u6i;!1V_CTqHCfXd(edZd81?iNg2BL1h1Q&Z>~){D zoDWr%eb+wXOP0g}thAuMAXh@me-F}5U7Wf81$BPis54iLDe+~T5Q;XAwZ~U-Y*206 zaC*sGnNu6yq7x&yO;m_BdLoA=@4=dYfhJ&%5$J7770mZtCTW&>>IoJ}{t zKi*!J*z4mC_cA4f?qo0XK!x^`EfEYv`8z7{s4wp;#;B~{fvLH%4gXr)y0DbfNr955 zIs3@@JrPKNwE{99Siu%hxb}d_&uqVm@`cNiU<7u-E;$;a!=k{;lYJ2wf1D8oy9`Bf z$0P-ZYQZi;u#?)oWm&)6snL^812uDM9b}Nhw_ZS7$*0{bBc` zz4>V8ntQZhml-Kc{cqOS*NVJp@o0UEluc-i(^EJDs#cHJx5}qW?l=3}`etw}H1(f^ z>Q`&o_|f}gnhH|1sUR~sf35KUd&412gB`fevIQxG6ctCOKiQrizCc6tp@jS)f}OvM zqBoMd@(*P_fSVJq6g`j}892A~NXr6cN&VRWh0&}Xb?rlZzu%X;c7*I3J^(F^1~zy0pVL;uvaX`DKT`cq6P9L z#3I1KG^M%D$R;rzYj-_#pRugRNjxtIoLqLS&e`7}mMq5~65mIvNTfVI5 zSN%MAfC9z+%Yq7GhgIkVGR+lLZ+$T(Sx{H9l!YUfQ+*IOaPCE}Qdud+eb8E@(o%=% zDK6Fl-w<^VDZRzh$_!zFVkPo{tINKwwyNQc6XO}K=^VIa$zefOEa8@{f(wGpjUUsb zZw}+KVBhkke{jhkC14%00ZH#vE(Vn2LLfE<9r*aoi3?TP^G(Pb8lo0Ny|wm3)lxE+ z=aW|N+i$=9Hopp25^z_owcA=JBTTz8`pm!?vv^+S2CSfil2XO01x|3)p~WUJxgzlq zo6T?r_apPAuisS7I(NguA${Kh<#VkCa#MAFg);xbe~1tOuC9v&7R7Dx(VBa+B)6tj zpXbYHnlh)DUNShPVp&t_>zNW8)%qiyOu!0d7(0Fxt@kfjI-e25NwFXWS9&t$u!Vca zfS;h|sjBE*fLg2bPZ?jK@w-|6+z6)EEQq6E8ZDa}0_KdA80{`nsH2z1-NPg)2uYXq(E9x2gQMZ7M(6rt;rco;N`C^}=8H0zDiWI#+r!dWa%m zn}&cCqj4Uc{?v~7LQ2b0?^NvG)9fyl%E&*hf2%4REZ40Us)qb!OLfaNs;vpy`=)Lz zLR2as+fJ4lp2@RHy40RrUgdqmDT-yE8Mm((D^N#zQ8g}9Sq+J)d#&7{F+?BqWLwb6 zbqp)8i)faRD^J5Sr+ztvLmf@2a767?-O-XiI&LO9h>bsR`qIn0hrX$0aa1_=^Esaa ze0;j2lO0Hs(i_NJo&l7D(+K7f|cOOx7fMSpS z`-nb#=ud)K^e_qMt^3zXhR~1q4>Gj#a&Wgi{kqM(GUVn~iCLB%YUj6hXBYKc}U4Zuh(PrqSF=h!FZbSnFS7a5?( zG;rmTX3DB>Wv+Pt?$s&5MLd0r3q0d(KQk$Zj~x}xP_=eKfy+`STXvDk8IHcIe?AW* z^bnCOW(j%!?&T4iP4Q<#%!K}a;<{mSMMA(iERNz#)PMLLiy(l$XwnI+6R6_qE%nB9J)8tl$3x7{CQeZ*q zhT_T*{6RBb7xnvnN!O2+nb)%K%Bhn-C1&!s*(#*`_bsc?c9n6}jya<#Q4cTJR!eI+ z-qLdE>?eA(-Lf}dz?@*YdvIe@_vDKHx~)u^sb<^BlM<7=k|p|>C;`0Fe>Zkd=i_mK zC*%(*Egt{wrNw{364u=Rn=D_sBQ~yH^>N$9JBC)V-JyiKcek9B8slZ~+yIOE{UtuoLD>k87WxM$; ztj>QATb<_`Z!}ybOhWevi5zIz?3+!SVW7;9WLY+Sv}scglq}ml-n5+whaawzJ)wpv z<^rawZ2BbJ)VDJm#&|dcX<~?c)9SYFUjyOPpCvKWPc=aGw?e#NYqk1pIl%LmLgRQDMS7F!0Q64!R)IxsU{_iU6 zx9W6N=&$$SS6s$NOA4$WTLX!sPM>8EeS(G!SM_`Z+b#u+Ey@c_wx&54oZJjgcYXWd zW9!&ExPR?J-yr(DSQn{S zz7_QhE|H_8yA2@R$a>y$h;*i^jk0b*!ebAl6Rfy8%*ASMF7?RcJ$k0!7Ip9Q>J0oU zhDo{c^aXQbf5r5vT+K>7mCC7?MckCHOa*Q#d0wBgw>6K+Nn-a*?UF^R=B2V--rILI zZgXv3Us6ZI3T;#7x%O5+s;ZOLs<(#hr(DNo<#OG|Bp;DmW&#i7keW8OsxMa+yA{3m z^ax$r>pLtWTQzTqi<8Kl4ro)lkK;n@KZ*DqSJEP$Zr)x8$;1VSXj1mnS247=; z-C(6H%v^H( zDebJtl?wWHLk*xcoNr3RzC-7S1wl(TM-WXe|G32PqMw<8*8S@e%bV7BRZ88x^=ag zf4fen*qrjm-M}FP!{sFVtOMFS6{%F`4MK{Eqvo3kUzDm*@5-}zDrlb8R#ecC;SOeO z7K?N1x-6CFyYk0ZUNv$&l!IklO#S!%lX(FzB<7^>^8?*p6SJPxD(Hk}I6Wg*kYK2; zC23P!`5{rLy4y%tyNYVs70=qQEu%Q_ILzTE6aIyWQS^^lbCadH6EQ z+8keAr^oC1>FPTrj(~Rt=%5r>(GAp553fj_(N zN2PYk$R!%HG$Gc*e9Aoe0!qD8!L1xxHoWzDY~JS}Bqa50vw|#?8r5AOR6$#h&MD+$ zHJPv!sZ?q(Px(`cTaTJ)r`l>CWpjX3Su5(O)1BilcCz)pg(J=i7hhG)0JD?@{Cibb ztCNBrL4Vfcf0&e4iK^V0a4n=D`uYO&wc{v6@WC8SKSX^g1^V#s(VN$h72+NI@9_OU z~n8fCRa*1lo?mzuyp{gKFed4EA?xLB?{SlC_oXA9?B@OTk!z2ynx zNN1$G!xM%gNKeh;?>cQ|y%%}f*s~>8C`@0D>yycIYS`TEymM#HaxEiT_phtI8j@K4 zrcUzaeR3lQ`B6%6QO{br#ZIF$N&QDS-klBo>pIHa6>+T6daP8r=%b>3x%mC)=$}OkGxrZlfqE3>)<%1G}#*Z`x#M6>Smvsi)3( z+60on1!9>#0K=IWT=<)l0w5=UXVOKxR;*d6(g8GuwXB8ODV5VL7<#h1d-4plBz38i zO4V_UW9O;o8NSk}JlWkv{|jE5(*J|(XbK2)QW>Vp0X#MB*JwW;j^rvPB;gu3AY3jd zJtt#wsb0wBGn}S!iw8=rSBzd(uFu)g}(H#K@AT)2=_FQ+D~cMUeGo(o}971ldqez^h*E$U-m`A~sH zI9>6QCLjr;-M@zF)L)APVVJQ?c}&?gh}&)4Sl9}#O+v5Ixf1m>n;_+ys(f4WSDSbG z{r>rHskzcCVYeK}!?CD!;XRV$my2 zZw)Fyw-U9K3&B?a4Rio4Q?_Ojed1rSgC3dN=1Qbfhh3e4W;!7T6k% zrT%Pf$TZtz@3Mzlp3fl&5-r)hknED_`%ZFSs2jp=PlAR);}I*wnlVG2ZO2>*Q&`op z+?mo;zrcI9LpddXu!q8l#Tg2uiqhT#6!btCo0NqUur|q(^1(0D+s1}bTdCOAA{yk7 zFduA3xZjrv)jYjyVq;b$<8YFkZIO;+`(zwFtrvN{HLVt z_{v#3%G;Q3tc__8t{4*}YCZ0v-C5<-_;<@s6C!*feO1n?y4j4ss@YLtfmQphS*-%KC9ef&)W~(-B`(=) zPz%wtZ*bL^E_{W@Wct|RB9GIg>}LIa9#^Pt@LWiL;F6Bp_r_OsY;py!=iHgVuU`TA zx48LHUHtfxn5tEGE%c=~*~Lw3#r=v~-UwK48~tr!(Em+B(3^KR^{Tw2v3dxkKs+Zg z9n)AnZL1UN7ukL#cqgrqCg58ERA~slsJ7LDf<>wu`q4-F9fduoGR)^C~%k;?q?3 z$|2;)CCZ&-^SE6ykBx{Drb$y?k9y5Os)Yc5{oGVx^Bg4wo~ZDhg5?$2Y;Pm1_2U9h z4zuLAV7Z-dtco>7ms64{Cm2V#AV}qs+3~aC+0opqt}N7JV6BAt{zpe_`X2-ISGe^@ zyblPkoQT`U&3asGhaOb{L2ILrEbn7Q0q>LZZh-sg3rGJY@}j1$e`y$49Vts*tV7Lz zs_Mh5FYbQw?xB_f7KVMV*r*-|9_T|6`^YV7#B%TDvVJF;x11x z%_`Lk%sK_ZHCDb28&@Xg60u)@MfWU#-V48j0eWjLmZ-f{k!3`tctMR9>O&+8%hb*C z2U}EsrvxvE`oZ$(V=2A?uDXw9%Ws2!T73nT4Z6tP;CWY>`WsVV-5QiFxqqOOX-X$k zHLd8gBp*m$c+!?~AkBm%NDdxRv641-Lx!nAsR8Q`Uu^>B*}A?fHAw=@%cKpfyHGfG zweBmIR0Uqe%$lX=&6}&c?Ib(Nf2i!SRW*GVd6doxe~otU0lq2Pg+ld&iq=OXq>Wn(o<5Yhf^WT9$&$m znkI%9%|^Y)Dt0ssbNb}zG01Iyh|r&s!V2v_7)+luG|L^-XLCW4*3)-HyEk38r~ECZ za^2GcCTn>x$m?(q1_@ob#phwds(mWvT*o5UiECaw-9vc9SvnVi=n28{J+!+Y2pAcQ z;D-aRsXE_{XH~J$yNO`PU$4;L3)5a zq6bYdbiC}v$|@AD=*?=mplgrSMg>W+pbKAbsidNn@KG~I-GJcpp)q9IG&Zw zxjht!eH#qWo1B>Y?^Yxv*9K*N=URK?Y2UtTs9bkNCfU#h;B$yY2A!Z$n{*TlOxb1NBI-tlm2j+VD2alto7daB z850_;SD{RkRX~dw5@@oDEV!sLZTYDsYlFJ8yMkYSu5>f!LH;jUYkiVStFn7c`hu&6 z+a5xHKX(jMBG6QS%u>jkYH4#xPwt@pUf3HEaY;yKZ=^=&n~i#pET!*&i-Kj7rwx}n z%9%SD=!#a$86-um>t=Ala1Y(TR*|{SmV)r=nqueXU;s@OD5Z*-OndH4J|JrN(O8SO zW7xna1R}oVuV+iCIYZ;Vm+l#8`0$H~m@j+Zp!?VA5!$DJ2+{^>-AJ%pXAksL>p+in z$N_cSRmIgj$x+^*8R zR8GO6c3bt;!x>NQUk3vT*BfG8t#0NLmpw|R_t?W>5$7yh6BEuMNKSNhIdtWsH`fEJ zl&5OTjO`SE&`=}?J|I_uWZX#x9p=5)wY2Q&2w}dNaHYP}y&%<{k0z~BX~ zmCe|qR(3h7myOd!GYSiu5Eek;aUC=cfyQwiSEtN>>u)yaG_LiRC*$TO;60Hw{8kC8 zcb>5LY7MAMRwOl8S1GT-x=Q&vSmY`uX?-}ks54P6)&a{U|K^Nlq6Sf1)gjK3HSnas zs6qNn>r7hUqE_}_pKC=TP;K&g4HCGBr|!v6ue3V7MZHK$qFQ0h>lGn{p*Dd|;}CW+ zOKjACv`u(ro5;1T|DQP%7%BI)RKvU%2O#9@pHOF3)lpiu6Y~Xdl!`o>#}`DKCH2jD z_4Qd-fqD*seOjmjWYepW)W+)Gs#`x}7J{Y4!sO}72P^5d~=K?RFsEJz{HNIR>;cz3=O?u2a-9Mjv%9d0~*O@7OZQeR6ywQ2HsSH>Hz+XJtJJa z&!}iueO50}ts;a}!A_o8bd=p}LP6P^(@)@XI2fLg%J2JP)D6JPx1m0D}nnp&BX&+rm(kurjR z5;P)QDE?`mJ?oCj#<-v1sv&?EgTYB$#Eti@Ns7_5R(j_7Rj5q-bS zh*l5fi^fnP|9uE~?S_%ua`J3vL(m<6e~K0VX|Ix6`Z`<%L;>rx~9OzgoynOlE%n#=XhT2Bx{9EeJ64-f;zfSPjY1FEh~&0g+Xr4y20Q^_#0n3$>D8RDMZ0rRJTwFO1ZG=8p%8 zs(f(&x}xvR0Qy|v{1Q|4JGA8n>-*a)74HdS&=49;+0qe98*QyN{RKX58B#)!vi!srCi~ z1Q#zGCdy7M?d87K@=(toFc^4${&6-TUlInZUakY^G@Cf^*F?p>CgPG67drHp#h|Mu z=yIw8-U0yY2-k0fEa1jU=w#sEXQ>&ewb>tRr%tlE@VPZ>SUHtx6Ykk6kbB6sMKWz3WpJGJ34`+zwkHQ6-uROaq1M_R(hI%iU=Oz3yL^JpP>t^eic^ z_eE_#*VEoXd%EIlmi?p~o0_m{3W7Pyl=PCcuF@dG(oUkz&6kgB%$QisRBNUMS$X4H zNWaWGY&mx{Bh4OiH~f@iF};a8+cIByo6~wJ#lET_YmjBvJejNIz`+F(deK-gz^2Zj?vW`FQP7Mu*_ z8au(z@tc#Kdh{X9I4Q(o@(YehCgd*Ajz(n63PRxWez_6&$sQ}E=?l*GwV|(k$@&OR zmGj(+D@T;uQRSO|ck~4@&|*rtPx8tDp|kN?dVtxiT_1|%``Wt->jc-ebLpZ#qchUy z0vCe+Hx<)%1YU@N8;Pe6v*$Y-M8XB#ZnFvEMLd-HcJO|ib3;2q4^hK4)Jh0-&_fhG zP%mW;d?MNpGCaY0^SC6`nuNcHd2jiWqx;qWpI&m-o42;cBKTJP)j& z9xxTu`LuSMwll;UhMS4o2=M7+|!UKDJ0LX8_&f>n-k-=n*BnpIR{ zz%AP3nA|KNl4fJpi)j(3#M&T&ZBOCo-stZ{ze3uGQl*h&y$MKd&nwy_%JYIeJ&=rO z5H|Gf-M=<0e};MIZ@@bc5H?QPWpBBM@LaI{*3^Qe(tZTUrBSTRaIE?{K|bqxk1b7@H1EuT%%<@`D+y} zR}R#xCZLikHI%KwV56&Ez7$i3HoBmp`h;0kC#T)<`zOeA-B?X>L<$+K5ImA1$q#@UsafDeU=$pN&wtaG>(WY2}x6Y}Zx4 z8!BHgky4unbU_pB7^n8^s^1Nj6Bb{P0$lP{3#%~LY>6G7ho22AY2mD-MYtOOrwva2 z3Raup;zDkoR^775KY+c!X*$C3g*<<$e>5~@&{QZID%&I)YJD)2lp8v(&5zI4-(w0tR?3I< zf}t3#lLz@)F;MVztADd)e<9Yd_01Of64t5ydxJ$gODYClyVxvb)~?_6f?!)ge>9hXLE&sMs2UXx?g?cv*6Xg8_z;I`Tcnof&<;sxGRtEmTTdylc%fd;6K^FppJAE zWz31rV*THZJK#UUVD9n#f0Dtxe>U{5WiYRG^py?f)~=&vsBcqQxd3%<_Vu9P-cqp3 z6>>jjX>XSF{vHzb)4w~m594=x8n(t%me6OI(-^(Xl+ly2>|ikcdjP&lO>DYQ*`(#a zJw9vNO+@kZKqODi)uq>XM)u14Ne2V@NhD9}VqAS1h+;FiFXm~A-eNHge*gyqtJ_88 zYAo%dTXhFE;5Eab{8M?c9eszQWAg*99KDd5nm@{O`|ex=D4S`^8&Vq~4W{iiNOSs` zd{S&6NTMDxt_%n2Pt?2lEJ^0Cn;5QKkVNFr$UuS2p5UsXL&=XB!f7j4D5F-7g)LwWz zsNsv3Kq1V(o~D3iBJ48tMA$cvn%HS$4xh4lF_9&`DNe_>G&_5R+ES#UGlpK#1?hyD z{gwXkq*(N@>ss0c}NdLW_A)5rp`eVm=NRN-F^Xy_PPJ$Lb6RE<6JRH9_ zHp=IpKc}RZQxe-cf9R1KSlgBJvhY*P=9#!z#ZjIexbmw&NpVG9RMHIj*fk_N(+2~Iv- zkY!ih7W~**e<3$~UFH7u1zFw%)fE6%Kfr9s&v&MkXt#^X$D#8b37S%|tgL2&Ar)Vy zoF>&nURBVUuw1?iT%Z}wojZ2XgJ=&$5AZDCw=R7}2T+;{r|>BhPTay46#jG0oZ?p0 zlEr`7ef;fyc{k1)mPD&xkUYgPX%9X;IC$EMJ`N_fe?@TCLD#1G4CfzaANP$JP!eN! zhyQ^u>xaX4&yUf`o8!Y*=>6HtS1-?AK0ie--n>JHM@P?3PtlLh{|B8MzCQf^`N{Lw zXLpVRTn9Znd8KBLW)n0eX-*0`%lbMe`p4;MXqI2FqIv+^o^kaA8x$Bfo^$<23XP5O zY$kN!e?4q1%J=0oWLc%mBvZ|8OU|lckWN(|sq()_22r!>_zjg^8=P0QcxF3mT(ZpY zjK*PW`O5^-fT}70@l%8z!W&rq%rkx4E=Vqlc`W7y(Qi>5zd7+{0b&3pa(Qx8jyNuj>!nzH3HMbd)Y!Dch z?;wrpjT(^CJ%`Y%7;;nm%zJPF1T~*UR@Ptex7OUzP`X8*szInr9avT$*qP+66wY~ux0gn-!u$pJkbQJi=@tm71|gJ`liKBOAfjq= z8z!<_u3#mnn$J+K>$|bp=IqsgowLTGe4&MgYY+?T0Paivmf@VORf&M)dNr#U&Dj0cih!}a~-gtH}8VY zKw|(W`Ubvp)5TZum^(_yvZzRq<3e=$b8O{=p+GAEAg1J;o^CfzKa?Azk+}*s(xyA*-{&cGc}X)FyQBbQ%C zeSoA~>er`>TWb?8I3)ozxLYb0I)~Ic{Q~YEZm3}Bd{_4>t>S;A#vqkhtwdaqC7NQ6 zMueCk$mCDm;7{G)Pu<{8-QZ8%;7{FPOWoi#xkQ$Jpu<6Z{Q!*Qf8eLG-IBmeUub4*Fbq?x3Gz0~G_2hw_ztEJ6Q}ej*JDg2Od$)_e zmH(;dD_^hz&De;h1SMoaW5O#pu$$x4da|WVCuw6&u1Kusw;jo$hn`BRnugv=veFP9 zv7D+DiE&Ev5yM4teJ^T$96gwpQJb#LiltQ4NRd^r(Ba#c2sljLMy|EX@PbaTU`4-d z)4wdJAZO%C&!tN8+Ubia$r=+(e%Y{;m8%a)A2;oyN-hbL5X>fNd;J@pA+j<}1~QXw lP1C!g=NGWZIy&BhhBtvH(QbDBUjP6A|NlhtR=wyp0RV`8aeDv& delta 15487 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 Mount Clients - + View Details @@ -218,9 +218,6 @@ templ Admin(data dash.AdminData) { -
diff --git a/weed/admin/view/app/admin_templ.go b/weed/admin/view/app/admin_templ.go index 0a05cc042..10171e74b 100644 --- a/weed/admin/view/app/admin_templ.go +++ b/weed/admin/view/app/admin_templ.go @@ -199,419 +199,419 @@ func Admin(data dash.AdminData) templ.Component { if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 16, "
Mount Clients
View Details
") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 16, "
") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 17, "\" class=\"btn btn-sm btn-outline-primary\">View Details
") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + var templ_7745c5c3_Var12 string + templ_7745c5c3_Var12, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%d", data.TotalMountClients)) + if templ_7745c5c3_Err != nil { + return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/admin.templ`, Line: 213, Col: 126} + } + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var12)) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 18, "
Connected FUSE/VFS mount clients
Master Nodes
AddressRole
") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } for _, master := range data.MasterNodes { - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 18, "") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 24, "") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 24, "
AddressRole
") - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - var templ_7745c5c3_Var13 string - templ_7745c5c3_Var13, templ_7745c5c3_Err = templ.JoinStringErrs(master.Address) - if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/admin.templ`, Line: 248, Col: 67} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/admin.templ`, Line: 244, Col: 121} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var13)) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 20, " ") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 20, "\" target=\"_blank\">") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + var templ_7745c5c3_Var14 string + templ_7745c5c3_Var14, templ_7745c5c3_Err = templ.JoinStringErrs(master.Address) + if templ_7745c5c3_Err != nil { + return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/admin.templ`, Line: 245, Col: 67} + } + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var14)) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 21, " ") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } if master.IsLeader { - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 21, "Leader") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 22, "Leader") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } } else { - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 22, "Follower") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 23, "Follower") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 23, "
Cluster
") - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - var templ_7745c5c3_Var14 string - templ_7745c5c3_Var14, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%d", len(data.MasterNodes))) - if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/admin.templ`, Line: 281, Col: 85} - } - _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var14)) - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 25, "
Masters
") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 25, "
Cluster
") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } var templ_7745c5c3_Var15 string - templ_7745c5c3_Var15, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%d", len(data.VolumeServers))) + templ_7745c5c3_Var15, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%d", len(data.MasterNodes))) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/admin.templ`, Line: 289, Col: 87} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/admin.templ`, Line: 278, Col: 85} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var15)) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 26, "
Volume Servers
") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 26, "
Masters
") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } var templ_7745c5c3_Var16 string - templ_7745c5c3_Var16, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%d", len(data.FilerNodes))) + templ_7745c5c3_Var16, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%d", len(data.VolumeServers))) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/admin.templ`, Line: 297, Col: 84} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/admin.templ`, Line: 286, Col: 87} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var16)) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 27, "
Filers
") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 27, "
Volume Servers
") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } var templ_7745c5c3_Var17 string - templ_7745c5c3_Var17, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%d", len(data.S3Nodes))) + templ_7745c5c3_Var17, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%d", len(data.FilerNodes))) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/admin.templ`, Line: 305, Col: 81} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/admin.templ`, Line: 294, Col: 84} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var17)) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 28, "
S3 Servers
") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 28, "
Filers
") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } var templ_7745c5c3_Var18 string - templ_7745c5c3_Var18, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%d", len(data.MessageBrokers))) + templ_7745c5c3_Var18, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%d", len(data.S3Nodes))) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/admin.templ`, Line: 313, Col: 88} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/admin.templ`, Line: 302, Col: 81} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var18)) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 29, "
Message Brokers
") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 31, "\">View DetailsTopology View
IDAddressData CenterRackVolumesEC ShardsCapacity
") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } for _, vs := range data.VolumeServers { - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 32, "") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 47, " / ") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + var templ_7745c5c3_Var32 string + templ_7745c5c3_Var32, templ_7745c5c3_Err = templ.JoinStringErrs(formatBytes(vs.DiskCapacity)) + if templ_7745c5c3_Err != nil { + return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/admin.templ`, Line: 384, Col: 107} + } + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var32)) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 48, "") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } } if len(data.VolumeServers) == 0 { - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 48, "") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 49, "") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 49, "
IDAddressData CenterRackVolumesEC ShardsCapacity
") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 33, "
") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - var templ_7745c5c3_Var21 string - templ_7745c5c3_Var21, templ_7745c5c3_Err = templ.JoinStringErrs(vs.ID) + var templ_7745c5c3_Var22 string + templ_7745c5c3_Var22, templ_7745c5c3_Err = templ.JoinStringErrs(vs.ID) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/admin.templ`, Line: 360, Col: 54} - } - _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var21)) - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 33, "") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 34, "") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 35, "\" target=\"_blank\">") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } var templ_7745c5c3_Var24 string - templ_7745c5c3_Var24, templ_7745c5c3_Err = templ.JoinStringErrs(vs.DataCenter) + templ_7745c5c3_Var24, templ_7745c5c3_Err = templ.JoinStringErrs(vs.GetDisplayAddress()) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/admin.templ`, Line: 367, Col: 62} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/admin.templ`, Line: 360, Col: 75} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var24)) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 36, "") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 36, " ") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } var templ_7745c5c3_Var25 string - templ_7745c5c3_Var25, templ_7745c5c3_Err = templ.JoinStringErrs(vs.Rack) + templ_7745c5c3_Var25, templ_7745c5c3_Err = templ.JoinStringErrs(vs.DataCenter) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/admin.templ`, Line: 368, Col: 56} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/admin.templ`, Line: 364, Col: 62} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var25)) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 37, "
") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } var templ_7745c5c3_Var26 string - templ_7745c5c3_Var26, templ_7745c5c3_Err = templruntime.SanitizeStyleAttributeValues(fmt.Sprintf("width: %d%%", calculatePercent(vs.Volumes, vs.MaxVolumes))) + templ_7745c5c3_Var26, templ_7745c5c3_Err = templ.JoinStringErrs(vs.Rack) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/admin.templ`, Line: 372, Col: 135} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/admin.templ`, Line: 365, Col: 56} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var26)) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 38, "\">") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 38, "
") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 39, "\">") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + var templ_7745c5c3_Var28 string + templ_7745c5c3_Var28, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%d/%d", vs.Volumes, vs.MaxVolumes)) + if templ_7745c5c3_Err != nil { + return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/admin.templ`, Line: 370, Col: 104} + } + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var28)) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 40, "") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } if vs.EcShards > 0 { - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 40, "") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 41, "") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - var templ_7745c5c3_Var28 string - templ_7745c5c3_Var28, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%d", vs.EcShards)) + var templ_7745c5c3_Var29 string + templ_7745c5c3_Var29, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%d", vs.EcShards)) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/admin.templ`, Line: 379, Col: 127} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/admin.templ`, Line: 376, Col: 127} } - _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var28)) + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var29)) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 41, " ") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 42, " ") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } if vs.EcVolumes > 0 { - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 42, "(") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 43, "(") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - var templ_7745c5c3_Var29 string - templ_7745c5c3_Var29, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%d vol", vs.EcVolumes)) + var templ_7745c5c3_Var30 string + templ_7745c5c3_Var30, templ_7745c5c3_Err = templ.JoinStringErrs(fmt.Sprintf("%d vol", vs.EcVolumes)) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/admin.templ`, Line: 381, Col: 119} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/admin.templ`, Line: 378, Col: 119} } - _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var29)) + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var30)) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 43, ")") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 44, ")") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } } } else { - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 44, "-") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 45, "-") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 45, "") - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - var templ_7745c5c3_Var30 string - templ_7745c5c3_Var30, templ_7745c5c3_Err = templ.JoinStringErrs(formatBytes(vs.DiskUsage)) - if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/admin.templ`, Line: 387, Col: 74} - } - _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var30)) - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 46, " / ") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 46, "") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } var templ_7745c5c3_Var31 string - templ_7745c5c3_Var31, templ_7745c5c3_Err = templ.JoinStringErrs(formatBytes(vs.DiskCapacity)) + templ_7745c5c3_Var31, templ_7745c5c3_Err = templ.JoinStringErrs(formatBytes(vs.DiskUsage)) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/admin.templ`, Line: 387, Col: 107} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/admin.templ`, Line: 384, Col: 74} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var31)) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 47, "
No volume servers found
No volume servers found
Filer Nodes
Actions:
File Browser
") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 51, "\">File BrowserTopology View
AddressData CenterRackLast Updated
") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } for _, filer := range data.FilerNodes { - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 52, "") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 57, "") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } } if len(data.FilerNodes) == 0 { - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 58, "") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 59, "") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 59, "
AddressData CenterRackLast Updated
") - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - var templ_7745c5c3_Var35 string - templ_7745c5c3_Var35, templ_7745c5c3_Err = templ.JoinStringErrs(filer.Address) - if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/admin.templ`, Line: 441, Col: 66} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/admin.templ`, Line: 437, Col: 106} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var35)) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 54, " ") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 54, "\" target=\"_blank\">") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } var templ_7745c5c3_Var36 string - templ_7745c5c3_Var36, templ_7745c5c3_Err = templ.JoinStringErrs(filer.DataCenter) + templ_7745c5c3_Var36, templ_7745c5c3_Err = templ.JoinStringErrs(filer.Address) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/admin.templ`, Line: 445, Col: 65} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/admin.templ`, Line: 438, Col: 66} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var36)) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 55, "") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 55, " ") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } var templ_7745c5c3_Var37 string - templ_7745c5c3_Var37, templ_7745c5c3_Err = templ.JoinStringErrs(filer.Rack) + templ_7745c5c3_Var37, templ_7745c5c3_Err = templ.JoinStringErrs(filer.DataCenter) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/admin.templ`, Line: 446, Col: 59} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/admin.templ`, Line: 442, Col: 65} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var37)) if templ_7745c5c3_Err != nil { @@ -622,64 +622,64 @@ func Admin(data dash.AdminData) templ.Component { return templ_7745c5c3_Err } var templ_7745c5c3_Var38 string - templ_7745c5c3_Var38, templ_7745c5c3_Err = templ.JoinStringErrs(filer.LastUpdated.Format("2006-01-02 15:04:05")) + templ_7745c5c3_Var38, templ_7745c5c3_Err = templ.JoinStringErrs(filer.Rack) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/admin.templ`, Line: 447, Col: 96} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/admin.templ`, Line: 443, Col: 59} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var38)) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 57, "
") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + var templ_7745c5c3_Var39 string + templ_7745c5c3_Var39, templ_7745c5c3_Err = templ.JoinStringErrs(filer.LastUpdated.Format("2006-01-02 15:04:05")) + if templ_7745c5c3_Err != nil { + return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/admin.templ`, Line: 444, Col: 96} + } + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var39)) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 58, "
No filer nodes found
No filer nodes found
S3 Servers
Actions:
") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 61, "\">View Details
AddressData CenterLast Updated
") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } for _, s3Node := range data.S3Nodes { - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 61, "") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 64, "") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } } if len(data.S3Nodes) == 0 { - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 65, "") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 66, "") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 66, "
AddressData CenterLast Updated
") - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - var templ_7745c5c3_Var40 string - templ_7745c5c3_Var40, templ_7745c5c3_Err = templ.JoinStringErrs(s3Node.Address) - if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/admin.templ`, Line: 497, Col: 63} - } - _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var40)) - if templ_7745c5c3_Err != nil { - return templ_7745c5c3_Err - } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 62, "") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 62, "
") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } var templ_7745c5c3_Var41 string - templ_7745c5c3_Var41, templ_7745c5c3_Err = templ.JoinStringErrs(s3Node.DataCenter) + templ_7745c5c3_Var41, templ_7745c5c3_Err = templ.JoinStringErrs(s3Node.Address) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/admin.templ`, Line: 498, Col: 66} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/admin.templ`, Line: 494, Col: 63} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var41)) if templ_7745c5c3_Err != nil { @@ -690,39 +690,52 @@ func Admin(data dash.AdminData) templ.Component { return templ_7745c5c3_Err } var templ_7745c5c3_Var42 string - templ_7745c5c3_Var42, templ_7745c5c3_Err = templ.JoinStringErrs(s3Node.LastUpdated.Format("2006-01-02 15:04:05")) + templ_7745c5c3_Var42, templ_7745c5c3_Err = templ.JoinStringErrs(s3Node.DataCenter) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/admin.templ`, Line: 499, Col: 97} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/admin.templ`, Line: 495, Col: 66} } _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var42)) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 64, "
") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + var templ_7745c5c3_Var43 string + templ_7745c5c3_Var43, templ_7745c5c3_Err = templ.JoinStringErrs(s3Node.LastUpdated.Format("2006-01-02 15:04:05")) + if templ_7745c5c3_Err != nil { + return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/admin.templ`, Line: 496, Col: 97} + } + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var43)) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 65, "
No S3 servers found
No S3 servers found
Last updated: ") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 67, "
Last updated: ") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - var templ_7745c5c3_Var43 string - templ_7745c5c3_Var43, templ_7745c5c3_Err = templ.JoinStringErrs(data.LastUpdated.Format("2006-01-02 15:04:05")) + var templ_7745c5c3_Var44 string + templ_7745c5c3_Var44, templ_7745c5c3_Err = templ.JoinStringErrs(data.LastUpdated.Format("2006-01-02 15:04:05")) if templ_7745c5c3_Err != nil { - return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/admin.templ`, Line: 523, Col: 81} + return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/admin.templ`, Line: 520, Col: 81} } - _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var43)) + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var44)) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 67, "
") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 68, "") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } diff --git a/weed/admin/view/app/cluster_filers.templ b/weed/admin/view/app/cluster_filers.templ index b20025662..ee5b5eb76 100644 --- a/weed/admin/view/app/cluster_filers.templ +++ b/weed/admin/view/app/cluster_filers.templ @@ -145,7 +145,7 @@ templ ClusterFilers(data dash.ClusterFilersData) { function openFilerBrowser(address) { // Open file browser for specific filer - window.open('/files?filer=' + encodeURIComponent(address), '_blank'); + window.open((window.__BASE_PATH__ || '') + '/files?filer=' + encodeURIComponent(address), '_blank'); } function exportFilers() { diff --git a/weed/admin/view/app/cluster_filers_templ.go b/weed/admin/view/app/cluster_filers_templ.go index 87f9f45eb..3b0b77d06 100644 --- a/weed/admin/view/app/cluster_filers_templ.go +++ b/weed/admin/view/app/cluster_filers_templ.go @@ -1,6 +1,6 @@ // Code generated by templ - DO NOT EDIT. -// templ: version: v0.3.1001 +// templ: version: v0.3.1020 package app //lint:file-ignore SA4006 This context is only used if a nested component is present. @@ -147,11 +147,11 @@ func ClusterFilers(data dash.ClusterFilersData) templ.Component { return templ_7745c5c3_Err } var templ_7745c5c3_Var9 string - templ_7745c5c3_Var9, templ_7745c5c3_Err = templ.JoinStringErrs(filer.Address) + templ_7745c5c3_Var9, templ_7745c5c3_Err = templ.ResolveAttributeValue(filer.Address) if templ_7745c5c3_Err != nil { return templ.Error{Err: templ_7745c5c3_Err, FileName: `view/app/cluster_filers.templ`, Line: 94, Col: 149} } - _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var9)) + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ_7745c5c3_Var9) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } @@ -183,7 +183,7 @@ func ClusterFilers(data dash.ClusterFilersData) templ.Component { if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 16, "") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 16, "") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } diff --git a/weed/admin/view/app/plugin_lane.templ b/weed/admin/view/app/plugin_lane.templ index bc0ef0039..cdad5e7ea 100644 --- a/weed/admin/view/app/plugin_lane.templ +++ b/weed/admin/view/app/plugin_lane.templ @@ -1,5 +1,9 @@ package app +import ( + "github.com/seaweedfs/seaweedfs/weed/admin/dash" +) + templ PluginLane(page string, lane string) { {{ currentPage := page @@ -16,7 +20,7 @@ templ PluginLane(page string, lane string) {

Workers and scheduler status for the { lane } scheduling lane.

- + All Workers
All Workers
Lane Scheduler Status
Loading scheduler status...
Job Types
Loading job types...
Connected Workers
Loading workers...
") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 5, " scheduling lane.

All Workers
Lane Scheduler Status
Loading scheduler status...
Job Types
Loading job types...
Connected Workers
Loading workers...
") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err }