diff --git a/.github/workflows/ibm-rmf-grafana.yml b/.github/workflows/ibm-rmf-grafana.yml index c0390640..9fa48277 100644 --- a/.github/workflows/ibm-rmf-grafana.yml +++ b/.github/workflows/ibm-rmf-grafana.yml @@ -44,7 +44,7 @@ jobs: run: make test - name: Lint - uses: golangci/golangci-lint-action@v6 + uses: golangci/golangci-lint-action@v8 with: version: latest only-new-issues: true diff --git a/docs/grafana/rmf-app/oxygen-webhelp/app/config.js b/docs/grafana/rmf-app/oxygen-webhelp/app/config.js index eb03725f..afa4ef1a 100644 --- a/docs/grafana/rmf-app/oxygen-webhelp/app/config.js +++ b/docs/grafana/rmf-app/oxygen-webhelp/app/config.js @@ -114,7 +114,7 @@ define(function() { if(id === 'index-1' || id === 'index-2' || id === 'index-3' || id === 'stopwords' ||id === 'htmlFileInfoList' || id === 'keywords') { - args = '20250404160800'; + args = '20250513175015'; } return (url.indexOf('?') === -1 ? '?' : '&') + args; diff --git a/docs/grafana/rmf-app/oxygen-webhelp/app/search/index/index-1.js b/docs/grafana/rmf-app/oxygen-webhelp/app/search/index/index-1.js index 41a7bb01..a869951e 100644 --- a/docs/grafana/rmf-app/oxygen-webhelp/app/search/index/index-1.js +++ b/docs/grafana/rmf-app/oxygen-webhelp/app/search/index/index-1.js @@ -1,4 +1,4 @@ define(function () { // Auto generated index for searching. -return {"--detach":"11*0*8m,17*0*6f","--env":"11*1*9b$a3,17*1*74$7s","--hostname":"11*0*8h,17*0*6a","--name":"11*0*8c,17*0*65","--pluginurl":"11*0*6c,17*0*2i","--publish":"11*0*97,17*0*70","--restart":"11*0*8o,17*0*6h","--verify":"11*0*gv","--volume":"11*0*8t,17*0*6m","-specific":"7*0*5t",".ini":"13*0*ac","/etc/grafana/grafana.ini":"11*0*3p,13*0*bb","/path/to/certificate.crt":"8*0*9j","/path/to/jwks.json":"8*0*47,13*0*8i","/path/to/privatekey.key":"8*0*a7","/usr/local/etc/grafana/grafana.ini":"11*0*3v,13*0*bh","/var/lib/grafana":"11*0*93,17*0*6s","0-9":"6*0*3p","1.0.x":"15*0*dt","10":"7*0*59","1024":"3*0*9f","12345":"13*2*7e$7l$83","128":"3*0*9c","2023":"15*2*bt$c5$cd","2024":"15*4*2c$34$4f$5g$8s","2025":"15*0*m","24":"6*0*3i","2>&1":"7*0*7t","3.1":"11*0*19,15*0*dj","3000":"6*0*68,11*1*99$9a,17*1*72$73","3650":"11*0*1e","4000":"6*0*55","60":"3*0*5l","60m":"8*1*57$59","9.5.1":"11*0*1i,15*0*dv","&1":"7*0*7t","3.1":"11*0*19,15*0*fk","3000":"6*0*68,11*1*99$9a,17*1*72$73","3650":"11*0*1e","4000":"6*0*55","60":"3*0*5l","60m":"8*1*57$59","9.5.1":"11*0*1i,15*0*g0","/ibm-rmf-grafana-.zip":"11*0*6e,17*0*2k","hub":"11*0*bq","iat":"8*0*5u","ibm":"0*0*2p,2*2*18$24$5e,3*1*1m$28,5*12*-1$6$32$7i,6*0*1d,7*16*-1$c$1f$2p$3f$41$71$7d,9*40*-1$2$9$h,11*39*-1$f$21$23$26$6i$6m$6q$72$9j$9n$9r$a1$ac$ae$ah$bh$db$dl$du$ed$fa$fu$g5$gc$gm$h2$h8$hg$i0$i9,12*11*-1$a$k,13*1*70$7n,14*31*0$4$11,15*22*-1$c$2n$37$3j$3r$9b$9j$a3$bm$ci$cv$d8$dn,16*14*-1$f$1e$21$3h$4g,17*26*-1$f$2o$2s$30$38$45$49$4d$7c$7g$7k$7q$85$87$8a$bj$c5,19*11*-1$p$1q","ibm-rmf":"11*1*71$a0,17*1*37$7p","ibm-rmf-grafana-x.y.z.zip":"11*1*g4$h7","ibm-rmf-grafana-x.y.z.zip.asc":"11*1*gb$h1","icon":"2*1*4p$88,5*1*85$8e","id":"7*1*4r$57,8*0*6t","identical":"6*0*4d,18*0*1o","identifies":"1*0*14","identify":"2*0*29,7*12*-1$t$4v$5p,8*0*35","iframe":"8*0*bu","ignored":"3*0*6d","iii":"0*10*-1$k,3*10*-1$b,11*10*-1$p,14*3*2h$2q$44$dt,19*40*-1$3$9$1c","iip":"14*0*bk","image":"2*0*50,5*2*59$5g$7e,11*2*ak$b4$b7,14*2*bn$c1$ek,15*1*6t$71,17*2*8d$8t$90,18*0*8n","images":"11*2*bd$bg$bk","immediately":"7*0*2f","import":"5*0*82,15*0*7l,17*4*99$9j$ae$bs$bv","importance":"10*0*q","important":"3*0*4e,18*1*2d$2f","imported":"5*0*2q","importing":"11*0*fm","improve":"15*0*5q","improved":"15*0*48","improves":"15*0*1k","incidents":"1*0*1s","include":"15*1*7v$9u","included":"15*0*8l","including":"6*0*3k,19*0*3d","incoming":"1*0*o","index":"5*1*5k$5q,15*0*74","indicative":"7*0*3l","individual":"13*0*aa","information":"1*0*1u,2*1*a1$am,3*0*ac,5*1*26$8k,7*12*-1$q$3p$3q,8*13*-1$9$53$5n$ca,9*0*1s,11*5*hn$j6,13*3*2a$2s$40$8m,14*1*3h$d4,15*1*8n$at,16*2*p$16$1u","informs":"7*0*3s","ini":"11*5*2l$2s$31$3n$3t$45,13*3*ad$b9$bf$bn","insights":"10*0*1a","install":"5*0*2g,9*0*28,11*15*-1$e$50$65$70$9e$dk,13*11*2i$2m$a3,17*3*1e$36$3q$77","installation":"11*0*2i,15*0*ao","installed":"2*1*17$3m,3*1*v$2o,6*0*1c,11*5*15$1g$7f$b3$d3$hv,13*0*1b,17*0*bb","installing":"2*0*1f,3*0*16,6*0*1k,9*0*2e,11*32*0$6$5a$5m,13*1*15$32,15*0*av,17*10*-1$10","instance":"8*1*ak$ce","instead":"18*0*1r","instructions":"11*0*fl,13*0*31,15*0*ad","integer":"14*3*7q$7u$86$8a","integration":"19*0*3m","interactive":"14*0*dp,18*10*-1$d,19*10*-1$n","interacts":"5*0*1t","interest":"14*0*60","interface":"2*0*3f,3*0*2h,5*0*76,11*0*cs,15*0*5k,17*0*b4","internally":"15*5*28$2g$4b$50$5u$9n","interval":"10*0*43","introduction":"1*30*0$2","invalid":"11*0*e4","investigate":"0*10*-1$h","investigation":"16*0*24","involves":"14*0*l","ioq":"5*0*5m","ip":"6*2*4i$4r$50","iss":"8*1*6a$6e","issue":"7*1*52$79,15*0*9a,16*0*1l","issued":"7*0*66","issues":"1*11*-1$d$16,7*12*-1$9$19$5q,15*13*-1$b$91$bh$ca,16*43*-1$1$3$a$s$29$2g","it's":"7*0*4d,18*0*2e","its":"3*0*ah,13*1*1i$34,14*0*1f,17*10*-1$o,19*0*3e","jes":"5*0*5v","job":"10*0*45,14*0*b2","json":"8*3*3v$45$4a$5l,13*14*48$4n$6f$8d$8l$9n","json-encoded":"8*0*5k","jti":"8*0*6d","june":"15*0*5f","jwk":"8*0*3o,13*3*66$6m$73$7q","jwk_set_file":"8*0*3n","jwks":"8*0*49,13*2*8c$8k$9r","jwks.json":"13*0*8b","jwksuri":"13*3*6a$6p$7g$8a","jwt":"8*18*-1$h$t$19$1e$2q$3c$3g$7j$cp,13*28*4b$4q$4u$58$5i$5n$6v$7m$8p$93$9b$ah","keep":"1*0*m","key":"8*3*41$9p$9v$aa,11*4*ek$et$f1$fi$fo,13*1*6h$9p","know":"3*0*1e","known":"15*10*-1$a","label":"18*6*4e$5c$5o$66$6j$70$8a","language":"2*0*64","languages":"2*1*21$27,14*30*3$7","later":"11*0*1j,13*0*2q,15*0*e0","latest":"15*0*7o,16*0*o,17*10*-1$12","lax":"8*0*bb","lb":"14*0*6p","lead":"1*0*1q","learn":"18*0*8o","least":"2*11*-1$o$2u","level":"3*1*69$6g,11*0*1c,14*0*5m","leverage":"17*10*-1$n","lib":"11*0*95,17*0*6u","limited":"18*1*4d$4g","link":"12*10*-1$7","linux":"11*0*3o,13*0*ba","linuxone":"11*0*bi","list":"0*0*22,2*4*5t$6m$7j$7q$bq,6*1*2k$5g,14*10*55$63$6n$70$7g$7v$8b$8p$90$97$9e,18*2*1c$2s$31,19*0*5i","listed":"3*0*7h,11*0*ic","lists":"5*0*37,8*0*m,9*0*1i","lo":"14*1*84$85","loaded":"8*0*43","loading":"11*3*1u$4e$4m$a9,17*0*82","local":"11*0*41,13*1*9t$bj","location":"11*1*37$f3,13*0*ap","locksp":"5*0*67","locksu":"5*0*6g","log":"0*0*1d,6*0*21,7*0*54","logged":"0*0*1i,6*0*26","login":"8*2*1p$24$7f","logs":"7*1*7c$7p","longer":"5*0*89,15*0*42","looking":"7*0*5r","lower":"7*0*5c,14*2*6s$76$7j","lowest":"14*0*88","macos":"11*0*3u,13*0*bg","made":"2*1*97$9c","main":"11*0*fd","maintenance":"3*1*68$6f,18*0*1j","make":"3*0*32,18*0*u","making":"10*0*11","manage":"18*0*8s","management":"9*40*-1$5$c$k,13*3*2e$3i$43$8u,15*0*a6","managing":"5*0*29","mandatory":"8*0*39","manual":"1*0*1k","many":"13*0*24","master":"3*1*a9$af,5*43*-1$1$4$i$3k$7f$8h","match":"14*0*6k","maximizes":"14*0*1e","may":"7*1*1b$6t,10*0*3m,15*0*bi,16*11*-1$b$t","mb":"3*0*91","means":"3*0*5r,10*0*23","measurement":"7*0*6k,14*1*4b$e3,15*0*df,19*10*-1$14","measures":"7*0*2j","meet":"5*0*1k","megabytes":"15*0*4t","mention":"8*0*3e","mentioned":"17*0*4k","menu":"2*0*59,6*0*7g","message":"3*0*9m,7*2*3d$3r$84,11*0*e8","messages":"7*15*-1$n$12$65$6e$6m$6r","met":"19*0*4v","methods":"11*1*4s$58,17*0*1h","metric":"10*1*1m$3a,14*14*2a$2s$30$37$4h$4k$4v,18*10*-1$n","metric_description":"14*1*36$4g","metrics":"0*10*-1$l,1*0*p,3*10*-1$c,10*0*27,11*10*-1$q,14*0*2i,16*0*2q,19*40*-1$4$a$1d","might":"3*0*4q","minimum":"8*0*n","minutes":"8*0*58","missing":"15*0*20","model":"14*0*46","modifications":"7*0*64","modify":"6*0*77,15*0*3p,16*0*4s","modifying":"8*0*cf,13*0*5a","monitor":"0*10*-1$j,3*10*-1$a,9*10*-1$m,11*10*-1$o,14*3*2g$2p$43$ds,16*0*2p,19*50*-1$-1$2$8$1b$1l","monitoring":"0*11*-1$d$1n,1*1*i$1l,6*10*-1$j,19*10*-1$e","more":"1*0*1t,2*1*a0$al,3*0*4s,5*2*15$25$8j,8*0*c9,9*0*1r,11*0*hm,13*2*29$2r$3v,14*1*6h$a4,15*0*aa,18*10*-1$c","most":"17*0*9o","multiple":"2*3*6e$76$at$b2,18*0*1n","must":"0*0*r,2*11*-1$m$12,3*3*t$1d$4k$98,6*13*-1$7$r$39$3u,8*1*q$64,9*0*17,11*16*-1$d$10$1d$1l$76$an$c3,13*5*1l$2l$3e$4g$87$97,14*2*3k$6j$d7,15*1*7i$d3,17*12*-1$d$3c$8g","mutually":"14*1*82$8e","mvs":"14*2*bm$c0$ej,18*0*8m","mvs_image":"14*2*bl$bv$ei,18*0*8l","na":"14*2*8i$8n$cd","name":"2*0*46,3*1*2q$2t,6*8*2u$32$35$3c$3e$41$4h$4q$4v,7*0*7s,8*1*2d$2j,11*0*8d,14*9*4j$5i$5n$5o$6l$bt$c9$cs$dh$di,15*0*c3,16*0*4b,17*1*5e$66,18*11*42$4c$4u$53$6a$6d$6q$77$7o$7v$8e$8h","names":"6*0*47,14*4*8q$8r$91$92$do","nature":"7*0*33","navigating":"0*0*2n,5*0*30,16*0*1d","navigation":"2*0*3d,3*0*2f,11*0*cq,17*0*b2","nbf":"8*0*5t","nd":"14*1*8j$8u","necessary":"7*0*2i,13*0*6k,16*0*47","need":"1*0*1j,3*10*-1$f,7*0*48,13*11*-1$p$3p,15*0*43,16*0*18,17*0*ab","needs":"8*0*3a","network":"3*0*4n,16*1*38$4q","new":"3*1*24$3c,5*0*7t,15*22*-1$6$k$p$5c$8b,17*0*9e","next":"0*9*2f,2*10*9n$be,3*9*a4,6*9*71,11*9*ii","nn":"14*2*8m$9j$9u","note":"2*3*3c$68$6v$92,3*3*2e$38$7s$8j,6*1*3s$3v,11*3*46$b9$cp$dh,14*0*e7,15*0*7g,17*1*3a$b1,18*1*2g$49","notes":"15*30*1$3","notification":"2*0*4o","notifications":"1*0*19,19*0*4n","november":"15*2*2b$c4$cc","now":"15*2*2l$3d$4m","nucleus":"13*0*1p","number":"3*2*1h$46$4c,6*2*5q$66$6k,11*2*7d$b1$hf,13*0*85,14*1*6q$7a,17*1*3l$8q","numerous":"19*0*3n","oa67541":"3*0*6a","object":"8*0*c2","occur":"7*0*1n,15*0*bj","occurs":"7*0*4n","october":"15*0*33","off":"3*2*6k$6q$83,13*0*51","offer":"18*10*-1$g","offers":"5*0*77,13*0*28","ok":"0*0*24,6*0*6m","once":"13*0*5g","one":"2*13*-1$p$2h$2v$52,3*0*37,5*0*14,11*0*4r,14*2*68$6g$ae,18*0*25","only":"3*0*8o,8*0*5r,14*4*6v$7f$7r$87$ee,18*0*4i","opd":"5*0*6q","open":"11*0*dt,16*0*1b","opening":"16*0*1p","operating":"3*0*67,11*0*3b,13*1*1e$at","option":"3*4*5n$6p$78$81$87,5*0*7r,11*1*7b$av,15*2*q$13$4o,17*1*3h$8o","optional":"2*5*8n,3*11*2v$4i$73,11*5*ea,13*0*1u,14*0*57","optionally":"2*0*4a","options":"2*3*6q$7v$a6$ah,5*0*7a,11*0*ar,17*0*8k,19*0*28","ord":"14*2*8h$9t$cc","order":"14*4*8t$94$9b$9i$9p,18*0*32","organizations":"10*0*n","os":"2*2*1b$1i$5h,3*1*12$19,5*12*-1$9$2j$7l,6*1*1g$1n,7*17*-1$f$1i$2s$3i$44$6i$74$7g,9*52*-1$-1$4$b$j$p$2b$2h,11*49*-1$3$9$i$18$53$5d$5p$bu$do$g1$hj$i3,12*11*-1$d$n,13*2*17$2d$8t,14*3*14$41$49$e1,15*21*-1$f$2q$3a$8h$a5$am$b2$bp$cl$db$di$dq,16*12*-1$i$3k$4j,17*41*-1$3$9$i$c8,19*31*-1$-1$-1$s$17$1a$1t","osmf":"0*14*-1$g$11$1a$1f$2c,6*23*-1$-1$e$m$1b$1u$23,8*4*16$6v$81$89$bp,9*13*-1$15$1f$1p$27,13*67*-1$5$b$l$13$19$1o$27$4e$4j$53$60$65$77$80,15*0*ai","other":"8*2*5h$68$b6,10*0*20,11*0*bl,18*0*4l,19*0*4q","outages":"1*0*1o","over":"8*3*83$8b$8i$al,10*0*3h","overall":"5*1*58$5f,15*1*6s$70","override":"11*0*4j","overview":"5*1*4d$4k,15*1*6d$6h","page":"0*10*-1$e,6*11*-1$k$7k,11*2*cl$d9$e1,15*0*9l,17*1*at$bh","panel":"2*18*-1$l$30$3o$43$47$4g$4n$4s$ag,18*10*-1$p,19*0*39","panels":"2*12*-1$9$2p$a5,3*0*3d,5*12*-1$e$17$1f,14*0*1j,19*1*2b$2v","parameter":"8*17*1c$21$2f$34$3s$4f$4o$5e$6l$7h$7u$98$9f$9r$a3$ag$b0$bh,13*2*6b$6c$6q,14*0*58","parameters":"8*43*-1$2$5$b$o$11$cg,13*1*ab$an","part":"14*0*6m","particular":"10*0*2o","particularly":"18*0*1k","partition":"14*0*b9","pass":"13*0*a7","passed":"2*0*bd","password":"3*1*8h$8l,11*0*ch,15*0*47,17*0*ap","pat":"14*0*6d","path":"3*2*47$4d$4h,8*4*48$9a$9k$9t$a8,11*0*3e,13*1*8j$b0,18*1*5m$6u","pattern":"14*0*6e","patterns":"14*0*6i,19*0*2k","pcie":"5*0*72","pdf":"12*40*-1$0$2$i,15*1*2u$31","per":"15*1*5b$8a","percentage":"10*1*3v$4h","perform":"0*0*2i,2*2*2g$2s$33,6*1*2l$74,11*2*5k$60$c4,17*1*1q$92","performance":"5*1*5j$5p,9*10*-1$n,10*0*1d,14*1*a2$dq,15*1*49$73,19*10*-1$1o","performing":"7*0*2d,11*0*el","perfrom":"17*0*22","period":"8*0*4u,14*2*au$bs$c6","permissions":"13*0*3s","personalized":"5*0*1q","physical":"14*1*b6$bh","picker":"2*0*7m","piecing":"19*0*2s","pipeline":"2*0*bg","place":"13*0*8f","placeholders":"18*10*-1$r","planning":"10*0*14","platform":"19*20*-1$-1$d$1h","platforms":"11*0*bn,15*0*b5","plot":"16*1*2o$32","plugin":"2*1*1d$1j,3*1*14$1a,5*13*-1$b$2l$7n$7v,6*1*1i$1o,7*46*-1$2$5$h$1k$2u$3k$46$76$7i,9*1*2c$2i,11*54*-1$4$a$k$54$5e$5q$66$7e$b2$bv$dq$e5$eg$g3$hl$i5$ib,12*10*-1$f,14*0*16,15*19*-1$h$2s$3c$8i$an$b3$br$cn$dd$ds,16*12*-1$k$3m$4l,17*61*-1$-1$4$a$k$14$1k$1t$2c$3j$3u$4m$5v$8r$9d$a8$ca,19*11*-1$u$1v","plugin's":"17*0*3i","plugins":"11*11*20$29$4c$4g$4o$6v$9f$a7$ab$co$d8$e0,17*5*35$78$80$84$b0$bg","pluginurl":"11*1*6d$7a,17*2*2j$3g$40","points":"1*0*23","port":"3*2*1g$45$4b,6*4*5p$5v$61$65$6j,13*1*6u$84","port_number":"3*1*44$4a","powerful":"18*10*-1$9","practice":"3*0*7k,10*0*l","pre":"5*0*1d","pre-configured":"5*0*1c","precise":"16*0*15","prerequisite":"13*0*v","prerequisites":"6*1*13$16,9*1*20$22,13*40*-1$0$6$n","preselected":"3*0*3h","present":"2*10*-1$e,8*0*3b","presentation":"5*0*7c","presented":"2*0*6t,3*0*7d","prevent":"7*0*2k,8*0*b1","preview":"2*0*8g","privatekey":"8*0*a9","problem":"7*10*-1$v","problems":"7*0*5i,16*0*2f","proc":"5*0*45","procedure":"0*9*16,2*9*28,3*9*1j,6*9*1q,11*9*1p,17*9*24"}; +return {"exclude":"3*0*4l","exclusive":"14*1*83$8f","executing":"14*0*i","execution":"5*1*4m$4s,15*1*8b$8e","existing":"2*0*7a,17*0*4o","exp":"8*0*5s","expect":"8*0*5b","expect_claims":"8*0*5a","experience":"10*0*38,15*0*7l","explains":"15*0*c2","explore":"19*10*-1$k","extended":"10*0*3i","facility":"5*1*4c$4j,7*0*6l,9*40*-1$6$d$l,13*1*2f$8v,14*2*4c$bc$e4,15*3*85$89$c0$fh,19*10*-1$15","false":"8*4*29$7b$7p$aq$c7","familiar":"11*0*1m","faster":"8*0*50,10*1*2h$37","feature":"1*10*-1$6,10*0*31","features":"3*0*ai,5*0*8n,13*0*1j,15*10*-1$7,17*0*9s,19*0*22","february":"15*0*ak","fetch":"0*0*30,11*0*ip,19*0*3t","fetched":"10*0*2s","fetching":"14*10*-1$b","field":"2*0*49,3*3*2u$3v$59$95,6*4*33$37$4t$60$63,14*1*3r$de","fields":"3*3*3l$3o$8i$8m,15*0*5b","file":"7*0*55,8*5*3q$46$96$9c$a0$ci,11*7*2e$2m$2t$39$3g$f2$f4$ga,12*10*-1$j,13*4*8e$9u$af$ar$b2,15*0*4o","files":"13*2*5e$67$6n,17*0*4p","filter":"14*3*5q$5r$6b$cb,18*22*3k$3o$3t$7e$7j$85$8k","filters":"14*0*v","find":"8*10*-1$8,11*0*i8,12*10*-1$6,14*0*dm,16*1*14$1i,17*0*a1","first":"5*0*2m,15*0*eh","fix":"16*0*2e","fixed":"15*12*1s$2a$3m$40$48$63$6o$7m$ao$b0$bf$dt$e9","flat":"15*0*27","flexible":"5*0*10","flows":"9*0*1k","focus":"14*0*5t","follow":"11*0*fk","following":"0*0*2j,2*2*15$2k$4v,3*0*3k,5*1*35$7d,6*2*u$2m$75,7*2*1u$6o$7m,8*1*k$ck,9*0*1g,10*0*3s,11*8*13$4u$63$7m$85$aq$c5$em$gq,13*1*r$8g,14*3*20$5d$69$af,15*4*7q$9p$bo$ep$f6,16*0*25,17*5*29$50$5h$5s$8j$93,19*0*21","follows":"11*1*3a$f5,13*1*6r$as,14*1*32$cl,18*1*3u$7k","format":"2*10*-1$j,3*1*40$72,13*0*6o","forwarded":"8*0*2t","found":"10*0*2q,15*8*2c$42$4a$65$6q$7o$bh$dv$eb","frame":"8*0*bs","freedom":"19*0*36","friendly":"14*0*1a","from":"0*13*-1$b$1u$2a$32,2*4*3v$55$5p$6l$7d,3*0*60,5*2*1v$7h$8g,6*13*-1$h$2f$59$7h,7*1*3e$7a,8*2*44$4l$b3,9*11*-1$13$1n,10*1*2l$2v,11*1*gh$ir,14*13*-1$e$1n$25$51,15*2*22$34$c9,16*0*3e,18*8*18$43$5d$5p$67$6k$71$7p$8b,19*1*3v$5e","function":"13*2*4v$5j$8q","functionalities":"17*10*-1$q","functionality":"11*0*1b","functioning":"7*0*2o","functions":"3*0*51","fundamental":"13*0*1c","further":"16*0*23","gather":"16*0*1r","general":"5*1*4v$55,15*1*8g$8j,18*1*3p$7f","gf":"11*2*4b$9d$a6,17*1*76$7v","gf_plugins_allow_loading_unsigned_plugins":"11*1*4a$a5,17*0*7u","github":"11*3*6g$9h$f8$gk,15*1*eq$eu,17*2*2m$43$7a","given":"14*0*75","global":"14*0*aj","go":"2*0*3q,3*0*1k,11*1*7j$cm,17*1*4t$au","gpg":"11*4*ej$ev$fq$gu$hp","gpm":"7*0*6f","grafana":"0*44*-1$1$4$9$u$14$1p$29,1*13*-1$4$h$1e$25,2*11*1c$1k$1p$3j$5m$8d$9o$aa$ao$b4$bh$bt,3*14*-1$d$13$1b$2l$5b,5*15*-1$a$t$2c$2k$7m$8r,6*62*-1$-1$1$4$9$g$18$1h$1p$2r$2v$4k$58$5s$6r$79$7m$7q,7*16*-1$g$1j$2t$3j$45$75$7h,8*51*-1$0$3$j$v$1g$6q$76$8f$8t$aj$bm$cd$cm$cs,9*49*-1$0$7$11$1c$1m$24$2d$2j$2l$2q$2t$30,10*11*-1$6$22,11*80*-1$5$b$j$1h$1o$2h$34$3r$3s$43$44$5f$5s$68$6a$6o$6s$7h$7r$82$8g$8l$91$96$9p$9t$b6$c0$cb$ci$d0$dp$e2$ef$fe$g2$g7$ge$h4$ha$hk$i4$j7,12*11*-1$e$o,13*73*-1$2$8$h$2j$2n$2u$33$37$3l$45$5t$95$99$a4$aj$al$bd$be$bl$bm,14*13*-1$8$15$1i$ec,15*22*-1$g$t$4k$54$ac$at$bq$c8$dj$en$fd$fs$fv,16*13*-1$j$3f$3l$4k,17*65*-1$5$b$j$1f$1l$1u$26$2e$2g$2u$32$4b$4f$4r$59$5d$5q$69$6e$6q$6v$7i$7m$8v$aj$aq$b8$c9,18*2*3e$90$94,19*63*-1$-1$-1$5$b$c$t$1g$1u$3k$4k","grafana's":"18*0*3d","graphs":"15*0*29,19*0*29","greater":"3*0*99","grep":"7*0*7u","guidance":"15*0*cn","guide":"11*1*fs$hr,12*41*-1$1$3$h$q,13*1*2h$91,14*0*4f,15*0*4r","guides":"16*10*-1$5","h2":"8*1*9i$a6","hard":"18*10*-1$k","hard-coded":"18*10*-1$j","has":"7*1*27$34,15*5*v$1q$2l$71$7g$a0","have":"0*1*s$27,2*2*13$96$9g,3*1*u$9t,6*1*s$6p,8*0*73,10*0*1t,11*1*11$hu,14*0*9n,15*1*6g$f5,17*0*c3,18*1*1m$2k,19*0*35","header":"2*0*41,8*2*1v$2c$2i,13*0*9e","header's":"8*0*2h","header_name":"8*0*2b","health":"10*0*1e,19*10*-1$1n","help":"4*20*2,7*11*-1$r$4t,15*0*d5,19*0*2d","helps":"14*0*5s,19*0*3r","hi":"14*1*7p$8g","higher":"11*0*1f,14*0*73","highest":"14*0*7s","highly":"5*0*v","historical":"10*43*-1$0$3$a$i$s$16","holds":"8*0*2k","home":"15*0*ba","host":"6*2*4g$4p$4u,10*0*3r","hosted":"6*0*5u,8*0*ai","hostname":"3*3*1f$43$49$7g,11*0*8i,13*1*6t$7t,17*0*6b,18*3*5h$5t$6o$75","how":"16*10*-1$6,18*0*8p","however":"3*1*4p$7j,13*0*1g","hsm":"5*0*5c","html":"8*0*bq","http":"3*3*3m$42$62$6l,8*1*4m$92,13*0*9d,15*0*32","https":"3*0*48,6*0*5j,8*6*84$8c$8j$93$9h$a5$am,11*3*6f$9g$f7$gj,13*2*6s$7b$7i,15*0*et,17*2*2l$42$79","https://abc.com:12345":"13*0*7a","https://abc.com:12345/jwt/ibm/api/zosmfbuilder/jwk":"13*0*7h","https://github.com/ibm/rmf":"15*0*es","https://github.com/ibm/rmf/blob/main/grafana/rmf-app/public_key.asc":"11*0*f6","https://github.com/ibm/rmf/releases":"11*0*gi","https://github.com/ibm/rmf/releases/download/ibm-rmf-grafana/v1.0.3/ibm-rmf-grafana-1.0.3.zip":"17*0*41","https://github.com/ibm/rmf/releases/download/ibm-rmf-grafana/v/ibm-rmf-grafana-.zip":"11*0*6e,17*0*2k","hub":"11*0*bq","iat":"8*0*5u","ibm":"0*0*2p,2*2*18$24$5e,3*1*1m$28,5*12*-1$6$32$7i,6*0*1d,7*16*-1$c$1f$2p$3f$41$71$7d,9*40*-1$2$9$h,11*39*-1$f$21$23$26$6i$6m$6q$72$9j$9n$9r$a1$ac$ae$ah$bh$db$dl$du$ed$fa$fu$g5$gc$gm$h2$h8$hg$i0$i9,12*11*-1$a$k,13*1*70$7n,14*31*0$4$11,15*23*-1$c$p$4g$50$5c$5k$b4$bc$bs$df$ej$f0$f9$fo,16*14*-1$f$1e$21$3h$4g,17*26*-1$f$2o$2s$30$38$45$49$4d$7c$7g$7k$7q$85$87$8a$bj$c5,19*11*-1$p$1q","ibm-rmf":"11*1*71$a0,17*1*37$7p","ibm-rmf-grafana-x.y.z.zip":"11*1*g4$h7","ibm-rmf-grafana-x.y.z.zip.asc":"11*1*gb$h1","icon":"2*1*4p$88,5*1*85$8e","id":"7*1*4r$57,8*0*6t","identical":"6*0*4d,18*0*1o","identifies":"1*0*14","identify":"2*0*29,7*12*-1$t$4v$5p,8*0*35","iframe":"8*0*bu","ignored":"3*0*6d","iii":"0*10*-1$k,3*10*-1$b,11*10*-1$p,14*3*2h$2q$44$dt,19*40*-1$3$9$1c","iip":"14*0*bk","image":"2*0*50,5*2*59$5g$7e,11*2*ak$b4$b7,14*2*bn$c1$ek,15*1*8m$8q,17*2*8d$8t$90,18*0*8n","images":"11*2*bd$bg$bk","immediately":"7*0*2f","import":"5*0*82,15*0*9e,17*4*99$9j$ae$bs$bv","importance":"10*0*q","important":"3*0*4e,18*1*2d$2f","imported":"5*0*2q","importing":"11*0*fm","improve":"15*0*7j","improved":"15*0*61","improves":"15*0*3d","incidents":"1*0*1s","include":"15*1*9o$bn","included":"15*0*ae","including":"6*0*3k,19*0*3d","incoming":"1*0*o","index":"5*1*5k$5q,15*0*8t","indicative":"7*0*3l","individual":"13*0*aa","information":"1*0*1u,2*1*a1$am,3*0*ac,5*1*26$8k,7*12*-1$q$3p$3q,8*13*-1$9$53$5n$ca,9*0*1s,11*5*hn$j6,13*3*2a$2s$40$8m,14*1*3h$d4,15*1*ag$cm,16*2*p$16$1u","informs":"7*0*3s","ini":"11*5*2l$2s$31$3n$3t$45,13*3*ad$b9$bf$bn","insights":"10*0*1a","install":"5*0*2g,9*0*28,11*15*-1$e$50$65$70$9e$dk,13*11*2i$2m$a3,17*3*1e$36$3q$77","installation":"11*0*2i,15*0*ch","installed":"2*1*17$3m,3*1*v$2o,6*0*1c,11*5*15$1g$7f$b3$d3$hv,13*0*1b,17*0*bb","installing":"2*0*1f,3*0*16,6*0*1k,9*0*2e,11*32*0$6$5a$5m,13*1*15$32,15*0*co,17*10*-1$10","instance":"8*1*ak$ce","instead":"18*0*1r","instructions":"11*0*fl,13*0*31,15*0*c6","integer":"14*3*7q$7u$86$8a","integration":"19*0*3m","interactive":"14*0*dp,18*10*-1$d,19*10*-1$n","interacts":"5*0*1t","interest":"14*0*60","interface":"2*0*3f,3*0*2h,5*0*76,11*0*cs,15*0*7d,17*0*b4","internally":"15*8*2b$41$49$64$6p$7n$bg$du$ea","interval":"10*0*43","introduction":"1*30*0$2","invalid":"11*0*e4","investigate":"0*10*-1$h","investigation":"16*0*24","involves":"14*0*l","ioq":"5*0*5m","ip":"6*2*4i$4r$50","iss":"8*1*6a$6e","issue":"7*1*52$79,15*0*b3,16*0*1l","issued":"7*0*66","issues":"1*11*-1$d$16,7*12*-1$9$19$5q,15*13*-1$b$aq$da$e7,16*43*-1$1$3$a$s$29$2g","it's":"7*0*4d,18*0*2e","its":"3*0*ah,13*1*1i$34,14*0*1f,17*10*-1$o,19*0*3e","jes":"5*0*5v","job":"10*0*45,14*0*b2","json":"8*3*3v$45$4a$5l,13*14*48$4n$6f$8d$8l$9n","json-encoded":"8*0*5k","jti":"8*0*6d","june":"15*0*78","jwk":"8*0*3o,13*3*66$6m$73$7q","jwk_set_file":"8*0*3n","jwks":"8*0*49,13*2*8c$8k$9r","jwks.json":"13*0*8b","jwksuri":"13*3*6a$6p$7g$8a","jwt":"8*18*-1$h$t$19$1e$2q$3c$3g$7j$cp,13*28*4b$4q$4u$58$5i$5n$6v$7m$8p$93$9b$ah","keep":"1*0*m","key":"8*3*41$9p$9v$aa,11*4*ek$et$f1$fi$fo,13*1*6h$9p","know":"3*0*1e","known":"15*10*-1$a","label":"18*6*4e$5c$5o$66$6j$70$8a","language":"2*0*64","languages":"2*1*21$27,14*30*3$7","later":"11*0*1j,13*0*2q,15*0*g1","latest":"15*0*9h,16*0*o,17*10*-1$12","lax":"8*0*bb","lb":"14*0*6p","lead":"1*0*1q","learn":"18*0*8o","least":"2*11*-1$o$2u","level":"3*1*69$6g,11*0*1c,14*0*5m","leverage":"17*10*-1$n","lib":"11*0*95,17*0*6u","limited":"18*1*4d$4g","line":"15*0*28","link":"12*10*-1$7","linux":"11*0*3o,13*0*ba","linuxone":"11*0*bi","list":"0*0*22,2*4*5t$6m$7j$7q$bq,6*1*2k$5g,14*10*55$63$6n$70$7g$7v$8b$8p$90$97$9e,18*2*1c$2s$31,19*0*5i","listed":"3*0*7h,11*0*ic","lists":"5*0*37,8*0*m,9*0*1i","lo":"14*1*84$85","loaded":"8*0*43","loading":"11*3*1u$4e$4m$a9,17*0*82","local":"11*0*41,13*1*9t$bj","location":"11*1*37$f3,13*0*ap","locksp":"5*0*67","locksu":"5*0*6g","log":"0*0*1d,6*0*21,7*0*54","logged":"0*0*1i,6*0*26","login":"8*2*1p$24$7f","logs":"7*1*7c$7p","longer":"5*0*89,15*0*5r","looking":"7*0*5r","lower":"7*0*5c,14*2*6s$76$7j","lowest":"14*0*88","macos":"11*0*3u,13*0*bg","made":"2*1*97$9c","main":"11*0*fd","maintenance":"3*1*68$6f,18*0*1j","make":"3*0*32,18*0*u","making":"10*0*11","manage":"18*0*8s","management":"9*40*-1$5$c$k,13*3*2e$3i$43$8u,15*0*bv","managing":"5*0*29","mandatory":"8*0*39","manual":"1*0*1k","many":"13*0*24","master":"3*1*a9$af,5*43*-1$1$4$i$3k$7f$8h","match":"14*0*6k","maximizes":"14*0*1e","may":"7*1*1b$6t,10*0*3m,15*1*l$db,16*11*-1$b$t","mb":"3*0*91","means":"3*0*5r,10*0*23","measurement":"7*0*6k,14*1*4b$e3,15*0*fg,19*10*-1$14","measures":"7*0*2j","meet":"5*0*1k","megabytes":"15*0*6m","mention":"8*0*3e","mentioned":"17*0*4k","menu":"2*0*59,6*0*7g","message":"3*0*9m,7*2*3d$3r$84,11*0*e8","messages":"7*15*-1$n$12$65$6e$6m$6r","met":"19*0*4v","methods":"11*1*4s$58,17*0*1h","metric":"10*1*1m$3a,14*14*2a$2s$30$37$4h$4k$4v,18*10*-1$n","metric_description":"14*1*36$4g","metrics":"0*10*-1$l,1*0*p,3*10*-1$c,10*0*27,11*10*-1$q,14*0*2i,16*0*2q,19*40*-1$4$a$1d","might":"3*0*4q","minimum":"8*0*n","minutes":"8*0*58","missing":"15*0*3p","model":"14*0*46","modifications":"7*0*64","modify":"6*0*77,15*0*5i,16*0*4s","modifying":"8*0*cf,13*0*5a","monitor":"0*10*-1$j,3*10*-1$a,9*10*-1$m,11*10*-1$o,14*3*2g$2p$43$ds,16*0*2p,19*50*-1$-1$2$8$1b$1l","monitoring":"0*11*-1$d$1n,1*1*i$1l,6*10*-1$j,19*10*-1$e","more":"1*0*1t,2*1*a0$al,3*0*4s,5*2*15$25$8j,8*0*c9,9*0*1r,11*0*hm,13*2*29$2r$3v,14*1*6h$a4,15*0*c3,18*10*-1$c","most":"17*0*9o","multiple":"2*3*6e$76$at$b2,18*0*1n","must":"0*0*r,2*11*-1$m$12,3*3*t$1d$4k$98,6*13*-1$7$r$39$3u,8*1*q$64,9*0*17,11*16*-1$d$10$1d$1l$76$an$c3,13*5*1l$2l$3e$4g$87$97,14*2*3k$6j$d7,15*1*9b$f4,17*12*-1$d$3c$8g","mutually":"14*1*82$8e","mvs":"14*2*bm$c0$ej,18*0*8m","mvs_image":"14*2*bl$bv$ei,18*0*8l","na":"14*2*8i$8n$cd","name":"2*0*46,3*1*2q$2t,6*8*2u$32$35$3c$3e$41$4h$4q$4v,7*0*7s,8*1*2d$2j,11*0*8d,14*9*4j$5i$5n$5o$6l$bt$c9$cs$dh$di,15*0*ds,16*0*4b,17*1*5e$66,18*11*42$4c$4u$53$6a$6d$6q$77$7o$7v$8e$8h","names":"6*0*47,14*4*8q$8r$91$92$do","nature":"7*0*33","navigating":"0*0*2n,5*0*30,16*0*1d","navigation":"2*0*3d,3*0*2f,11*0*cq,17*0*b2","nbf":"8*0*5t","nd":"14*1*8j$8u","necessary":"7*0*2i,13*0*6k,16*0*47","need":"1*0*1j,3*10*-1$f,7*0*48,13*11*-1$p$3p,15*0*5s,16*0*18,17*0*ab","needs":"8*0*3a","network":"3*0*4n,16*1*38$4q","new":"3*1*24$3c,5*0*7t,15*22*-1$6$k$2i$75$a4,17*0*9e","next":"0*9*2f,2*10*9n$be,3*9*a4,6*9*71,11*9*ii","nn":"14*2*8m$9j$9u","note":"2*3*3c$68$6v$92,3*3*2e$38$7s$8j,6*1*3s$3v,11*3*46$b9$cp$dh,14*0*e7,15*0*99,17*1*3a$b1,18*1*2g$49","notes":"15*30*1$3","notification":"2*0*4o","notifications":"1*0*19,19*0*4n","november":"15*2*44$e1$ed","now":"15*2*4e$56$6f","nucleus":"13*0*1p","number":"3*2*1h$46$4c,6*2*5q$66$6k,11*2*7d$b1$hf,13*0*85,14*1*6q$7a,15*0*1m,17*1*3l$8q","numerous":"19*0*3n","oa67541":"3*0*6a","object":"8*0*c2","occur":"7*0*1n,15*0*dc","occurs":"7*0*4n","october":"15*0*4s","off":"3*2*6k$6q$83,13*0*51","offer":"18*10*-1$g","offers":"5*0*77,13*0*28","ok":"0*0*24,6*0*6m","once":"13*0*5g","one":"2*13*-1$p$2h$2v$52,3*0*37,5*0*14,11*0*4r,14*2*68$6g$ae,18*0*25","only":"3*0*8o,8*0*5r,14*4*6v$7f$7r$87$ee,18*0*4i","opd":"5*0*6q","open":"11*0*dt,16*0*1b","opening":"16*0*1p","operating":"3*0*67,11*0*3b,13*1*1e$at","optimize":"15*0*12","option":"3*4*5n$6p$78$81$87,5*0*7r,11*1*7b$av,15*2*2j$2s$6h,17*1*3h$8o","optional":"2*5*8n,3*11*2v$4i$73,11*5*ea,13*0*1u,14*0*57","optionally":"2*0*4a","options":"2*3*6q$7v$a6$ah,5*0*7a,11*0*ar,17*0*8k,19*0*28","ord":"14*2*8h$9t$cc","order":"14*4*8t$94$9b$9i$9p,18*0*32","organizations":"10*0*n","os":"2*2*1b$1i$5h,3*1*12$19,5*12*-1$9$2j$7l,6*1*1g$1n,7*17*-1$f$1i$2s$3i$44$6i$74$7g,9*52*-1$-1$4$b$j$p$2b$2h,11*49*-1$3$9$i$18$53$5d$5p$bu$do$g1$hj$i3,12*11*-1$d$n,13*2*17$2d$8t,14*3*14$41$49$e1,15*22*-1$f$s$4j$53$aa$bu$cf$cr$di$em$fc$fj$fr,16*12*-1$i$3k$4j,17*41*-1$3$9$i$c8,19*31*-1$-1$-1$s$17$1a$1t","osmf":"0*14*-1$g$11$1a$1f$2c,6*23*-1$-1$e$m$1b$1u$23,8*4*16$6v$81$89$bp,9*13*-1$15$1f$1p$27,13*67*-1$5$b$l$13$19$1o$27$4e$4j$53$60$65$77$80,15*0*cb","other":"8*2*5h$68$b6,10*0*20,11*0*bl,18*0*4l,19*0*4q","outages":"1*0*1o","over":"8*3*83$8b$8i$al,10*0*3h","overall":"5*1*58$5f,15*1*8l$8p","override":"11*0*4j","overview":"5*1*4d$4k,15*1*86$8a","page":"0*10*-1$e,6*11*-1$k$7k,11*2*cl$d9$e1,15*0*be,17*1*at$bh","panel":"2*18*-1$l$30$3o$43$47$4g$4n$4s$ag,15*0*1f,18*10*-1$p,19*0*39","panels":"2*12*-1$9$2p$a5,3*0*3d,5*12*-1$e$17$1f,14*0*1j,15*0*1j,19*1*2b$2v","parameter":"8*17*1c$21$2f$34$3s$4f$4o$5e$6l$7h$7u$98$9f$9r$a3$ag$b0$bh,13*2*6b$6c$6q,14*0*58","parameters":"8*43*-1$2$5$b$o$11$cg,13*1*ab$an","part":"14*0*6m","particular":"10*0*2o","particularly":"18*0*1k","partition":"14*0*b9","pass":"13*0*a7","passed":"2*0*bd","password":"3*1*8h$8l,11*0*ch,15*0*60,17*0*ap","pat":"14*0*6d","path":"3*2*47$4d$4h,8*4*48$9a$9k$9t$a8,11*0*3e,13*1*8j$b0,18*1*5m$6u","pattern":"14*0*6e","patterns":"14*0*6i,19*0*2k","pcie":"5*0*72","pdf":"12*40*-1$0$2$i,15*1*4n$4q","per":"15*1*74$a3","percentage":"10*1*3v$4h","perform":"0*0*2i,2*2*2g$2s$33,6*1*2l$74,11*2*5k$60$c4,17*1*1q$92","performance":"5*1*5j$5p,9*10*-1$n,10*0*1d,14*1*a2$dq,15*1*62$8s,19*10*-1$1o","performing":"7*0*2d,11*0*el","perfrom":"17*0*22","period":"8*0*4u,14*2*au$bs$c6","permissions":"13*0*3s","personalized":"5*0*1q","physical":"14*1*b6$bh","picker":"2*0*7m","piecing":"19*0*2s","pipeline":"2*0*bg","place":"13*0*8f","placeholders":"18*10*-1$r","planning":"10*0*14","platform":"19*20*-1$-1$d$1h","platforms":"11*0*bn,15*0*cu","plot":"16*1*2o$32","plugin":"2*1*1d$1j,3*1*14$1a,5*13*-1$b$2l$7n$7v,6*1*1i$1o,7*46*-1$2$5$h$1k$2u$3k$46$76$7i,9*1*2c$2i,11*54*-1$4$a$k$54$5e$5q$66$7e$b2$bv$dq$e5$eg$g3$hl$i5$ib,12*10*-1$f,14*0*16,15*20*-1$h$u$4l$55$ab$cg$cs$dk$eo$fe$ft,16*12*-1$k$3m$4l,17*61*-1$-1$4$a$k$14$1k$1t$2c$3j$3u$4m$5v$8r$9d$a8$ca,19*11*-1$u$1v","plugin's":"17*0*3i","plugins":"11*11*20$29$4c$4g$4o$6v$9f$a7$ab$co$d8$e0,17*5*35$78$80$84$b0$bg","pluginurl":"11*1*6d$7a,17*2*2j$3g$40","points":"1*0*23,15*1*1o$20","port":"3*2*1g$45$4b,6*4*5p$5v$61$65$6j,13*1*6u$84","port_number":"3*1*44$4a","powerful":"18*10*-1$9","practice":"3*0*7k,10*0*l","pre":"5*0*1d","pre-configured":"5*0*1c","precise":"16*0*15","prerequisite":"13*0*v","prerequisites":"6*1*13$16,9*1*20$22,13*40*-1$0$6$n","preselected":"3*0*3h","present":"2*10*-1$e,8*0*3b","presentation":"5*0*7c","presented":"2*0*6t,3*0*7d","prevent":"7*0*2k,8*0*b1","preview":"2*0*8g","privatekey":"8*0*a9","problem":"7*10*-1$v","problems":"7*0*5i,16*0*2f","proc":"5*0*45","procedure":"0*9*16,2*9*28,3*9*1j,6*9*1q,11*9*1p,17*9*24","procedures":"17*0*18"}; }); \ No newline at end of file diff --git a/docs/grafana/rmf-app/oxygen-webhelp/app/search/index/index-3.js b/docs/grafana/rmf-app/oxygen-webhelp/app/search/index/index-3.js index 28363a6f..a0ffca93 100644 --- a/docs/grafana/rmf-app/oxygen-webhelp/app/search/index/index-3.js +++ b/docs/grafana/rmf-app/oxygen-webhelp/app/search/index/index-3.js @@ -1,4 +1,4 @@ define(function () { // Auto generated index for searching. -return {"procedures":"17*0*18","process":"14*0*k,15*1*12$8q","processor":"10*1*48$4k,14*0*bd","procu":"5*0*4g","produces":"2*0*ba","profiles":"8*1*6p$75","programmer":"14*0*4e","programmer's":"14*0*4d","protocol":"8*2*7s$9e$a2","provide":"2*0*4e,6*0*3a,10*0*36,15*1*8m$ar,16*0*1v","provided":"3*0*65,6*0*12,9*0*1v,13*0*3k,15*0*bb","provides":"1*10*-1$7,2*2*8e$9p$bi,5*11*-1$c$u,8*0*22,10*0*18,14*0*17,19*11*-1$v$20","proxy":"3*0*54,8*0*1u,16*2*34$45$4t","public":"11*3*es$f0$fh$fn","public_key.asc":"11*0*er","publish":"11*0*98,17*0*71","purposes":"10*0*p,18*0*4m","qualifications":"14*1*39$56","qualify":"14*0*a0","queries":"2*0*6f,5*0*1h,10*0*1o,14*12*-1$9$1s$22,18*10*-1$o,19*0*3i","query":"2*18*-1$q$20$26$5v$62$63$6c$89$8i,10*0*2a,14*56*2$6$j$1c$2b$2d$2k$2m$2t$31$cg$ck,18*51*2$6$3h$3m$3r$7d$7i","quickly":"7*1*15$4u","range":"2*1*7u$9q,10*0*4o","ranges":"2*0*84,10*11*-1$g$3k","re":"5*0*81,15*1*45$7k,17*4*98$9i$ad$br$bu","re-enter":"15*0*44","re-import":"5*0*80,15*0*7j,17*4*97$9h$ac$bq$bt","real":"1*10*-1$e","receiving":"7*0*3b","recommended":"8*0*8d","refer":"1*0*24,2*2*a9$an$bs,3*0*a7,5*1*2b$8q,8*0*cj,11*0*ho,13*3*2b$2t$41$8r,18*0*93","referring":"7*0*53,17*0*a6","refresh":"2*0*86","regularly":"16*0*m","related":"11*5*j5,15*0*92","relative":"2*0*7s,10*11*-1$e$4m","release":"15*31*0$2$ch,17*0*a5","releases":"11*2*6k$9l$go,17*2*2q$47$7e","relevant":"14*0*u","reliable":"1*10*-1$8","remember":"3*0*96,11*1*74$al,17*0*8e","remove":"5*0*8f,6*0*78,17*0*5j","rename":"11*0*2u","replace":"11*1*77$ao,17*1*3d$8h,18*10*-1$i","replaces":"17*0*4n","report":"2*0*5d,10*0*42,11*1*28$aj,14*21*2j$b0$bq$c4$cf$cj$cp$cr$dg$dj$dn$e5$en$eq,15*0*3l,17*0*8c","report_name":"14*1*cq$df","reporting":"5*12*-1$o$3d$3q,7*30*1$4","reports":"0*10*-1$m,11*10*-1$r,14*1*2r$eb,16*0*2u,19*11*-1$1e$2c","repository":"15*0*cq","request":"14*0*a1,15*0*18","requested":"14*1*3i$d5","requesting":"14*0*62","requests":"3*0*5u,10*0*26","require":"2*10*-1$n,10*0*3n","required":"3*0*4r,5*0*8a,6*1*36$62,11*0*bm,14*0*al,16*0*1t","requirements":"2*0*ak,5*0*1m,11*0*57,15*20*-1$9$b8$d1,19*0*3c","research":"10*0*12","resolutions":"16*1*2a$2i","resolve":"15*0*bf","resolved":"7*0*37,15*0*c8","resource":"0*11*-1$c$1m,6*14*-1$i$31$34$3d$40,7*0*6j,14*16*34$3c$3f$3p$3t$45$4a$4m$4q$5j$5p$cn$cv$d2$dc$e2$ef,15*0*de,18*11*44$4f$4h$5e$5q$68$6c$6l$72$7q$8c$8g,19*10*-1$13","resource_name":"18*1*6b$8f","resource_type":"14*5*33$3b$3o$cm$cu$db","resources":"10*1*1g$3q","respond":"1*10*-1$b","response":"5*1*5s$62,7*0*4c,15*1*76$79","restart":"11*1*7g$8p,17*1*4q$6i","result":"2*0*bb","resulting":"3*0*6r","results":"0*9*25,2*9*8j$9e,3*9*9r,6*9*6n,11*9*de$hs,17*9*bm$c1","retrieval":"8*0*52,15*0*1i","retrieve":"14*4*s$1k$23$2e$2n","retrieved":"8*0*4k","returned":"14*3*78$7o$81$8d","reverse":"3*0*53","review":"13*0*3f","rm":"17*0*5n","rmf":"0*13*-1$i$2q$2t$39,2*50*-1$2$6$g$19$1g$1m$1s$22$25$5f$65$8a$9j,3*59*-1$-1$1$5$9$m$10$17$1n$1p$29$5t$9v$a8$ae,5*90*-1$-1$-1$-1$-1$0$3$7$f$l$n$p$2h$33$3a$3c$3e$3j$3m$3p$3s$7j,6*1*1e$1l,7*16*-1$d$1g$2q$3g$42$72$7e,9*1*29$2f,11*91*-1$-1$1$7$g$n$16$22$24$27$51$5b$5n$6j$6n$6r$73$81$8f$8k$90$9k$9o$9s$a2$ad$af$ai$bs$d5$dc$dm$dv$ee$fb$ff$fv$g6$gd$gn$h3$h9$hh$i1$ia$im$j2,12*11*-1$b$l,14*47*-1$1$5$f$12$1b$1o$27$2f$2o$42,15*28*-1$d$15$1q$2o$38$3k$3s$55$84$8f$9c$9k$ak$b0$bn$cj$d0$d9$do,16*15*-1$g$2j$2t$2v$3i$4h,17*63*-1$1$7$g$2p$2t$31$39$46$4a$4e$58$5c$5p$68$6d$6p$7d$7h$7l$7r$86$88$8b$bd$bk$c6,18*32*0$4$3f$7h,19*53*-1$-1$1$7$q$18$1r$4i$56","rmf-grafana":"11*1*8e$8j,17*4*57$5b$5o$67$6c","rmf-grafana-data":"11*1*80$8v,17*0*6o","root":"7*0*50","row":"2*0*6s","rows":"5*0*16","rs2":"14*0*ca","rs21":"14*1*bu$c8","run":"7*0*7l,11*6*62$7l$84$88$8b$gp$jb,17*4*28$4v$5g$5r$64","running":"13*0*79,17*0*61","runs":"13*0*82","same":"10*0*29","samesite":"8*0*au","save":"2*1*90$99,3*0*9h,10*0*33,13*0*88,15*0*3v","scenarios":"15*0*1v","seamlessly":"5*0*1s","search":"3*0*27,11*1*d6$dd,16*0*11,17*1*be$bl","seconds":"3*0*58","section":"3*0*3n,6*0*14,8*0*10,11*2*2a$fp$if,13*0*44,15*0*ap,16*10*-1$4","sections":"8*0*cl,13*0*s","secure":"3*0*7m,6*0*5m,8*1*8l$ae","security":"8*0*ab,15*0*c9","see":"0*1*12$37,2*2*1e$1q$23,3*0*15,6*2*15$1j$7o,11*0*j0,13*0*ak,15*1*1o$30","select":"0*0*1o,2*3*51$6j$79$7r,6*1*57$5h,18*7*3v$5b$5n$65$6i$6v$7l$89","selected":"14*0*4l","selecting":"18*0*16,19*0*5c","sends":"1*0*18","sensitive":"4*20*1,6*0*43","separate":"18*0*1t","separated":"14*0*5f","sequentially":"2*0*b7","series":"5*12*-1$r$3g$3u,15*0*25,16*1*2l$3p","server":"0*3*v$15$1q$35,3*10*-1$j,5*0*23,6*46*-1$2$5$a$2s$30$4l$5t$6s$7a,7*2*5l$69$6d,8*3*1h$77$7r$8u,9*0*2r,11*1*7i$iu,13*7*38$3m$4k$54$5c$61$78$81,15*2*1e$aj$dm,16*0*3g,17*2*1g$27$4s,19*0*43","server's":"13*0*5b","servers":"9*0*2m","service":"10*1*2j$2t,13*0*6i,14*1*ap$as","services":"13*0*1v","set":"2*1*80$bc,3*3*30$74$82$84,6*0*67,8*14*1k$28$2o$3k$3p$42$56$7a$7o$91$9g$a4$ap$ba$c6,11*0*1q,13*0*9q,19*0*4a","setting":"3*1*6c$6n","settings":"13*0*3j,15*0*99,16*2*35$46$4v,18*1*2u$3a","setup":"15*0*ac","setups":"3*0*4u","several":"2*0*bj,5*0*78","severe":"7*0*24","severity":"7*0*1p","share":"19*10*-1$l","shared":"14*0*bj","sharing":"8*0*b4","should":"8*0*3d","shown":"2*0*4u,7*0*82","shows":"10*0*3u","sign":"8*0*6i,11*0*ck,17*0*as","sign-in":"11*0*cj,17*0*ar","signature":"11*3*e6$ec$g9$gt","signed":"11*0*ei","significant":"1*0*1r,2*10*-1$s,10*0*u","similar":"6*0*46","similarly":"5*0*86,10*0*4c,11*0*bj","simplifies":"18*0*1i","simply":"18*0*15,19*0*5b","size":"3*1*8v$94,15*0*4s,19*0*3g","skip":"3*1*75$7u","smooth":"7*0*2n","so":"17*10*-1$u","socket":"16*1*3c$3u","sockets":"16*1*42$4a","software":"15*0*d6","solution":"1*10*-1$9","solutions":"16*0*1k","solving":"16*0*r","some":"13*11*-1$m$a9","sort":"14*3*8o$8v$96$9d","source":"0*0*2v,2*3*1o$67$7f$8c,3*20*-1$o$1r$26$2c$2s$35$3g$8a$93$9k$a1,5*10*-1$h,11*0*io,14*1*o$29,15*3*10$17$3u$9e,18*0*21","sources":"0*0*3b,2*1*1u$7c,3*31*3$7$22,10*0*1q,11*0*j4,14*11*-1$h$1q,15*2*1s$57$86,18*0*1q,19*0*3p","spaced":"5*0*4q","spaceg":"5*0*53","spaces":"14*0*a8,15*0*c1","special":"6*0*3q","specific":"1*0*v,7*0*5u,15*1*90$b7,19*0*4e","specified":"8*0*4t,14*0*26","specifies":"13*0*6d,14*2*6f$6r$7b","specify":"3*1*56$8u,6*0*6i,8*2*2g$99$9s,14*0*9s,15*0*4p","specifying":"10*1*49$4l,14*0*p","stand":"11*0*5h,17*0*1n","stand-alone":"11*0*5g,17*0*1m","start":"13*10*-1$f","starting":"13*0*36","state":"11*0*7s","status":"6*1*2b$7j,10*0*1b","stay":"7*0*4f","step":"2*4*2m$2o$2t$34$3r,11*1*59$7k,17*1*1i$4u","steps":"2*0*2i,6*0*2n,11*3*5l$61$c8$ep,17*2*1r$23$96","stop":"17*2*25$52$56","stopped":"11*0*8s,17*0*6l","stor":"5*0*5d","storage":"5*3*41$48$6n$6u,15*1*65$69","storc":"5*0*5n","storcr":"5*0*60","store":"2*0*9a,8*0*4r","stored":"13*0*9s","storf":"5*0*68","storing":"11*0*7q","storm":"5*0*6h","storr":"5*0*6r","stors":"5*0*73","streams":"16*0*3n","sub":"8*3*37$3l$3m$6b,11*1*c7$eo,17*0*95","sub-steps":"11*1*c6$en,17*0*94","subject":"8*0*3f","succeeds":"3*0*9q","successful":"8*0*1s","sufficient":"7*10*-1$p","support":"13*9*4c,15*1*93$c0,16*1*1f$22","supports":"19*0*3l","syntax":"14*20*2u$2v$ch$ci,18*51*3$7$3i$3l$3q$7c$7g","sys1":"6*1*4a$4b","sysinfo":"5*0*46","sysplex":"14*3*b4$eh$em$ep,18*1*6f$8j","sysplexes":"9*10*-1$q","sysrg":"5*0*4h","syssum":"5*0*4r","system":"1*13*-1$c$t$13$1n,6*15*-1$c$2a$4e$5b$6u$7i,10*1*3l$44,13*3*1f$1r$3a$9v,15*10*-1$8","systems":"9*0*2o,11*0*3c,13*0*au","tab":"2*1*60$6i","table":"2*0*2l,5*1*36$3i,7*0*1v,8*0*l,9*0*1h,11*0*4v,16*0*26","tailor":"5*0*1i","take":"7*1*2h$49,13*0*22","target":"6*12*-1$b$5a$6t,9*0*2n","task":"7*0*2a,9*0*1j,17*9*16","tasks":"0*0*2k,2*0*16,6*2*v$11$76,9*2*1a$1q$1u,11*0*14","terminate":"7*0*2e","test":"3*0*9i","testing":"3*0*7q","than":"3*0*9a,10*0*2i,14*1*74$7k","them":"2*0*b6","thereby":"19*10*-1$1i","therefore":"6*0*44","thresholds":"19*0*4g","through":"1*0*g,9*31*1$8$1d,13*11*-1$j$5u,15*0*a2,16*1*12$3s","time":"1*10*-1$f,2*2*7l$7t$83,5*15*-1$q$2n$3f$3t$5t$63,10*16*-1$f$35$3j$40$4b$4i$4n,15*2*24$77$7a,16*1*2k$3o","timeline":"5*8*4a$4l$4u$57$5i$5r$6c$6l$70,15*7*67$6e$6k$6p$6v$75$78$7d","timeout":"3*0*55","timestamp":"10*2*1r$2c$2p","tip":"6*0*69,7*0*77,17*0*9u","title":"2*1*48$4t","titles":"18*10*-1$q","tls":"3*1*76$7v","together":"19*0*2t","token":"8*4*1q$25$2l$2v$3u,13*12*4a$4p$9c$9k","token's":"13*0*9j","tokens":"13*1*4r$5o","tool":"17*0*4i,18*10*-1$a","top":"18*0*1d,19*0*5j","topic":"3*0*ab,7*0*6g,9*0*21,14*0*47,15*4*53$82$8k$a8$ba","total":"14*1*b5$bg","track":"1*0*n","transfer":"8*0*8n,15*0*1n","transferred":"3*0*70","transform":"2*0*bn","transformation":"2*6*6h$6k$6p$74$au$b9$bf","transformations":"2*2*77$b3$br,14*0*10","transforming":"14*10*-1$c","transient":"7*0*32","trends":"19*0*2j","trigger":"19*0*4m","troubleshoot":"7*11*-1$u$17","troubleshooting":"15*0*b9,16*30*0$2","true":"8*6*1l$1m$2a$7c$7q$ar$c8","tso":"8*0*6s","ttl":"8*0*4d","turn":"3*0*6j,13*0*57","turned":"13*0*50","type":"3*0*2d,6*0*5c,7*0*20,14*10*35$3d$3e$3q$4n$4r$5k$co$d0$d1$dd,18*9*4r$50$57$5j$5v$6e$6r$78$83$8i","types":"2*1*54$5o,7*0*1s,14*2*21$3u$eg","typical":"2*0*a7,16*10*-1$9","typically":"3*0*7n","ub":"14*0*79","ui":"11*1*c1$e3,15*1*5d$8c","ulq":"14*1*5h$c7,18*6*4p$55$5g$5s$6n$74$81","unblocking":"16*0*40","uncompressed":"3*0*71","under":"11*0*id","understand":"19*0*2f","understood":"2*0*1v","unified":"19*0*46","unique":"6*0*3b,7*1*4p$7v,14*0*1g,19*0*32","unless":"11*0*8r,17*0*6k","unless-stopped":"11*0*8q,17*0*6j","unsigned":"11*3*1v$4f$4n$aa,17*0*83","up":"1*0*1c,6*2*3h$54$6f,7*0*4h,8*0*6j,17*11*-1$l$9q,19*0*4b","up-down":"6*0*6e","up-to-date":"7*0*4g,17*0*9p","updated":"15*3*5a$63$89$aq,16*0*n,17*1*a2$c4","updates":"7*1*40$4k,15*1*7s$9r","upgrade":"15*0*8p,17*2*17$2b$5u","upgraded":"17*1*3m$8s","upgrading":"15*0*8e,17*43*-1$0$6$11$1j$1s$9c","upon":"2*0*6n,8*0*1r","upper":"7*0*5d,14*2*5l$7c$7m","uri":"16*0*4d","url":"0*0*18,3*3*3r$3t$41$4g,6*0*1s,8*1*7e$7l,11*0*ca,13*0*6e,17*0*ai","url_login":"8*0*7d","usage":"2*0*a8,5*0*54,10*0*1c","use":"2*0*9u,5*0*1a,6*1*5i$6d,8*24*-1$e$1b$2e$33$3r$4e$5d$6k$7g$7t$97$9q$af$av$bg,9*10*-1$g,10*0*r,11*0*49,13*3*1h$4m$5m$69,14*4*1v$2c$2l$67$ad,15*0*d7,18*0*27","used":"3*0*7o,11*0*b8,17*1*1d$91,18*0*4k","user":"2*0*3e,3*2*2g$8g$8k,7*0*39,8*5*23$36$4q$6o$74$8q,10*1*21$25,11*2*cr$fr$hq,12*11*-1$g$p,13*12*3b$3h$42$5r,14*0*19,15*1*5j$5r,17*0*b3","user's":"8*0*8p","user-friendly":"14*0*18","username":"8*0*31,11*0*cg,17*0*ao","username_claim":"8*0*30","users":"7*0*3t,8*0*70,13*0*3u,15*0*bd,19*10*-1$i","using":"5*1*64$6a,7*12*-1$b$1e$70,8*1*67$6r,10*10*-1$c,11*0*67,13*0*9m,15*0*bl,16*10*-1$e,17*0*2d,18*1*1e$3c","usr":"11*0*40,13*0*bi","utilization":"14*2*b7$be$bi","utilize":"15*0*7n","utilized":"3*0*64","utilizing":"17*0*9n","v1":"15*10*o$2e$36$4h$5i$7u$8u$9t$bv$c7$cf,17*1*3s$4c","v1.0.0":"15*0*ce","v1.0.1":"15*0*c6","v1.0.2":"15*0*bu","v1.0.3":"15*1*8t$9s,17*0*3r","v1.0.4":"15*1*5h$7t","v1.0.5":"15*0*4g","v1.0.6":"15*0*35","v1.0.7":"15*0*2d","v1.0.8":"15*0*n","v10":"15*0*96","v10.x.x":"15*0*95","v9":"13*0*2p","v9.5.1":"13*0*2o","va":"14*1*8k$95","validate":"8*0*65","validation":"8*1*20$5q","validity":"8*0*5g,13*0*9l","valuable":"10*0*19","value":"3*2*5k$97$9e,8*10*1j$27$2n$3i$55$79$7n$90$ao$b9$c5,11*1*1r$78,13*0*7f,14*3*3n$6u$7e$da,17*1*3e$3v,18*12*17$2m$4q$4s$4v$51$54$56$58$80$82$84$86,19*0*5d","values":"8*0*13,11*0*ap,13*0*a8,14*8*64$6a$72$7i$98$99$9f$9g$ag,17*0*8i,18*20*-1$-1$m$s","var":"11*0*94,17*0*6t","variable":"11*0*4i,18*34*1$5$2o$30$38$3g,19*0*54","variables":"18*16*-1$8$t$1f$28$2h$3b$8t","variances":"19*0*2l","various":"5*0*1b,10*1*o$1f,19*2*26$2u$40","vary":"7*0*1o","vd":"14*1*8l$9c","velocity":"5*1*4n$4t,15*1*6j$6m","verify":"3*1*77$80,8*1*3t$5f,11*2*eb$gs$h0,13*0*9i","version":"2*0*3k,3*0*2m,5*0*7u,11*10*6p$6t$79$7c$9q$9u$at$b0$b5$d1$he,17*23*-1$13$2v$33$3f$3k$3t$4l$7j$7n$8m$8p$8u$9f$b9","via":"14*0*1r,15*0*9g,19*0*4o","view":"0*0*2l,2*0*8q,5*0*2u,7*10*-1$k,10*11*-1$9$3f,12*10*-1$8,14*0*ea","viewed":"10*0*1v","viewing":"7*0*10,10*0*h,18*0*2c","visible":"3*0*8n","visual":"2*10*-1$i","visualization":"2*48*-1$1$5$t$2f$37$39$3u$53$5n$8m$9i,5*0*1j,14*0*1m,19*42*-1$0$6$12$27$33","visualizations":"2*0*9r,15*1*26$3m","visualize":"11*10*-1$m","visualizing":"19*10*-1$f","volume":"11*3*7p$7u$8u$je,17*0*6n","wait":"3*0*5d","waiting":"10*0*47","want":"0*0*1s,2*0*2d,6*0*4n,14*0*9m,17*0*3p","warning":"7*1*3a$3c,11*0*e7","way":"18*10*-1$h","ways":"2*0*bk","web":"0*0*1b,6*0*1v,8*2*40$8r$bj,11*0*cd,13*12*49$4o$6g$9o,16*3*3b$3t$41$49,17*0*al","websites":"8*0*b7","what":"0*9*2d,2*9*9l,3*9*a2,6*9*6v,11*9*ig,15*9*j,18*0*2a","what's":"15*9*i","when":"1*0*12,2*1*4j$b1,3*3*39$4v$5s$8p,5*1*2e$7s,7*0*4l,8*3*5o$85$9d$a1,9*10*-1$e,10*0*3d,11*0*dr,13*2*14$62$a1,14*0*61,15*0*4i,16*10*-1$d,19*0*4t","whenever":"7*10*-1$6","where":"6*0*5r,11*0*hc,13*1*7r$7u,14*1*3a$ct,17*0*5a,18*9*45$4n$5f$5r$69$6m$73$7r$7t$8d","whereas":"16*0*2s","which":"2*0*2b,3*1*5a$5q,7*0*60,11*0*eh,13*0*6j,14*2*3g$d3$du,15*0*1j,19*0*3q","while":"7*12*-1$a$1d$6v,15*0*bk","who":"8*0*71","windows":"11*0*3h,13*0*b3","within":"7*0*3n,8*0*bn,11*0*5t,15*0*22,17*0*1v,19*10*-1$1f","without":"7*0*62,18*10*3j$3n$3s","wlm":"14*6*a9$am$ao$ar$av$bp$c3","work":"8*2*82$8a$8h,16*0*4e","workflow":"14*0*c2","working":"3*0*9l,11*1*1n$3j,13*11*-1$g$b5","working_dir/conf/defaults.ini":"11*0*3i,13*0*b4","workload":"14*0*an","workscope":"14*3*9v$ah$ak$ce","ws":"16*0*4c","x-forwarded-access-token":"8*0*2s","x-jwt-assertion":"8*0*2p","x.y.z":"11*0*hd","xcf":"5*1*6d$6j,15*1*7b$7e","xcfgroup":"5*0*5e","xcfovw":"5*0*5o","xcfpath":"5*0*61","xcfsys":"5*0*69","you":"0*24*-1$6$o$q$1g$1r$26$2g,1*2*k$1b$1g,2*33*-1$b$v$11$2c$4b$4h$4k$5a$69$70$8f$95$9f$ac$aq$bl,3*29*-1$e$q$s$1c$1t$3a$4j$6h$79$8q$9s$a5,5*5*18$1o$2f$2s$7o$8b,6*27*-1$6$o$q$24$38$3t$4m$6b$6o$72,7*37*-1$-1$-1$7$i$s$13$1a$2b$47$5n$6s$7j,8*25*-1$-1$6$c$p$63$66$86$ah,9*21*-1$-1$f$t$16,10*14*-1$7$1h$34$3e$4d,11*31*-1$c$t$v$1k$2n$47$75$am$c2$dj$ds$ht$i6$ij,12*10*-1$4,13*33*-1$-1$d$o$1k$21$2k$3d$3o$4f$55$5l$86$96$9f$a2$a5,14*9*1t$3j$4s$65$9k$9q$ab$d6$dk$e8,15*5*2j$3o$41$4l$7h$d2,16*6*v$17$19$1g$1m$2b$4m,17*28*-1$-1$c$r$1c$3b$3o$8f$9m$9v$a9$c2,18*4*1l$22$2b$34$91,19*17*-1$1j$23$2e$2m$34$3s$48$50","your":"2*15*-1$f$3a$8h$8r$aj$av,5*0*1l,9*10*-1$r,11*3*2b$33$56$cc,13*2*1q$39$75,14*0*5v,16*1*37$4p,17*0*ak,18*2*13$1g$8u,19*3*2g$3b$4h$59","z/os":"2*2*1a$1h$5g,3*1*11$18,5*12*-1$8$2i$7k,6*1*1f$1m,7*17*-1$e$1h$2r$3h$43$6h$73$7f,9*52*-1$-1$3$a$i$o$2a$2g,11*49*-1$2$8$h$17$52$5c$5o$bt$dn$g0$hi$i2,12*11*-1$c$m,13*2*16$2c$8s,14*3*13$40$48$e0,15*21*-1$e$2p$39$8g$a4$al$b1$bo$ck$da$dh$dp,16*12*-1$h$3j$4i,17*41*-1$2$8$h$c7,19*31*-1$-1$-1$r$16$19$1s","z/osmf":"0*14*-1$f$10$19$1e$2b,6*23*-1$-1$d$l$1a$1t$22,8*4*15$6u$80$88$bo,9*13*-1$14$1e$1o$26,13*67*-1$4$a$k$12$18$1n$26$4d$4i$52$5v$64$76$7v,15*0*ah","zcx":"11*0*bb","zcx/zlinux":"11*0*ba","zfsfs":"5*0*6i","zfskn":"5*0*6s","zfsovw":"5*0*74","zip":"11*5*6u$9v$g8$gf$h5$hb,17*2*34$4g$7o","zlinux":"11*0*bc","zosmf":"8*0*6f","zosmfbuilder":"13*1*72$7p"}; +return {"process":"14*0*k,15*1*2r$aj","processor":"10*1*48$4k,14*0*bd","procu":"5*0*4g","produces":"2*0*ba","profiles":"8*1*6p$75","programmer":"14*0*4e","programmer's":"14*0*4d","protocol":"8*2*7s$9e$a2","provide":"2*0*4e,6*0*3a,10*0*36,15*1*af$ck,16*0*1v","provided":"3*0*65,6*0*12,9*0*1v,13*0*3k,15*0*d4","provides":"1*10*-1$7,2*2*8e$9p$bi,5*11*-1$c$u,8*0*22,10*0*18,14*0*17,19*11*-1$v$20","proxy":"3*0*54,8*0*1u,16*2*34$45$4t","public":"11*3*es$f0$fh$fn","public_key.asc":"11*0*er","publish":"11*0*98,17*0*71","purposes":"10*0*p,18*0*4m","qualifications":"14*1*39$56","qualify":"14*0*a0","queries":"2*0*6f,5*0*1h,10*0*1o,14*12*-1$9$1s$22,18*10*-1$o,19*0*3i","query":"2*18*-1$q$20$26$5v$62$63$6c$89$8i,10*0*2a,14*56*2$6$j$1c$2b$2d$2k$2m$2t$31$cg$ck,18*51*2$6$3h$3m$3r$7d$7i","querying":"15*0*16","quickly":"7*1*15$4u","range":"2*1*7u$9q,10*0*4o,15*0*1e","ranges":"2*0*84,10*11*-1$g$3k","re":"5*0*81,15*1*5u$9d,17*4*98$9i$ad$br$bu","re-enter":"15*0*5t","re-import":"5*0*80,15*0*9c,17*4*97$9h$ac$bq$bt","real":"1*10*-1$e","receiving":"7*0*3b","recommended":"8*0*8d","refer":"1*0*24,2*2*a9$an$bs,3*0*a7,5*1*2b$8q,8*0*cj,11*0*ho,13*3*2b$2t$41$8r,18*0*93","referring":"7*0*53,17*0*a6","refresh":"2*0*86","regularly":"16*0*m","related":"11*5*j5,15*0*ar","relative":"2*0*7s,10*11*-1$e$4m","release":"15*31*0$2$ei,17*0*a5","releases":"11*2*6k$9l$go,17*2*2q$47$7e","relevant":"14*0*u","reliable":"1*10*-1$8","remember":"3*0*96,11*1*74$al,17*0*8e","remove":"5*0*8f,6*0*78,17*0*5j","rename":"11*0*2u","replace":"11*1*77$ao,17*1*3d$8h,18*10*-1$i","replaces":"17*0*4n","report":"2*0*5d,10*0*42,11*1*28$aj,14*21*2j$b0$bq$c4$cf$cj$cp$cr$dg$dj$dn$e5$en$eq,15*0*5e,17*0*8c","report_name":"14*1*cq$df","reporting":"5*12*-1$o$3d$3q,7*30*1$4","reports":"0*10*-1$m,11*10*-1$r,14*1*2r$eb,16*0*2u,19*11*-1$1e$2c","repository":"15*0*er","request":"14*0*a1,15*0*31","requested":"14*1*3i$d5","requesting":"14*0*62","requests":"3*0*5u,10*0*26","require":"2*10*-1$n,10*0*3n","required":"3*0*4r,5*0*8a,6*1*36$62,11*0*bm,14*0*al,15*0*1l,16*0*1t","requirements":"2*0*ak,5*0*1m,11*0*57,15*20*-1$9$d1$f2,19*0*3c","research":"10*0*12","resolutions":"16*1*2a$2i","resolve":"15*0*d8","resolved":"7*0*37,15*0*e5","resource":"0*11*-1$c$1m,6*14*-1$i$31$34$3d$40,7*0*6j,14*16*34$3c$3f$3p$3t$45$4a$4m$4q$5j$5p$cn$cv$d2$dc$e2$ef,15*0*ff,18*11*44$4f$4h$5e$5q$68$6c$6l$72$7q$8c$8g,19*10*-1$13","resource_name":"18*1*6b$8f","resource_type":"14*5*33$3b$3o$cm$cu$db","resources":"10*1*1g$3q","respond":"1*10*-1$b","response":"5*1*5s$62,7*0*4c,15*1*8v$92","restart":"11*1*7g$8p,17*1*4q$6i","result":"2*0*bb","resulting":"3*0*6r,15*0*26","results":"0*9*25,2*9*8j$9e,3*9*9r,6*9*6n,11*9*de$hs,17*9*bm$c1","retrieval":"8*0*52,15*0*3b","retrieve":"14*4*s$1k$23$2e$2n","retrieved":"8*0*4k","returned":"14*3*78$7o$81$8d","reverse":"3*0*53","review":"13*0*3f","rm":"17*0*5n","rmf":"0*13*-1$i$2q$2t$39,2*50*-1$2$6$g$19$1g$1m$1s$22$25$5f$65$8a$9j,3*59*-1$-1$1$5$9$m$10$17$1n$1p$29$5t$9v$a8$ae,5*90*-1$-1$-1$-1$-1$0$3$7$f$l$n$p$2h$33$3a$3c$3e$3j$3m$3p$3s$7j,6*1*1e$1l,7*16*-1$d$1g$2q$3g$42$72$7e,9*1*29$2f,11*91*-1$-1$1$7$g$n$16$22$24$27$51$5b$5n$6j$6n$6r$73$81$8f$8k$90$9k$9o$9s$a2$ad$af$ai$bs$d5$dc$dm$dv$ee$fb$ff$fv$g6$gd$gn$h3$h9$hh$i1$ia$im$j2,12*11*-1$b$l,14*47*-1$1$5$f$12$1b$1o$27$2f$2o$42,15*29*-1$d$q$2u$3j$4h$51$5d$5l$6u$9t$a8$b5$bd$cd$cp$dg$ek$f1$fa$fp,16*15*-1$g$2j$2t$2v$3i$4h,17*63*-1$1$7$g$2p$2t$31$39$46$4a$4e$58$5c$5p$68$6d$6p$7d$7h$7l$7r$86$88$8b$bd$bk$c6,18*32*0$4$3f$7h,19*53*-1$-1$1$7$q$18$1r$4i$56","rmf-grafana":"11*1*8e$8j,17*4*57$5b$5o$67$6c","rmf-grafana-data":"11*1*80$8v,17*0*6o","root":"7*0*50","row":"2*0*6s","rows":"5*0*16","rs2":"14*0*ca","rs21":"14*1*bu$c8","run":"7*0*7l,11*6*62$7l$84$88$8b$gp$jb,17*4*28$4v$5g$5r$64","running":"13*0*79,17*0*61","runs":"13*0*82","same":"10*0*29","samesite":"8*0*au","save":"2*1*90$99,3*0*9h,10*0*33,13*0*88,15*0*5o","scenarios":"15*0*3o","seamlessly":"5*0*1s","search":"3*0*27,11*1*d6$dd,16*0*11,17*1*be$bl","seconds":"3*0*58","section":"3*0*3n,6*0*14,8*0*10,11*2*2a$fp$if,13*0*44,15*0*ci,16*10*-1$4","sections":"8*0*cl,13*0*s","secure":"3*0*7m,6*0*5m,8*1*8l$ae","security":"8*0*ab,15*0*e6","see":"0*1*12$37,2*2*1e$1q$23,3*0*15,6*2*15$1j$7o,11*0*j0,13*0*ak,15*1*3h$4p","select":"0*0*1o,2*3*51$6j$79$7r,6*1*57$5h,18*7*3v$5b$5n$65$6i$6v$7l$89","selected":"14*0*4l,15*0*1c","selecting":"18*0*16,19*0*5c","sends":"1*0*18","sensitive":"4*20*1,6*0*43","separate":"18*0*1t","separated":"14*0*5f","sequentially":"2*0*b7","series":"5*12*-1$r$3g$3u,15*2*19$24$3u,16*1*2l$3p","server":"0*3*v$15$1q$35,3*10*-1$j,5*0*23,6*46*-1$2$5$a$2s$30$4l$5t$6s$7a,7*2*5l$69$6d,8*3*1h$77$7r$8u,9*0*2r,11*1*7i$iu,13*7*38$3m$4k$54$5c$61$78$81,15*2*37$cc$fn,16*0*3g,17*2*1g$27$4s,19*0*43","server's":"13*0*5b","servers":"9*0*2m","service":"10*1*2j$2t,13*0*6i,14*1*ap$as","services":"13*0*1v","set":"2*1*80$bc,3*3*30$74$82$84,6*0*67,8*14*1k$28$2o$3k$3p$42$56$7a$7o$91$9g$a4$ap$ba$c6,11*0*1q,13*0*9q,19*0*4a","setting":"3*1*6c$6n","settings":"13*0*3j,15*0*b2,16*2*35$46$4v,18*1*2u$3a","setup":"15*0*c5","setups":"3*0*4u","several":"2*0*bj,5*0*78","severe":"7*0*24","severity":"7*0*1p","share":"19*10*-1$l","shared":"14*0*bj","sharing":"8*0*b4","should":"8*0*3d","shown":"2*0*4u,7*0*82","shows":"10*0*3u","sign":"8*0*6i,11*0*ck,17*0*as","sign-in":"11*0*cj,17*0*ar","signature":"11*3*e6$ec$g9$gt","signed":"11*0*ei","significant":"1*0*1r,2*10*-1$s,10*0*u","similar":"6*0*46","similarly":"5*0*86,10*0*4c,11*0*bj","simplifies":"18*0*1i","simply":"18*0*15,19*0*5b","size":"3*1*8v$94,15*2*14$1g$6l,19*0*3g","skip":"3*1*75$7u","smooth":"7*0*2n","so":"17*10*-1$u","socket":"16*1*3c$3u","sockets":"16*1*42$4a","software":"15*0*f7","solution":"1*10*-1$9","solutions":"16*0*1k","solving":"16*0*r","some":"13*11*-1$m$a9","sort":"14*3*8o$8v$96$9d","source":"0*0*2v,2*3*1o$67$7f$8c,3*20*-1$o$1r$26$2c$2s$35$3g$8a$93$9k$a1,5*10*-1$h,11*0*io,14*1*o$29,15*3*2p$30$5n$b7,18*0*21","sources":"0*0*3b,2*1*1u$7c,3*31*3$7$22,10*0*1q,11*0*j4,14*11*-1$h$1q,15*2*3l$70$9v,18*0*1q,19*0*3p","spaced":"5*0*4q","spaceg":"5*0*53","spaces":"14*0*a8,15*0*dq","special":"6*0*3q","specific":"1*0*v,7*0*5u,15*2*1u$ap$d0,19*0*4e","specified":"8*0*4t,14*0*26","specifies":"13*0*6d,14*2*6f$6r$7b","specify":"3*1*56$8u,6*0*6i,8*2*2g$99$9s,14*0*9s,15*0*6i","specifying":"10*1*49$4l,14*0*p","stand":"11*0*5h,17*0*1n","stand-alone":"11*0*5g,17*0*1m","start":"13*10*-1$f","starting":"13*0*36","state":"11*0*7s","status":"6*1*2b$7j,10*0*1b","stay":"7*0*4f","step":"2*4*2m$2o$2t$34$3r,11*1*59$7k,15*0*13,17*1*1i$4u","steps":"2*0*2i,6*0*2n,11*3*5l$61$c8$ep,17*2*1r$23$96","stop":"17*2*25$52$56","stopped":"11*0*8s,17*0*6l","stor":"5*0*5d","storage":"5*3*41$48$6n$6u,15*1*7u$82","storc":"5*0*5n","storcr":"5*0*60","store":"2*0*9a,8*0*4r","stored":"13*0*9s","storf":"5*0*68","storing":"11*0*7q","storm":"5*0*6h","storr":"5*0*6r","stors":"5*0*73","streams":"16*0*3n","sub":"8*3*37$3l$3m$6b,11*1*c7$eo,17*0*95","sub-steps":"11*1*c6$en,17*0*94","subject":"8*0*3f","succeeds":"3*0*9q","successful":"8*0*1s","sufficient":"7*10*-1$p","support":"13*9*4c,15*1*as$dp,16*1*1f$22","supports":"19*0*3l","syntax":"14*20*2u$2v$ch$ci,18*51*3$7$3i$3l$3q$7c$7g","sys1":"6*1*4a$4b","sysinfo":"5*0*46","sysplex":"14*3*b4$eh$em$ep,18*1*6f$8j","sysplexes":"9*10*-1$q","sysrg":"5*0*4h","syssum":"5*0*4r","system":"1*13*-1$c$t$13$1n,6*15*-1$c$2a$4e$5b$6u$7i,10*1*3l$44,13*3*1f$1r$3a$9v,15*10*-1$8","systems":"9*0*2o,11*0*3c,13*0*au","tab":"2*1*60$6i","table":"2*0*2l,5*1*36$3i,7*0*1v,8*0*l,9*0*1h,11*0*4v,16*0*26","tailor":"5*0*1i","take":"7*1*2h$49,13*0*22","target":"6*12*-1$b$5a$6t,9*0*2n","task":"7*0*2a,9*0*1j,17*9*16","tasks":"0*0*2k,2*0*16,6*2*v$11$76,9*2*1a$1q$1u,11*0*14","terminate":"7*0*2e","test":"3*0*9i","testing":"3*0*7q","than":"3*0*9a,10*0*2i,14*1*74$7k","them":"2*0*b6","thereby":"19*10*-1$1i","therefore":"6*0*44","thresholds":"19*0*4g","through":"1*0*g,9*31*1$8$1d,13*11*-1$j$5u,15*0*br,16*1*12$3s","time":"1*10*-1$f,2*2*7l$7t$83,5*15*-1$q$2n$3f$3t$5t$63,10*16*-1$f$35$3j$40$4b$4i$4n,15*5*18$1d$23$3t$90$93,16*1*2k$3o","timeline":"5*8*4a$4l$4u$57$5i$5r$6c$6l$70,15*7*80$87$8d$8i$8o$8u$91$96","timeout":"3*0*55","timestamp":"10*2*1r$2c$2p","tip":"6*0*69,7*0*77,17*0*9u","title":"2*1*48$4t","titles":"18*10*-1$q","tls":"3*1*76$7v","together":"19*0*2t","token":"8*4*1q$25$2l$2v$3u,13*12*4a$4p$9c$9k","token's":"13*0*9j","tokens":"13*1*4r$5o","tool":"17*0*4i,18*10*-1$a","top":"18*0*1d,19*0*5j","topic":"3*0*ab,7*0*6g,9*0*21,14*0*47,15*4*6s$9r$ad$c1$d3","total":"14*1*b5$bg","track":"1*0*n","transfer":"8*0*8n,15*0*3g","transferred":"3*0*70","transform":"2*0*bn","transformation":"2*6*6h$6k$6p$74$au$b9$bf","transformations":"2*2*77$b3$br,14*0*10","transforming":"14*10*-1$c","transient":"7*0*32","trends":"19*0*2j","trigger":"19*0*4m","troubleshoot":"7*11*-1$u$17","troubleshooting":"15*0*d2,16*30*0$2","true":"8*6*1l$1m$2a$7c$7q$ar$c8","tso":"8*0*6s","ttl":"8*0*4d","turn":"3*0*6j,13*0*57","turned":"13*0*50","type":"3*0*2d,6*0*5c,7*0*20,14*10*35$3d$3e$3q$4n$4r$5k$co$d0$d1$dd,18*9*4r$50$57$5j$5v$6e$6r$78$83$8i","types":"2*1*54$5o,7*0*1s,14*2*21$3u$eg","typical":"2*0*a7,16*10*-1$9","typically":"3*0*7n","ub":"14*0*79","ui":"11*1*c1$e3,15*1*76$a5","ulq":"14*1*5h$c7,18*6*4p$55$5g$5s$6n$74$81","unblocking":"16*0*40","uncompressed":"3*0*71","under":"11*0*id","understand":"19*0*2f","understood":"2*0*1v","unified":"19*0*46","unique":"6*0*3b,7*1*4p$7v,14*0*1g,19*0*32","unless":"11*0*8r,17*0*6k","unless-stopped":"11*0*8q,17*0*6j","unsigned":"11*3*1v$4f$4n$aa,17*0*83","up":"1*0*1c,6*2*3h$54$6f,7*0*4h,8*0*6j,17*11*-1$l$9q,19*0*4b","up-down":"6*0*6e","up-to-date":"7*0*4g,17*0*9p","updated":"15*3*73$7s$a2$cj,16*0*n,17*1*a2$c4","updates":"7*1*40$4k,15*1*9l$bk","upgrade":"15*0*ai,17*2*17$2b$5u","upgraded":"17*1*3m$8s","upgrading":"15*0*a7,17*43*-1$0$6$11$1j$1s$9c","upon":"2*0*6n,8*0*1r","upper":"7*0*5d,14*2*5l$7c$7m","uri":"16*0*4d","url":"0*0*18,3*3*3r$3t$41$4g,6*0*1s,8*1*7e$7l,11*0*ca,13*0*6e,17*0*ai","url_login":"8*0*7d","usage":"2*0*a8,5*0*54,10*0*1c","use":"2*0*9u,5*0*1a,6*1*5i$6d,8*24*-1$e$1b$2e$33$3r$4e$5d$6k$7g$7t$97$9q$af$av$bg,9*10*-1$g,10*0*r,11*0*49,13*3*1h$4m$5m$69,14*4*1v$2c$2l$67$ad,15*0*f8,18*0*27","used":"3*0*7o,11*0*b8,17*1*1d$91,18*0*4k","user":"2*0*3e,3*2*2g$8g$8k,7*0*39,8*5*23$36$4q$6o$74$8q,10*1*21$25,11*2*cr$fr$hq,12*11*-1$g$p,13*12*3b$3h$42$5r,14*0*19,15*1*7c$7k,17*0*b3","user's":"8*0*8p","user-friendly":"14*0*18","username":"8*0*31,11*0*cg,17*0*ao","username_claim":"8*0*30","users":"7*0*3t,8*0*70,13*0*3u,15*0*d6,19*10*-1$i","using":"5*1*64$6a,7*12*-1$b$1e$70,8*1*67$6r,10*10*-1$c,11*0*67,13*0*9m,15*0*de,16*10*-1$e,17*0*2d,18*1*1e$3c","usr":"11*0*40,13*0*bi","utilization":"14*2*b7$be$bi","utilize":"15*0*9g","utilized":"3*0*64","utilizing":"17*0*9n","v1":"15*11*o$2h$47$4v$6a$7b$9n$an$bm$do$e4$eg,17*1*3s$4c","v1.0.0":"15*0*ef","v1.0.1":"15*0*e3","v1.0.2":"15*0*dn","v1.0.3":"15*1*am$bl,17*0*3r","v1.0.4":"15*1*7a$9m","v1.0.5":"15*0*69","v1.0.6":"15*0*4u","v1.0.7":"15*0*46","v1.0.8":"15*0*2g","v1.0.9":"15*0*n","v10":"15*0*av","v10.x.x":"15*0*au","v9":"13*0*2p","v9.5.1":"13*0*2o","va":"14*1*8k$95","validate":"8*0*65","validation":"8*1*20$5q","validity":"8*0*5g,13*0*9l","valuable":"10*0*19","value":"3*2*5k$97$9e,8*10*1j$27$2n$3i$55$79$7n$90$ao$b9$c5,11*1*1r$78,13*0*7f,14*3*3n$6u$7e$da,17*1*3e$3v,18*12*17$2m$4q$4s$4v$51$54$56$58$80$82$84$86,19*0*5d","values":"8*0*13,11*0*ap,13*0*a8,14*8*64$6a$72$7i$98$99$9f$9g$ag,17*0*8i,18*20*-1$-1$m$s","var":"11*0*94,17*0*6t","variable":"11*0*4i,18*34*1$5$2o$30$38$3g,19*0*54","variables":"18*16*-1$8$t$1f$28$2h$3b$8t","variances":"19*0*2l","various":"5*0*1b,10*1*o$1f,19*2*26$2u$40","vary":"7*0*1o","vd":"14*1*8l$9c","velocity":"5*1*4n$4t,15*1*8c$8f","verify":"3*1*77$80,8*1*3t$5f,11*2*eb$gs$h0,13*0*9i","version":"2*0*3k,3*0*2m,5*0*7u,11*10*6p$6t$79$7c$9q$9u$at$b0$b5$d1$he,17*23*-1$13$2v$33$3f$3k$3t$4l$7j$7n$8m$8p$8u$9f$b9","via":"14*0*1r,15*0*b9,19*0*4o","view":"0*0*2l,2*0*8q,5*0*2u,7*10*-1$k,10*11*-1$9$3f,12*10*-1$8,14*0*ea","viewed":"10*0*1v","viewing":"7*0*10,10*0*h,18*0*2c","views":"15*0*25","visible":"3*0*8n","visual":"2*10*-1$i","visualization":"2*48*-1$1$5$t$2f$37$39$3u$53$5n$8m$9i,5*0*1j,14*0*1m,19*42*-1$0$6$12$27$33","visualizations":"2*0*9r,15*1*3v$5f","visualize":"11*10*-1$m","visualizing":"19*10*-1$f","volume":"11*3*7p$7u$8u$je,17*0*6n","wait":"3*0*5d","waiting":"10*0*47","want":"0*0*1s,2*0*2d,6*0*4n,14*0*9m,17*0*3p","warning":"7*1*3a$3c,11*0*e7","way":"18*10*-1$h","ways":"2*0*bk","web":"0*0*1b,6*0*1v,8*2*40$8r$bj,11*0*cd,13*12*49$4o$6g$9o,16*3*3b$3t$41$49,17*0*al","websites":"8*0*b7","what":"0*9*2d,2*9*9l,3*9*a2,6*9*6v,11*9*ig,15*9*j,18*0*2a","what's":"15*9*i","when":"1*0*12,2*1*4j$b1,3*3*39$4v$5s$8p,5*1*2e$7s,7*0*4l,8*3*5o$85$9d$a1,9*10*-1$e,10*0*3d,11*0*dr,13*2*14$62$a1,14*0*61,15*1*15$6b,16*10*-1$d,19*0*4t","whenever":"7*10*-1$6","where":"6*0*5r,11*0*hc,13*1*7r$7u,14*1*3a$ct,17*0*5a,18*9*45$4n$5f$5r$69$6m$73$7r$7t$8d","whereas":"16*0*2s","which":"2*0*2b,3*1*5a$5q,7*0*60,11*0*eh,13*0*6j,14*2*3g$d3$du,15*0*3c,19*0*3q","while":"7*12*-1$a$1d$6v,15*0*dd","who":"8*0*71","windows":"11*0*3h,13*0*b3","within":"7*0*3n,8*0*bn,11*0*5t,15*0*3r,17*0*1v,19*10*-1$1f","without":"7*0*62,18*10*3j$3n$3s","wlm":"14*6*a9$am$ao$ar$av$bp$c3","work":"8*2*82$8a$8h,16*0*4e","workflow":"14*0*c2","working":"3*0*9l,11*1*1n$3j,13*11*-1$g$b5","working_dir/conf/defaults.ini":"11*0*3i,13*0*b4","workload":"14*0*an","workscope":"14*3*9v$ah$ak$ce","ws":"16*0*4c","x-forwarded-access-token":"8*0*2s","x-jwt-assertion":"8*0*2p","x.y.z":"11*0*hd","xcf":"5*1*6d$6j,15*1*94$97","xcfgroup":"5*0*5e","xcfovw":"5*0*5o","xcfpath":"5*0*61","xcfsys":"5*0*69","you":"0*24*-1$6$o$q$1g$1r$26$2g,1*2*k$1b$1g,2*33*-1$b$v$11$2c$4b$4h$4k$5a$69$70$8f$95$9f$ac$aq$bl,3*29*-1$e$q$s$1c$1t$3a$4j$6h$79$8q$9s$a5,5*5*18$1o$2f$2s$7o$8b,6*27*-1$6$o$q$24$38$3t$4m$6b$6o$72,7*37*-1$-1$-1$7$i$s$13$1a$2b$47$5n$6s$7j,8*25*-1$-1$6$c$p$63$66$86$ah,9*21*-1$-1$f$t$16,10*14*-1$7$1h$34$3e$4d,11*31*-1$c$t$v$1k$2n$47$75$am$c2$dj$ds$ht$i6$ij,12*10*-1$4,13*33*-1$-1$d$o$1k$21$2k$3d$3o$4f$55$5l$86$96$9f$a2$a5,14*9*1t$3j$4s$65$9k$9q$ab$d6$dk$e8,15*5*4c$5h$5q$6e$9a$f3,16*6*v$17$19$1g$1m$2b$4m,17*28*-1$-1$c$r$1c$3b$3o$8f$9m$9v$a9$c2,18*4*1l$22$2b$34$91,19*17*-1$1j$23$2e$2m$34$3s$48$50","your":"2*15*-1$f$3a$8h$8r$aj$av,5*0*1l,9*10*-1$r,11*3*2b$33$56$cc,13*2*1q$39$75,14*0*5v,16*1*37$4p,17*0*ak,18*2*13$1g$8u,19*3*2g$3b$4h$59","z/os":"2*2*1a$1h$5g,3*1*11$18,5*12*-1$8$2i$7k,6*1*1f$1m,7*17*-1$e$1h$2r$3h$43$6h$73$7f,9*52*-1$-1$3$a$i$o$2a$2g,11*49*-1$2$8$h$17$52$5c$5o$bt$dn$g0$hi$i2,12*11*-1$c$m,13*2*16$2c$8s,14*3*13$40$48$e0,15*22*-1$e$r$4i$52$a9$bt$ce$cq$dh$el$fb$fi$fq,16*12*-1$h$3j$4i,17*41*-1$2$8$h$c7,19*31*-1$-1$-1$r$16$19$1s","z/osmf":"0*14*-1$f$10$19$1e$2b,6*23*-1$-1$d$l$1a$1t$22,8*4*15$6u$80$88$bo,9*13*-1$14$1e$1o$26,13*67*-1$4$a$k$12$18$1n$26$4d$4i$52$5v$64$76$7v,15*0*ca","zcx":"11*0*bb","zcx/zlinux":"11*0*ba","zfsfs":"5*0*6i","zfskn":"5*0*6s","zfsovw":"5*0*74","zip":"11*5*6u$9v$g8$gf$h5$hb,17*2*34$4g$7o","zlinux":"11*0*bc","zosmf":"8*0*6f","zosmfbuilder":"13*1*72$7p"}; }); \ No newline at end of file diff --git a/docs/grafana/rmf-app/pdf/rmf_grafana.pdf b/docs/grafana/rmf-app/pdf/rmf_grafana.pdf index 4e4cd1f0..171c79a4 100644 Binary files a/docs/grafana/rmf-app/pdf/rmf_grafana.pdf and b/docs/grafana/rmf-app/pdf/rmf_grafana.pdf differ diff --git a/docs/grafana/rmf-app/rn.html b/docs/grafana/rmf-app/rn.html index a935e842..2e7db3fe 100644 --- a/docs/grafana/rmf-app/rn.html +++ b/docs/grafana/rmf-app/rn.html @@ -148,40 +148,86 @@

Release notes

+
May 2025 v1.0.9
+
+
    +
  • +

    IBM RMF for z/OS Grafana plugin has been + enhanced to optimize the step size when querying and displaying + time series data, based on the selected time range and panel + size. This enhancement ensures that panels display the required + number of data points.

    +
  • +
  • +

    A bug has been fixed that was causing specific data points to be + dropped from time series views, resulting in a flat line in the + graphs.

    +
  • +
  • +

    Fixed internally found defects.

    +
  • +
+
+ + + +
+
+
April 2025 v1.0.8
    -
  • A new option, Compression, has been added to - the data source creation process. This option enables the RMF data - source to request HTTP compression from the Data Distributed Server - (DDS) during data retrieval, which improves the efficiency of data - transfer. See Creating RMF data sources.
  • -
  • Fixed certain scenarios of missing data within dashboards for time - series visualizations.
  • -
  • Fixed internally found defects.
  • +
  • +

    A new option, Compression, has been added + to the data source creation process. This option enables the RMF + data source to request HTTP compression from the Data + Distributed Server (DDS) during data retrieval, which improves + the efficiency of data transfer. See Creating RMF data sources.

    +
  • +
  • +

    Fixed certain scenarios of missing data within dashboards for + time series visualizations.

    +
  • +
  • +

    Fixed internally found defects.

    +
November 2024 v1.0.7
-
    -
  • Fixed internally found defects.
  • -
  • You can now download IBM RMF for z/OS Grafana - plugin documentation as a PDF file. See PDF Guide.
  • -
+
+ +
    +
  • +

    Fixed internally found defects.

    +
  • +
  • +

    You can now download IBM RMF for z/OS Grafana plugin documentation as a PDF file. See PDF Guide.

    +
  • +
+
October 2024 v1.0.6
    -
  • The IBM RMF for z/OS Grafana plugin now allows - customizing banner and caption fields in IBM RMF Report - visualizations.
  • -
  • After you modify any IBM RMF data source - and save the changes, you no longer need to re-enter the - password.
  • -
  • Improved performance.
  • -
  • Fixed internally found defects.
  • +
  • +

    The IBM RMF for z/OS Grafana plugin now + allows customizing banner and caption fields in IBM RMF Report + visualizations.

    +
  • +
  • +

    After you modify any IBM RMF data + source and save the changes, you no longer need to re-enter the + password.

    +
  • +
  • +

    Improved performance.

    +
  • +
  • +

    Fixed internally found defects.

    +
@@ -193,11 +239,17 @@

Release notes

August 2024 v1.0.5
    -
  • When creating the datasource, you now have the option to specify the - desired cache size in megabytes for the datasource.
  • -
  • Fixed internally found defects.
  • -
  • The topic of Creating RMF data sources has been updated - per the new UI changes.
  • +
  • +

    When creating the datasource, you now have the option to specify + the desired cache size in megabytes for the datasource.

    +
  • +
  • +

    Fixed internally found defects.

    +
  • +
  • +

    The topic of Creating RMF data sources has been + updated per the new UI changes.

    +
@@ -205,38 +257,48 @@

Release notes

June 2024 v1.0.4
    -
  • The user interface for creating the datasource has been enhanced to - improve the user experience.
  • -
  • Fixed internally found defects.
  • -
  • The following dashboards are updated:
      -
    • Common Storage Activity (Timeline)
    • -
    • Common Storage Activity
    • -
    • Coupling Facility Overview (Timeline)
    • -
    • Coupling Facility Overview
    • -
    • Execution Velocity (Timeline)
    • -
    • Execution Velocity
    • -
    • General Activity (Timeline)
    • -
    • General Activity
    • -
    • Overall Image Activity (Timeline)
    • -
    • Overall Image Activity
    • -
    • Performance Index (Timeline)
    • -
    • Response Time (Timeline)
    • -
    • Response Time
    • -
    • XCF Activity (Timeline)
    • -
    • XCF Activity
    • -
    • -
      Note: You must re-import the - dashboards to utilize the latest enhancements in the - dashboards.
      -
    • -
  • -
  • The documentation updates for v1.0.4 include the following - changes:
  • +
  • +

    The user interface for creating the datasource has been enhanced + to improve the user experience.

    +
  • +
  • +

    Fixed internally found defects.

    +
  • +
  • +
    The following dashboards are updated:
      +
    • Common Storage Activity (Timeline)
    • +
    • Common Storage Activity
    • +
    • Coupling Facility Overview (Timeline)
    • +
    • Coupling Facility Overview
    • +
    • Execution Velocity (Timeline)
    • +
    • Execution Velocity
    • +
    • General Activity (Timeline)
    • +
    • General Activity
    • +
    • Overall Image Activity (Timeline)
    • +
    • Overall Image Activity
    • +
    • Performance Index (Timeline)
    • +
    • Response Time (Timeline)
    • +
    • Response Time
    • +
    • XCF Activity (Timeline)
    • +
    • XCF Activity
    • +
    Note: You must re-import the + dashboards to utilize the latest enhancements in the + dashboards.
    +
  • +
  • +
    The documentation updates for v1.0.4 include the following + changes:
    +
@@ -244,40 +306,76 @@

Release notes

February 2024 v1.0.3
    -
  • Fixed specific issues related to the support of Grafana - v10.x.x.
  • -
  • Fixed empty settings issue for IBM RMF data source defined via - Home / Apps / IBM RMF page.
  • -
  • Fixed internally found defects.
  • -
  • The documentation updates for v1.0.3 include the following - changes:
      -
    • The Grafana through IBM - z/OS Management Facility topic explains more - detailed setup instructions to access Grafana from the - z/OSMF server.
    • -
    • The RMF for z/OS plugin - installation section is updated to provide clear - information and guidance on installing the RMF for z/OS plugin on - different platforms based on specific requirements.
    • -
    • The troubleshooting topic - is provided to help users analyze and resolve common issues - that may occur while using the IBM RMF for z/OS Grafana plugin.
    • -
  • +
  • +

    Fixed specific issues related to the support of Grafana + v10.x.x.

    +
  • +
  • +

    Fixed empty settings issue for IBM RMF data source defined via + Home / Apps / IBM RMF page.

    +
  • +
  • +

    Fixed internally found defects.

    +
  • +
  • +
    The documentation updates for v1.0.3 include the following + changes:
      +
    • +

      The Grafana + through IBM z/OS Management Facility topic + explains more detailed setup instructions to access + Grafana from the z/OSMF server.

      +
    • +
    • +

      The RMF for z/OS plugin + installation section is updated to provide + clear information and guidance on installing the RMF for z/OS plugin on + different platforms based on specific + requirements.

      +
    • +
    • +

      The troubleshooting topic is provided to help + users analyze and resolve common issues that may + occur while using the IBM RMF for z/OS Grafana + plugin.

      +
    • +
    +
December 2023 v1.0.2
-
Support spaces in Datasource name.
+
+
    +
  • +

    Support spaces in Datasource name.

    +
  • +
  • +

    Fixed internally found defects.

    +
  • +
+
November 2023 v1.0.1
-
Resolved security issues in dependencies.
+
+
    +
  • +

    Resolved security issues in dependencies.

    +
  • +
  • +

    Fixed internally found defects.

    +
  • +
+
November 2023 v1.0.0
-
The first release of the IBM RMF for z/OS Grafana - plugin is in the following GitHub repository: https://github.com/IBM/RMF.
+
+

The first release of the IBM RMF for z/OS Grafana + plugin is in the following GitHub repository: https://github.com/IBM/RMF.

+
diff --git a/docs/grafana/rmf-app/sitemap.xml b/docs/grafana/rmf-app/sitemap.xml index f6d6c65a..647cfc21 100644 --- a/docs/grafana/rmf-app/sitemap.xml +++ b/docs/grafana/rmf-app/sitemap.xml @@ -2,78 +2,78 @@ visual_grafana.html - 2025-04-04T10:38:00Z + 2025-05-13T12:20:14Z rn.html - 2025-04-04T10:38:00Z + 2025-05-13T12:20:14Z install_grafana_plugin.html - 2025-04-04T10:38:00Z + 2025-05-13T12:20:14Z update_plugin.html - 2025-04-04T10:38:00Z + 2025-05-13T12:20:14Z create_datasources.html - 2025-04-04T10:38:00Z + 2025-05-13T12:20:14Z db_ovw.html - 2025-04-04T10:38:00Z + 2025-05-13T12:20:14Z apply_visualize.html - 2025-04-04T10:38:00Z + 2025-05-13T12:20:14Z query_lang.html - 2025-04-04T10:38:00Z + 2025-05-13T12:20:14Z variables.html - 2025-04-04T10:38:00Z + 2025-05-13T12:20:14Z alerts.html - 2025-04-04T10:38:00Z + 2025-05-13T12:20:14Z historical_data.html - 2025-04-04T10:38:00Z + 2025-05-13T12:20:14Z error_reports.html - 2025-04-04T10:38:00Z + 2025-05-13T12:20:14Z ts_issues.html - 2025-04-04T10:38:00Z + 2025-05-13T12:20:14Z grafana_via_zosmf.html - 2025-04-04T10:38:00Z + 2025-05-13T12:20:14Z prereq_zosmf.html - 2025-04-04T10:38:00Z + 2025-05-13T12:20:14Z grafana_config_parms.html - 2025-04-04T10:38:00Z + 2025-05-13T12:20:14Z define_grafana_zosmf.html - 2025-04-04T10:38:00Z + 2025-05-13T12:20:14Z access_grafana_zosmf.html - 2025-04-04T10:38:00Z + 2025-05-13T12:20:14Z pdf_guide.html - 2025-04-04T10:38:00Z + 2025-05-13T12:20:14Z diff --git a/grafana/rmf-app/.golangci.yml b/grafana/rmf-app/.golangci.yml index 79e34a31..18d44a27 100644 --- a/grafana/rmf-app/.golangci.yml +++ b/grafana/rmf-app/.golangci.yml @@ -1,15 +1,58 @@ +version: '2' run: allow-parallel-runners: true - linters: enable: - - gofmt + - asasalint + - asciicheck + - bidichk + - bodyclose + - contextcheck + - durationcheck + - errchkjson + - errorlint + - fatcontext + - gocheckcompilerdirectives + - gochecksumtype + - gosec + - gosmopolitan + - loggercheck + - makezero + - nilerr + - nilnesserr + - noctx + - perfsprint + - prealloc + - protogetter + - reassign + - recvcheck + - rowserrcheck + - spancheck + - sqlclosecheck + - testifylint + - unparam + - zerologlint disable: - - wrapcheck - err113 - musttag - presets: - - bugs - - error - - unused - - performance + - wrapcheck + exclusions: + generated: lax + presets: + - comments + - common-false-positives + - legacy + - std-error-handling + paths: + - third_party$ + - builtin$ + - examples$ +formatters: + enable: + - gofmt + exclusions: + generated: lax + paths: + - third_party$ + - builtin$ + - examples$ diff --git a/grafana/rmf-app/.nvmrc b/grafana/rmf-app/.nvmrc index 016e34ba..9158a6fb 100644 --- a/grafana/rmf-app/.nvmrc +++ b/grafana/rmf-app/.nvmrc @@ -1 +1 @@ -v20.17.0 +v22.15.0 diff --git a/grafana/rmf-app/BUILD.md b/grafana/rmf-app/BUILD.md index 63c6d061..811c1179 100644 --- a/grafana/rmf-app/BUILD.md +++ b/grafana/rmf-app/BUILD.md @@ -2,9 +2,9 @@ ## Pre-requisites -- `NodeJS`: >=16 -- `Yarn`: 1.x.x -- `Go`: >=1.21 +- `NodeJS`: see `package.json` +- `Yarn`: see `package.json` +- `Go`: see `go.mod` - `GNU Make`: >=3.81 - `jq`: >=v1.6 - `zip`: >=3.0 @@ -16,4 +16,4 @@ - Navigate to the directory `grafana/rmf-app`. - Execute the command: `make all`. This creates the `./build` directory and once successful you can find the - `ibm-rmf-grafana-.zip` and `ibm-rmf-grafana-.zip.md5` files there. + `ibm-rmf-grafana-.zip` and `ibm-rmf-grafana-.zip.md5` files there. diff --git a/grafana/rmf-app/CHANGELOG.md b/grafana/rmf-app/CHANGELOG.md index b5ab5f5a..44a4f5de 100644 --- a/grafana/rmf-app/CHANGELOG.md +++ b/grafana/rmf-app/CHANGELOG.md @@ -1,5 +1,11 @@ # Change Log +## 1.0.9 (2025-05-22) + +- IBM RMF for z/OS Grafana plugin has been enhanced to optimize the step size when querying and displaying time series data, based on the selected time range and panel size. This enhancement ensures that panels display the required number of data points. +- A bug has been fixed that was causing specific data points to be dropped from time series views, resulting in a flat line in the graphs. +- Fixed internally found defects. + ## 1.0.8 (2025-04-04) - A new option, Compression, has been added to the data source creation process. This option enables the RMF data source to request HTTP compression from the Data Distributed Server (DDS) during data retrieval, which improves the efficiency of data transfer. diff --git a/grafana/rmf-app/doc/src/conref.dita b/grafana/rmf-app/doc/src/conref.dita index a5d41628..7cf2cb80 100644 --- a/grafana/rmf-app/doc/src/conref.dita +++ b/grafana/rmf-app/doc/src/conref.dita @@ -5,6 +5,7 @@

IBM RMF for z/OS Grafana

+

RMF for z/OS Grafana

RMF for z/OS

Resource Measurement Facility for z/OS

Distributed Data Server

@@ -54,6 +55,7 @@ Verify the server’s certificate chain/hostname option is also enabled.

+

Fixed internally found defects.

diff --git a/grafana/rmf-app/doc/src/pdf/rmf_grafana.fo b/grafana/rmf-app/doc/src/pdf/rmf_grafana.fo new file mode 100644 index 00000000..29b6fbf0 --- /dev/null +++ b/grafana/rmf-app/doc/src/pdf/rmf_grafana.fo @@ -0,0 +1,2200 @@ +IBM RMF for z/OS Grafana Plugin User GuideoXygen PDF Chemistry Version 24.1 Build 2022-11-03T09:51:41ZtrueIBM RMF for z/OS Grafana Plugin User GuideContents1. IBM RMF for z/OS Grafana Plugin1.1. Overview1.2. Release notesWhat's newRequirements1.3. Installing the plugin1.4. Upgrading the plugin1.5. Creating RMF data sources1.6. RMF master dashboard1.7. Applying visualization to RMF data1.8. IBM RMF query languagesMetric query syntaxReport query syntax1.9. RMF Variable Query syntaxSyntax of the query without a filterSyntax of the query with a filter1.10. Alerts1.11. Historical data1.12. Error types1.13. Troubleshooting issues1.14. Grafana through z/OSMF1.14.1. PrerequisitesConfigure z/OSMFInstall GrafanaUser administrationConfigure JSON Web Token (JWT) support on z/OSMFConfigure JWT authentication on Grafana1.14.1.1. Grafana configuration parameters1.14.2. Defining the Grafana server1.14.3. Accessing the Grafana dashboard + + + + + + + + IBM RMF for z/OS Grafana Plugin User GuideIBM + RMF for z/OS Grafana Plugin User Guide + + | | + ContentsContents + + + 1. IBM RMF for z/OS + Grafana + Plugin + + 1.1. Overview + + + 1.2. Release + notes + + + 1.3. Installing the + plugin + + + 1.4. Upgrading the + plugin + + + 1.5. Creating RMF data + sources + + + 1.6. RMF master + dashboard + + + 1.7. Applying visualization to RMF + data + + + 1.8. IBM RMF query + languages + + + 1.9. RMF Variable Query + syntax + + + 1.10. Alerts + + + 1.11. Historical + data + + + 1.12. Error + types + + + 1.13. Troubleshooting + issues + + + 1.14. Grafana through + z/OSMF + + 1.14.1. Prerequisites + + + + 1.14.2. Defining + the Grafana + server + + + 1.14.3. Accessing + the Grafana + dashboard + + + + + Page Page + 1 - IBM RMF for z/OS Grafana Plugin | 1 - IBM RMF for z/OS Grafana Plugin1. IBM RMF for z/OS Grafana Plugin + + | 1.1 - Visualization of RMF Monitor III metrics in Grafana1.1. Visualization of RMF Monitor III + metrics in Grafana + + + Grafana is a + platform for monitoring and visualizing data. It enables + users to create, explore, and share dashboards that are + interactive and customizable. The IBM® RMF for z/OS + Grafana plugin provides effortless analysis and + visualization of Resource Measurement Facility for + z/OS (RMF for z/OS) Monitor III + metrics and reports within the Grafana platform. Thereby, + you can monitor and analyze the health and performance of + applications. + The IBM RMF for z/OS Grafana + plugin provides the following features: + You + can choose various visualization options, such as + graphs, charts, panels, and reports, to help you + understand your data's trends, patterns, and + variances. + You + can create dynamic and engaging dashboards by + piecing together various panels, each displaying a + unique visualization. + You + have the freedom to customize each panel based on + your requirements, including its appearance, size, + and the data queries it displays. + Grafana supports integration with numerous data + sources, which helps you fetch data from various + Distributed Data Servers (DDS) and display it in a unified + dashboard. + You + can set up alerts based on specific conditions or + thresholds in your RMF data. Grafana can trigger + notifications via email or other communication + channels when these conditions are met. + You + can define a dashboard variable to change the RMF + data displayed in your dashboard simply by selecting + a value from the drop-down list at the top. + + + + + | 1.2 - Release notes1.2. Release notes + + This article + covers the new features, system requirements, and known + issues of the IBM® RMF for z/OS Grafana plugin. + + What's + new + + May 2025 v1.0.9 + + + + IBM RMF + for z/OS Grafana plugin has been enhanced + to optimize the step size when querying and + displaying time series data, based on the selected + time range and panel size. This enhancement + ensures that panels display the required number of + data points. + + + A bug + has been fixed that was causing specific data + points to be dropped from time series views, + resulting in a flat line in the graphs. + + + Fixed + internally found defects. + + + + + + + + April 2025 v1.0.8 + + + + A new + option, Compression, has been added to the data + source creation process. This option enables the + RMF data source to request HTTP compression from + the Data Distributed Server (DDS) during data + retrieval, which improves the efficiency of data + transfer. See Creating RMF data + sources (on page ). + + + Fixed + certain scenarios of missing data within + dashboards for time series visualizations. + + + Fixed + internally found defects. + + + + November 2024 v1.0.7 + + Fixed internally found + defects. + + October 2024 v1.0.6 + + + + The + IBM RMF for z/OS Grafana plugin now allows + customizing banner and caption fields in IBM RMF + Report visualizations. + + + After + you modify any IBM + RMF data source and save the changes, you + no longer need to re-enter the password. + + + Improved + performance. + + + Fixed + internally found defects. + + + + + + + + August 2024 v1.0.5 + + + + When + creating the datasource, you now have the option + to specify the desired cache size in megabytes for + the datasource. + + + Fixed + internally found defects. + + + The + topic of Creating RMF data + sources (on page ) + has been updated per the new UI changes. + + + + June 2024 v1.0.4 + + + + The user + interface for creating the datasource has been + enhanced to improve the user experience. + + + Fixed + internally found defects. + + + The following dashboards are + updated: + Common Storage Activity (Timeline) + Common Storage Activity + Coupling Facility Overview (Timeline) + Coupling Facility Overview + Execution Velocity (Timeline) + Execution Velocity + General Activity (Timeline) + General Activity + Overall Image Activity (Timeline) + Overall Image Activity + Performance Index (Timeline) + Response Time (Timeline) + Response Time + XCF Activity (Timeline) + XCF Activity + Note: You must + re-import the dashboards to utilize the latest + enhancements in the dashboards. + + + The documentation updates for + v1.0.4 include the following changes: + + The + topic of Creating RMF data + sources (on page ) + has been updated as per the new UI changes. + + + The Upgrading the RMF for z/OS plugin on + Grafana (on page ) + topic is included to provide information about the + upgrade process. + + + + + + February 2024 v1.0.3 + + + + Fixed + specific issues related to the support of Grafana + v10.x.x. + + + Fixed + empty settings issue for IBM RMF data source + defined via Home / Apps / IBM RMF page. + + + Fixed + internally found defects. + + + The documentation updates for + v1.0.3 include the following changes: + + The Grafana through IBM z/OS Management + Facility (on page ) + topic explains more detailed setup instructions to + access Grafana from the z/OSMF server. + + + The RMF for z/OS plugin + installation (on page ) + section is updated to provide clear information + and guidance on installing the RMF for + z/OS plugin on different platforms based on + specific requirements. + + + The troubleshooting (on page ) + topic is provided to help users analyze and + resolve common issues that may occur while using + the IBM RMF for z/OS + Grafana plugin. + + + + + + December 2023 v1.0.2 + + + + Support + spaces in Datasource name. + + + Fixed + internally found defects. + + + + November 2023 v1.0.1 + + + + Resolved + security issues in dependencies. + + + Fixed + internally found defects. + + + + November 2023 v1.0.0 + + The + first release of the IBM RMF for z/OS + Grafana plugin is in the following GitHub + repository: https://github.com/IBM/RMF. + + + + + Requirements + You must have the following + software to use the IBM RMF for z/OS Grafana + plugin: + Resource Measurement Facility for z/OS + 3.1 + Distributed Data Server + IBM RMF for z/OS Grafana plugin 1.0.x + Grafana 9.5.1 or later + + + + + + | 1.3 - Installing the RMF for z/OS plugin on Grafana1.3. Installing the RMF for z/OS plugin on + Grafana + + + You must install + the IBM® RMF for z/OS Grafana plugin to + analyze and visualize RMF Monitor III metrics and + reports. + + + Before you begin + + You must have completed the + following tasks: + Installed RMF for z/OS + 3.1 + DDS and the functionality level must be + 3650 or higher. + Installed Grafana 9.5.1 or later. + You must be familiar working with Grafana. + + + + Procedure + + + 1. + Set the value of allow_loading_unsigned_plugins to ibm-rmf,ibm-rmf-datasource,ibm-rmf-report + in the [plugins] section of your custom + configuration file. + + The default configurations + for a Grafana installation are in the defaults.ini file. You can copy the default.ini file and rename it to custom.ini for customizing your Grafana + configuration. + The default location of the configuration file is as follows: + + + Operating systems + Default path to the + configuration file + + + + Windows® + WORKING_DIR/conf/defaults.ini + + + Linux® + /etc/grafana/grafana.ini + + + macOS® + /usr/local/etc/grafana/grafana.ini + + + + Note: You can + use the GF_PLUGINS_ALLOW_LOADING_UNSIGNED_PLUGINS + environment variable to override allow_loading_unsigned_plugins. + + + 2. + Choose any one of the methods + described in the following table to install the + RMF for z/OS plugin based on your + requirements: + + + + + Methods + Step # + + + + Installing the RMF for z/OS plugin in + the Grafana stand-alone application. + Perform steps 3 (on page ) + and 4 (on page ). + + + Installing the RMF for z/OS plugin + along with Grafana within the Docker + environment. + Perform steps 5 (on page ) + and 6 (on page ). + + + + + + 3. + Run the following command to + install the plugin by using Grafana CLI: + + grafana cli --pluginUrl https://github.com/IBM/RMF/releases/download/ibm-rmf-grafana/v<version>/ibm-rmf-grafana-<version>.zip plugins install ibm-rmf + Remember: You + must replace the value of <version> for the pluginURL option to version number of the + plugin to be installed. + + + 4. + Restart the Grafana server, + and then go to step 7 (on page ). + + 5. + Run the following command to + create a volume for storing the Grafana + state: + + docker volume create rmf-grafana-data + + + 6. + Run the following command to + create and run a container: + + docker run --name rmf-grafana --hostname rmf-grafana --detach --restart unless-stopped --volume rmf-grafana-data:/var/lib/grafana --publish 3000:3000 --env "GF_INSTALL_PLUGINS=https://github.com/IBM/RMF/releases/download/ibm-rmf-grafana/v<version>/ibm-rmf-grafana-<version>.zip;ibm-rmf" --env "GF_PLUGINS_ALLOW_LOADING_UNSIGNED_PLUGINS=ibm-rmf,ibm-rmf-datasource,ibm-rmf-report" <image> + Remember: You + must replace the values of the following options + in the command: + <version> for the env option to the version number of the + plugin to be installed. + <image> to the version of the Grafana + image to be used. + + Note: + zCX/zLinux images are available at Container Images for IBM Z and + LinuxONE. + Similarly, images of other required platforms are + available at Docker + Hub. + + + 7. + To enable the RMF for + z/OS plugin on the Grafana UI, you must + perform the following sub-steps: + + a. + Enter the URL of Grafana in + your web browser. + + b. + Enter the username and + password of Grafana on the sign-in page. + + c. + Go to Administration > + Plugins. + + Note: The + navigation of the user interface can differ based + on the Grafana version that is currently + installed. + + + d. + Enter RMF in the Search bar on the Plugins page. + + e. + Click IBM + RMF in the search results. + + f. + Click Enable. + + Note: After + you install the IBM RMF for z/OS + Grafana plugin, when you open IBM RMF on + the Plugins page of Grafana UI, an Invalid plugin + signature warning message is + displayed. + + + + + 8. Optional: + Verify the signature of the + IBM RMF Grafana plugin, which is signed with the + GPG key, by performing the following + sub-steps: + + a. + Download the PUBLIC_KEY.asc (GPG public key) + file. + The location of the file is as + follows:https://github.com/IBM/RMF/blob/main/grafana/rmf-app/PUBLIC_KEY.asc + + b. + Follow the instructions in + the Importing a public + key + section of the GPG user guide. + + c. + Download the IBM RMF + for z/OS Grafana plugin (ibm-rmf-grafana-x.y.z.zip) and signature + file (ibm-rmf-grafana-x.y.z.zip.asc) from https://github.com/IBM/RMF/releases. + + d. + Run the following command to + verify the signature: + + gpg --verify ibm-rmf-grafana-x.y.z.zip.asc ibm-rmf-grafana-x.y.z.zip + Where + x.y.z is the version number of the + IBM RMF for z/OS Grafana plugin. + For more + information, refer to the GPG + user guide. + + + + + + + + Results + You have installed the IBM RMF for + z/OS Grafana plugin. You can find the IBM + RMF plugin listed under the Apps + section. + + What to do next + You can add an RMF data source to fetch data from + Distributed Data Servers + (DDS). See Creating RMF data + sources (on page ). + + + + + Related + information + + Grafana CLI + documentation + docker run + command + docker volume create + command + + + + + + + | 1.4 - Upgrading the RMF for z/OS plugin on Grafana1.4. Upgrading the RMF for z/OS plugin on + Grafana + + + You must ensure + that the IBM RMF for z/OS Grafana plugin is up to date to + leverage its enhanced functionalities. You can do so by + either installing or upgrading to the latest version of the + plugin. + + About this task + The upgrade procedures differ based on the environment + you used to install the Grafana server. + + + Methods + Step # + + + + Upgrading the plugin in the Grafana stand-alone + application. + Perform steps 1 (on page ) + to 3 (on page ). + + + Upgrading the plugin in the Grafana within the + Docker environment. + Perfrom steps 4 (on page ) + to 7 (on page ). + + + + + + Procedure + + + 1. + Stop the Grafana + server. + + 2. + Run the following command to + upgrade the plugin by using Grafana CLI: + + grafana cli --pluginUrl https://github.com/IBM/RMF/releases/download/ibm-rmf-grafana/v<version>/ibm-rmf-grafana-<version>.zip plugins install ibm-rmf + Note: You must + replace the value of <version> for the pluginURL option with the plugin's version + number to be upgraded. + For example, if you want to install the v1.0.3 version of the plugin, the value of pluginURL is https://github.com/IBM/RMF/releases/download/ibm-rmf-grafana/v1.0.3/ibm-rmf-grafana-1.0.3.zip. + + The CLI tool downloads the + mentioned version of the plugin and replaces the + existing files. + + 3. + Restart the Grafana server, + and then go to step 7 (on page ). + + 4. + Run the following command to + stop the docker container: + + docker stop rmf-grafana + Where + rmf-grafana is the name of the + container. + + + 5. + Run the following command to + remove the docker container: + + docker rm rmf-grafana + + + 6. + Run the following command to + upgrade the plugin by creating and running a + container: + + docker run --name rmf-grafana --hostname rmf-grafana --detach --restart unless-stopped --volume rmf-grafana-data:/var/lib/grafana --publish 3000:3000 --env "GF_INSTALL_PLUGINS=https://github.com/IBM/RMF/releases/download/ibm-rmf-grafana/v<version>/ibm-rmf-grafana-<version>.zip;ibm-rmf" --env "GF_PLUGINS_ALLOW_LOADING_UNSIGNED_PLUGINS=ibm-rmf,ibm-rmf-datasource,ibm-rmf-report" <image> + Remember: You + must replace the values of the following options + in the command: + <version> for the env option to the version number of the + plugin to be upgraded. + <image> to the version of the Grafana + image used. + + + + 7. + Perform the following + sub-steps to re-import the dashboards. + After upgrading the plugin to + a new version, it is essential to re-import the + dashboard. This ensures that you are utilizing the + most up-to-date features in the dashboards.Tip: You can + find the updated dashboards for each release by + referring to the CHANGELOG + of the plugin. You do not need to re-import all + the dashboards. + + a. + Enter the URL of Grafana in + your web browser. + + b. + Enter the username and + password of Grafana on the sign-in page. + + c. + Go to Administration > + Plugins. + + Note: The + navigation of the user interface can differ based + on the Grafana version that is currently + installed. + + + d. + Enter RMF in the Search bar on the Plugins page. + + e. + Click IBM + RMF in the search results. + + f. + Click Dashboards, and then click Re-import to re-import the + dashboards. + + + + + + + Results + You have updated the IBM RMF for + z/OS Grafana plugin. + + + + | 1.5 - Creating RMF data sources1.5. Creating RMF data sources + + To access RMF + Monitor III metrics in Grafana, you need to connect to the + Distributed Data Server (DDS) + by adding an RMF data source. + + + Before you begin + + + You + must have installed the RMF for z/OS Grafana plugin. + See Installing the RMF for z/OS plugin on + Grafana (on page ). + You + must know the hostname and port number of DDS. + + + + + Procedure + + + 1. + Go to Apps > + IBM + RMF > + Add + RMF Data Source. + Alternatively, you can click + Administration > + Data + sources > + + Add + new data source, then search for the + IBM RMF to choose a data source type.Note: The + navigation of the user interface can differ based + on the Grafana version that is currently + installed. + + 2. + Enter a name for the data + source in the Name field. + + 3. Optional: + Set Default + + to ON to make the + added data source the default one. + + Note: When you + create new panels, the default data source is + preselected. + + + 4. + Enter the details for the + following fields in the HTTP section: + + + + + Fields + Action + + + + DDS + URL + Enter the URL of the DDS in this field.The + format of the URL is http://hostname:port_number[/path] or https://hostname:port_number[/path]Important: In + the DDS URL, the /path is optional, and you must + exclude it in the default network configuration. + However, it might be required in more advanced + setups, such as when DDS functions behind a + reverse proxy. + + + Timeout + Specify the duration, in seconds in this field, + for which Grafana is allowed to wait for a + connection to the DDS before it closes + the connection.The default value is 60. + + + Compression + This option is enabled by default, which means + that when RMF requests data from DDS, HTTP compression is utilized, + provided that the DDS is operating on a + maintenance level OA67541. The compression setting + is ignored if DDS is not at this + maintenance level.You can turn off HTTP + compression by setting the Compression option to OFF, resulting in + DDS data being always transferred in an + uncompressed format. + + + + + + 5. Optional: + Set the Skip + TLS Verify option to ON if you are + accepting any certificate presented by the DDS and + any hostname listed in that certificate. However, + this practice is not considered secure and is + typically used in development or testing + environments. + + Note: By + default, the Skip + TLS Verify option is set to OFF. + + + 6. + Set the Basic + Auth option to ON to create the + data source with basic authentication. + + 7. + Enter the credentials of the + DDS in the User and Password fields. + + Note: The + User and Password fields are visible only when you + enable the basic authentication. + + + 8. + Specify the size of the cache + (in MB) for the data source in the Size field. + + Remember: The + value must be greater than or equal to 128. The default + value is 1024. + + + 9. + Click Save + & test. + The Data source is + working message is displayed if the + connection to DDS succeeds. + + + + + Results + You have added the RMF data source. + + + What to do next + + You can refer + to the RMF master + dashboard (on page ) + topic for information about RMF master dashboard and its + features. + + + + + | 1.6 - RMF master dashboard1.6. RMF master dashboard + + IBM® RMF for z/OS + Grafana is a plugin provides custom panels for the RMF data + source and master dashboard that consists of RMF Charts, RMF + Reporting, and RMF Time Series dashboards. + Grafana provides a + highly flexible and customizable dashboard consisting of one + or more rows and panels. You can use various pre-configured + panels to construct queries and tailor the visualization to + meet your requirements. This enables you to create a + personalized dashboard that seamlessly interacts with data + from a configured Distributed Data Server + (DDS). For more information about creating and + managing dashboards, refer to the Grafana + documentation. + When you install the RMF for z/OS + Grafana plugin for the first time, all the dashboards are + imported automatically. You can view the dashboards by + navigating to Apps > + IBM + RMF > + Dashboards. The following table lists + the dashboards available in RMF Charts, RMF Reporting, and + RMF Time Series dashboards: + Table 1. RMF master + dashboardTable 1. RMF master + dashboard (continued) + + RMF Charts Dashboard + RMF + Reporting Dashboards + RMF Time Series Dashboards + + + + Common Storage + Activity + CACHDET + DSND + PROC + SYSINFO + Common Storage Activity + (Timeline) + + + Coupling Facility + Overview + CACHSUM + EADM + PROCU + SYSRG + Coupling Facility + Overview (Timeline) + + + Execution Velocity + CFACT + ENCLAVE + SPACED + SYSSUM + Execution Velocity + (Timeline) + + + General Activity + CFOVER + ENQ + SPACEG + USAGE + General Activity + (Timeline) + + + Overall Image + Activity + CFSYS + HSM + STOR + XCFGROUP + Overall Image Activity + (Timeline) + + + Performance Index + CHANNEL + IOQ + STORC + XCFOVW + Performance Index + (Timeline) + + + Response Time + CPC + JES + STORCR + XCFPATH + Response Time + + + Using & Delays + CRYOVW + LOCKSP + STORF + XCFSYS + Using & Delays + (Timeline) + + + XCF Activity + DELAY + LOCKSU + STORM + ZFSFS + XCF Activity + (Timeline) + + + Common Storage + Activity + DEV + OPD + STORR + ZFSKN + Common Storage Activity + (Timeline) + + + + DEVR + PCIE + STORS + ZFSOVW + + + + + The dashboard + interface offers several customization options for data + presentation. The following is the image of the master + dashboard from the IBM RMF for z/OS Grafana + plugin: + + You can click the + + option when there is a new version of the plugin, and then + re-import the dashboard by clicking the + icon. Similarly, if any of the dashboards is no longer + required, you can click the + icon to remove it from the master dashboard. + For more + information about available features in the Dashboard and + their descriptions, refer to the Grafana + documentation. + + + + | 1.7 - Applying visualization to RMF data1.7. Applying visualization to RMF + data + + By adding panels + to dashboards, you can effectively present your RMF data in + a visual format. Each panel must require at least one query + to display a significant visualization. + + Before you begin + You must have completed the + following tasks: + Installed the IBM RMF for z/OS + Grafana plugin. See Installing the RMF for z/OS plugin on + Grafana (on page ). + Added + a RMF data source in Grafana. See Creating RMF data + sources (on page ). + Understood query languages of the RMF. See IBM RMF query + languages (on page ). + + + + Procedure + + + 1. + Identify the dashboard for + which you want to add visualization. + + 2. + Perform one of the steps + described in the following table: + + + + + Step description + Step # + + + + If there are no panels added to the + dashboard + Perform step 3 (on page ). + + + If at least one panel is added to the + dashboard + Perform step 5 (on page ). + + + + + + 3. + Click + Add + visualization to add visualization to your + data. + + Note: The + navigation of the user interface can differ based + on the Grafana version that is currently + installed. + + The Edit + panel is displayed. + + 4. + Go to step 6 (on page ). + + 5. + Click Add > + Visualization from the dashboard + header. + + + + The Edit + panel is displayed. + + 6. + Enter a name for the panel in + the Title field. + Optionally you can also + provide a description for the panel that you are + creating.When you add the description + for the panel, a notification icon + is displayed after the Panel title, as shown in the following + image: + + 7. + Select one of the + visualization types from the drop-down + menu: + + + You can + choose Report + for IBM RMF for z/OS or built-in Bar + chart Grafana visualization types from the + drop-down list. + + + 8. + Click the Query tab, and then enter a query in the + query language of the RMF data source. + + Note: You can + click + + Query to add multiple queries. + + + 9. + Click the Transformation tab, and then select a + transformation from the list. + Upon accessing the + transformation options, a dedicated row is + presented for configuration.Note: You can + click + Add + Transformation to add multiple + transformations to data. + + 10. + Select the existing data + sources from the Data + source drop-down list. + + 11. + Click the Time + Picker drop-down list to select relative + time range options and set custom absolute time + ranges. + + + + + 12. + Click the Refresh dashboard + + icon to query the RMF data source. + Grafana provides you with a + preview of your query results along with the + corresponding visualization. + + 13. Optional: + Click Apply to view your changes applied to the + dashboard. + + 14. + Click Save, and then enter a note describing the + changes you have made. + + 15. + Click Save to store the changes made to the + dashboard. + + + + + Results + You have applied visualization to the RMF + data. + + + What to do next + + Grafana + provides a range of visualizations that cater to + different use cases. For more information about the + built-in panels, options, and typical usage, refer to + the Grafana + documentation. + You can also + configure the panel options based on your requirements. + For more information refer to the Grafana + documentation. + You can add + multiple transformation to your data. When there are + multiple transformations, Grafana applies them + sequentially. Each transformation produces a result set + that is passed on to the next transformation in the + pipeline. Grafana provides several ways that you can + transform data. For entire list of transformations, + refer to the Grafana + documentation. + + + + + | 1.8 - IBM RMF query languages1.8. IBM RMF query languages + + In Grafana, + queries are essential for fetching and transforming data + from RMF data sources. + Executing a query + is a process that involves defining the data source, + specifying the desired data to retrieve, and applying + relevant filters or transformations. IBM RMF for + z/OS Grafana plugin provides a user-friendly RMF + query editor that maximizes its unique capabilities. Grafana + panels retrieve data for visualization from RMF data sources + via queries. + You can use the + following types of queries to retrieve data from the + specified RMF data source: + + Metric + query – Use this query to retrieve RMF Monitor III + metrics. + Report + query – Use this query to retrieve RMF Monitor III + reports. + + + Metric + query syntax + The syntax of + the Metric query is as follows: + resource_type.metric_description {qualifications} + Where: + resource_type is the type of + resource for which information is requested. You + must enter the appropriate value in the resource_type field.The + available resource types are documented in the z/OS RMF Monitor III resource + model + topic in the z/OS + Resource Measurement Facility Programmer's + Guide. + metric_description is the name of + the metric for the selected resource type.After + entering the resource type, you can choose the + metric description from the drop-down + list. + qualifications is an optional + parameter and can contain any or all the following + attributes separated by a comma: + ulq: The name of the resource type + at the upper level. + name: The name of the resource. + filter: The filter helps to focus on + the data of your interest when requesting a list + of values. You can + use one of the following values for the filter attribute: + PAT=< pattern> + Specifies one or more patterns that must match + the name part of a list element. + LB=<number> + Specifies a lower bound value. Only list elements + with values higher than the given lower bound are + returned. + UB=<number> + Specifies an upper bound value. Only list + elements with values lower than the established + upper bound are returned. + HI=<integer> + Only + the highest <integer> list elements are + returned (mutually exclusive with LO). + LO=<integer> + Only + the lowest <integer> list elements are + returned (mutually exclusive with HI). + ORD=< NA | ND | VA | VD | NN> + + + NA - Sort the list of names by their names in + ascending order. + ND – Sort the list of names by their names in + descending order. + VA – Sort the list of values by their values in + ascending order. + VD – Sort the list of values by their values in + descending order. + NN - If you do not want to have any order, you + can specify ORD=NN. + + + + workscope: To qualify a request for + performance data in more detail about address + spaces and WLM entities. You can use one of the + following values for the workscope attribute: + G - Global (no workscope required) + W - WLM workload + S - WLM service class + P - WLM service class period + R - WLM report class + J - Job + + + + Examples: + SYSPLEX.% total physical utilization (AAP) by partition + COUPLING_FACILITY.% processor utilization + CPC.% total physical utilization (shared IIP) + MVS_IMAGE.% delay by WLM report class period {name=RS21} + MVS_IMAGE.% workflow by WLM report class period {ulq=RS21,name=RS2*,filter=ORD=NA,workscope=,,G} + + + Report + query syntax + The syntax of + the Report query is as follows: + resource_type.REPORT.report_name + Where: + resource_type is the type of + resource for which information is requested. You + must enter the appropriate value in the resource_type field. + report_name is the name of the + report.You can + find the report names in the Interactive performance analysis with Monitor + III, + which is documented in the z/OS Resource Measurement + Facility Report Analysis.Note: You can + view reports on the Grafana dashboard only for the + resource types SYSPLEX and MVS_IMAGE. + + Examples: + SYSPLEX.REPORT.CACHSUM + SYSPLEX.REPORT.CPC + + + + + | 1.9 - RMF Variable Query syntax1.9. RMF Variable Query syntax + + Variables are a + powerful tool to create more interactive and dynamic + dashboards. They offer a way to replace hard-coded values in + metric queries and panel titles with placeholders for + values. + Variables make it easy to change the + data displayed in your dashboard simply by selecting a value + from the drop-down list at the top. Using variables in your + dashboard simplifies maintenance, particularly if you have + multiple identical data sources. Instead of creating + separate dashboards for each data source, you can create one + dashboard and use variables to change what you are + viewing.Important: It's + important to note that variables don't have a default + value. Each variable drop-down list in Dashboard + settings displays the variable list in the order it + appears. + You can define a + dashboard variable in Dashboard Settings > + Variables using Grafana's RMF + Variable Query syntax with and without a filter. + Syntax + of the query without a filterThe general syntax of the query + without a filter is as follows:SELECT <COLUMN_NAME> FROM RESOURCE WHERE condition1 or condition2 or condition3Note: The <COLUMN_NAME> is limited to label + and RESOURCE is limited to resource + only and cannot be used for other purposes.Where: + condition1: ULQ=Value + and + TYPE=Value + condition2: Name=Value + and + TYPE=Value + condition3: Name=Value + and + ULQ=Value + and + TYPE=Value + Examples for condition1: + select label from resource + where ulq="hostname of the DDS" and type="CHANNEL_PATH" + select label from resource + where ulq="hostname of the DDS" and type="ALL_CHANNELS" + Examples for condition2:select label from resource where + name="resource_name" and type="SYSPLEX"Examples for condition3: + select label from resource + where ulq="hostname of the DDS" and name="*" and type="CHANNEL_PATH" + select label from resource + where ulq="hostname of the DDS" and name="*" and type="ALL_CHANNELS" + + + Syntax + of the query with a filter + The general + syntax of the RMF query with a filter is as follows: + SELECT <COLUMN_NAME> FROM RESOURCE WHERE condition + Where condition is Name=Value and ULQ=Value and TYPE=Value and Filter= + Value + Examples for condition: + select label from resource where name="resource_name" and type="SYSPLEX" and filter="MVS_IMAGE" + + + To learn how + to effectively add and manage variables of your choice + in Grafana, you can refer to the Grafana + documentation. + + + + + | 1.10 - Introduction to Alerts1.10. Introduction to Alerts + + + Grafana Alerting + feature provides a reliable solution to detect and respond + to system issues in real time. + Through Grafana + monitoring capabilities, you can keep track of incoming + metrics data and configure the alerting system to detect + specific events or circumstances. When the system identifies + any issues, it automatically sends notifications to ensure + that you are up to date. With Grafana Alerting, you can + eliminate the need for manual monitoring and control system + outages that could lead to significant incidents. + For more + information about configuration of alerts and contact + points, refer to the Grafana + documentation. + + + + | 1.11 - Historical data collection1.11. Historical data collection + + + In Grafana, you + can view historical data using absolute and relative time + ranges. + + Viewing + historical data is a common practice across + organizations for various purposes. The importance and + use of historical data are significant in + decision-making, research, analysis, and planning. + Analyzing historical data provides valuable insights + into the status, usage, performance, and health of + various resources. + You can also + access cached metric data for queries, data sources, and + timestamp combinations that have already viewed by other + user on Grafana. This means that if any user requests + metrics data for the same query, datasource, and + timestamp, the cached data can be displayed faster than + a service call from DDS. If data for a particular + timestamp is not found in the cache, it will be fetched + by a service call from DDS. This feature can save you + time and provide a faster experience accessing metric + data. + CAUTION: When + you view data over extended time ranges, the system may + require considerable CPU resources on the host. + + + + + | 1.12 - Error reporting in the plugin1.12. Error reporting in the + plugin + + + Whenever you + encounter issues while using the IBM RMF for z/OS Grafana + plugin, you can view detailed error messages that contain + sufficient information to help you identify and troubleshoot + the problem. + By viewing these + error messages, you can quickly and efficiently troubleshoot + any issues you may encounter while using the IBM RMF for + z/OS Grafana plugin. + The errors that can occur vary in + severity and are classified into different types as + described in the following table: + + + Type + Error Code + Description + + + + Severe + S + A + critical error has arisen that will cause the task + you are currently performing to terminate + immediately.It is essential to take + necessary measures to prevent such errors to + ensure the smooth functioning of the IBM RMF + for z/OS Grafana plugin. + + + Eventual Action + E + An error of a transient nature has arisen but can + be resolved with an action by the user. + + + Warning + W + Receiving a warning message from the IBM RMF + for z/OS Grafana plugin is not indicative + of an error within the application. + + + Information + I + An information message informs the users about + changes or updates in the IBM RMF + for z/OS Grafana plugin.You need + not take any action in response, but it's + essential to stay up-to-date and be aware of these + updates. + + + + When an error + occurs, it is assigned a unique Error ID that can help + quickly identify the root cause of the issue by referring to + the log file. The Error ID is a combination of 10 characters + comprising lower and upper case alphabets. + In case of any + problems with the Distributed Data Server + (DDS), you can identify the issues by looking + into DDS-specific errors, which will be displayed + without any modifications. The messages issued by the Distributed + Data Server are documented in the Distributed Data Server messages - + GPM + topic in the z/OS + Resource Measurement Facility Messages and + Codes. + The following are + the examples of error messages that you may encounter while + using the IBM RMF for z/OS Grafana plugin: + + + Tip: To diagnose the + issue from the docker logs of the IBM RMF for + z/OS Grafana plugin, you can run the following + command: + docker logs <container_name> 2>&1 | grep "<unique error code shown in the error message>" + + + + | 1.13 - Troubleshooting issues1.13. Troubleshooting issues + + This section + guides how to analyze and address typical issues that may + arise when using the IBM® RMF for z/OS Grafana plugin. + + This article + is regularly updated with the latest information on + discovering and solving issues that may arise. You can + search through the article to find the precise + information you need. + You can open a + case by navigating to IBM + support + if you cannot find any solutions for the issue you + encountered. Before opening a case, gather all the + required information and provide the details to IBM + support for further investigation. + The following + table describes the details of issues and the + resolutions you can apply to fix the problems: + + + + Issues + Cause + Resolutions + + + + RMF Time Series + dashboards do not plot the Monitor 3 metrics data, + whereas RMF Reports and RMF Charts dashboards plot + correctly. + The proxy settings + configured by your network administrator block web + socket connections from the Grafana server. + The IBM RMF for z/OS Grafana plugin streams time series data to the clients through web socket connections. + Unblocking web sockets + and configuring the appropriate proxy settings is + necessary to ensure that web sockets with the name + "ws" in the URI work + correctly with the IBM RMF for z/OS + Grafana + plugin.You can contact your network administrator to modify the proxy configuration settings. + + + + + + + + | 1.14 - Grafana through IBM z/OS Management Facility1.14. Grafana through IBM z/OS + Management Facility + + + When you use + IBM® z/OS Management Facility to monitor + the performance of the z/OS sysplexes in your environment, + you can also access Grafana dashboards from z/OSMF. + You must complete certain tasks to + access Grafana through z/OSMF. The following table + lists the task flows to access Grafana from z/OSMF: + + + Tasks + More + information + + + + Complete the tasks + provided in the Prerequisites topic. + Prerequisites for accessing Grafana dashboards on + z/OSMF (on page ) + + + Install the RMF for z/OS + plugin on Grafana. + Installing the RMF for z/OS plugin on + Grafana (on page ) + + + Define Grafana servers as + target systems. + Defining the Grafana + server (on page ) + + + Access Grafana + dashboards + Accessing the Grafana + dashboard (on page ) + + + + + + 1.14.1. Prerequisites for accessing Grafana + dashboards on z/OSMF + + + Before you + can start working with Grafana dashboards through z/OSMF, there are some prerequisites that + you need to complete. + The following + sections describe each prerequisite in detail: + + Configure + z/OSMF + When + installing z/OS, z/OSMF is + automatically installed as a fundamental component + of the operating system. However, to use its + features, you must configure the z/OSMF nucleus on your system and add core + and optional services. This enables you to take + advantage of the many benefits that z/OSMF offers. For more information, refer + to the z/OS Management Facility + Configuration + Guide. + + + Install + Grafana + You must + install Grafana v9.5.1 or later. + For more + information, refer to the Grafana + documentation for detailed instructions on + installing Grafana and its dependencies and starting + the Grafana server on your system. + + + User + administration + You must + review the default user management settings provided + by the Grafana server to determine if you need any + additional permissions to be added for the + users. + For more + information, refer to the User + Management + section of the Grafana documentation. + + + Configure + JSON Web Token (JWT) support on z/OSMF + You must + configure the z/OSMF server to build + and use JSON Web Token (JWT) tokens. Because, by + default, the JWT function is turned off on the z/OSMF server. You can turn on the JWT + authentication by modifying the server's + configuration files directly. Once enabled, the JWT + function allows you to use JWT tokens to + authenticate and authorize user access to the + Grafana through the z/OSMF server. + When + configuring z/OSMF JWK files, it + is essential to use the jwksUri parameter. This parameter + specifies a URL for the JSON Web Key service, which + is necessary for building the JWK files. + The format + of the jwksUri parameter is as follows: + https://${hostname}:${port}/jwt/ibm/api/zOSMFBuilder/jwk + For + example, if your z/OSMF server is + running on https://abc.com:12345, + then the value of jwksUri is: + https://abc.com:12345/jwt/ibm/api/zOSMFBuilder/jwk + Where, + abc is the hostname where the z/OSMF server runs. + 12345 is the port number. + + You must + save the content of jwksUri as the jwks.json file and place it in the + following directory: + /PATH/TO/jwks.json + For + information about enabling the JWT function, refer + to the z/OS Management Facility + Configuration + Guide. + + + Configure + JWT authentication on Grafana + You must + configure Grafana to accept a JWT token in the HTTP + header. You can also verify the token's validity + using a JSON Web Key Set (JWKS) stored in a local + file. + As a + system administrator, when you install Grafana, you + can pass values for some of the individual + parameters in the .ini configuration file to configure JWT + authentication on Grafana. See Grafana configuration + parameters (on page ). + The default location of the + configuration file is as follows: + + + Operating systems + Default path to the + configuration file + + + + Windows® + WORKING_DIR/conf/defaults.ini + + + Linux® + /etc/grafana/grafana.ini + + + macOS® + /usr/local/etc/grafana/grafana.ini + + + + + + + 1.14.1.1. Grafana configuration + parameters + + You can find the information + about parameters you can use during the + configuration of JWT authentication on Grafana. + The + following table lists the minimum parameters that + you must configure to enable JWT authentication on + Grafana: + + + + Section + Parameters + Description + Values to + be configured for z/OSMF + + + + [auth.jwt] + enabled + Use this parameter to + allow JWT to authenticate on the Grafana + server.The default value is set to true. + true + + + enable_login_token + Upon successful + authentication proxy header validation, this + parameter provides the user with a login + token.The default value is set to false. + true + + + header_name + Use this parameter to + specify the header's name that holds a + token.The default value is set to X-JWT-Assertion. + X-Forwarded-Access-Token + + + username_claim + Use this parameter to + identify the user. + The sub claim is mandatory and needs to be present in a JWT, and it should mention the subject of the JWT.The default value is also set to sub. + sub + + + jwk_set_file + Use this parameter to + verify the token with a JSON Web Key Set loaded + from a JSON file. + /PATH/TO/jwks.json + + + cache_ttl + Use this parameter to + establish the duration for caching data retrieved + from the HTTP endpoint. + This parameter enables the user to store the data for a specified period, allowing for faster access and retrieval of information.The default value is set to 60m (minutes). + 60m + + + expect_claims + Use this parameter to + verify the validity of other claims that contain + JSON-encoded information. + When it comes to validation, only the exp, nbf, and iat claims are automatically checked by default.You must validate if you are using other claims such as iss, sub, aud, and jti. + {"iss": + "zOSMF"} + + + auto_sign_up + Use this parameter to + automatically create user profiles in Grafana + using the TSO ID of z/OSMF for users who do not have user + profiles in the Grafana + server.The default value is set to false. + true + + + url_login + Use this parameter to + enable JWT authentication in the URL. + The default value is set to false. + true + + + [server] + protocol + Use this parameter to + configure z/OSMF to work over + HTTPS.When you configure z/OSMF to work over HTTPS, it is recommended to configure Grafana to also work over HTTPS. This ensures the secure data transfer between the user's web browser and the Grafana server.The default value is set to http. + https + + + cert_file + Use this parameter to + specify the path to the certificate file when the + protocol parameter is set to https or h2. + /PATH/TO/certificate.crt + + + cert_key + Use this parameter to + specify the path to the certificate key file when + the protocol parameter is set to https or h2. + /PATH/TO/privateKey.key + + + [Security] + cookie_secure + Use this parameter if you + hosted the Grafana instance over + HTTPS.The default value is set to false. + true + + + cookie_samesite + Use this parameter to + prevent the browser from sharing cookies with + other + websites.The default value is set to lax. + disabled + + + allow_embedding + Use this parameter to + enable web browsers to display Grafana within + z/OSMF HTML <frame>, <iframe>, + <embed>, or <object> element. + The default value is set to false. + true + + + + For more + information about customizing the Grafana instance + by modifying the parameters in the configuration + file, refer to the following sections in the Grafana + documentation. + + Configure JWT + authentication + Configure + Grafana + + + + + + 1.14.2. Defining the Grafana + server + + You must + define the Grafana server as a target system in z/OSMF to access Grafana from the Resource + Monitoring page of z/OSMF. + + Before + you begin + You must have completed the + following tasks: + Completed the tasks provided in the Prerequisites + section. See Prerequisites for accessing Grafana dashboards on + z/OSMF (on page ). + Installed the IBM RMF for z/OS + Grafana plugin. See Installing the RMF for z/OS plugin on + Grafana (on page ). + + + + Procedure + + + 1. + Enter the URL of z/OSMF in a web browser. + + 2. + Log in to z/OSMF if you are not already logged + in. + + 3. + Double-click System + Status. + + 4. + Click Add + Entry from the Actions drop-down list. + + 5. + Perform the following steps + to add details about the Grafana server: + + a. + Enter a name for the Grafana + server in the Resource name field. + The Resource name is the required field, and + you must provide a unique name. The Resource name can contain up to 24 characters + including alphanumeric characters (A-Z, a-z, and 0-9) and special + characters (@ # $). Note: You must + note that the Resource name is not case sensitive. + Therefore, the entries with similar names but + different capitalization, such as SYS1 and Sys1 are considered + as identical by the system. + + b. + Enter the host name or IP + address of the Grafana server that you want to + access in the Host + name or IP address field. + The host name or IP address + can contain up to 4000 + characters. + + c. + Select Grafana from the Target + system type drop-down list. + + d. + Select the Use + HTTPS checkbox to enable secure + communication. + + e. + Enter the port number where + the Grafana server is hosted in the Port field. + + The + Port is the required field, and the + default port number is set to 3000. + Tip: + Alternatively, you can use up-down controls to specify the port + number. + + + + + 6. + Click OK. + + + + + Results + You have defined the Grafana server as the target + system. + + What + to do next + You can perform the following + tasks: + Modify or Remove the Grafana server by clicking + the Action drop-down menu from the System + Status page. + Access Grafana dashboards. See Accessing the Grafana + dashboard (on page ). + + + + + 1.14.3. Accessing the Grafana + dashboard + + You can + access the Grafana dashboard from the Resource + Monitoring page of z/OSMF to investigate the RMF Monitor III + metrics and reports. + + Before + you begin + You must have defined the Grafana server in z/OSMF. See Defining the Grafana + server (on page ). + + + Procedure + + + 1. + Enter the URL of z/OSMF in a web browser. + + 2. + Log in to z/OSMF if you are not already logged + in. + + 3. + Double-click Resource Monitoring. + + 4. + Select the Grafana server + that you want to access from the drop-down + list. + + 5. + Click OK. + + + + + Results + You have accessed Grafana from z/OSMF. + + What + to do next + You can perform the following + tasks: + View the dashboards by navigating to Apps > + IBM + RMF > + Dashboards. + Add a RMF data source to fetch data from Distributed Data Servers (DDS). See Creating RMF data + sources (on page ). + + + + + + + + + + + \ No newline at end of file diff --git a/grafana/rmf-app/doc/src/pdf/rmf_grafana.merged.html b/grafana/rmf-app/doc/src/pdf/rmf_grafana.merged.html new file mode 100644 index 00000000..c6b4a80c --- /dev/null +++ b/grafana/rmf-app/doc/src/pdf/rmf_grafana.merged.html @@ -0,0 +1,1582 @@ + + + + + + +IBM RMF for z/OS Grafana Plugin User Guide
IBM RMF for z/OS Grafana Plugin User Guide
+
IBM RMF for z/OS Grafana Plugin User Guide
+
Grafana is a platform for monitoring and visualizing data. It enables users to create, explore, and share dashboards that are interactive and customizable. The
IBM
RMF for z/OS Grafana plugin provides effortless analysis and visualization of
Resource Measurement Facility for z/OS
(
RMF for z/OS
) Monitor III metrics and reports within the Grafana platform. Thereby, you can monitor and analyze the health and performance of applications.
This article covers the new features, system requirements, and known issues of the
IBM
RMF for z/OS Grafana plugin.
You must install the
IBM
RMF for z/OS Grafana plugin to analyze and visualize RMF Monitor III metrics and reports.
You must ensure that the
IBM RMF for z/OS Grafana
plugin is up to date to leverage its enhanced functionalities. You can do so by either installing or upgrading to the latest version of the plugin.
To access RMF Monitor III metrics in Grafana, you need to connect to the
Distributed Data Server
(
DDS
) by adding an RMF data source.
IBM
RMF for z/OS Grafana is a plugin provides custom panels for the RMF data source and master dashboard that consists of RMF Charts, RMF Reporting, and RMF Time Series dashboards.
By adding panels to dashboards, you can effectively present your RMF data in a visual format. Each panel must require at least one query to display a significant visualization.
In Grafana, queries are essential for fetching and transforming data from RMF data sources.
Variables are a powerful tool to create more interactive and dynamic dashboards. They offer a way to replace hard-coded values in metric queries and panel titles with placeholders for values.
Grafana Alerting feature provides a reliable solution to detect and respond to system issues in real time.
In Grafana, you can view historical data using absolute and relative time ranges.
Whenever you encounter issues while using the
IBM RMF for z/OS Grafana
plugin, you can view detailed error messages that contain sufficient information to help you identify and troubleshoot the problem.
This section guides how to analyze and address typical issues that may arise when using the
IBM
RMF for z/OS Grafana plugin.
When you use
IBM
z/OS Management Facility to monitor the performance of the z/OS sysplexes in your environment, you can also access Grafana dashboards from
z/OSMF
.
Before you can start working with Grafana dashboards through
z/OSMF
, there are some prerequisites that you need to complete.
You can find the information about parameters you can use during the configuration of JWT authentication on Grafana.
You must define the Grafana server as a target system in
z/OSMF
to access Grafana from the
Resource Monitoring
page of
z/OSMF
.
You can access the Grafana dashboard from the
Resource Monitoring
page of
z/OSMF
to investigate the RMF Monitor III metrics and reports.
+

IBM RMF for z/OS Grafana Plugin

+

Visualization of RMF Monitor III metrics in Grafana

+
+ +
+ +

Grafana is a platform for monitoring and visualizing data. It enables users to + create, explore, and share dashboards that are interactive and customizable. The IBM® RMF for z/OS Grafana plugin provides effortless analysis and + visualization of Resource Measurement Facility for z/OS (RMF for z/OS) Monitor III metrics and reports within the + Grafana platform. Thereby, you can monitor and analyze the health and performance of + applications.

+
The IBM RMF for z/OS Grafana plugin provides the following + features:
    +
  • You can choose various visualization options, such as graphs, charts, panels, + and reports, to help you understand your data's trends, patterns, and + variances.
  • + +
  • You can create dynamic and engaging dashboards by piecing together various + panels, each displaying a unique visualization.
  • +
  • You have the freedom to customize each panel based on your requirements, + including its appearance, size, and the data queries it displays.
  • +
  • Grafana supports integration with numerous data sources, which helps you fetch + data from various Distributed Data Servers (DDS) and display it in a unified + dashboard.
  • +
  • You can set up alerts based on specific conditions or thresholds in your RMF + data. Grafana can trigger notifications via email or other communication + channels when these conditions are met.
  • +
  • You can define a dashboard variable to change the RMF data displayed in your + dashboard simply by selecting a value from the drop-down list at the top.
  • +
+
+
+

Release notes

+ +

This article covers the new features, system requirements, and known issues of the + IBM® RMF for z/OS Grafana plugin.

+

What's new

+ +
+ +
May 2025 v1.0.9
+
+
    +
  • +

    IBM RMF for z/OS Grafana plugin has been + enhanced to optimize the step size when querying and displaying + time series data, based on the selected time range and panel + size. This enhancement ensures that panels display the required + number of data points.

    +
  • +
  • +

    A bug has been fixed that was causing specific data points to be + dropped from time series views, resulting in a flat line in the + graphs.

    +
  • +
  • +

    Fixed internally found defects.

    +
  • +
+
+ +
+
+
+
+ +
April 2025 v1.0.8
+
+
    +
  • +

    A new option, Compression, has been added + to the data source creation process. This option enables the RMF + data source to request HTTP compression from the Data + Distributed Server (DDS) during data retrieval, which improves + the efficiency of data transfer. See Creating RMF data sources.

    +
  • +
  • +

    Fixed certain scenarios of missing data within dashboards for + time series visualizations.

    +
  • +
  • +

    Fixed internally found defects.

    +
  • +
+
+ + +
November 2024 v1.0.7
+
+

Fixed internally found defects.

+ +
+ + +
October 2024 v1.0.6
+
+
    +
  • +

    The IBM RMF for z/OS Grafana plugin now + allows customizing banner and caption fields in IBM RMF Report + visualizations.

    +
  • +
  • +

    After you modify any IBM RMF data + source and save the changes, you no longer need to re-enter the + password.

    +
  • +
  • +

    Improved performance.

    +
  • +
  • +

    Fixed internally found defects.

    +
  • +
+
+ +
+
+
+
+ +
August 2024 v1.0.5
+
+
    +
  • +

    When creating the datasource, you now have the option to specify + the desired cache size in megabytes for the datasource.

    +
  • +
  • +

    Fixed internally found defects.

    +
  • +
  • +

    The topic of Creating RMF data sources has been + updated per the new UI changes.

    +
  • +
+
+ + +
June 2024 v1.0.4
+
+
    +
  • +

    The user interface for creating the datasource has been enhanced + to improve the user experience.

    +
  • +
  • +

    Fixed internally found defects.

    +
  • +
  • +
    The following dashboards are updated:
      +
    • Common Storage Activity (Timeline)
    • +
    • Common Storage Activity
    • +
    • Coupling Facility Overview (Timeline)
    • +
    • Coupling Facility Overview
    • +
    • Execution Velocity (Timeline)
    • +
    • Execution Velocity
    • +
    • General Activity (Timeline)
    • +
    • General Activity
    • +
    • Overall Image Activity (Timeline)
    • +
    • Overall Image Activity
    • +
    • Performance Index (Timeline)
    • +
    • Response Time (Timeline)
    • +
    • Response Time
    • +
    • XCF Activity (Timeline)
    • +
    • XCF Activity
    • +
    Note: You must re-import the + dashboards to utilize the latest enhancements in the + dashboards.
    +
  • +
  • +
    The documentation updates for v1.0.4 include the following + changes:
    +
  • +
+
+ + +
February 2024 v1.0.3
+
+
    +
  • +

    Fixed specific issues related to the support of Grafana + v10.x.x.

    +
  • +
  • +

    Fixed empty settings issue for IBM RMF data source defined via + Home / Apps / IBM RMF page.

    +
  • +
  • +

    Fixed internally found defects.

    +
  • +
  • +
    The documentation updates for v1.0.3 include the following + changes:
      +
    • +

      The Grafana + through IBM z/OS Management Facility topic + explains more detailed setup instructions to access + Grafana from the z/OSMF server.

      +
    • +
    • +

      The RMF for z/OS plugin + installation section is updated to provide + clear information and guidance on installing the RMF for z/OS plugin on + different platforms based on specific + requirements.

      +
    • +
    • +

      The troubleshooting topic is provided to help + users analyze and resolve common issues that may + occur while using the IBM RMF for z/OS Grafana + plugin.

      +
    • +
    +
  • +
+
+ + +
December 2023 v1.0.2
+
+
    +
  • +

    Support spaces in Datasource name.

    +
  • +
  • +

    Fixed internally found defects.

    +
  • +
+
+ + +
November 2023 v1.0.1
+
+
    +
  • +

    Resolved security issues in dependencies.

    +
  • +
  • +

    Fixed internally found defects.

    +
  • +
+
+ + +
November 2023 v1.0.0
+
+

The first release of the IBM RMF for z/OS Grafana + plugin is in the following GitHub repository: https://github.com/IBM/RMF.

+
+ +
+
+

Requirements

+ +
You must have the following software to use the IBM RMF for z/OS Grafana plugin:
    +
  • Resource Measurement Facility for z/OS + 3.1
  • +
  • Distributed Data Server
  • +
  • IBM RMF for z/OS Grafana plugin 1.0.x
  • +
  • Grafana 9.5.1 or later
  • +
+
+ +
+
+

Installing the RMF for z/OS plugin on Grafana

+
+ +
+ +

You must install the IBM® RMF for z/OS Grafana plugin to analyze + and visualize RMF Monitor III metrics and reports.

+

Before you begin

+
You must have completed the following tasks:
    +
  • Installed RMF for z/OS + 3.1 + DDS and the functionality level must + be 3650 or higher.
  • +
  • Installed Grafana 9.5.1 or later.
  • +
You must be familiar working with Grafana.
+
+

Procedure

  1. + Set the value of allow_loading_unsigned_plugins to + ibm-rmf,ibm-rmf-datasource,ibm-rmf-report in the + [plugins] section of your custom configuration + file. +
    +
    The default configurations for a Grafana installation are in the + defaults.ini file. You can copy the + default.ini file and rename it to + custom.ini for customizing your Grafana + configuration. +

    The default location of the configuration file is as follows:

    + + + + + + + + + + + +
    Operating systemsDefault path to the configuration file
    Windows®WORKING_DIR/conf/defaults.ini
    Linux®/etc/grafana/grafana.ini
    macOS®/usr/local/etc/grafana/grafana.ini
    +
    Note: You can use the + GF_PLUGINS_ALLOW_LOADING_UNSIGNED_PLUGINS + environment variable to override + allow_loading_unsigned_plugins.
    +
    +
  2. + Choose any one of the methods described in the following table to install the + RMF for z/OS plugin based on your requirements: +
    +
    + + + + + + + + +
    MethodsStep #
    Installing the RMF for z/OS + plugin in the Grafana stand-alone application.Perform steps 3 and 4.
    Installing the RMF for z/OS + plugin along with Grafana within the Docker environment.Perform steps 5 and 6.
    +
    +
  3. + Run the following command to install the plugin by using Grafana CLI: +
    +
    grafana cli --pluginUrl https://github.com/IBM/RMF/releases/download/ibm-rmf-grafana/v<version>/ibm-rmf-grafana-<version>.zip plugins install ibm-rmf
    +
    Remember: You must replace the value of + <version> for the pluginURL + option to version number of the plugin to be installed.
    +
    +
  4. + Restart the Grafana server, and then go to step 7. +
  5. + Run the following command to create a volume for storing the Grafana + state: +
    +
    docker volume create rmf-grafana-data
    +
    +
  6. + Run the following command to create and run a container: +
    +
    docker run --name rmf-grafana --hostname rmf-grafana --detach --restart unless-stopped --volume rmf-grafana-data:/var/lib/grafana --publish 3000:3000 --env "GF_INSTALL_PLUGINS=https://github.com/IBM/RMF/releases/download/ibm-rmf-grafana/v<version>/ibm-rmf-grafana-<version>.zip;ibm-rmf" --env "GF_PLUGINS_ALLOW_LOADING_UNSIGNED_PLUGINS=ibm-rmf,ibm-rmf-datasource,ibm-rmf-report" <image>
    +
    Remember: You must replace the values of the + following options in the command:
      +
    • <version> for the env + option to the version number of the plugin to be installed.
    • +
    • <image> to the version of the Grafana image to + be used.
    • +
    +
    Note: zCX/zLinux images are available at Container Images for IBM Z and LinuxONE. + Similarly, images of other required platforms are available at Docker + Hub.
    +
    +
  7. + To enable the RMF for z/OS plugin on the Grafana + UI, you must perform the following sub-steps: +
      +
    1. + Enter the URL of Grafana in your web browser. +
    2. +
    3. + Enter the username and password of Grafana on the + sign-in page. +
    4. +
    5. + Go to Administration > Plugins. +
      +
      Note: The navigation of the user interface can differ based on the + Grafana version that is currently installed.
      +
      +
    6. +
    7. + Enter RMF in the Search bar + on the Plugins page. +
    8. +
    9. + Click IBM RMF in + the search results. +
    10. +
    11. + Click Enable. +
      +
      Note: After you install the IBM RMF for z/OS Grafana plugin, when you open + IBM RMF on the Plugins page of Grafana UI, an + Invalid plugin signature warning message is + displayed.
      +
      +
    12. +
    +
  8. Optional: + Verify the signature of the IBM RMF Grafana plugin, which is signed with the + GPG key, by performing the following sub-steps: +
      +
    1. + Download the PUBLIC_KEY.asc (GPG public key) + file. + +
    2. +
    3. + Follow the instructions in the Importing a public key section of the GPG + user guide. +
    4. +
    5. + Download the IBM RMF for z/OS Grafana plugin + (ibm-rmf-grafana-x.y.z.zip) and signature file + (ibm-rmf-grafana-x.y.z.zip.asc) from https://github.com/IBM/RMF/releases. +
    6. +
    7. + Run the following command to verify the signature: +
      +
      gpg --verify ibm-rmf-grafana-x.y.z.zip.asc ibm-rmf-grafana-x.y.z.zip
      +

      Where x.y.z is the version number + of the IBM RMF for z/OS Grafana plugin.

      +

      For more information, refer to the GPG user guide.

      +
      +
    8. +
    +
+

Results

You have installed the IBM RMF for z/OS Grafana plugin. You can find the IBM RMF plugin listed under the + Apps section.

+

What to do next

You can add an RMF data source to fetch data from Distributed Data Servers (DDS). See Creating RMF data sources.
+
+ +
+

Upgrading the RMF for z/OS plugin on Grafana

+
+ +
+ +

You must ensure that the IBM RMF for z/OS Grafana plugin is up + to date to leverage its enhanced functionalities. You can do so by either installing or + upgrading to the latest version of the plugin.

+

About this task

The upgrade procedures differ based on the environment you used to install the + Grafana server.
+ + + + + + + + +
MethodsStep #
Upgrading the plugin in the Grafana stand-alone application.Perform steps 1 to 3.
Upgrading the plugin in the Grafana within the Docker + environment.Perfrom steps 4 to 7.
+

Procedure

  1. + Stop the Grafana server. +
  2. + Run the following command to upgrade the plugin by using Grafana CLI: +
    +
    grafana cli --pluginUrl https://github.com/IBM/RMF/releases/download/ibm-rmf-grafana/v<version>/ibm-rmf-grafana-<version>.zip plugins install ibm-rmf
    +
    Note: You must replace the value of + <version> for the pluginURL + option with the plugin's version number to be upgraded. +

    For example, if you want to install the v1.0.3 version of the plugin, the value of pluginURL is https://github.com/IBM/RMF/releases/download/ibm-rmf-grafana/v1.0.3/ibm-rmf-grafana-1.0.3.zip.

    +
    +
    The CLI tool downloads the mentioned version of the plugin and replaces + the existing files.
    +
  3. + Restart the Grafana server, and then go to step 7. +
  4. + Run the following command to stop the docker container: +
    +
    docker stop rmf-grafana
    +

    Where rmf-grafana is the name of the container.

    +
    +
  5. + Run the following command to remove the docker container: +
    +
    docker rm rmf-grafana
    +
    +
  6. + Run the following command to upgrade the plugin by creating and running a + container: +
    +
    docker run --name rmf-grafana --hostname rmf-grafana --detach --restart unless-stopped --volume rmf-grafana-data:/var/lib/grafana --publish 3000:3000 --env "GF_INSTALL_PLUGINS=https://github.com/IBM/RMF/releases/download/ibm-rmf-grafana/v<version>/ibm-rmf-grafana-<version>.zip;ibm-rmf" --env "GF_PLUGINS_ALLOW_LOADING_UNSIGNED_PLUGINS=ibm-rmf,ibm-rmf-datasource,ibm-rmf-report" <image>
    +
    Remember: You must replace the values of the + following options in the command:
      +
    • <version> for the env + option to the version number of the plugin to be upgraded.
    • +
    • <image> to the version of the Grafana image + used.
    • +
    +
    +
  7. + Perform the following sub-steps to re-import the dashboards. +
    After upgrading the plugin to a new version, it is essential to re-import the + dashboard. This ensures that you are utilizing the most up-to-date features in + the dashboards.
    Tip: You can find the updated + dashboards for each release by referring to the CHANGELOG of the plugin. You do not need to + re-import all the dashboards.
    +
      +
    1. + Enter the URL of Grafana in your web browser. +
    2. +
    3. + Enter the username and password of Grafana on the + sign-in page. +
    4. +
    5. + Go to Administration > Plugins. +
      +
      Note: The navigation of the user interface can differ based on the + Grafana version that is currently installed.
      +
      +
    6. +
    7. + Enter RMF in the Search bar + on the Plugins page. +
    8. +
    9. + Click IBM RMF in + the search results. +
    10. +
    11. + Click Dashboards, and then click + Re-import to re-import the dashboards. +
    12. +
    +
+

Results

You have updated the IBM RMF for z/OS Grafana plugin.
+
+
+

Creating RMF data sources

+ +

To access RMF Monitor III metrics in Grafana, you need to connect to the Distributed Data Server (DDS) by + adding an RMF data source.

+

Before you begin

+ +
+

Procedure

  1. + Go to Apps > IBM RMF > Add RMF Data Source. +
    Alternatively, you can click Administration > Data sources > + Add new data source, then search for the IBM RMF to choose a data source type.
    Note: The navigation of the user interface can differ based on the + Grafana version that is currently installed.
    +
  2. + Enter a name for the data source in the Name + field. +
  3. Optional: + Set Default + to + ON to make the added data source the default + one. +
    +
    Note: When you create new panels, the default data source + is preselected.
    +
    +
  4. + Enter the details for the following fields in the HTTP + section: +
    +
    + + + + + + + + + + + +
    FieldsAction
    DDS URLEnter the URL of the DDS in this field.

    The format of the URL is + http://hostname:port_number[/path] + or + https://hostname:port_number[/path]

    Important: In the DDS URL, the + /path is + optional, and you must exclude it in the default network + configuration. However, it might be required in more advanced + setups, such as when DDS + functions behind a reverse proxy.
    TimeoutSpecify the duration, in seconds in this field, for which + Grafana is allowed to wait for a connection to the DDS before it closes the + connection.

    The default value is + 60.

    CompressionThis option is enabled by default, which means that when RMF + requests data from DDS, HTTP + compression is utilized, provided that the DDS is operating on a + maintenance level OA67541. The compression setting is ignored if DDS is not at this + maintenance level.

    You can turn off HTTP compression by setting + the Compression option to + OFF, resulting in DDS data being always + transferred in an uncompressed format.

    +
    +
  5. Optional: + Set the Skip TLS Verify option to + ON if you are accepting any certificate + presented by the DDS and any hostname listed in that certificate. However, this + practice is not considered secure and is typically used in development or + testing environments. +
    +
    Note: By default, the Skip TLS + Verify option is set to + OFF.
    +
    +
  6. + Set the Basic Auth option to + ON to create the data source with basic + authentication. +
  7. + Enter the credentials of the DDS in the + User and Password + fields. +
    +
    Note: The User and + Password fields are visible only when you enable + the basic authentication.
    +
    +
  8. + Specify the size of the cache (in MB) for the data source in the + Size field. +
    +
    Remember: The value must be greater than or + equal to 128. The default value is + 1024.
    +
    +
  9. + Click Save & test. +
    The Data source is working message is displayed if the + connection to DDS succeeds.
    +
+

Results

You have added the RMF data source.
+

What to do next

+

You can refer to the RMF master dashboard topic for information about RMF + master dashboard and its features.

+
+
+
+

RMF master dashboard

+ +

IBM® RMF for z/OS Grafana is a plugin provides custom panels for + the RMF data source and master dashboard that consists of RMF Charts, RMF Reporting, and RMF + Time Series dashboards.

+

Grafana provides a highly flexible and customizable dashboard consisting of one or more + rows and panels. You can use various pre-configured panels to construct queries and + tailor the visualization to meet your requirements. This enables you to create a + personalized dashboard that seamlessly interacts with data from a configured Distributed Data Server (DDS). For more information about creating and managing dashboards, refer to the Grafana documentation.

+
When you install the RMF for z/OS Grafana plugin for the first time, all the dashboards + are imported automatically. You can view the dashboards by navigating to Apps > IBM RMF > Dashboards. The following table lists the dashboards available in RMF Charts, RMF + Reporting, and RMF Time Series dashboards:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 1. RMF master dashboard
RMF Charts DashboardRMF Reporting + DashboardsRMF Time Series Dashboards
Common Storage ActivityCACHDETDSNDPROCSYSINFOCommon Storage Activity (Timeline)
Coupling Facility OverviewCACHSUMEADMPROCUSYSRGCoupling Facility Overview (Timeline)
Execution VelocityCFACTENCLAVESPACEDSYSSUMExecution Velocity (Timeline)
General ActivityCFOVERENQSPACEGUSAGEGeneral Activity (Timeline)
Overall Image ActivityCFSYSHSMSTORXCFGROUPOverall Image Activity (Timeline)
Performance IndexCHANNELIOQSTORCXCFOVWPerformance Index (Timeline)
Response TimeCPCJESSTORCRXCFPATHResponse Time
Using & DelaysCRYOVWLOCKSPSTORFXCFSYSUsing & Delays (Timeline)
XCF ActivityDELAYLOCKSUSTORMZFSFSXCF Activity (Timeline)
Common Storage ActivityDEVOPDSTORRZFSKNCommon Storage Activity (Timeline)
DEVRPCIESTORSZFSOVW
+

The dashboard interface offers several customization options for data presentation. The + following is the image of the master dashboard from the IBM RMF for z/OS Grafana plugin:

+

default_dashboard_view

+

You can click the import_dashboard option when there is a new version of the plugin, and then re-import the + dashboard by clicking the reimport icon. Similarly, if any of the dashboards is no longer required, you can click + the icon to remove it + from the master dashboard.

+

For more information about available features in the Dashboard and their descriptions, + refer to the Grafana documentation.

+
+
+

Applying visualization to RMF data

+ +

By adding panels to dashboards, you can effectively present your RMF data in a visual + format. Each panel must require at least one query to display a significant + visualization.

+

Before you begin

You must have completed the following tasks:
+

Procedure

  1. + Identify the dashboard for which you want to add visualization. +
  2. + Perform one of the steps described in the following table: +
    +
    + + + + + + + + +
    Step descriptionStep #
    If there are no panels added to the dashboardPerform step 3.
    If at least one panel is added to the dashboardPerform step 5.
    +
    +
  3. + Click + Add visualization to add visualization to your + data. +
    +
    Note: The navigation of the user interface can differ based on the + Grafana version that is currently installed.
    +
    +
    The Edit panel is displayed.
    +
  4. + Go to step 6. +
  5. + Click Add > Visualization from the dashboard header. +
    +

    +
    +
    The Edit panel is displayed.
    +
  6. + Enter a name for the panel in the Title field. +
    Optionally you can also provide a description for the panel that you are + creating.

    When you add the description for the panel, a notification icon + is + displayed after the Panel title, as shown in the + following image:

    +
  7. + Select one of the visualization types from the drop-down menu: +
    +

    +

    You can choose Report for IBM RMF for z/OS or built-in + Bar chart Grafana visualization types from the + drop-down list.

    +
    +
  8. + Click the Query tab, and then enter a query in the query + language of the RMF data source. +
    +
    Note: You can click + Query to add + multiple queries.
    +
    +
  9. + Click the Transformation tab, and then select a + transformation from the list. +
    Upon accessing the transformation options, a dedicated row is presented for + configuration.
    Note: You can click + Add + Transformation to add multiple transformations to + data.
    +
  10. + Select the existing data sources from the Data source + drop-down list. +
  11. + Click the Time Picker drop-down list to select relative + time range options and set custom absolute time ranges. +
    +

    +
    +
  12. + Click the Refresh dashboard + icon to query the RMF + data source. +
    Grafana provides you with a preview of your query results along with the + corresponding visualization.
    +
  13. Optional: + Click Apply to view your changes applied to the + dashboard. +
  14. + Click Save, and then enter a note describing the changes + you have made. +
  15. + Click Save to store the changes made to the + dashboard. +
+

Results

You have applied visualization to the RMF data.
+

What to do next

+

Grafana provides a range of visualizations that cater to different use cases. For + more information about the built-in panels, options, and typical usage, refer to the + Grafana documentation.

+

You can also configure the panel options based on your requirements. For more + information refer to the Grafana documentation.

+

You can add multiple transformation to your data. When there are multiple + transformations, Grafana applies them sequentially. Each transformation produces a + result set that is passed on to the next transformation in the pipeline. Grafana + provides several ways that you can transform data. For entire list of + transformations, refer to the Grafana documentation.

+
+
+
+

IBM RMF query languages

+ +

In Grafana, queries are essential for fetching and transforming data from RMF data + sources.

+

Executing a query is a process that involves defining the data source, specifying the + desired data to retrieve, and applying relevant filters or transformations. IBM RMF for z/OS Grafana plugin provides a user-friendly RMF query + editor that maximizes its unique capabilities. Grafana panels retrieve data for + visualization from RMF data sources via queries.

+

You can use the following types of queries to retrieve data from the specified RMF data + source:

+
    +
  • Metric query – Use this query to retrieve RMF Monitor III metrics.
  • +
  • Report query – Use this query to retrieve RMF Monitor III reports.
  • +
+

Metric query syntax

+ +

The syntax of the Metric query is as follows:

+

resource_type.metric_description + {qualifications}

+
Where:
    +
  • resource_type is the type + of resource for which information is requested. You must enter the + appropriate value in the + resource_type field.

    The + available resource types are documented in the z/OS RMF Monitor III resource + model topic in the z/OS Resource Measurement Facility Programmer's + Guide.

  • +
  • metric_description is the name of the + metric for the selected resource type.

    After entering the resource type, + you can choose the metric description from the drop-down list.

  • +
  • qualifications is an optional parameter + and can contain any or all the following attributes separated by a comma:
      +
    • ulq: The name of the resource + type at the upper level.
    • +
    • name: The name of the + resource.
    • +
    • filter: The filter helps to + focus on the data of your interest when requesting a list of values. +
      You can use one of the following values for the + filter attribute:
      + +
      PAT=< pattern>
      +
      Specifies one or more patterns that must match the + name part of a list element.
      + + +
      LB=<number>
      +
      Specifies a lower bound value. Only list elements + with values higher than the given lower bound are + returned.
      + + +
      UB=<number>
      +
      Specifies an upper bound value. Only list elements + with values lower than the established upper bound + are returned.
      + + +
      HI=<integer>
      +
      Only the highest <integer> list elements are + returned (mutually exclusive with LO).
      + + +
      LO=<integer>
      +
      Only the lowest <integer> list elements are + returned (mutually exclusive with HI).
      + + +
      ORD=< NA | ND | VA | VD | NN>
      +
      +
        +
      • NA - Sort the list of names by their names in + ascending order.
      • +
      • ND – Sort the list of names by their names in + descending order.
      • +
      • VA – Sort the list of values by their values + in ascending order.
      • +
      • VD – Sort the list of values by their values + in descending order.
      • +
      • NN - If you do not want to have any order, you + can specify ORD=NN.
      • +
      +
      + +
    • +
    • workscope: To qualify a request + for performance data in more detail about address spaces and WLM + entities. You can use one of the following values for the workscope + attribute:
        +
      • G - Global (no workscope required)
      • +
      • W - WLM workload
      • +
      • S - WLM service class
      • +
      • P - WLM service class period
      • +
      • R - WLM report class
      • +
      • J - Job
      • +
    • +
  • +
+

Examples:

+
SYSPLEX.% total physical utilization (AAP) by partition
+
COUPLING_FACILITY.% processor utilization
+
CPC.% total physical utilization (shared IIP)
+
MVS_IMAGE.% delay by WLM report class period {name=RS21}
+ +
MVS_IMAGE.% workflow by WLM report class period {ulq=RS21,name=RS2*,filter=ORD=NA,workscope=,,G}
+
+

Report query syntax

+ +

The syntax of the Report query is as follows:

+

resource_type.REPORT.report_name

+
Where:
    +
  • resource_type is the type + of resource for which information is requested. You must enter the + appropriate value in the + resource_type field.
  • +
  • report_name is the name of the + report.

    You can find the report names in the Interactive performance analysis with + Monitor III, which is documented in the z/OS Resource Measurement Facility Report Analysis.

    Note: You can view reports on the Grafana dashboard only + for the resource types SYSPLEX and + MVS_IMAGE.
  • +
+

Examples:

+
SYSPLEX.REPORT.CACHSUM
+
SYSPLEX.REPORT.CPC
+
+
+
+

RMF Variable Query syntax

+ +

Variables are a powerful tool to create more interactive and dynamic dashboards. They + offer a way to replace hard-coded values in metric queries and panel titles with + placeholders for values.

+
Variables make it easy to change the data displayed in your dashboard simply by selecting + a value from the drop-down list at the top. Using variables in your dashboard simplifies + maintenance, particularly if you have multiple identical data sources. Instead of + creating separate dashboards for each data source, you can create one dashboard and use + variables to change what you are viewing.
Important: It's important to note that variables don't have a default value. Each variable + drop-down list in Dashboard settings displays the variable list in the order it + appears.
+

You can define a dashboard variable in Dashboard Settings > Variables using Grafana's RMF Variable Query syntax with and without a filter.

+

Syntax of the query without a filter

The + general syntax of the query without a filter is as follows:

SELECT + <COLUMN_NAME> FROM RESOURCE WHERE condition1 or + condition2 or + condition3

Note: The + <COLUMN_NAME> is limited to label and + RESOURCE is limited to resource only and cannot be used + for other purposes.
Where:
    +
  • condition1: + ULQ=Value + and + TYPE=Value
  • +
  • condition2: + Name=Value + and + TYPE=Value
  • +
  • condition3: + Name=Value + and + ULQ=Value + and + TYPE=Value
  • +
Examples for condition1:
    +
  • select label from resource where + ulq="hostname of the + DDS" and + type="CHANNEL_PATH"
  • +
  • select label from resource where + ulq="hostname of the + DDS" and + type="ALL_CHANNELS"
  • +

Examples for condition2:

select + label from resource where + name="resource_name" and + type="SYSPLEX"
Examples + for condition3:
    +
  • select label from resource where + ulq="hostname of the + DDS" and + name="*" and + type="CHANNEL_PATH"
  • +
  • select label from resource where + ulq="hostname of the + DDS" and + name="*" and + type="ALL_CHANNELS"
  • +
+

Syntax of the query with a filter

+ +

The general syntax of the RMF query with a filter is as follows:

+

SELECT <COLUMN_NAME> FROM RESOURCE WHERE + condition

+

Where condition is + Name=Value and + ULQ=Value and + TYPE=Value and + Filter= + Value

+

Examples for condition:

+

select label from resource where + name="resource_name" + and type="SYSPLEX" and + filter="MVS_IMAGE"

+
+
+

To learn how to effectively add and manage variables of your choice in Grafana, you + can refer to the Grafana documentation.

+
+
+
+

Introduction to Alerts

+
+ +
+ +

Grafana Alerting feature provides a reliable solution to detect and respond to system + issues in real time.

+

Through Grafana monitoring capabilities, you can keep track of incoming metrics data and + configure the alerting system to detect specific events or circumstances. When the + system identifies any issues, it automatically sends notifications to ensure that you + are up to date. With Grafana Alerting, you can eliminate the need for manual monitoring + and control system outages that could lead to significant incidents.

+

For more information about configuration of alerts and contact points, refer to the Grafana documentation.

+ +
+
+

Historical data collection

+
+ +
+ +

In Grafana, you can view historical data using absolute and relative time + ranges.

+
+

Viewing historical data is a common practice across organizations for various + purposes. The importance and use of historical data are significant in + decision-making, research, analysis, and planning. Analyzing historical data + provides valuable insights into the status, usage, performance, and health of + various resources.

+

You can also access cached metric data for queries, data sources, and timestamp + combinations that have already viewed by other user on Grafana. This means that if + any user requests metrics data for the same query, datasource, and timestamp, the + cached data can be displayed faster than a service call from DDS. If data for a + particular timestamp is not found in the cache, it will be fetched by a service call + from DDS. This feature can save you time and provide a faster experience accessing + metric data.

+
CAUTION: When you view data over extended time ranges, + the system may require considerable CPU resources on the host.
+ + + + +
+
+
+

Error reporting in the plugin

+
+ +
+ +

Whenever you encounter issues while using the IBM RMF for z/OS Grafana plugin, you can view detailed error messages + that contain sufficient information to help you identify and troubleshoot the + problem.

+

By viewing these error messages, you can quickly and efficiently troubleshoot any issues + you may encounter while using the IBM RMF for z/OS Grafana + plugin.

+
The errors that can occur vary in severity and are classified into different types as + described in the following table:
+ + + + + + + + + + + + + + + + + + + +
TypeError CodeDescription
SevereSA critical error has arisen that will cause the task you are currently + performing to terminate immediately.

It is essential to take necessary + measures to prevent such errors to ensure the smooth functioning of the + IBM RMF for z/OS Grafana plugin.

Eventual Action EAn error of a transient nature has arisen but can be resolved with an + action by the user.
WarningWReceiving a warning message from the IBM RMF for z/OS Grafana plugin is not indicative of an + error within the application.
InformationIAn information message informs the users about changes or updates in + the IBM RMF for z/OS Grafana plugin.

You need not + take any action in response, but it's essential to stay up-to-date and + be aware of these updates.

+

When an error occurs, it is assigned a unique Error ID that can help quickly identify the + root cause of the issue by referring to the log file. The Error ID is a combination of + 10 characters comprising lower and upper case alphabets.

+

In case of any problems with the Distributed Data Server (DDS), you can identify the issues by looking + into DDS-specific errors, which will be + displayed without any modifications. The messages issued by the Distributed Data Server are documented in the Distributed Data Server messages - GPM topic + in the z/OS Resource Measurement Facility Messages and Codes.

+

The following are the examples of error messages that you may encounter while using the + IBM RMF for z/OS Grafana plugin:

+

DDS_error

+

Error_plugin

+
Tip: To diagnose the issue from the docker logs of the IBM RMF for z/OS Grafana plugin, you can run the following command: +
docker logs <container_name> 2>&1 | grep "<unique error code shown in the error message>"
+
+
+

Troubleshooting issues

+ +

This section guides how to analyze and address typical issues that may arise when + using the IBM® RMF for z/OS Grafana plugin.

+
+

This article is regularly updated with the latest information on discovering and + solving issues that may arise. You can search through the article to find the + precise information you need.

+

You can open a case by navigating to IBM support if you cannot find any + solutions for the issue you encountered. Before opening a case, gather all the + required information and provide the details to IBM support for further + investigation.

+

The following table describes the details of issues and the resolutions you can apply + to fix the problems:

+
+ + + + + + + + + + + +
IssuesCauseResolutions
RMF Time Series dashboards do not plot the Monitor 3 metrics + data, whereas RMF Reports and RMF Charts dashboards plot + correctly.The proxy settings configured by your network administrator block + web socket connections from the Grafana server. +

The IBM RMF for z/OS Grafana plugin streams time series data to the clients through web socket connections.

Unblocking web sockets and configuring the appropriate proxy + settings is necessary to ensure that web sockets with the name + "ws" in the URI work correctly with + the IBM RMF for z/OS Grafana + plugin.

You can contact your network administrator to modify the proxy configuration settings.

+
+
+
+

Grafana through IBM z/OS Management Facility

+
+ +
+ +

When you use IBM® z/OS Management Facility to monitor the + performance of the z/OS sysplexes in your environment, you can also access Grafana + dashboards from z/OSMF.

+
You must complete certain tasks to access Grafana through z/OSMF. The following table lists the task flows + to access Grafana from z/OSMF:
+ + + + + + + + + + + + + + + + + + + + + +
TasksMore information
Complete the tasks provided in the Prerequisites topic.Prerequisites for accessing Grafana dashboards on z/OSMF
Install the RMF for z/OS plugin on Grafana.Installing the RMF for z/OS plugin on Grafana
Define Grafana servers as target systems.Defining the Grafana server
Access Grafana dashboardsAccessing the Grafana dashboard
+
+
+

Prerequisites for accessing Grafana dashboards on z/OSMF

+
+ +
+ +

Before you can start working with Grafana dashboards through z/OSMF, there are some prerequisites that you need to + complete.

+

The following sections describe each prerequisite in detail:

+

Configure z/OSMF

+ +

When installing z/OS, z/OSMF is automatically + installed as a fundamental component of the operating system. However, to use its + features, you must configure the z/OSMF + nucleus on your system and add core and optional services. This enables you to take + advantage of the many benefits that z/OSMF + offers. For more information, refer to the z/OS Management Facility Configuration Guide.

+
+

Install Grafana

+ +

You must install Grafana v9.5.1 or later.

+

For more information, refer to the Grafana documentation for detailed + instructions on installing Grafana and its dependencies and starting the Grafana + server on your system.

+
+

User administration

+ +

You must review the default user management settings provided by the Grafana server + to determine if you need any additional permissions to be added for the users.

+ +

For more information, refer to the User Management section of the Grafana + documentation.

+
+

Configure JSON Web Token (JWT) support on z/OSMF

+ +

You must configure the z/OSMF server to build + and use JSON Web Token (JWT) tokens. Because, by default, the JWT function is turned + off on the z/OSMF server. You can turn on the + JWT authentication by modifying the server's configuration files directly. Once + enabled, the JWT function allows you to use JWT tokens to authenticate and authorize + user access to the Grafana through the z/OSMF + server.

+

When configuring z/OSMF JWK files, it is + essential to use the jwksUri parameter. This parameter + specifies a URL for the JSON Web Key service, which is necessary for building the + JWK files.

+

The format of the jwksUri parameter is as follows:

+

https://${hostname}:${port}/jwt/ibm/api/zOSMFBuilder/jwk

+

For example, if your z/OSMF server is running + on https://abc.com:12345, then the value of jwksUri + is:

+

https://abc.com:12345/jwt/ibm/api/zOSMFBuilder/jwk

+
Where,
    +
  • abc is the hostname where the z/OSMF server runs.
  • +
  • 12345 is the port number.
  • +
+

You must save the content of jwksUri as the + jwks.json file and place it in the following directory:

+

/PATH/TO/jwks.json

+

For information about enabling the JWT function, refer to the z/OS Management Facility Configuration Guide.

+
+

Configure JWT authentication on Grafana

+ +

You must configure Grafana to accept a JWT token in the HTTP header. You can also + verify the token's validity using a JSON Web Key Set (JWKS) stored in a local + file.

+

As a system administrator, when you install Grafana, you can pass values for some of + the individual parameters in the .ini configuration file to + configure JWT authentication on Grafana. See Grafana configuration parameters.

+
The default location of the configuration file is as follows:
+ + + + + + + + + + + +
Operating systemsDefault path to the configuration file
Windows®WORKING_DIR/conf/defaults.ini
Linux®/etc/grafana/grafana.ini
macOS®/usr/local/etc/grafana/grafana.ini
+
+
+
+

Grafana configuration parameters

+ +

You can find the information about parameters you can use during the configuration of + JWT authentication on Grafana.

+

The following table lists the minimum parameters that you must configure to enable JWT + authentication on Grafana:

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SectionParametersDescriptionValues to be configured for z/OSMF
[auth.jwt]enabledUse this parameter to allow JWT to authenticate on the Grafana + server.

The default value is set to true.

true
enable_login_tokenUpon successful authentication proxy header validation, this + parameter provides the user with a login + token.

The default value is set to false.

true
header_nameUse this parameter to specify the header's name that holds a + token.

The default value is set to X-JWT-Assertion.

X-Forwarded-Access-Token
username_claimUse this parameter to identify the user. +

The sub claim is mandatory and needs to be present in a JWT, and it should mention the subject of the JWT.

The default value is also set to sub.

sub
jwk_set_fileUse this parameter to verify the token with a JSON Web Key Set loaded + from a JSON file./PATH/TO/jwks.json
cache_ttlUse this parameter to establish the duration for caching data + retrieved from the HTTP endpoint. +

This parameter enables the user to store the data for a specified period, allowing for faster access and retrieval of information.

The default value is set to 60m (minutes).

60m
expect_claimsUse this parameter to verify the validity of other claims that + contain JSON-encoded information. +

When it comes to validation, only the exp, nbf, and iat claims are automatically checked by default.

You must validate if you are using other claims such as iss, sub, aud, and jti.

{"iss": "zOSMF"}
auto_sign_upUse this parameter to automatically create user profiles in Grafana + using the TSO ID of z/OSMF for users who do not have + user profiles in the Grafana + server.

The default value is set to false.

true
url_loginUse this parameter to enable JWT authentication in the URL. +

The default value is set to false.

true
[server]protocolUse this parameter to configure z/OSMF to work over + HTTPS.

When you configure z/OSMF to work over HTTPS, it is recommended to configure Grafana to also work over HTTPS. This ensures the secure data transfer between the user's web browser and the Grafana server.

The default value is set to http.

https
cert_fileUse this parameter to specify the path to the certificate file when + the protocol parameter is set to https or + h2./PATH/TO/certificate.crt
cert_keyUse this parameter to specify the path to the certificate key file + when the protocol parameter is set to https + or h2./PATH/TO/privateKey.key
[Security]cookie_secureUse this parameter if you hosted the Grafana instance over + HTTPS.

The default value is set to false.

true
cookie_samesiteUse this parameter to prevent the browser from sharing cookies with + other + websites.

The default value is set to lax.

disabled
allow_embeddingUse this parameter to enable web browsers to display Grafana within + z/OSMF HTML <frame>, + <iframe>, <embed>, or <object> element. +

The default value is set to false.

true
+

For more information about customizing the Grafana instance by modifying the parameters + in the configuration file, refer to the following sections in the Grafana + documentation.

+ +
+
+

Defining the Grafana server

+ +

You must define the Grafana server as a target system in z/OSMF to access Grafana from the Resource + Monitoring page of z/OSMF.

+

Before you begin

You must have completed the following tasks:
+

Procedure

  1. + Enter the URL of z/OSMF in a web browser. +
  2. + Log in to z/OSMF if + you are not already logged in. +
  3. + Double-click System Status. +
  4. + Click Add Entry from the Actions + drop-down list. +
  5. + Perform the following steps to add details about the Grafana server: +
      +
    1. + Enter a name for the Grafana server in the Resource + name field. +
      The Resource name is the required field, and + you must provide a unique name. The Resource name + can contain up to 24 characters including + alphanumeric characters (A-Z, + a-z, and + 0-9) and special characters + (@ # $).
      Note: You must note that the Resource name is not + case sensitive. Therefore, the entries with similar names but + different capitalization, such as SYS1 + and Sys1 are considered as identical by + the system.
      +
    2. +
    3. + Enter the host name or IP address of the Grafana server that you want + to access in the Host name or IP address + field. +
      The host name or IP address can contain up to + 4000 characters.
      +
    4. +
    5. + Select Grafana from the Target system + type drop-down list. +
    6. +
    7. + Select the Use HTTPS checkbox to enable secure + communication. +
    8. +
    9. + Enter the port number where the Grafana server is hosted in the + Port field. +
      +

      The Port is the required field, and the + default port number is set to 3000.

      +
      Tip: Alternatively, you can use + up-down controls to specify the port + number.
      +
      +
    10. +
    +
  6. + Click OK. +
+

Results

You have defined the Grafana server as the target + system.
+

What to do next

You can perform the following tasks:
    +
  • Modify or Remove the Grafana server by clicking the + Action drop-down menu from the System + Status page.
  • +
  • Access Grafana dashboards. See Accessing the Grafana dashboard.
  • +
+
+
+

Accessing the Grafana dashboard

+ +

You can access the Grafana dashboard from the Resource + Monitoring page of z/OSMF to + investigate the RMF Monitor III metrics and reports.

+

Before you begin

You must have defined the Grafana server in z/OSMF. See Defining the Grafana server.
+

Procedure

  1. + Enter the URL of z/OSMF in a web browser. +
  2. + Log in to z/OSMF if + you are not already logged in. +
  3. + Double-click Resource Monitoring. +
  4. + Select the Grafana server that you want to access from the drop-down + list. +
  5. + Click OK. +
+

Results

You have accessed Grafana from z/OSMF.
+

What to do next

You can perform the following tasks:
    +
  • View the dashboards by navigating to Apps > IBM RMF > Dashboards.
  • +
  • Add a RMF data source to fetch data from Distributed Data Servers (DDS). See Creating RMF data + sources.
  • +
+
+
\ No newline at end of file diff --git a/grafana/rmf-app/doc/src/pdf/rmf_grafana.merged.xml b/grafana/rmf-app/doc/src/pdf/rmf_grafana.merged.xml new file mode 100644 index 00000000..25e509ee --- /dev/null +++ b/grafana/rmf-app/doc/src/pdf/rmf_grafana.merged.xml @@ -0,0 +1,1723 @@ + + + + + + +IBM RMF for z/OS Grafana Plugin <ph class="- topic/ph " props="pdf">User Guide</ph> + IBM RMF for z/OS Grafana Plugin <ph class="- topic/ph " props="pdf">User Guide</ph> + IBM RMF for z/OS Grafana PluginOverviewGrafana is a platform for monitoring and visualizing data. It enables users to create, explore, and share dashboards that are interactive and customizable. The IBM RMF for z/OS Grafana plugin provides effortless analysis and visualization of Resource Measurement Facility for z/OS (RMF for z/OS) Monitor III metrics and reports within the Grafana platform. Thereby, you can monitor and analyze the health and performance of applications.Release notesThis article covers the new features, system requirements, and known issues of the IBM RMF for z/OS Grafana plugin.Installing the pluginYou must install the IBM RMF for z/OS Grafana plugin to analyze and visualize RMF Monitor III metrics and reports.Upgrading the pluginYou must ensure that the IBM RMF for z/OS Grafana plugin is up to date to leverage its enhanced functionalities. You can do so by either installing or upgrading to the latest version of the plugin.Creating RMF data sourcesTo access RMF Monitor III metrics in Grafana, you need to connect to the Distributed Data Server (DDS) by adding an RMF data source.RMF master dashboardIBM RMF for z/OS Grafana is a plugin provides custom panels for the RMF data source and master dashboard that consists of RMF Charts, RMF Reporting, and RMF Time Series dashboards.Applying visualization to RMF dataBy adding panels to dashboards, you can effectively present your RMF data in a visual format. Each panel must require at least one query to display a significant visualization.IBM RMF query languagesIn Grafana, queries are essential for fetching and transforming data from RMF data sources.RMF Variable Query syntaxVariables are a powerful tool to create more interactive and dynamic dashboards. They offer a way to replace hard-coded values in metric queries and panel titles with placeholders for values.AlertsGrafana Alerting feature provides a reliable solution to detect and respond to system issues in real time.Historical dataIn Grafana, you can view historical data using absolute and relative time ranges.Error typesWhenever you encounter issues while using the IBM RMF for z/OS Grafana plugin, you can view detailed error messages that contain sufficient information to help you identify and troubleshoot the problem.Troubleshooting issuesThis section guides how to analyze and address typical issues that may arise when using the IBM RMF for z/OS Grafana plugin.Grafana through z/OSMFWhen you use IBM z/OS Management Facility to monitor the performance of the z/OS sysplexes in your environment, you can also access Grafana dashboards from z/OSMF.PrerequisitesBefore you can start working with Grafana dashboards through z/OSMF, there are some prerequisites that you need to complete.Grafana configuration parametersYou can find the information about parameters you can use during the configuration of JWT authentication on Grafana.Defining the Grafana serverYou must define the Grafana server as a target system in z/OSMF to access Grafana from the Resource Monitoring page of z/OSMF.Accessing the Grafana dashboardYou can access the Grafana dashboard from the Resource Monitoring page of z/OSMF to investigate the RMF Monitor III metrics and reports. +<ph class="- topic/ph topic/title-wrapper ">IBM RMF for z/OS Grafana Plugin</ph> + <ph class="- topic/ph topic/title-wrapper ">Visualization of RMF Monitor III metrics in Grafana</ph> + + Overview + + Grafana is a platform for monitoring and visualizing data. It enables users to + create, explore, and share dashboards that are interactive and customizable. The IBM RMF for z/OS Grafana plugin provides effortless analysis and + visualization of Resource Measurement Facility for z/OS (RMF for z/OS) Monitor III metrics and reports within the + Grafana platform. Thereby, you can monitor and analyze the health and performance of + applications. + +

The IBM RMF for z/OS Grafana plugin provides the following + features:

    +
  • You can choose various visualization options, such as graphs, charts, panels, + and reports, to help you understand your data's trends, patterns, and + variances.
  • + +
  • You can create dynamic and engaging dashboards by piecing together various + panels, each displaying a unique visualization.
  • +
  • You have the freedom to customize each panel based on your requirements, + including its appearance, size, and the data queries it displays.
  • +
  • Grafana supports integration with numerous data sources, which helps you fetch + data from various Distributed Data Servers (DDS) and display it in a unified + dashboard.
  • +
  • You can set up alerts based on specific conditions or thresholds in your RMF + data. Grafana can trigger notifications via email or other communication + channels when these conditions are met.
  • +
  • You can define a dashboard variable to change the RMF data displayed in your + dashboard simply by selecting a value from the drop-down list at the top.
  • +

+
+
+ <ph class="- topic/ph topic/title-wrapper ">Release notes</ph> + This article covers the new features, system requirements, and known issues of the + IBM RMF for z/OS Grafana plugin. + +
+ What's new +
+ +
May 2025 v1.0.9
+
+
    +
  • +

    IBM RMF for z/OS Grafana plugin has been + enhanced to optimize the step size when querying and displaying + time series data, based on the selected time range and panel + size. This enhancement ensures that panels display the required + number of data points.

    +
  • +
  • +

    A bug has been fixed that was causing specific data points to be + dropped from time series views, resulting in a flat line in the + graphs.

    +
  • +
  • +

    Fixed internally found defects.

    +
  • +
+
+
+
+
+
+
+ +
April 2025 v1.0.8
+
+
    +
  • +

    A new option, Compression, has been added + to the data source creation process. This option enables the RMF + data source to request HTTP compression from the Data + Distributed Server (DDS) during data retrieval, which improves + the efficiency of data transfer. See Creating RMF data sourcesTo access RMF Monitor III metrics in Grafana, you need to connect to the Distributed Data Server (DDS) by adding an RMF data source..

    +
  • +
  • +

    Fixed certain scenarios of missing data within dashboards for + time series visualizations.

    +
  • +
  • +

    Fixed internally found defects.

    +
  • +
+
+
+ +
November 2024 v1.0.7
+
+

Fixed internally found defects.

+ +
+
+ +
October 2024 v1.0.6
+
+
    +
  • +

    The IBM RMF for z/OS Grafana plugin now + allows customizing banner and caption fields in IBM RMF Report + visualizations.

    +
  • +
  • +

    After you modify any IBM RMF data + source and save the changes, you no longer need to re-enter the + password.

    +
  • +
  • +

    Improved performance.

    +
  • +
  • +

    Fixed internally found defects.

    +
  • +
+
+
+
+
+
+
+ +
August 2024 v1.0.5
+
+
    +
  • +

    When creating the datasource, you now have the option to specify + the desired cache size in megabytes for the datasource.

    +
  • +
  • +

    Fixed internally found defects.

    +
  • +
  • +

    The topic of Creating RMF data sourcesTo access RMF Monitor III metrics in Grafana, you need to connect to the Distributed Data Server (DDS) by adding an RMF data source. has been + updated per the new UI changes.

    +
  • +
+
+
+ +
June 2024 v1.0.4
+
+
    +
  • +

    The user interface for creating the datasource has been enhanced + to improve the user experience.

    +
  • +
  • +

    Fixed internally found defects.

    +
  • +
  • +

    The following dashboards are updated:

      +
    • Common Storage Activity (Timeline)
    • +
    • Common Storage Activity
    • +
    • Coupling Facility Overview (Timeline)
    • +
    • Coupling Facility Overview
    • +
    • Execution Velocity (Timeline)
    • +
    • Execution Velocity
    • +
    • General Activity (Timeline)
    • +
    • General Activity
    • +
    • Overall Image Activity (Timeline)
    • +
    • Overall Image Activity
    • +
    • Performance Index (Timeline)
    • +
    • Response Time (Timeline)
    • +
    • Response Time
    • +
    • XCF Activity (Timeline)
    • +
    • XCF Activity
    • +
    You must re-import the + dashboards to utilize the latest enhancements in the + dashboards.

    +
  • +
  • +

    The documentation updates for v1.0.4 include the following + changes:

      +
    • +

      The topic of Creating RMF data sourcesTo access RMF Monitor III metrics in Grafana, you need to connect to the Distributed Data Server (DDS) by adding an RMF data source. + has been updated as per the new UI changes.

      +
    • +
    • +

      The Upgrading the RMF for z/OS plugin on GrafanaYou must ensure that the IBM RMF for z/OS Grafana plugin is up to date to leverage its enhanced functionalities. You can do so by either installing or upgrading to the latest version of the plugin. topic is + included to provide information about the upgrade + process.

      +
    • +

    +
  • +
+
+
+ +
February 2024 v1.0.3
+
+
    +
  • +

    Fixed specific issues related to the support of Grafana + v10.x.x.

    +
  • +
  • +

    Fixed empty settings issue for IBM RMF data source defined via + Home / Apps / IBM RMF page.

    +
  • +
  • +

    Fixed internally found defects.

    +
  • +
  • +

    The documentation updates for v1.0.3 include the following + changes:

      +
    • +

      The Grafana + through IBM z/OS Management FacilityWhen you use IBM z/OS Management Facility to monitor the performance of the z/OS sysplexes in your environment, you can also access Grafana dashboards from z/OSMF. topic + explains more detailed setup instructions to access + Grafana from the z/OSMF server.

      +
    • +
    • +

      The RMF for z/OS plugin + installationYou must install the IBM RMF for z/OS Grafana plugin to analyze and visualize RMF Monitor III metrics and reports. section is updated to provide + clear information and guidance on installing the RMF for z/OS plugin on + different platforms based on specific + requirements.

      +
    • +
    • +

      The troubleshootingThis section guides how to analyze and address typical issues that may arise when using the IBM RMF for z/OS Grafana plugin. topic is provided to help + users analyze and resolve common issues that may + occur while using the IBM RMF for z/OS Grafana + plugin.

      +
    • +

    +
  • +
+
+
+ +
December 2023 v1.0.2
+
+
    +
  • +

    Support spaces in Datasource name.

    +
  • +
  • +

    Fixed internally found defects.

    +
  • +
+
+
+ +
November 2023 v1.0.1
+
+
    +
  • +

    Resolved security issues in dependencies.

    +
  • +
  • +

    Fixed internally found defects.

    +
  • +
+
+
+ +
November 2023 v1.0.0
+
+

The first release of the IBM RMF for z/OS Grafana + plugin is in the following GitHub repository: https://github.com/IBM/RMF.

+
+
+
+
+
+ Requirements +

You must have the following software to use the IBM RMF for z/OS Grafana plugin:

    +
  • Resource Measurement Facility for z/OS + 3.1
  • +
  • Distributed Data Server
  • +
  • IBM RMF for z/OS Grafana plugin 1.0.x
  • +
  • Grafana 9.5.1 or later
  • +

+
+ +
+
+ <ph class="- topic/ph topic/title-wrapper ">Installing the RMF for z/OS plugin on Grafana</ph> + + Installing the plugin + + You must install the IBM RMF for z/OS Grafana plugin to analyze + and visualize RMF Monitor III metrics and reports. + + +

You must have completed the following tasks:

    +
  • Installed RMF for z/OS + 3.1 + DDS and the functionality level must + be 3650 or higher.
  • +
  • Installed Grafana 9.5.1 or later.
  • +
You must be familiar working with Grafana.

+
+ + + Set the value of allow_loading_unsigned_plugins to + ibm-rmf,ibm-rmf-datasource,ibm-rmf-report in the + [plugins] section of your custom configuration + file. + +

The default configurations for a Grafana installation are in the + defaults.ini file. You can copy the + default.ini file and rename it to + custom.ini for customizing your Grafana + configuration. + The default location of the configuration file is as follows: + + Operating systems + Default path to the configuration file + + + Windows + WORKING_DIR/conf/defaults.ini + + + Linux + /etc/grafana/grafana.ini + + + macOS + /usr/local/etc/grafana/grafana.ini + +

+ You can use the + GF_PLUGINS_ALLOW_LOADING_UNSIGNED_PLUGINS + environment variable to override + allow_loading_unsigned_plugins. +
+
+ + Choose any one of the methods described in the following table to install the + RMF for z/OS plugin based on your requirements: + + + + Methods + Step # + + + Installing the RMF for z/OS + plugin in the Grafana stand-alone application. + Perform steps 3 and 4. + + + Installing the RMF for z/OS + plugin along with Grafana within the Docker environment. + Perform steps 5 and 6. + + + + + + Run the following command to install the plugin by using Grafana CLI: + + grafana cli --pluginUrl https://github.com/IBM/RMF/releases/download/ibm-rmf-grafana/v<version>/ibm-rmf-grafana-<version>.zip plugins install ibm-rmf + You must replace the value of + <version> for the pluginURL + option to version number of the plugin to be installed. + + + + + + Restart the Grafana server, and then go to step 7. + + + Run the following command to create a volume for storing the Grafana + state: + + docker volume create rmf-grafana-data + + + + Run the following command to create and run a container: + + docker run --name rmf-grafana --hostname rmf-grafana --detach --restart unless-stopped --volume rmf-grafana-data:/var/lib/grafana --publish 3000:3000 --env "GF_INSTALL_PLUGINS=https://github.com/IBM/RMF/releases/download/ibm-rmf-grafana/v<version>/ibm-rmf-grafana-<version>.zip;ibm-rmf" --env "GF_PLUGINS_ALLOW_LOADING_UNSIGNED_PLUGINS=ibm-rmf,ibm-rmf-datasource,ibm-rmf-report" <image> + You must replace the values of the + following options in the command:
    +
  • <version> for the env + option to the version number of the plugin to be installed.
  • +
  • <image> to the version of the Grafana image to + be used.
  • +
+ zCX/zLinux images are available at Container Images for IBM Z and LinuxONE. + Similarly, images of other required platforms are available at Docker + Hub. +
+
+ + To enable the RMF for z/OS plugin on the Grafana + UI, you must perform the following sub-steps: + + + Enter the URL of Grafana in your web browser. + + + Enter the username and password of Grafana on the + sign-in page. + + + Go to AdministrationPlugins. + + The navigation of the user interface can differ based on the + Grafana version that is currently installed. + + + + Enter RMF in the Search bar + on the Plugins page. + + + Click IBM RMF in + the search results. + + + Click Enable. + + After you install the IBM RMF for z/OS Grafana plugin, when you open + IBM RMF on the Plugins page of Grafana UI, an + Invalid plugin signature warning message is + displayed. + + + + + + Verify the signature of the IBM RMF Grafana plugin, which is signed with the + GPG key, by performing the following sub-steps: + + + Download the PUBLIC_KEY.asc (GPG public key) + file. + The location of the file is as + follows: + + + Follow the instructions in the Importing a public key section of the GPG + user guide. + + + Download the IBM RMF for z/OS Grafana plugin + (ibm-rmf-grafana-x.y.z.zip) and signature file + (ibm-rmf-grafana-x.y.z.zip.asc) from https://github.com/IBM/RMF/releases. + + + Run the following command to verify the signature: + + gpg --verify ibm-rmf-grafana-x.y.z.zip.asc ibm-rmf-grafana-x.y.z.zip +

Where x.y.z is the version number + of the IBM RMF for z/OS Grafana plugin.

+

For more information, refer to the GPG user guide.

+
+
+
+
+
+ You have installed the IBM RMF for z/OS Grafana plugin. You can find the IBM RMF plugin listed under the + Apps section.

+ You can add an RMF data source to fetch data from Distributed Data Servers (DDS). See Creating RMF data sourcesTo access RMF Monitor III metrics in Grafana, you need to connect to the Distributed Data Server (DDS) by adding an RMF data source.. +
+ + Grafana CLI documentation + docker run command + docker volume create command + +
+ <ph class="- topic/ph topic/title-wrapper ">Upgrading the RMF for z/OS plugin on Grafana</ph> + + Upgrading the plugin + + You must ensure that the IBM RMF for z/OS Grafana plugin is up + to date to leverage its enhanced functionalities. You can do so by either installing or + upgrading to the latest version of the plugin. + + The upgrade procedures differ based on the environment you used to install the + Grafana server. + + Methods + Step # + + + Upgrading the plugin in the Grafana stand-alone application. + Perform steps 1 to 3. + + + Upgrading the plugin in the Grafana within the Docker + environment. + Perfrom steps 4 to 7. + + + + + Stop the Grafana server. + + + Run the following command to upgrade the plugin by using Grafana CLI: + + grafana cli --pluginUrl https://github.com/IBM/RMF/releases/download/ibm-rmf-grafana/v<version>/ibm-rmf-grafana-<version>.zip plugins install ibm-rmf + You must replace the value of + <version> for the pluginURL + option with the plugin's version number to be upgraded. + For example, if you want to install the v1.0.3 version of the plugin, the value of pluginURL is https://github.com/IBM/RMF/releases/download/ibm-rmf-grafana/v1.0.3/ibm-rmf-grafana-1.0.3.zip. + + The CLI tool downloads the mentioned version of the plugin and replaces + the existing files. + + + Restart the Grafana server, and then go to step 7. + + + Run the following command to stop the docker container: + + docker stop rmf-grafana +

Where rmf-grafana is the name of the container.

+
+
+ + Run the following command to remove the docker container: + + docker rm rmf-grafana + + + + Run the following command to upgrade the plugin by creating and running a + container: + + docker run --name rmf-grafana --hostname rmf-grafana --detach --restart unless-stopped --volume rmf-grafana-data:/var/lib/grafana --publish 3000:3000 --env "GF_INSTALL_PLUGINS=https://github.com/IBM/RMF/releases/download/ibm-rmf-grafana/v<version>/ibm-rmf-grafana-<version>.zip;ibm-rmf" --env "GF_PLUGINS_ALLOW_LOADING_UNSIGNED_PLUGINS=ibm-rmf,ibm-rmf-datasource,ibm-rmf-report" <image> + You must replace the values of the + following options in the command:
    +
  • <version> for the env + option to the version number of the plugin to be upgraded.
  • +
  • <image> to the version of the Grafana image + used.
  • +
+
+
+ + Perform the following sub-steps to re-import the dashboards. + After upgrading the plugin to a new version, it is essential to re-import the + dashboard. This ensures that you are utilizing the most up-to-date features in + the dashboards.You can find the updated + dashboards for each release by referring to the CHANGELOG of the plugin. You do not need to + re-import all the dashboards. + + + Enter the URL of Grafana in your web browser. + + + Enter the username and password of Grafana on the + sign-in page. + + + Go to AdministrationPlugins. + + The navigation of the user interface can differ based on the + Grafana version that is currently installed. + + + + Enter RMF in the Search bar + on the Plugins page. + + + Click IBM RMF in + the search results. + + + Click Dashboards, and then click + Re-import to re-import the dashboards. + + + +
+ You have updated the IBM RMF for z/OS Grafana plugin. +
+
+ <ph class="- topic/ph topic/title-wrapper ">Creating RMF data sources</ph> + To access RMF Monitor III metrics in Grafana, you need to connect to the Distributed Data Server (DDS) by + adding an RMF data source. + + +
    +
  • You must have installed the RMF for z/OS Grafana plugin. See Installing the RMF for z/OS plugin on GrafanaYou must install the IBM RMF for z/OS Grafana plugin to analyze and visualize RMF Monitor III metrics and reports..
  • +
  • You must know the hostname and port number of DDS.
  • +
+
+ + + Go to AppsIBM RMFAdd RMF Data Source. + Alternatively, you can click AdministrationData sources+ Add new data source, then search for the IBM RMF to choose a data source type.The navigation of the user interface can differ based on the + Grafana version that is currently installed. + + + Enter a name for the data source in the Name + field. + + + Set Default + to + ON to make the added data source the default + one. + + When you create new panels, the default data source + is preselected. + + + + Enter the details for the following fields in the HTTP + section: + + + + Fields + Action + + + DDS URL + Enter the URL of the DDS in this field.

The format of the URL is + http://hostname:port_number[/path] + or + https://hostname:port_number[/path]

In the DDS URL, the + /path is + optional, and you must exclude it in the default network + configuration. However, it might be required in more advanced + setups, such as when DDS + functions behind a reverse proxy.
+
+ + Timeout + Specify the duration, in seconds in this field, for which + Grafana is allowed to wait for a connection to the DDS before it closes the + connection.

The default value is + 60.

+
+ + Compression + This option is enabled by default, which means that when RMF + requests data from DDS, HTTP + compression is utilized, provided that the DDS is operating on a + maintenance level OA67541. The compression setting is ignored if DDS is not at this + maintenance level.

You can turn off HTTP compression by setting + the Compression option to + OFF, resulting in DDS data being always + transferred in an uncompressed format.

+
+
+
+
+ + Set the Skip TLS Verify option to + ON if you are accepting any certificate + presented by the DDS and any hostname listed in that certificate. However, this + practice is not considered secure and is typically used in development or + testing environments. + + By default, the Skip TLS + Verify option is set to + OFF. + + + + Set the Basic Auth option to + ON to create the data source with basic + authentication. + + + Enter the credentials of the DDS in the + User and Password + fields. + + The User and + Password fields are visible only when you enable + the basic authentication. + + + + Specify the size of the cache (in MB) for the data source in the + Size field. + + The value must be greater than or + equal to 128. The default value is + 1024. + + + + Click Save & test. + The Data source is working message is displayed if the + connection to DDS succeeds. + +
+ You have added the RMF data source. + +

You can refer to the RMF master dashboardIBM RMF for z/OS Grafana is a plugin provides custom panels for the RMF data source and master dashboard that consists of RMF Charts, RMF Reporting, and RMF Time Series dashboards. topic for information about RMF + master dashboard and its features.

+
+
+
+ <ph class="- topic/ph topic/title-wrapper ">RMF master dashboard</ph> + IBM RMF for z/OS Grafana is a plugin provides custom panels for + the RMF data source and master dashboard that consists of RMF Charts, RMF Reporting, and RMF + Time Series dashboards. + +

Grafana provides a highly flexible and customizable dashboard consisting of one or more + rows and panels. You can use various pre-configured panels to construct queries and + tailor the visualization to meet your requirements. This enables you to create a + personalized dashboard that seamlessly interacts with data from a configured Distributed Data Server (DDS). For more information about creating and managing dashboards, refer to the Grafana documentation.

+

When you install the RMF for z/OS Grafana plugin for the first time, all the dashboards + are imported automatically. You can view the dashboards by navigating to AppsIBM RMFDashboards. The following table lists the dashboards available in RMF Charts, RMF + Reporting, and RMF Time Series dashboards: + <ph class="- topic/ph topic/title-wrapper ">RMF master dashboard</ph> + + + + + + + + + + RMF Charts Dashboard + RMF Reporting + Dashboards + RMF Time Series Dashboards + + + + + Common Storage Activity + CACHDET + DSND + PROC + SYSINFO + Common Storage Activity (Timeline) + + + Coupling Facility Overview + CACHSUM + EADM + PROCU + SYSRG + Coupling Facility Overview (Timeline) + + + Execution Velocity + CFACT + ENCLAVE + SPACED + SYSSUM + Execution Velocity (Timeline) + + + General Activity + CFOVER + ENQ + SPACEG + USAGE + General Activity (Timeline) + + + Overall Image Activity + CFSYS + HSM + STOR + XCFGROUP + Overall Image Activity (Timeline) + + + Performance Index + CHANNEL + IOQ + STORC + XCFOVW + Performance Index (Timeline) + + + Response Time + CPC + JES + STORCR + XCFPATH + Response Time + + + Using & Delays + CRYOVW + LOCKSP + STORF + XCFSYS + Using & Delays (Timeline) + + + XCF Activity + DELAY + LOCKSU + STORM + ZFSFS + XCF Activity (Timeline) + + + Common Storage Activity + DEV + OPD + STORR + ZFSKN + Common Storage Activity (Timeline) + + + + DEVR + PCIE + STORS + ZFSOVW + + + + +

+

The dashboard interface offers several customization options for data presentation. The + following is the image of the master dashboard from the IBM RMF for z/OS Grafana plugin:

+

+ default_dashboard_view +

+

You can click the + import_dashboard + option when there is a new version of the plugin, and then re-import the + dashboard by clicking the + reimport + icon. Similarly, if any of the dashboards is no longer required, you can click + the icon to remove it + from the master dashboard.

+

For more information about available features in the Dashboard and their descriptions, + refer to the Grafana documentation.

+
+
+ <ph class="- topic/ph topic/title-wrapper ">Applying visualization to RMF data</ph> + By adding panels to dashboards, you can effectively present your RMF data in a visual + format. Each panel must require at least one query to display a significant + visualization. + + You must have completed the following tasks:
    +
  • Installed the IBM RMF for z/OS Grafana plugin. See Installing the RMF for z/OS plugin on GrafanaYou must install the IBM RMF for z/OS Grafana plugin to analyze and visualize RMF Monitor III metrics and reports..
  • +
  • Added a RMF data source in Grafana. See Creating RMF data sourcesTo access RMF Monitor III metrics in Grafana, you need to connect to the Distributed Data Server (DDS) by adding an RMF data source..
  • +
  • Understood query languages of the RMF. See IBM RMF query languagesIn Grafana, queries are essential for fetching and transforming data from RMF data sources..
  • +
+ + + Identify the dashboard for which you want to add visualization. + + + Perform one of the steps described in the following table: + + + + Step description + Step # + + + If there are no panels added to the dashboard + Perform step 3. + + + If at least one panel is added to the dashboard + Perform step 5. + + + + + + Click + Add visualization to add visualization to your + data. + + The navigation of the user interface can differ based on the + Grafana version that is currently installed. + + The Edit panel is displayed. + + + Go to step 6. + + + Click AddVisualization from the dashboard header. + +

+
+ The Edit panel is displayed. +
+ + Enter a name for the panel in the Title field. + Optionally you can also provide a description for the panel that you are + creating.

When you add the description for the panel, a notification icon + is + displayed after the Panel title, as shown in the + following image:

+
+ + Select one of the visualization types from the drop-down menu: + +

+

You can choose Report for IBM RMF for z/OS or built-in + Bar chart Grafana visualization types from the + drop-down list.

+
+
+ + Click the Query tab, and then enter a query in the query + language of the RMF data source. + + You can click + Query to add + multiple queries. + + + + Click the Transformation tab, and then select a + transformation from the list. + Upon accessing the transformation options, a dedicated row is presented for + configuration.You can click + Add + Transformation to add multiple transformations to + data. + + + Select the existing data sources from the Data source + drop-down list. + + + Click the Time Picker drop-down list to select relative + time range options and set custom absolute time ranges. + +

+
+
+ + Click the Refresh dashboard + icon to query the RMF + data source. + Grafana provides you with a preview of your query results along with the + corresponding visualization. + + + Click Apply to view your changes applied to the + dashboard. + + + Click Save, and then enter a note describing the changes + you have made. + + + Click Save to store the changes made to the + dashboard. + +
+ You have applied visualization to the RMF data. + +

Grafana provides a range of visualizations that cater to different use cases. For + more information about the built-in panels, options, and typical usage, refer to the + Grafana documentation.

+

You can also configure the panel options based on your requirements. For more + information refer to the Grafana documentation.

+

You can add multiple transformation to your data. When there are multiple + transformations, Grafana applies them sequentially. Each transformation produces a + result set that is passed on to the next transformation in the pipeline. Grafana + provides several ways that you can transform data. For entire list of + transformations, refer to the Grafana documentation.

+
+
+
+ <ph class="- topic/ph topic/title-wrapper ">IBM RMF query languages</ph> + In Grafana, queries are essential for fetching and transforming data from RMF data + sources. + +

Executing a query is a process that involves defining the data source, specifying the + desired data to retrieve, and applying relevant filters or transformations. IBM RMF for z/OS Grafana plugin provides a user-friendly RMF query + editor that maximizes its unique capabilities. Grafana panels retrieve data for + visualization from RMF data sources via queries.

+

You can use the following types of queries to retrieve data from the specified RMF data + source:

+
    +
  • Metric query – Use this query to retrieve RMF Monitor III metrics.
  • +
  • Report query – Use this query to retrieve RMF Monitor III reports.
  • +
+
+ Metric query syntax +

The syntax of the Metric query is as follows:

+

resource_type.metric_description + {qualifications}

+

Where:

    +
  • resource_type is the type + of resource for which information is requested. You must enter the + appropriate value in the + resource_type field.

    The + available resource types are documented in the z/OS RMF Monitor III resource + model topic in the z/OS Resource Measurement Facility Programmer's + Guide.

  • +
  • metric_description is the name of the + metric for the selected resource type.

    After entering the resource type, + you can choose the metric description from the drop-down list.

  • +
  • qualifications is an optional parameter + and can contain any or all the following attributes separated by a comma:
      +
    • ulq: The name of the resource + type at the upper level.
    • +
    • name: The name of the + resource.
    • +
    • filter: The filter helps to + focus on the data of your interest when requesting a list of values. +

      You can use one of the following values for the + filter attribute:

      + +
      PAT=< pattern>
      +
      Specifies one or more patterns that must match the + name part of a list element.
      +
      + +
      LB=<number>
      +
      Specifies a lower bound value. Only list elements + with values higher than the given lower bound are + returned.
      +
      + +
      UB=<number>
      +
      Specifies an upper bound value. Only list elements + with values lower than the established upper bound + are returned.
      +
      + +
      HI=<integer>
      +
      Only the highest <integer> list elements are + returned (mutually exclusive with LO).
      +
      + +
      LO=<integer>
      +
      Only the lowest <integer> list elements are + returned (mutually exclusive with HI).
      +
      + +
      ORD=< NA | ND | VA | VD | NN>
      +
      +
        +
      • NA - Sort the list of names by their names in + ascending order.
      • +
      • ND – Sort the list of names by their names in + descending order.
      • +
      • VA – Sort the list of values by their values + in ascending order.
      • +
      • VD – Sort the list of values by their values + in descending order.
      • +
      • NN - If you do not want to have any order, you + can specify ORD=NN.
      • +
      +
      +
      +

    • +
    • workscope: To qualify a request + for performance data in more detail about address spaces and WLM + entities. You can use one of the following values for the workscope + attribute:
        +
      • G - Global (no workscope required)
      • +
      • W - WLM workload
      • +
      • S - WLM service class
      • +
      • P - WLM service class period
      • +
      • R - WLM report class
      • +
      • J - Job
      • +
    • +
  • +

+

Examples:

+ SYSPLEX.% total physical utilization (AAP) by partition + COUPLING_FACILITY.% processor utilization + CPC.% total physical utilization (shared IIP) + MVS_IMAGE.% delay by WLM report class period {name=RS21} + + MVS_IMAGE.% workflow by WLM report class period {ulq=RS21,name=RS2*,filter=ORD=NA,workscope=,,G} +
+
+ Report query syntax +

The syntax of the Report query is as follows:

+

resource_type.REPORT.report_name

+

Where:

    +
  • resource_type is the type + of resource for which information is requested. You must enter the + appropriate value in the + resource_type field.
  • +
  • report_name is the name of the + report.

    You can find the report names in the Interactive performance analysis with + Monitor III, which is documented in the z/OS Resource Measurement Facility Report Analysis.

    You can view reports on the Grafana dashboard only + for the resource types SYSPLEX and + MVS_IMAGE.
  • +

+

Examples:

+ SYSPLEX.REPORT.CACHSUM + SYSPLEX.REPORT.CPC +
+
+
+ <ph class="- topic/ph topic/title-wrapper ">RMF Variable Query syntax</ph> + Variables are a powerful tool to create more interactive and dynamic dashboards. They + offer a way to replace hard-coded values in metric queries and panel titles with + placeholders for values. + +

Variables make it easy to change the data displayed in your dashboard simply by selecting + a value from the drop-down list at the top. Using variables in your dashboard simplifies + maintenance, particularly if you have multiple identical data sources. Instead of + creating separate dashboards for each data source, you can create one dashboard and use + variables to change what you are viewing.It's important to note that variables don't have a default value. Each variable + drop-down list in Dashboard settings displays the variable list in the order it + appears.

+

You can define a dashboard variable in Dashboard SettingsVariables using Grafana's RMF Variable Query syntax with and without a filter.

+
Syntax of the query without a filter

The + general syntax of the query without a filter is as follows:

SELECT + <COLUMN_NAME> FROM RESOURCE WHERE condition1 or + condition2 or + condition3

The + <COLUMN_NAME> is limited to label and + RESOURCE is limited to resource only and cannot be used + for other purposes.

Where:

    +
  • condition1: + ULQ=Value + and + TYPE=Value
  • +
  • condition2: + Name=Value + and + TYPE=Value
  • +
  • condition3: + Name=Value + and + ULQ=Value + and + TYPE=Value
  • +

Examples for condition1:

    +
  • select label from resource where + ulq="hostname of the + DDS" and + type="CHANNEL_PATH"
  • +
  • select label from resource where + ulq="hostname of the + DDS" and + type="ALL_CHANNELS"
  • +

Examples for condition2:

select + label from resource where + name="resource_name" and + type="SYSPLEX"

Examples + for condition3:

    +
  • select label from resource where + ulq="hostname of the + DDS" and + name="*" and + type="CHANNEL_PATH"
  • +
  • select label from resource where + ulq="hostname of the + DDS" and + name="*" and + type="ALL_CHANNELS"
  • +

+
+ Syntax of the query with a filter +

The general syntax of the RMF query with a filter is as follows:

+

SELECT <COLUMN_NAME> FROM RESOURCE WHERE + condition

+

Where condition is + Name=Value and + ULQ=Value and + TYPE=Value and + Filter= + Value

+

Examples for condition:

+

select label from resource where + name="resource_name" + and type="SYSPLEX" and + filter="MVS_IMAGE"

+
+ +

To learn how to effectively add and manage variables of your choice in Grafana, you + can refer to the Grafana documentation.

+
+
+
+ <ph class="- topic/ph topic/title-wrapper ">Introduction to Alerts</ph> + + Alerts + + Grafana Alerting feature provides a reliable solution to detect and respond to system + issues in real time. + +

Through Grafana monitoring capabilities, you can keep track of incoming metrics data and + configure the alerting system to detect specific events or circumstances. When the + system identifies any issues, it automatically sends notifications to ensure that you + are up to date. With Grafana Alerting, you can eliminate the need for manual monitoring + and control system outages that could lead to significant incidents.

+

For more information about configuration of alerts and contact points, refer to the Grafana documentation.

+ +
+
+ <ph class="- topic/ph topic/title-wrapper ">Historical data collection</ph> + + Historical data + + In Grafana, you can view historical data using absolute and relative time + ranges. + +
+

Viewing historical data is a common practice across organizations for various + purposes. The importance and use of historical data are significant in + decision-making, research, analysis, and planning. Analyzing historical data + provides valuable insights into the status, usage, performance, and health of + various resources.

+

You can also access cached metric data for queries, data sources, and timestamp + combinations that have already viewed by other user on Grafana. This means that if + any user requests metrics data for the same query, datasource, and timestamp, the + cached data can be displayed faster than a service call from DDS. If data for a + particular timestamp is not found in the cache, it will be fetched by a service call + from DDS. This feature can save you time and provide a faster experience accessing + metric data.

+ When you view data over extended time ranges, + the system may require considerable CPU resources on the host. + + + + +
+
+
+ <ph class="- topic/ph topic/title-wrapper ">Error reporting in the plugin</ph> + + Error types + + Whenever you encounter issues while using the IBM RMF for z/OS Grafana plugin, you can view detailed error messages + that contain sufficient information to help you identify and troubleshoot the + problem. + +

By viewing these error messages, you can quickly and efficiently troubleshoot any issues + you may encounter while using the IBM RMF for z/OS Grafana + plugin.

+

The errors that can occur vary in severity and are classified into different types as + described in the following table: + + Type + Error Code + Description + + + Severe + S + A critical error has arisen that will cause the task you are currently + performing to terminate immediately.

It is essential to take necessary + measures to prevent such errors to ensure the smooth functioning of the + IBM RMF for z/OS Grafana plugin.

+ + + Eventual Action + E + An error of a transient nature has arisen but can be resolved with an + action by the user. + + + Warning + W + Receiving a warning message from the IBM RMF for z/OS Grafana plugin is not indicative of an + error within the application. + + + Information + I + An information message informs the users about changes or updates in + the IBM RMF for z/OS Grafana plugin.

You need not + take any action in response, but it's essential to stay up-to-date and + be aware of these updates.

+
+

+

When an error occurs, it is assigned a unique Error ID that can help quickly identify the + root cause of the issue by referring to the log file. The Error ID is a combination of + 10 characters comprising lower and upper case alphabets.

+

In case of any problems with the Distributed Data Server (DDS), you can identify the issues by looking + into DDS-specific errors, which will be + displayed without any modifications. The messages issued by the Distributed Data Server are documented in the Distributed Data Server messages - GPM topic + in the z/OS Resource Measurement Facility Messages and Codes.

+

The following are the examples of error messages that you may encounter while using the + IBM RMF for z/OS Grafana plugin:

+

+ DDS_error +

+

+ Error_plugin +

+ To diagnose the issue from the docker logs of the IBM RMF for z/OS Grafana plugin, you can run the following command: + docker logs <container_name> 2>&1 | grep "<unique error code shown in the error message>" +
+
+ <ph class="- topic/ph topic/title-wrapper ">Troubleshooting issues</ph> + This section guides how to analyze and address typical issues that may arise when + using the IBM RMF for z/OS Grafana plugin. + +
+

This article is regularly updated with the latest information on discovering and + solving issues that may arise. You can search through the article to find the + precise information you need.

+

You can open a case by navigating to IBM support if you cannot find any + solutions for the issue you encountered. Before opening a case, gather all the + required information and provide the details to IBM support for further + investigation.

+

The following table describes the details of issues and the resolutions you can apply + to fix the problems:

+ + + + + + + + Issues + Cause + Resolutions + + + + + RMF Time Series dashboards do not plot the Monitor 3 metrics + data, whereas RMF Reports and RMF Charts dashboards plot + correctly. + The proxy settings configured by your network administrator block + web socket connections from the Grafana server. + The IBM RMF for z/OS Grafana plugin streams time series data to the clients through web socket connections. + Unblocking web sockets and configuring the appropriate proxy + settings is necessary to ensure that web sockets with the name + "ws" in the URI work correctly with + the IBM RMF for z/OS Grafana + plugin.You can contact your network administrator to modify the proxy configuration settings. + + + +
+
+
+
+ <ph class="- topic/ph topic/title-wrapper ">Grafana through <ph class="- topic/ph ">IBM z/OS Management Facility</ph></ph> + + Grafana through z/OSMF + + When you use IBM z/OS Management Facility to monitor the + performance of the z/OS sysplexes in your environment, you can also access Grafana + dashboards from z/OSMF. + +

You must complete certain tasks to access Grafana through z/OSMF. The following table lists the task flows + to access Grafana from z/OSMF: + + + + + + Tasks + More information + + + + + Complete the tasks provided in the Prerequisites topic. + Prerequisites for accessing Grafana dashboards on z/OSMFBefore you can start working with Grafana dashboards through z/OSMF, there are some prerequisites that you need to complete. + + + Install the RMF for z/OS plugin on Grafana. + Installing the RMF for z/OS plugin on GrafanaYou must install the IBM RMF for z/OS Grafana plugin to analyze and visualize RMF Monitor III metrics and reports. + + + Define Grafana servers as target systems. + Defining the Grafana serverYou must define the Grafana server as a target system in z/OSMF to access Grafana from the Resource Monitoring page of z/OSMF. + + + Access Grafana dashboards + Accessing the Grafana dashboardYou can access the Grafana dashboard from the Resource Monitoring page of z/OSMF to investigate the RMF Monitor III metrics and reports. + + + +

+
+ + <ph class="- topic/ph topic/title-wrapper ">Prerequisites for accessing Grafana dashboards on <ph class="- topic/ph ">z/OSMF</ph></ph> + + Prerequisites + + Before you can start working with Grafana dashboards through z/OSMF, there are some prerequisites that you need to + complete. + +

The following sections describe each prerequisite in detail:

+
+ Configure <ph class="- topic/ph ">z/OSMF</ph> +

When installing z/OS, z/OSMF is automatically + installed as a fundamental component of the operating system. However, to use its + features, you must configure the z/OSMF + nucleus on your system and add core and optional services. This enables you to take + advantage of the many benefits that z/OSMF + offers. For more information, refer to the z/OS Management Facility Configuration Guide.

+
+
+ Install Grafana +

You must install Grafana v9.5.1 or later.

+

For more information, refer to the Grafana documentation for detailed + instructions on installing Grafana and its dependencies and starting the Grafana + server on your system.

+
+
+ User administration +

You must review the default user management settings provided by the Grafana server + to determine if you need any additional permissions to be added for the users.

+ +

For more information, refer to the User Management section of the Grafana + documentation.

+
+
+ Configure JSON Web Token (JWT) support on <ph class="- topic/ph ">z/OSMF</ph> +

You must configure the z/OSMF server to build + and use JSON Web Token (JWT) tokens. Because, by default, the JWT function is turned + off on the z/OSMF server. You can turn on the + JWT authentication by modifying the server's configuration files directly. Once + enabled, the JWT function allows you to use JWT tokens to authenticate and authorize + user access to the Grafana through the z/OSMF + server.

+

When configuring z/OSMF JWK files, it is + essential to use the jwksUri parameter. This parameter + specifies a URL for the JSON Web Key service, which is necessary for building the + JWK files.

+

The format of the jwksUri parameter is as follows:

+

https://${hostname}:${port}/jwt/ibm/api/zOSMFBuilder/jwk

+

For example, if your z/OSMF server is running + on https://abc.com:12345, then the value of jwksUri + is:

+

https://abc.com:12345/jwt/ibm/api/zOSMFBuilder/jwk

+

Where,

    +
  • abc is the hostname where the z/OSMF server runs.
  • +
  • 12345 is the port number.
  • +

+

You must save the content of jwksUri as the + jwks.json file and place it in the following directory:

+

/PATH/TO/jwks.json

+

For information about enabling the JWT function, refer to the z/OS Management Facility Configuration Guide.

+
+
+ Configure JWT authentication on Grafana +

You must configure Grafana to accept a JWT token in the HTTP header. You can also + verify the token's validity using a JSON Web Key Set (JWKS) stored in a local + file.

+

As a system administrator, when you install Grafana, you can pass values for some of + the individual parameters in the .ini configuration file to + configure JWT authentication on Grafana. See Grafana configuration parametersYou can find the information about parameters you can use during the configuration of JWT authentication on Grafana..

+

The default location of the configuration file is as follows: + + Operating systems + Default path to the configuration file + + + Windows + WORKING_DIR/conf/defaults.ini + + + Linux + /etc/grafana/grafana.ini + + + macOS + /usr/local/etc/grafana/grafana.ini + +

+
+ + + <ph class="- topic/ph topic/title-wrapper ">Grafana configuration parameters</ph> + You can find the information about parameters you can use during the configuration of + JWT authentication on Grafana. + +

The following table lists the minimum parameters that you must configure to enable JWT + authentication on Grafana:

+ + + + + + + + + Section + Parameters + Description + Values to be configured for z/OSMF + + + + + [auth.jwt] + enabled + Use this parameter to allow JWT to authenticate on the Grafana + server.The default value is set to true. + true + + + enable_login_token + Upon successful authentication proxy header validation, this + parameter provides the user with a login + token.The default value is set to false. + true + + + header_name + Use this parameter to specify the header's name that holds a + token.The default value is set to X-JWT-Assertion. + X-Forwarded-Access-Token + + + username_claim + Use this parameter to identify the user. + The sub claim is mandatory and needs to be present in a JWT, and it should mention the subject of the JWT.The default value is also set to sub. + sub + + + jwk_set_file + Use this parameter to verify the token with a JSON Web Key Set loaded + from a JSON file. + /PATH/TO/jwks.json + + + cache_ttl + Use this parameter to establish the duration for caching data + retrieved from the HTTP endpoint. + This parameter enables the user to store the data for a specified period, allowing for faster access and retrieval of information.The default value is set to 60m (minutes). + 60m + + + expect_claims + Use this parameter to verify the validity of other claims that + contain JSON-encoded information. + When it comes to validation, only the exp, nbf, and iat claims are automatically checked by default.You must validate if you are using other claims such as iss, sub, aud, and jti. + {"iss": "zOSMF"} + + + auto_sign_up + Use this parameter to automatically create user profiles in Grafana + using the TSO ID of z/OSMF for users who do not have + user profiles in the Grafana + server.The default value is set to false. + true + + + url_login + Use this parameter to enable JWT authentication in the URL. + The default value is set to false. + true + + + [server] + protocol + Use this parameter to configure z/OSMF to work over + HTTPS.When you configure z/OSMF to work over HTTPS, it is recommended to configure Grafana to also work over HTTPS. This ensures the secure data transfer between the user's web browser and the Grafana server.The default value is set to http. + https + + + cert_file + Use this parameter to specify the path to the certificate file when + the protocol parameter is set to https or + h2. + /PATH/TO/certificate.crt + + + cert_key + Use this parameter to specify the path to the certificate key file + when the protocol parameter is set to https + or h2. + /PATH/TO/privateKey.key + + + [Security] + cookie_secure + Use this parameter if you hosted the Grafana instance over + HTTPS.The default value is set to false. + true + + + cookie_samesite + Use this parameter to prevent the browser from sharing cookies with + other + websites.The default value is set to lax. + disabled + + + allow_embedding + Use this parameter to enable web browsers to display Grafana within + z/OSMF HTML <frame>, + <iframe>, <embed>, or <object> element. + The default value is set to false. + true + + + +
+

For more information about customizing the Grafana instance by modifying the parameters + in the configuration file, refer to the following sections in the Grafana + documentation.

+
    +
  • Configure JWT authentication
  • +
  • Configure Grafana
  • +
+ +
+ <ph class="- topic/ph topic/title-wrapper ">Defining the Grafana server</ph> + You must define the Grafana server as a target system in z/OSMF to access Grafana from the Resource + Monitoring page of z/OSMF. + + You must have completed the following tasks:
    +
  • Completed the tasks provided in the Prerequisites section. See Prerequisites for accessing Grafana dashboards on z/OSMFBefore you can start working with Grafana dashboards through z/OSMF, there are some prerequisites that you need to complete..
  • +
  • Installed the IBM RMF for z/OS Grafana plugin. See Installing the RMF for z/OS plugin on GrafanaYou must install the IBM RMF for z/OS Grafana plugin to analyze and visualize RMF Monitor III metrics and reports..
  • +
+ + + Enter the URL of z/OSMF in a web browser. + + + Log in to z/OSMF if + you are not already logged in. + + + Double-click System Status. + + + Click Add Entry from the Actions + drop-down list. + + + Perform the following steps to add details about the Grafana server: + + + Enter a name for the Grafana server in the Resource + name field. + The Resource name is the required field, and + you must provide a unique name. The Resource name + can contain up to 24 characters including + alphanumeric characters (A-Z, + a-z, and + 0-9) and special characters + (@ # $). You must note that the Resource name is not + case sensitive. Therefore, the entries with similar names but + different capitalization, such as SYS1 + and Sys1 are considered as identical by + the system. + + + Enter the host name or IP address of the Grafana server that you want + to access in the Host name or IP address + field. + The host name or IP address can contain up to + 4000 characters. + + + Select Grafana from the Target system + type drop-down list. + + + Select the Use HTTPS checkbox to enable secure + communication. + + + Enter the port number where the Grafana server is hosted in the + Port field. + +

The Port is the required field, and the + default port number is set to 3000.

+ Alternatively, you can use + up-down controls to specify the port + number. +
+
+
+
+ + Click OK. + +
+ You have defined the Grafana server as the target + system. + You can perform the following tasks:
    +
  • Modify or Remove the Grafana server by clicking the + Action drop-down menu from the System + Status page.
  • +
  • Access Grafana dashboards. See Accessing the Grafana dashboardYou can access the Grafana dashboard from the Resource Monitoring page of z/OSMF to investigate the RMF Monitor III metrics and reports..
  • +
+
+
+ <ph class="- topic/ph topic/title-wrapper ">Accessing the Grafana dashboard</ph> + You can access the Grafana dashboard from the Resource + Monitoring page of z/OSMF to + investigate the RMF Monitor III metrics and reports. + + You must have defined the Grafana server in z/OSMF. See Defining the Grafana serverYou must define the Grafana server as a target system in z/OSMF to access Grafana from the Resource Monitoring page of z/OSMF.. + + + Enter the URL of z/OSMF in a web browser. + + + Log in to z/OSMF if + you are not already logged in. + + + Double-click Resource Monitoring. + + + Select the Grafana server that you want to access from the drop-down + list. + + + Click OK. + + + You have accessed Grafana from z/OSMF. + You can perform the following tasks:
    +
  • View the dashboards by navigating to AppsIBM RMFDashboards.
  • +
  • Add a RMF data source to fetch data from Distributed Data Servers (DDS). See Creating RMF data + sourcesTo access RMF Monitor III metrics in Grafana, you need to connect to the Distributed Data Server (DDS) by adding an RMF data source..
  • +
+
+
\ No newline at end of file diff --git a/grafana/rmf-app/doc/src/pdf/rmf_grafana.pdf b/grafana/rmf-app/doc/src/pdf/rmf_grafana.pdf index 4e4cd1f0..171c79a4 100644 Binary files a/grafana/rmf-app/doc/src/pdf/rmf_grafana.pdf and b/grafana/rmf-app/doc/src/pdf/rmf_grafana.pdf differ diff --git a/grafana/rmf-app/doc/src/pdf/rmf_grafana.style.xml b/grafana/rmf-app/doc/src/pdf/rmf_grafana.style.xml new file mode 100644 index 00000000..00661d35 --- /dev/null +++ b/grafana/rmf-app/doc/src/pdf/rmf_grafana.style.xml @@ -0,0 +1,2386 @@ + | | Page Page | | | | + + + + + + + + + + + + + + + IBM RMF for z/OS Grafana Plugin User Guide + + +
+
+
+
+
+
IBM + RMF for z/OS Grafana Plugin User Guide
+
+
+
ContentsContents
+
IBM RMF for z/OS Grafana Plugin User + Guide
+
+
.
+
+
.
Grafana is a platform for monitoring and visualizing + data. It enables users to create, explore, and share + dashboards that are interactive and customizable. The +
IBM
RMF for z/OS Grafana + plugin provides effortless analysis and visualization of +
Resource Measurement Facility for z/OS
(
RMF for + z/OS
) Monitor III metrics and reports within + the Grafana platform. Thereby, you can monitor and + analyze the health and performance of + applications.
+
+
+
.
This article covers the new features, system + requirements, and known issues of the
IBM
+ RMF for z/OS Grafana plugin.
+
+
+
.
You + must install the
IBM
RMF for z/OS Grafana + plugin to analyze and visualize RMF Monitor III metrics + and reports.
+
+
+
.
You + must ensure that the
IBM RMF for z/OS Grafana
+ plugin is up to date to leverage its enhanced + functionalities. You can do so by either installing or + upgrading to the latest version of the + plugin.
+
+
+
.
To + access RMF Monitor III metrics in Grafana, you need to + connect to the
Distributed Data Server
+ (
DDS
) by adding an RMF data + source.
+
+
+
.
IBM
RMF for z/OS Grafana is + a plugin provides custom panels for the RMF data source + and master dashboard that consists of RMF Charts, RMF + Reporting, and RMF Time Series dashboards.
+
+
+
.
By + adding panels to dashboards, you can effectively present + your RMF data in a visual format. Each panel must + require at least one query to display a significant + visualization.
+
+
+
.
In + Grafana, queries are essential for fetching and + transforming data from RMF data sources.
+
+
+
.
Variables are a powerful tool to create more + interactive and dynamic dashboards. They offer a way to + replace hard-coded values in metric queries and panel + titles with placeholders for values.
+
+
+
.
Grafana Alerting feature provides a reliable solution + to detect and respond to system issues in real + time.
+
+
+
.
In + Grafana, you can view historical data using absolute and + relative time ranges.
+
+
+
.
Whenever you encounter issues while using the
IBM RMF for + z/OS Grafana
plugin, you can view detailed + error messages that contain sufficient information to + help you identify and troubleshoot the + problem.
+
+
+
.
This section guides how to analyze and address typical + issues that may arise when using the
IBM
+ RMF for z/OS Grafana plugin.
+
+
+
.
When you use
IBM
z/OS Management + Facility to monitor the performance of the z/OS + sysplexes in your environment, you can also access + Grafana dashboards from
z/OSMF
.
+
+
.
Before you can start working with Grafana + dashboards through
z/OSMF
, there are some + prerequisites that you need to complete.
+
+
+
+ +
You can find the information + about parameters you can use during the + configuration of JWT authentication on + Grafana.
+
+
+
+
+
.
You must define the Grafana server as a target + system in
z/OSMF
to access Grafana + from the
Resource + Monitoring
page of
z/OSMF
.
+
+
+
.
You can access the Grafana dashboard from the
Resource + Monitoring
page of
z/OSMF
to investigate the RMF Monitor III + metrics and reports.
+
+
+
+
+
+

- | - . IBM RMF for z/OS Grafana Plugin

+
+

| - . OverviewVisualization of RMF Monitor III + metrics in Grafana

+
+ +
+
+

Grafana is a + platform for monitoring and visualizing data. It enables + users to create, explore, and share dashboards that are + interactive and customizable. The IBM® RMF for z/OS + Grafana plugin provides effortless analysis and + visualization of Resource Measurement Facility for + z/OS (RMF for z/OS) Monitor III + metrics and reports within the Grafana platform. Thereby, + you can monitor and analyze the health and performance of + applications.

+
The IBM RMF for z/OS Grafana + plugin provides the following features:
    +
  • You + can choose various visualization options, such as + graphs, charts, panels, and reports, to help you + understand your data's trends, patterns, and + variances.
  • +
  • You + can create dynamic and engaging dashboards by + piecing together various panels, each displaying a + unique visualization.
  • +
  • You + have the freedom to customize each panel based on + your requirements, including its appearance, size, + and the data queries it displays.
  • +
  • Grafana supports integration with numerous data + sources, which helps you fetch data from various + Distributed Data Servers (DDS) and display it in a unified + dashboard.
  • +
  • You + can set up alerts based on specific conditions or + thresholds in your RMF data. Grafana can trigger + notifications via email or other communication + channels when these conditions are met.
  • +
  • You + can define a dashboard variable to change the RMF + data displayed in your dashboard simply by selecting + a value from the drop-down list at the top.
  • +
+
+
+
+

| - . Release notes

+
+

This article + covers the new features, system requirements, and known + issues of the IBM® RMF for z/OS Grafana plugin.

+
+

What's + new

+
+
May 2025 v1.0.9
+
+
    +
  • +

    IBM RMF + for z/OS Grafana plugin has been enhanced + to optimize the step size when querying and + displaying time series data, based on the selected + time range and panel size. This enhancement + ensures that panels display the required number of + data points.

    +
  • +
  • +

    A bug + has been fixed that was causing specific data + points to be dropped from time series views, + resulting in a flat line in the graphs.

    +
  • +
  • +

    Fixed + internally found defects.

    +
  • +
+
+
+
+
+
+
April 2025 v1.0.8
+
+
    +
  • +

    A new + option, Compression, has been added to the data + source creation process. This option enables the + RMF data source to request HTTP compression from + the Data Distributed Server (DDS) during data + retrieval, which improves the efficiency of data + transfer. See Creating RMF data + sources (on page ).

    +
  • +
  • +

    Fixed + certain scenarios of missing data within + dashboards for time series visualizations.

    +
  • +
  • +

    Fixed + internally found defects.

    +
  • +
+
+
November 2024 v1.0.7
+
+

Fixed internally found + defects.

+
+
October 2024 v1.0.6
+
+
    +
  • +

    The + IBM RMF for z/OS Grafana plugin now allows + customizing banner and caption fields in IBM RMF + Report visualizations.

    +
  • +
  • +

    After + you modify any IBM + RMF data source and save the changes, you + no longer need to re-enter the password.

    +
  • +
  • +

    Improved + performance.

    +
  • +
  • +

    Fixed + internally found defects.

    +
  • +
+
+
+
+
+
+
August 2024 v1.0.5
+
+
    +
  • +

    When + creating the datasource, you now have the option + to specify the desired cache size in megabytes for + the datasource.

    +
  • +
  • +

    Fixed + internally found defects.

    +
  • +
  • +

    The + topic of Creating RMF data + sources (on page ) + has been updated per the new UI changes.

    +
  • +
+
+
June 2024 v1.0.4
+
+
    +
  • +

    The user + interface for creating the datasource has been + enhanced to improve the user experience.

    +
  • +
  • +

    Fixed + internally found defects.

    +
  • +
  • +
    The following dashboards are + updated:
      +
    • Common Storage Activity (Timeline)
    • +
    • Common Storage Activity
    • +
    • Coupling Facility Overview (Timeline)
    • +
    • Coupling Facility Overview
    • +
    • Execution Velocity (Timeline)
    • +
    • Execution Velocity
    • +
    • General Activity (Timeline)
    • +
    • General Activity
    • +
    • Overall Image Activity (Timeline)
    • +
    • Overall Image Activity
    • +
    • Performance Index (Timeline)
    • +
    • Response Time (Timeline)
    • +
    • Response Time
    • +
    • XCF Activity (Timeline)
    • +
    • XCF Activity
    • +
    Note: You must + re-import the dashboards to utilize the latest + enhancements in the dashboards.
    +
  • +
  • +
    The documentation updates for + v1.0.4 include the following changes:
    +
  • +
+
+
February 2024 v1.0.3
+
+
    +
  • +

    Fixed + specific issues related to the support of Grafana + v10.x.x.

    +
  • +
  • +

    Fixed + empty settings issue for IBM RMF data source + defined via Home / Apps / IBM RMF page.

    +
  • +
  • +

    Fixed + internally found defects.

    +
  • +
  • +
    The documentation updates for + v1.0.3 include the following changes:
    +
  • +
+
+
December 2023 v1.0.2
+
+
    +
  • +

    Support + spaces in Datasource name.

    +
  • +
  • +

    Fixed + internally found defects.

    +
  • +
+
+
November 2023 v1.0.1
+
+
    +
  • +

    Resolved + security issues in dependencies.

    +
  • +
  • +

    Fixed + internally found defects.

    +
  • +
+
+
November 2023 v1.0.0
+
+

The + first release of the IBM RMF for z/OS + Grafana plugin is in the following GitHub + repository: https://github.com/IBM/RMF.

+
+
+
+
+

Requirements

+
You must have the following + software to use the IBM RMF for z/OS Grafana + plugin:
    +
  • Resource Measurement Facility for z/OS + 3.1
  • +
  • Distributed Data Server
  • +
  • IBM RMF for z/OS Grafana plugin 1.0.x
  • +
  • Grafana 9.5.1 or later
  • +
+
+
+
+
+

| - . Installing the pluginInstalling the RMF for z/OS plugin on + Grafana

+
+ +
+
+

You must install + the IBM® RMF for z/OS Grafana plugin to + analyze and visualize RMF Monitor III metrics and + reports.

+
+
+

Before you begin

+
+
You must have completed the + following tasks:
    +
  • Installed RMF for z/OS + 3.1 + DDS and the functionality level must be + 3650 or higher.
  • +
  • Installed Grafana 9.5.1 or later.
  • +
You must be familiar working with Grafana.
+
+
+
+

Procedure

+
+
    +
  1. + Set the value of allow_loading_unsigned_plugins to ibm-rmf,ibm-rmf-datasource,ibm-rmf-report + in the [plugins] section of your custom + configuration file. +
    +
    The default configurations + for a Grafana installation are in the defaults.ini file. You can copy the default.ini file and rename it to custom.ini for customizing your Grafana + configuration. +

    The default location of the configuration file is as follows:

    + + + + + + + + + + + + + + + + + + + + + + + + + +
    Operating systemsDefault path to the + configuration file
    Windows®WORKING_DIR/conf/defaults.ini
    Linux®/etc/grafana/grafana.ini
    macOS®/usr/local/etc/grafana/grafana.ini
    +
    +
    Note: You can + use the GF_PLUGINS_ALLOW_LOADING_UNSIGNED_PLUGINS + environment variable to override allow_loading_unsigned_plugins.
    +
    +
  2. +
  3. + Choose any one of the methods + described in the following table to install the + RMF for z/OS plugin based on your + requirements: +
    +
    + + + + + + + + + + + + + + + + + + + + + +
    MethodsStep #
    Installing the RMF for z/OS plugin in + the Grafana stand-alone application.Perform steps 3 (on page ) + and 4 (on page ).
    Installing the RMF for z/OS plugin + along with Grafana within the Docker + environment.Perform steps 5 (on page ) + and 6 (on page ).
    +
    +
    +
  4. +
  5. + Run the following command to + install the plugin by using Grafana CLI: +
    +
    grafana cli --pluginUrl https://github.com/IBM/RMF/releases/download/ibm-rmf-grafana/v<version>/ibm-rmf-grafana-<version>.zip plugins install ibm-rmf
    +
    Remember: You + must replace the value of <version> for the pluginURL option to version number of the + plugin to be installed.
    +
    +
  6. +
  7. + Restart the Grafana server, + and then go to step 7 (on page ). +
  8. +
  9. + Run the following command to + create a volume for storing the Grafana + state: +
    +
    docker volume create rmf-grafana-data
    +
    +
  10. +
  11. + Run the following command to + create and run a container: +
    +
    docker run --name rmf-grafana --hostname rmf-grafana --detach --restart unless-stopped --volume rmf-grafana-data:/var/lib/grafana --publish 3000:3000 --env "GF_INSTALL_PLUGINS=https://github.com/IBM/RMF/releases/download/ibm-rmf-grafana/v<version>/ibm-rmf-grafana-<version>.zip;ibm-rmf" --env "GF_PLUGINS_ALLOW_LOADING_UNSIGNED_PLUGINS=ibm-rmf,ibm-rmf-datasource,ibm-rmf-report" <image>
    +
    Remember: You + must replace the values of the following options + in the command:
      +
    • <version> for the env option to the version number of the + plugin to be installed.
    • +
    • <image> to the version of the Grafana + image to be used.
    • +
    +
    Note: + zCX/zLinux images are available at Container Images for IBM Z and + LinuxONE. + Similarly, images of other required platforms are + available at Docker + Hub.
    +
    +
  12. +
  13. + To enable the RMF for + z/OS plugin on the Grafana UI, you must + perform the following sub-steps: +
      +
    1. + Enter the URL of Grafana in + your web browser. +
    2. +
    3. + Enter the username and + password of Grafana on the sign-in page. +
    4. +
    5. + Go to Administration > + Plugins. +
      +
      Note: The + navigation of the user interface can differ based + on the Grafana version that is currently + installed.
      +
      +
    6. +
    7. + Enter RMF in the Search bar on the Plugins page. +
    8. +
    9. + Click IBM + RMF in the search results. +
    10. +
    11. + Click Enable. +
      +
      Note: After + you install the IBM RMF for z/OS + Grafana plugin, when you open IBM RMF on + the Plugins page of Grafana UI, an Invalid plugin + signature warning message is + displayed.
      +
      +
    12. +
    +
  14. +
  15. Optional: + Verify the signature of the + IBM RMF Grafana plugin, which is signed with the + GPG key, by performing the following + sub-steps: +
      +
    1. + Download the PUBLIC_KEY.asc (GPG public key) + file. + +
    2. +
    3. + Follow the instructions in + the Importing a public + key + section of the GPG user guide. +
    4. +
    5. + Download the IBM RMF + for z/OS Grafana plugin (ibm-rmf-grafana-x.y.z.zip) and signature + file (ibm-rmf-grafana-x.y.z.zip.asc) from https://github.com/IBM/RMF/releases. +
    6. +
    7. + Run the following command to + verify the signature: +
      +
      gpg --verify ibm-rmf-grafana-x.y.z.zip.asc ibm-rmf-grafana-x.y.z.zip
      +

      Where + x.y.z is the version number of the + IBM RMF for z/OS Grafana plugin.

      +

      For more + information, refer to the GPG + user guide.

      +
      +
    8. +
    +
  16. +
+
+
+

Results

+
You have installed the IBM RMF for + z/OS Grafana plugin. You can find the IBM + RMF plugin listed under the Apps + section.

+
+

What to do next

+
You can add an RMF data source to fetch data from + Distributed Data Servers + (DDS). See Creating RMF data + sources (on page ).
+
+ +
+
+

| - . Upgrading the pluginUpgrading the RMF for z/OS plugin on + Grafana

+
+ +
+
+

You must ensure + that the IBM RMF for z/OS Grafana plugin is up to date to + leverage its enhanced functionalities. You can do so by + either installing or upgrading to the latest version of the + plugin.

+
+

About this task

+
The upgrade procedures differ based on the environment + you used to install the Grafana server.
+ + + + + + + + + + + + + + + + + + + + + +
MethodsStep #
Upgrading the plugin in the Grafana stand-alone + application.Perform steps 1 (on page ) + to 3 (on page ).
Upgrading the plugin in the Grafana within the + Docker environment.Perfrom steps 4 (on page ) + to 7 (on page ).
+
+
+
+

Procedure

+
+
    +
  1. + Stop the Grafana + server. +
  2. +
  3. + Run the following command to + upgrade the plugin by using Grafana CLI: +
    +
    grafana cli --pluginUrl https://github.com/IBM/RMF/releases/download/ibm-rmf-grafana/v<version>/ibm-rmf-grafana-<version>.zip plugins install ibm-rmf
    +
    Note: You must + replace the value of <version> for the pluginURL option with the plugin's version + number to be upgraded. +

    For example, if you want to install the v1.0.3 version of the plugin, the value of pluginURL is https://github.com/IBM/RMF/releases/download/ibm-rmf-grafana/v1.0.3/ibm-rmf-grafana-1.0.3.zip.

    +
    +
    The CLI tool downloads the + mentioned version of the plugin and replaces the + existing files.
    +
  4. +
  5. + Restart the Grafana server, + and then go to step 7 (on page ). +
  6. +
  7. + Run the following command to + stop the docker container: +
    +
    docker stop rmf-grafana
    +

    Where + rmf-grafana is the name of the + container.

    +
    +
  8. +
  9. + Run the following command to + remove the docker container: +
    +
    docker rm rmf-grafana
    +
    +
  10. +
  11. + Run the following command to + upgrade the plugin by creating and running a + container: +
    +
    docker run --name rmf-grafana --hostname rmf-grafana --detach --restart unless-stopped --volume rmf-grafana-data:/var/lib/grafana --publish 3000:3000 --env "GF_INSTALL_PLUGINS=https://github.com/IBM/RMF/releases/download/ibm-rmf-grafana/v<version>/ibm-rmf-grafana-<version>.zip;ibm-rmf" --env "GF_PLUGINS_ALLOW_LOADING_UNSIGNED_PLUGINS=ibm-rmf,ibm-rmf-datasource,ibm-rmf-report" <image>
    +
    Remember: You + must replace the values of the following options + in the command:
      +
    • <version> for the env option to the version number of the + plugin to be upgraded.
    • +
    • <image> to the version of the Grafana + image used.
    • +
    +
    +
  12. +
  13. + Perform the following + sub-steps to re-import the dashboards. +
    After upgrading the plugin to + a new version, it is essential to re-import the + dashboard. This ensures that you are utilizing the + most up-to-date features in the dashboards.
    Tip: You can + find the updated dashboards for each release by + referring to the CHANGELOG + of the plugin. You do not need to re-import all + the dashboards.
    +
      +
    1. + Enter the URL of Grafana in + your web browser. +
    2. +
    3. + Enter the username and + password of Grafana on the sign-in page. +
    4. +
    5. + Go to Administration > + Plugins. +
      +
      Note: The + navigation of the user interface can differ based + on the Grafana version that is currently + installed.
      +
      +
    6. +
    7. + Enter RMF in the Search bar on the Plugins page. +
    8. +
    9. + Click IBM + RMF in the search results. +
    10. +
    11. + Click Dashboards, and then click Re-import to re-import the + dashboards. +
    12. +
    +
  14. +
+
+
+

Results

+
You have updated the IBM RMF for + z/OS Grafana plugin.
+
+
+
+

| - . Creating RMF data sources

+
+

To access RMF + Monitor III metrics in Grafana, you need to connect to the + Distributed Data Server (DDS) + by adding an RMF data source.

+
+
+

Before you begin

+
+ +
+
+
+

Procedure

+
+
    +
  1. + Go to Apps > + IBM + RMF > + Add + RMF Data Source. +
    Alternatively, you can click + Administration > + Data + sources > + + Add + new data source, then search for the + IBM RMF to choose a data source type.
    Note: The + navigation of the user interface can differ based + on the Grafana version that is currently + installed.
    +
  2. +
  3. + Enter a name for the data + source in the Name field. +
  4. +
  5. Optional: + Set Default + + to ON to make the + added data source the default one. +
    +
    Note: When you + create new panels, the default data source is + preselected.
    +
    +
  6. +
  7. + Enter the details for the + following fields in the HTTP section: +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    FieldsAction
    DDS + URLEnter the URL of the DDS in this field.

    The + format of the URL is http://hostname:port_number[/path] or https://hostname:port_number[/path]

    Important: In + the DDS URL, the /path is optional, and you must + exclude it in the default network configuration. + However, it might be required in more advanced + setups, such as when DDS functions behind a + reverse proxy.
    TimeoutSpecify the duration, in seconds in this field, + for which Grafana is allowed to wait for a + connection to the DDS before it closes + the connection.

    The default value is 60.

    CompressionThis option is enabled by default, which means + that when RMF requests data from DDS, HTTP compression is utilized, + provided that the DDS is operating on a + maintenance level OA67541. The compression setting + is ignored if DDS is not at this + maintenance level.

    You can turn off HTTP + compression by setting the Compression option to OFF, resulting in + DDS data being always transferred in an + uncompressed format.

    +
    +
    +
  8. +
  9. Optional: + Set the Skip + TLS Verify option to ON if you are + accepting any certificate presented by the DDS and + any hostname listed in that certificate. However, + this practice is not considered secure and is + typically used in development or testing + environments. +
    +
    Note: By + default, the Skip + TLS Verify option is set to OFF.
    +
    +
  10. +
  11. + Set the Basic + Auth option to ON to create the + data source with basic authentication. +
  12. +
  13. + Enter the credentials of the + DDS in the User and Password fields. +
    +
    Note: The + User and Password fields are visible only when you + enable the basic authentication.
    +
    +
  14. +
  15. + Specify the size of the cache + (in MB) for the data source in the Size field. +
    +
    Remember: The + value must be greater than or equal to 128. The default + value is 1024.
    +
    +
  16. +
  17. + Click Save + & test. +
    The Data source is + working message is displayed if the + connection to DDS succeeds.
    +
  18. +
+
+
+

Results

+
You have added the RMF data source.
+
+
+

What to do next

+
+

You can refer + to the RMF master + dashboard (on page ) + topic for information about RMF master dashboard and its + features.

+
+
+
+
+

| - . RMF master dashboard

+
+

IBM® RMF for z/OS + Grafana is a plugin provides custom panels for the RMF data + source and master dashboard that consists of RMF Charts, RMF + Reporting, and RMF Time Series dashboards.

+

Grafana provides a + highly flexible and customizable dashboard consisting of one + or more rows and panels. You can use various pre-configured + panels to construct queries and tailor the visualization to + meet your requirements. This enables you to create a + personalized dashboard that seamlessly interacts with data + from a configured Distributed Data Server + (DDS). For more information about creating and + managing dashboards, refer to the Grafana + documentation.

+
When you install the RMF for z/OS + Grafana plugin for the first time, all the dashboards are + imported automatically. You can view the dashboards by + navigating to Apps > + IBM + RMF > + Dashboards. The following table lists + the dashboards available in RMF Charts, RMF Reporting, and + RMF Time Series dashboards:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 1. RMF master + dashboard (continued)
RMF Charts DashboardRMF + Reporting DashboardsRMF Time Series Dashboards
Common Storage + ActivityCACHDETDSNDPROCSYSINFOCommon Storage Activity + (Timeline)
Coupling Facility + OverviewCACHSUMEADMPROCUSYSRGCoupling Facility + Overview (Timeline)
Execution VelocityCFACTENCLAVESPACEDSYSSUMExecution Velocity + (Timeline)
General ActivityCFOVERENQSPACEGUSAGEGeneral Activity + (Timeline)
Overall Image + ActivityCFSYSHSMSTORXCFGROUPOverall Image Activity + (Timeline)
Performance IndexCHANNELIOQSTORCXCFOVWPerformance Index + (Timeline)
Response TimeCPCJESSTORCRXCFPATHResponse Time
Using & DelaysCRYOVWLOCKSPSTORFXCFSYSUsing & Delays + (Timeline)
XCF ActivityDELAYLOCKSUSTORMZFSFSXCF Activity + (Timeline)
Common Storage + ActivityDEVOPDSTORRZFSKNCommon Storage Activity + (Timeline)
+ DEVRPCIESTORSZFSOVW +
+
+

The dashboard + interface offers several customization options for data + presentation. The following is the image of the master + dashboard from the IBM RMF for z/OS Grafana + plugin:

+

default_dashboard_view

+

You can click the + import_dashboard + option when there is a new version of the plugin, and then + re-import the dashboard by clicking the reimport + icon. Similarly, if any of the dashboards is no longer + required, you can click the + icon to remove it from the master dashboard.

+

For more + information about available features in the Dashboard and + their descriptions, refer to the Grafana + documentation.

+
+
+
+

| - . Applying visualization to RMF + data

+
+

By adding panels + to dashboards, you can effectively present your RMF data in + a visual format. Each panel must require at least one query + to display a significant visualization.

+
+

Before you begin

+
You must have completed the + following tasks:
+
+
+

Procedure

+
+
    +
  1. + Identify the dashboard for + which you want to add visualization. +
  2. +
  3. + Perform one of the steps + described in the following table: +
    +
    + + + + + + + + + + + + + + + + + + + + + +
    Step descriptionStep #
    If there are no panels added to the + dashboardPerform step 3 (on page ).
    If at least one panel is added to the + dashboardPerform step 5 (on page ).
    +
    +
    +
  4. +
  5. + Click + Add + visualization to add visualization to your + data. +
    +
    Note: The + navigation of the user interface can differ based + on the Grafana version that is currently + installed.
    +
    +
    The Edit + panel is displayed.
    +
  6. +
  7. + Go to step 6 (on page ). +
  8. +
  9. + Click Add > + Visualization from the dashboard + header. +
    +

    +
    +
    The Edit + panel is displayed.
    +
  10. +
  11. + Enter a name for the panel in + the Title field. +
    Optionally you can also + provide a description for the panel that you are + creating.

    When you add the description + for the panel, a notification icon + is displayed after the Panel title, as shown in the following + image:

    +
  12. +
  13. + Select one of the + visualization types from the drop-down + menu: +
    +

    +

    You can + choose Report + for IBM RMF for z/OS or built-in Bar + chart Grafana visualization types from the + drop-down list.

    +
    +
  14. +
  15. + Click the Query tab, and then enter a query in the + query language of the RMF data source. +
    +
    Note: You can + click + + Query to add multiple queries.
    +
    +
  16. +
  17. + Click the Transformation tab, and then select a + transformation from the list. +
    Upon accessing the + transformation options, a dedicated row is + presented for configuration.
    Note: You can + click + Add + Transformation to add multiple + transformations to data.
    +
  18. +
  19. + Select the existing data + sources from the Data + source drop-down list. +
  20. +
  21. + Click the Time + Picker drop-down list to select relative + time range options and set custom absolute time + ranges. +
    +

    +
    +
  22. +
  23. + Click the Refresh dashboard + + icon to query the RMF data source. +
    Grafana provides you with a + preview of your query results along with the + corresponding visualization.
    +
  24. +
  25. Optional: + Click Apply to view your changes applied to the + dashboard. +
  26. +
  27. + Click Save, and then enter a note describing the + changes you have made. +
  28. +
  29. + Click Save to store the changes made to the + dashboard. +
  30. +
+
+
+

Results

+
You have applied visualization to the RMF + data.
+
+
+

What to do next

+
+

Grafana + provides a range of visualizations that cater to + different use cases. For more information about the + built-in panels, options, and typical usage, refer to + the Grafana + documentation.

+

You can also + configure the panel options based on your requirements. + For more information refer to the Grafana + documentation.

+

You can add + multiple transformation to your data. When there are + multiple transformations, Grafana applies them + sequentially. Each transformation produces a result set + that is passed on to the next transformation in the + pipeline. Grafana provides several ways that you can + transform data. For entire list of transformations, + refer to the Grafana + documentation.

+
+
+
+
+

| - . IBM RMF query languages

+
+

In Grafana, + queries are essential for fetching and transforming data + from RMF data sources.

+

Executing a query + is a process that involves defining the data source, + specifying the desired data to retrieve, and applying + relevant filters or transformations. IBM RMF for + z/OS Grafana plugin provides a user-friendly RMF + query editor that maximizes its unique capabilities. Grafana + panels retrieve data for visualization from RMF data sources + via queries.

+

You can use the + following types of queries to retrieve data from the + specified RMF data source:

+
    +
  • Metric + query – Use this query to retrieve RMF Monitor III + metrics.
  • +
  • Report + query – Use this query to retrieve RMF Monitor III + reports.
  • +
+
+

Metric + query syntax

+

The syntax of + the Metric query is as follows:

+

resource_type.metric_description {qualifications}

+
Where:
    +
  • resource_type is the type of + resource for which information is requested. You + must enter the appropriate value in the resource_type field.

    The + available resource types are documented in the z/OS RMF Monitor III resource + model + topic in the z/OS + Resource Measurement Facility Programmer's + Guide.

  • +
  • metric_description is the name of + the metric for the selected resource type.

    After + entering the resource type, you can choose the + metric description from the drop-down + list.

  • +
  • qualifications is an optional + parameter and can contain any or all the following + attributes separated by a comma:
      +
    • ulq: The name of the resource type + at the upper level.
    • +
    • name: The name of the resource.
    • +
    • filter: The filter helps to focus on + the data of your interest when requesting a list + of values.
      You can + use one of the following values for the filter attribute:
      +
      PAT=< pattern>
      +
      Specifies one or more patterns that must match + the name part of a list element.
      +
      LB=<number>
      +
      Specifies a lower bound value. Only list elements + with values higher than the given lower bound are + returned.
      +
      UB=<number>
      +
      Specifies an upper bound value. Only list + elements with values lower than the established + upper bound are returned.
      +
      HI=<integer>
      +
      Only + the highest <integer> list elements are + returned (mutually exclusive with LO).
      +
      LO=<integer>
      +
      Only + the lowest <integer> list elements are + returned (mutually exclusive with HI).
      +
      ORD=< NA | ND | VA | VD | NN>
      +
      +
        +
      • NA - Sort the list of names by their names in + ascending order.
      • +
      • ND – Sort the list of names by their names in + descending order.
      • +
      • VA – Sort the list of values by their values in + ascending order.
      • +
      • VD – Sort the list of values by their values in + descending order.
      • +
      • NN - If you do not want to have any order, you + can specify ORD=NN.
      • +
      +
      +
    • +
    • workscope: To qualify a request for + performance data in more detail about address + spaces and WLM entities. You can use one of the + following values for the workscope attribute:
        +
      • G - Global (no workscope required)
      • +
      • W - WLM workload
      • +
      • S - WLM service class
      • +
      • P - WLM service class period
      • +
      • R - WLM report class
      • +
      • J - Job
      • +
    • +
  • +
+

Examples:

+
SYSPLEX.% total physical utilization (AAP) by partition
+
COUPLING_FACILITY.% processor utilization
+
CPC.% total physical utilization (shared IIP)
+
MVS_IMAGE.% delay by WLM report class period {name=RS21}
+
MVS_IMAGE.% workflow by WLM report class period {ulq=RS21,name=RS2*,filter=ORD=NA,workscope=,,G}
+
+
+

Report + query syntax

+

The syntax of + the Report query is as follows:

+

resource_type.REPORT.report_name

+
Where:
    +
  • resource_type is the type of + resource for which information is requested. You + must enter the appropriate value in the resource_type field.
  • +
  • report_name is the name of the + report.

    You can + find the report names in the Interactive performance analysis with Monitor + III, + which is documented in the z/OS Resource Measurement + Facility Report Analysis.

    Note: You can + view reports on the Grafana dashboard only for the + resource types SYSPLEX and MVS_IMAGE.
  • +
+

Examples:

+
SYSPLEX.REPORT.CACHSUM
+
SYSPLEX.REPORT.CPC
+
+
+
+
+

| - . RMF Variable Query syntax

+
+

Variables are a + powerful tool to create more interactive and dynamic + dashboards. They offer a way to replace hard-coded values in + metric queries and panel titles with placeholders for + values.

+
Variables make it easy to change the + data displayed in your dashboard simply by selecting a value + from the drop-down list at the top. Using variables in your + dashboard simplifies maintenance, particularly if you have + multiple identical data sources. Instead of creating + separate dashboards for each data source, you can create one + dashboard and use variables to change what you are + viewing.
Important: It's + important to note that variables don't have a default + value. Each variable drop-down list in Dashboard + settings displays the variable list in the order it + appears.
+

You can define a + dashboard variable in Dashboard Settings > + Variables using Grafana's RMF + Variable Query syntax with and without a filter.

+

Syntax + of the query without a filter

The general syntax of the query + without a filter is as follows:

SELECT <COLUMN_NAME> FROM RESOURCE WHERE condition1 or condition2 or condition3

Note: The <COLUMN_NAME> is limited to label + and RESOURCE is limited to resource + only and cannot be used for other purposes.
Where:
    +
  • condition1: ULQ=Value + and + TYPE=Value
  • +
  • condition2: Name=Value + and + TYPE=Value
  • +
  • condition3: Name=Value + and + ULQ=Value + and + TYPE=Value
  • +
Examples for condition1:
    +
  • select label from resource + where ulq="hostname of the DDS" and type="CHANNEL_PATH"
  • +
  • select label from resource + where ulq="hostname of the DDS" and type="ALL_CHANNELS"
  • +

Examples for condition2:

select label from resource where + name="resource_name" and type="SYSPLEX"
Examples for condition3:
    +
  • select label from resource + where ulq="hostname of the DDS" and name="*" and type="CHANNEL_PATH"
  • +
  • select label from resource + where ulq="hostname of the DDS" and name="*" and type="ALL_CHANNELS"
  • +
+
+

Syntax + of the query with a filter

+

The general + syntax of the RMF query with a filter is as follows:

+

SELECT <COLUMN_NAME> FROM RESOURCE WHERE condition

+

Where condition is Name=Value and ULQ=Value and TYPE=Value and Filter= + Value

+

Examples for condition:

+

select label from resource where name="resource_name" and type="SYSPLEX" and filter="MVS_IMAGE"

+
+
+

To learn how + to effectively add and manage variables of your choice + in Grafana, you can refer to the Grafana + documentation.

+
+
+
+
+

| - . AlertsIntroduction to Alerts

+
+ +
+
+

Grafana Alerting + feature provides a reliable solution to detect and respond + to system issues in real time.

+

Through Grafana + monitoring capabilities, you can keep track of incoming + metrics data and configure the alerting system to detect + specific events or circumstances. When the system identifies + any issues, it automatically sends notifications to ensure + that you are up to date. With Grafana Alerting, you can + eliminate the need for manual monitoring and control system + outages that could lead to significant incidents.

+

For more + information about configuration of alerts and contact + points, refer to the Grafana + documentation.

+
+
+
+

| - . Historical dataHistorical data collection

+
+ +
+
+

In Grafana, you + can view historical data using absolute and relative time + ranges.

+
+

Viewing + historical data is a common practice across + organizations for various purposes. The importance and + use of historical data are significant in + decision-making, research, analysis, and planning. + Analyzing historical data provides valuable insights + into the status, usage, performance, and health of + various resources.

+

You can also + access cached metric data for queries, data sources, and + timestamp combinations that have already viewed by other + user on Grafana. This means that if any user requests + metrics data for the same query, datasource, and + timestamp, the cached data can be displayed faster than + a service call from DDS. If data for a particular + timestamp is not found in the cache, it will be fetched + by a service call from DDS. This feature can save you + time and provide a faster experience accessing metric + data.

+
CAUTION: When + you view data over extended time ranges, the system may + require considerable CPU resources on the host.
+
+
+
+
+

| - . Error typesError reporting in the + plugin

+
+ +
+
+

Whenever you + encounter issues while using the IBM RMF for z/OS Grafana + plugin, you can view detailed error messages that contain + sufficient information to help you identify and troubleshoot + the problem.

+

By viewing these + error messages, you can quickly and efficiently troubleshoot + any issues you may encounter while using the IBM RMF for + z/OS Grafana plugin.

+
The errors that can occur vary in + severity and are classified into different types as + described in the following table:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TypeError CodeDescription
SevereSA + critical error has arisen that will cause the task + you are currently performing to terminate + immediately.

It is essential to take + necessary measures to prevent such errors to + ensure the smooth functioning of the IBM RMF + for z/OS Grafana plugin.

Eventual Action EAn error of a transient nature has arisen but can + be resolved with an action by the user.
WarningWReceiving a warning message from the IBM RMF + for z/OS Grafana plugin is not indicative + of an error within the application.
InformationIAn information message informs the users about + changes or updates in the IBM RMF + for z/OS Grafana plugin.

You need + not take any action in response, but it's + essential to stay up-to-date and be aware of these + updates.

+
+

When an error + occurs, it is assigned a unique Error ID that can help + quickly identify the root cause of the issue by referring to + the log file. The Error ID is a combination of 10 characters + comprising lower and upper case alphabets.

+

In case of any + problems with the Distributed Data Server + (DDS), you can identify the issues by looking + into DDS-specific errors, which will be displayed + without any modifications. The messages issued by the Distributed + Data Server are documented in the Distributed Data Server messages - + GPM + topic in the z/OS + Resource Measurement Facility Messages and + Codes.

+

The following are + the examples of error messages that you may encounter while + using the IBM RMF for z/OS Grafana plugin:

+

DDS_error

+

Error_plugin

+
Tip: To diagnose the + issue from the docker logs of the IBM RMF for + z/OS Grafana plugin, you can run the following + command: +
docker logs <container_name> 2>&1 | grep "<unique error code shown in the error message>"
+
+
+
+

| - . Troubleshooting issues

+
+

This section + guides how to analyze and address typical issues that may + arise when using the IBM® RMF for z/OS Grafana plugin.

+
+

This article + is regularly updated with the latest information on + discovering and solving issues that may arise. You can + search through the article to find the precise + information you need.

+

You can open a + case by navigating to IBM + support + if you cannot find any solutions for the issue you + encountered. Before opening a case, gather all the + required information and provide the details to IBM + support for further investigation.

+

The following + table describes the details of issues and the + resolutions you can apply to fix the problems:

+
+ + + + + + + + + + + + + + + + + + + + +
+
IssuesCauseResolutions
RMF Time Series + dashboards do not plot the Monitor 3 metrics data, + whereas RMF Reports and RMF Charts dashboards plot + correctly.The proxy settings + configured by your network administrator block web + socket connections from the Grafana server. +

The IBM RMF for z/OS Grafana plugin streams time series data to the clients through web socket connections.

Unblocking web sockets + and configuring the appropriate proxy settings is + necessary to ensure that web sockets with the name + "ws" in the URI work + correctly with the IBM RMF for z/OS + Grafana + plugin.

You can contact your network administrator to modify the proxy configuration settings.

+
+
+
+
+
+

| - . Grafana through z/OSMFGrafana through IBM z/OS + Management Facility

+
+ +
+
+

When you use + IBM® z/OS Management Facility to monitor + the performance of the z/OS sysplexes in your environment, + you can also access Grafana dashboards from z/OSMF.

+
You must complete certain tasks to + access Grafana through z/OSMF. The following table + lists the task flows to access Grafana from z/OSMF:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
TasksMore + information
Complete the tasks + provided in the Prerequisites topic.Prerequisites for accessing Grafana dashboards on + z/OSMF (on page )
Install the RMF for z/OS + plugin on Grafana.Installing the RMF for z/OS plugin on + Grafana (on page )
Define Grafana servers as + target systems.Defining the Grafana + server (on page )
Access Grafana + dashboardsAccessing the Grafana + dashboard (on page )
+
+
+
+

. PrerequisitesPrerequisites for accessing Grafana + dashboards on z/OSMF

+
+ +
+
+

Before you + can start working with Grafana dashboards through z/OSMF, there are some prerequisites that + you need to complete.

+

The following + sections describe each prerequisite in detail:

+
+

Configure + z/OSMF

+

When + installing z/OS, z/OSMF is + automatically installed as a fundamental component + of the operating system. However, to use its + features, you must configure the z/OSMF nucleus on your system and add core + and optional services. This enables you to take + advantage of the many benefits that z/OSMF offers. For more information, refer + to the z/OS Management Facility + Configuration + Guide.

+
+
+

Install + Grafana

+

You must + install Grafana v9.5.1 or later.

+

For more + information, refer to the Grafana + documentation for detailed instructions on + installing Grafana and its dependencies and starting + the Grafana server on your system.

+
+
+

User + administration

+

You must + review the default user management settings provided + by the Grafana server to determine if you need any + additional permissions to be added for the + users.

+

For more + information, refer to the User + Management + section of the Grafana documentation.

+
+
+

Configure + JSON Web Token (JWT) support on z/OSMF

+

You must + configure the z/OSMF server to build + and use JSON Web Token (JWT) tokens. Because, by + default, the JWT function is turned off on the z/OSMF server. You can turn on the JWT + authentication by modifying the server's + configuration files directly. Once enabled, the JWT + function allows you to use JWT tokens to + authenticate and authorize user access to the + Grafana through the z/OSMF server.

+

When + configuring z/OSMF JWK files, it + is essential to use the jwksUri parameter. This parameter + specifies a URL for the JSON Web Key service, which + is necessary for building the JWK files.

+

The format + of the jwksUri parameter is as follows:

+

https://${hostname}:${port}/jwt/ibm/api/zOSMFBuilder/jwk

+

For + example, if your z/OSMF server is + running on https://abc.com:12345, + then the value of jwksUri is:

+

https://abc.com:12345/jwt/ibm/api/zOSMFBuilder/jwk

+
Where,
    +
  • abc is the hostname where the z/OSMF server runs.
  • +
  • 12345 is the port number.
  • +
+

You must + save the content of jwksUri as the jwks.json file and place it in the + following directory:

+

/PATH/TO/jwks.json

+

For + information about enabling the JWT function, refer + to the z/OS Management Facility + Configuration + Guide.

+
+
+

Configure + JWT authentication on Grafana

+

You must + configure Grafana to accept a JWT token in the HTTP + header. You can also verify the token's validity + using a JSON Web Key Set (JWKS) stored in a local + file.

+

As a + system administrator, when you install Grafana, you + can pass values for some of the individual + parameters in the .ini configuration file to configure JWT + authentication on Grafana. See Grafana configuration + parameters (on page ).

+
The default location of the + configuration file is as follows:
+ + + + + + + + + + + + + + + + + + + + + + + + + +
Operating systemsDefault path to the + configuration file
Windows®WORKING_DIR/conf/defaults.ini
Linux®/etc/grafana/grafana.ini
macOS®/usr/local/etc/grafana/grafana.ini
+
+
+
+
+

. Grafana configuration + parameters

+
+

You can find the information + about parameters you can use during the + configuration of JWT authentication on Grafana.

+

The + following table lists the minimum parameters that + you must configure to enable JWT authentication on + Grafana:

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
SectionParametersDescriptionValues to + be configured for z/OSMF
[auth.jwt]enabledUse this parameter to + allow JWT to authenticate on the Grafana + server.

The default value is set to true.

true
enable_login_tokenUpon successful + authentication proxy header validation, this + parameter provides the user with a login + token.

The default value is set to false.

true
header_nameUse this parameter to + specify the header's name that holds a + token.

The default value is set to X-JWT-Assertion.

X-Forwarded-Access-Token
username_claimUse this parameter to + identify the user. +

The sub claim is mandatory and needs to be present in a JWT, and it should mention the subject of the JWT.

The default value is also set to sub.

sub
jwk_set_fileUse this parameter to + verify the token with a JSON Web Key Set loaded + from a JSON file./PATH/TO/jwks.json
cache_ttlUse this parameter to + establish the duration for caching data retrieved + from the HTTP endpoint. +

This parameter enables the user to store the data for a specified period, allowing for faster access and retrieval of information.

The default value is set to 60m (minutes).

60m
expect_claimsUse this parameter to + verify the validity of other claims that contain + JSON-encoded information. +

When it comes to validation, only the exp, nbf, and iat claims are automatically checked by default.

You must validate if you are using other claims such as iss, sub, aud, and jti.

{"iss": + "zOSMF"}
auto_sign_upUse this parameter to + automatically create user profiles in Grafana + using the TSO ID of z/OSMF for users who do not have user + profiles in the Grafana + server.

The default value is set to false.

true
url_loginUse this parameter to + enable JWT authentication in the URL. +

The default value is set to false.

true
[server]protocolUse this parameter to + configure z/OSMF to work over + HTTPS.

When you configure z/OSMF to work over HTTPS, it is recommended to configure Grafana to also work over HTTPS. This ensures the secure data transfer between the user's web browser and the Grafana server.

The default value is set to http.

https
cert_fileUse this parameter to + specify the path to the certificate file when the + protocol parameter is set to https or h2./PATH/TO/certificate.crt
cert_keyUse this parameter to + specify the path to the certificate key file when + the protocol parameter is set to https or h2./PATH/TO/privateKey.key
[Security]cookie_secureUse this parameter if you + hosted the Grafana instance over + HTTPS.

The default value is set to false.

true
cookie_samesiteUse this parameter to + prevent the browser from sharing cookies with + other + websites.

The default value is set to lax.

disabled
allow_embeddingUse this parameter to + enable web browsers to display Grafana within + z/OSMF HTML <frame>, <iframe>, + <embed>, or <object> element. +

The default value is set to false.

true
+
+

For more + information about customizing the Grafana instance + by modifying the parameters in the configuration + file, refer to the following sections in the Grafana + documentation.

+ +
+
+
+
+

. Defining the Grafana + server

+
+

You must + define the Grafana server as a target system in z/OSMF to access Grafana from the Resource + Monitoring page of z/OSMF.

+
+

Before + you begin

+
You must have completed the + following tasks:
+
+
+

Procedure

+
+
    +
  1. + Enter the URL of z/OSMF in a web browser. +
  2. +
  3. + Log in to z/OSMF if you are not already logged + in. +
  4. +
  5. + Double-click System + Status. +
  6. +
  7. + Click Add + Entry from the Actions drop-down list. +
  8. +
  9. + Perform the following steps + to add details about the Grafana server: +
      +
    1. + Enter a name for the Grafana + server in the Resource name field. +
      The Resource name is the required field, and + you must provide a unique name. The Resource name can contain up to 24 characters + including alphanumeric characters (A-Z, a-z, and 0-9) and special + characters (@ # $).
      Note: You must + note that the Resource name is not case sensitive. + Therefore, the entries with similar names but + different capitalization, such as SYS1 and Sys1 are considered + as identical by the system.
      +
    2. +
    3. + Enter the host name or IP + address of the Grafana server that you want to + access in the Host + name or IP address field. +
      The host name or IP address + can contain up to 4000 + characters.
      +
    4. +
    5. + Select Grafana from the Target + system type drop-down list. +
    6. +
    7. + Select the Use + HTTPS checkbox to enable secure + communication. +
    8. +
    9. + Enter the port number where + the Grafana server is hosted in the Port field. +
      +

      The + Port is the required field, and the + default port number is set to 3000.

      +
      Tip: + Alternatively, you can use up-down controls to specify the port + number.
      +
      +
    10. +
    +
  10. +
  11. + Click OK. +
  12. +
+
+
+

Results

+
You have defined the Grafana server as the target + system.
+
+

What + to do next

+
You can perform the following + tasks:
+
+
+
+

. Accessing the Grafana + dashboard

+
+

You can + access the Grafana dashboard from the Resource + Monitoring page of z/OSMF to investigate the RMF Monitor III + metrics and reports.

+
+

Before + you begin

+
You must have defined the Grafana server in z/OSMF. See Defining the Grafana + server (on page ).
+
+
+

Procedure

+
+
    +
  1. + Enter the URL of z/OSMF in a web browser. +
  2. +
  3. + Log in to z/OSMF if you are not already logged + in. +
  4. +
  5. + Double-click Resource Monitoring. +
  6. +
  7. + Select the Grafana server + that you want to access from the drop-down + list. +
  8. +
  9. + Click OK. +
  10. +
+
+
+

Results

+
You have accessed Grafana from z/OSMF.
+
+

What + to do next

+
You can perform the following + tasks:
    +
  • View the dashboards by navigating to Apps > + IBM + RMF > + Dashboards.
  • +
  • Add a RMF data source to fetch data from Distributed Data Servers (DDS). See Creating RMF data + sources (on page ).
  • +
+
+
+
+
+
+
+
+
+ +
\ No newline at end of file diff --git a/grafana/rmf-app/doc/src/rn.dita b/grafana/rmf-app/doc/src/rn.dita index 7f914075..0a8654ce 100644 --- a/grafana/rmf-app/doc/src/rn.dita +++ b/grafana/rmf-app/doc/src/rn.dita @@ -8,44 +8,91 @@
What's new
+ +
May 2025 v1.0.9
+
+
    +
  • +

    plugin has been + enhanced to optimize the step size when querying and displaying + time series data, based on the selected time range and panel + size. This enhancement ensures that panels display the required + number of data points.

    +
  • +
  • +

    A bug has been fixed that was causing specific data points to be + dropped from time series views, resulting in a flat line in the + graphs.

    +
  • +
  • +

    +

  • +
+
+
+
+
+
+
April 2025 v1.0.8
    -
  • A new option, Compression, has been added to - the data source creation process. This option enables the RMF data - source to request HTTP compression from the Data Distributed Server - (DDS) during data retrieval, which improves the efficiency of data - transfer. See .
  • -
  • Fixed certain scenarios of missing data within dashboards for time - series visualizations.
  • -
  • Fixed internally found defects.
  • +
  • +

    A new option, Compression, has been added + to the data source creation process. This option enables the RMF + data source to request HTTP compression from the Data + Distributed Server (DDS) during data retrieval, which improves + the efficiency of data transfer. See .

    +
  • +
  • +

    Fixed certain scenarios of missing data within dashboards for + time series visualizations.

    +
  • +
  • +

    +

November 2024 v1.0.7
-
Fixed internally found defects.
    -
  • Fixed internally found defects.
  • -
  • You can now download - plugin documentation as a PDF file. See .
  • -
+
+

+

    +
  • +

    +

  • +
  • +

    You can now download plugin documentation as a PDF file. See .

    +
  • +
+
October 2024 v1.0.6
    -
  • The plugin now allows - customizing banner and caption fields in IBM RMF Report - visualizations.
  • -
  • After you modify any data source - and save the changes, you no longer need to re-enter the - password.
  • -
  • Improved performance.
  • -
  • Fixed internally found defects.
  • +
  • +

    The plugin now + allows customizing banner and caption fields in IBM RMF Report + visualizations.

    +
  • +
  • +

    After you modify any data + source and save the changes, you no longer need to re-enter the + password.

    +
  • +
  • +

    Improved performance.

    +
  • +
  • +

    +

@@ -57,11 +104,17 @@
August 2024 v1.0.5
    -
  • When creating the datasource, you now have the option to specify the - desired cache size in megabytes for the datasource.
  • -
  • Fixed internally found defects.
  • -
  • The topic of has been updated - per the new UI changes.
  • +
  • +

    When creating the datasource, you now have the option to specify + the desired cache size in megabytes for the datasource.

    +
  • +
  • +

    +

  • +
  • +

    The topic of has been + updated per the new UI changes.

    +
@@ -69,38 +122,48 @@
June 2024 v1.0.4
    -
  • The user interface for creating the datasource has been enhanced to - improve the user experience.
  • -
  • Fixed internally found defects.
  • -
  • The following dashboards are updated:
      -
    • Common Storage Activity (Timeline)
    • -
    • Common Storage Activity
    • -
    • Coupling Facility Overview (Timeline)
    • -
    • Coupling Facility Overview
    • -
    • Execution Velocity (Timeline)
    • -
    • Execution Velocity
    • -
    • General Activity (Timeline)
    • -
    • General Activity
    • -
    • Overall Image Activity (Timeline)
    • -
    • Overall Image Activity
    • -
    • Performance Index (Timeline)
    • -
    • Response Time (Timeline)
    • -
    • Response Time
    • -
    • XCF Activity (Timeline)
    • -
    • XCF Activity
    • -
    • - You must re-import the - dashboards to utilize the latest enhancements in the - dashboards. -
    • -
  • -
  • The documentation updates for v1.0.4 include the following - changes:
      -
    • The topic of has been - updated as per the new UI changes.
    • -
    • The topic is included to - provide information about the upgrade process.
    • -
  • +
  • +

    The user interface for creating the datasource has been enhanced + to improve the user experience.

    +
  • +
  • +

    +

  • +
  • +

    The following dashboards are updated:

      +
    • Common Storage Activity (Timeline)
    • +
    • Common Storage Activity
    • +
    • Coupling Facility Overview (Timeline)
    • +
    • Coupling Facility Overview
    • +
    • Execution Velocity (Timeline)
    • +
    • Execution Velocity
    • +
    • General Activity (Timeline)
    • +
    • General Activity
    • +
    • Overall Image Activity (Timeline)
    • +
    • Overall Image Activity
    • +
    • Performance Index (Timeline)
    • +
    • Response Time (Timeline)
    • +
    • Response Time
    • +
    • XCF Activity (Timeline)
    • +
    • XCF Activity
    • +
    You must re-import the + dashboards to utilize the latest enhancements in the + dashboards.

    +
  • +
  • +

    The documentation updates for v1.0.4 include the following + changes:

      +
    • +

      The topic of + has been updated as per the new UI changes.

      +
    • +
    • +

      The topic is + included to provide information about the upgrade + process.

      +
    • +

    +
@@ -108,45 +171,82 @@
February 2024 v1.0.3
    -
  • Fixed specific issues related to the support of Grafana - v10.x.x.
  • -
  • Fixed empty settings issue for IBM RMF data source defined via - Home / Apps / IBM RMF page.
  • -
  • Fixed internally found defects.
  • -
  • The documentation updates for v1.0.3 include the following - changes:
      -
    • The Grafana through IBM - z/OS Management Facility topic explains more - detailed setup instructions to access Grafana from the - z/OSMF server.
    • -
    • The plugin - installation section is updated to provide clear - information and guidance on installing the plugin on - different platforms based on specific requirements.
    • -
    • The troubleshooting topic - is provided to help users analyze and resolve common issues - that may occur while using the plugin.
    • -
  • +
  • +

    Fixed specific issues related to the support of Grafana + v10.x.x.

    +
  • +
  • +

    Fixed empty settings issue for IBM RMF data source defined via + Home / Apps / IBM RMF page.

    +
  • +
  • +

    +

  • +
  • +

    The documentation updates for v1.0.3 include the following + changes:

      +
    • +

      The Grafana + through IBM z/OS Management Facility topic + explains more detailed setup instructions to access + Grafana from the z/OSMF server.

      +
    • +
    • +

      The plugin + installation section is updated to provide + clear information and guidance on installing the plugin on + different platforms based on specific + requirements.

      +
    • +
    • +

      The troubleshooting topic is provided to help + users analyze and resolve common issues that may + occur while using the + plugin.

      +
    • +

    +
December 2023 v1.0.2
-
Support spaces in Datasource name.
+
+
    +
  • +

    Support spaces in Datasource name.

    +
  • +
  • +

    +

  • +
+
November 2023 v1.0.1
-
Resolved security issues in dependencies.
+
+
    +
  • +

    Resolved security issues in dependencies.

    +
  • +
  • +

    +

  • +
+
November 2023 v1.0.0
-
The first release of the - plugin is in the following GitHub repository: https://github.com/IBM/RMF.
+
+

The first release of the + plugin is in the following GitHub repository: https://github.com/IBM/RMF.

+
diff --git a/grafana/rmf-app/go.mod b/grafana/rmf-app/go.mod index 91baed01..0ebb8a17 100644 --- a/grafana/rmf-app/go.mod +++ b/grafana/rmf-app/go.mod @@ -1,71 +1,72 @@ module github.com/IBM/RMF/grafana/rmf-app -go 1.23.0 +go 1.24.3 require ( github.com/VictoriaMetrics/fastcache v1.12.2 github.com/google/uuid v1.6.0 - github.com/grafana/grafana-plugin-sdk-go v0.256.0 - github.com/stretchr/testify v1.9.0 - golang.org/x/sync v0.8.0 + github.com/grafana/grafana-plugin-sdk-go v0.277.1 + github.com/stretchr/testify v1.10.0 + golang.org/x/sync v0.14.0 ) require ( - github.com/BurntSushi/toml v1.4.0 // indirect - github.com/apache/arrow/go/v15 v15.0.2 // indirect + github.com/BurntSushi/toml v1.5.0 // indirect + github.com/apache/arrow-go/v18 v18.2.0 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/cenkalti/backoff/v4 v4.3.0 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/cheekybits/genny v1.0.0 // indirect - github.com/chromedp/cdproto v0.0.0-20241022234722-4d5d5faf59fb // indirect - github.com/cpuguy83/go-md2man/v2 v2.0.5 // indirect + github.com/chromedp/cdproto v0.0.0-20250429231605-6ed5b53462d4 // indirect + github.com/cpuguy83/go-md2man/v2 v2.0.7 // indirect github.com/davecgh/go-spew v1.1.1 // indirect - github.com/elazarl/goproxy v0.0.0-20240909085733-6741dbfc16a1 // indirect + github.com/elazarl/goproxy v1.7.2 // indirect github.com/fatih/color v1.18.0 // indirect - github.com/getkin/kin-openapi v0.128.0 // indirect + github.com/getkin/kin-openapi v0.132.0 // indirect github.com/go-logr/logr v1.4.2 // indirect github.com/go-logr/stdr v1.2.2 // indirect - github.com/go-openapi/jsonpointer v0.21.0 // indirect - github.com/go-openapi/swag v0.23.0 // indirect - github.com/goccy/go-json v0.10.3 // indirect + github.com/go-openapi/jsonpointer v0.21.1 // indirect + github.com/go-openapi/swag v0.23.1 // indirect + github.com/goccy/go-json v0.10.5 // indirect github.com/gogo/protobuf v1.3.2 // indirect github.com/golang/protobuf v1.5.4 // indirect - github.com/golang/snappy v0.0.4 // indirect - github.com/google/flatbuffers v24.3.25+incompatible // indirect - github.com/google/go-cmp v0.6.0 // indirect + github.com/golang/snappy v1.0.0 // indirect + github.com/google/flatbuffers v25.2.10+incompatible // indirect + github.com/google/go-cmp v0.7.0 // indirect github.com/gorilla/mux v1.8.1 // indirect github.com/grafana/otel-profiling-go v0.5.1 // indirect github.com/grafana/pyroscope-go/godeltaprof v0.1.8 // indirect github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus v1.0.1 // indirect - github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.1.0 // indirect - github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0 // indirect + github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.3.2 // indirect + github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.3 // indirect github.com/hashicorp/go-hclog v1.6.3 // indirect - github.com/hashicorp/go-plugin v1.6.2 // indirect + github.com/hashicorp/go-plugin v1.6.3 // indirect github.com/hashicorp/yamux v0.1.2 // indirect - github.com/invopop/yaml v0.3.1 // indirect github.com/josharian/intern v1.0.0 // indirect github.com/json-iterator/go v1.1.12 // indirect - github.com/klauspost/compress v1.17.11 // indirect - github.com/klauspost/cpuid/v2 v2.2.8 // indirect + github.com/klauspost/compress v1.18.0 // indirect + github.com/klauspost/cpuid/v2 v2.2.10 // indirect github.com/magefile/mage v1.15.0 // indirect - github.com/mailru/easyjson v0.7.7 // indirect + github.com/mailru/easyjson v0.9.0 // indirect github.com/mattetti/filebuffer v1.0.1 // indirect - github.com/mattn/go-colorable v0.1.13 // indirect + github.com/mattn/go-colorable v0.1.14 // indirect github.com/mattn/go-isatty v0.0.20 // indirect github.com/mattn/go-runewidth v0.0.16 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect + github.com/oasdiff/yaml v0.0.0-20250309154309-f31be36b4037 // indirect + github.com/oasdiff/yaml3 v0.0.0-20250309153720-d2182401db90 // indirect github.com/oklog/run v1.1.0 // indirect github.com/olekukonko/tablewriter v0.0.5 // indirect github.com/perimeterx/marshmallow v1.1.5 // indirect - github.com/pierrec/lz4/v4 v4.1.21 // indirect + github.com/pierrec/lz4/v4 v4.1.22 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/prometheus/client_golang v1.20.5 // indirect - github.com/prometheus/client_model v0.6.1 // indirect - github.com/prometheus/common v0.60.0 // indirect - github.com/prometheus/procfs v0.15.1 // indirect + github.com/prometheus/client_golang v1.22.0 // indirect + github.com/prometheus/client_model v0.6.2 // indirect + github.com/prometheus/common v0.63.0 // indirect + github.com/prometheus/procfs v0.16.1 // indirect github.com/rivo/uniseg v0.4.7 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/unknwon/bra v0.0.0-20200517080246-1e3013ecaff8 // indirect @@ -73,28 +74,29 @@ require ( github.com/unknwon/log v0.0.0-20200308114134-929b1006e34a // indirect github.com/urfave/cli v1.22.16 // indirect github.com/zeebo/xxh3 v1.0.2 // indirect - go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.56.0 // indirect - go.opentelemetry.io/contrib/instrumentation/net/http/httptrace/otelhttptrace v0.56.0 // indirect - go.opentelemetry.io/contrib/propagators/jaeger v1.31.0 // indirect - go.opentelemetry.io/contrib/samplers/jaegerremote v0.25.0 // indirect - go.opentelemetry.io/otel v1.31.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.31.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.31.0 // indirect - go.opentelemetry.io/otel/metric v1.31.0 // indirect - go.opentelemetry.io/otel/sdk v1.31.0 // indirect - go.opentelemetry.io/otel/trace v1.31.0 // indirect - go.opentelemetry.io/proto/otlp v1.3.1 // indirect - golang.org/x/exp v0.0.0-20241009180824-f66d83c29e7c // indirect - golang.org/x/mod v0.21.0 // indirect - golang.org/x/net v0.30.0 // indirect - golang.org/x/sys v0.26.0 // indirect - golang.org/x/text v0.19.0 // indirect - golang.org/x/tools v0.26.0 // indirect + go.opentelemetry.io/auto/sdk v1.1.0 // indirect + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.60.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/httptrace/otelhttptrace v0.60.0 // indirect + go.opentelemetry.io/contrib/propagators/jaeger v1.35.0 // indirect + go.opentelemetry.io/contrib/samplers/jaegerremote v0.29.0 // indirect + go.opentelemetry.io/otel v1.35.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.35.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.35.0 // indirect + go.opentelemetry.io/otel/metric v1.35.0 // indirect + go.opentelemetry.io/otel/sdk v1.35.0 // indirect + go.opentelemetry.io/otel/trace v1.35.0 // indirect + go.opentelemetry.io/proto/otlp v1.6.0 // indirect + golang.org/x/exp v0.0.0-20250506013437-ce4c2cf36ca6 // indirect + golang.org/x/mod v0.24.0 // indirect + golang.org/x/net v0.40.0 // indirect + golang.org/x/sys v0.33.0 // indirect + golang.org/x/text v0.25.0 // indirect + golang.org/x/tools v0.33.0 // indirect golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20241021214115-324edc3d5d38 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20241021214115-324edc3d5d38 // indirect - google.golang.org/grpc v1.67.1 // indirect - google.golang.org/protobuf v1.35.1 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20250505200425-f936aa4a68b2 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20250505200425-f936aa4a68b2 // indirect + google.golang.org/grpc v1.72.0 // indirect + google.golang.org/protobuf v1.36.6 // indirect gopkg.in/fsnotify/fsnotify.v1 v1.4.7 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/grafana/rmf-app/go.sum b/grafana/rmf-app/go.sum index ae8ab247..bc58e0b4 100644 --- a/grafana/rmf-app/go.sum +++ b/grafana/rmf-app/go.sum @@ -1,12 +1,17 @@ github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/toml v1.4.0 h1:kuoIxZQy2WRRk1pttg9asf+WVv6tWQuBNVmK8+nqPr0= github.com/BurntSushi/toml v1.4.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= +github.com/BurntSushi/toml v1.5.0 h1:W5quZX/G/csjUnuI8SUYlsHs9M38FC7znL0lIO+DvMg= +github.com/BurntSushi/toml v1.5.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= github.com/VictoriaMetrics/fastcache v1.12.2 h1:N0y9ASrJ0F6h0QaC3o6uJb3NIZ9VKLjCM7NQbSmF7WI= github.com/VictoriaMetrics/fastcache v1.12.2/go.mod h1:AmC+Nzz1+3G2eCPapF6UcsnkThDcMsQicp4xDukwJYI= github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156 h1:eMwmnE/GDgah4HI848JfFxHt+iPb26b4zyfspmqY0/8= github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= -github.com/apache/arrow/go/v15 v15.0.2 h1:60IliRbiyTWCWjERBCkO1W4Qun9svcYoZrSLcyOsMLE= -github.com/apache/arrow/go/v15 v15.0.2/go.mod h1:DGXsR3ajT524njufqf95822i+KTh+yea1jass9YXgjA= +github.com/andybalholm/brotli v1.1.1 h1:PR2pgnyFznKEugtsUo0xLdDop5SKXd5Qf5ysW+7XdTA= +github.com/andybalholm/brotli v1.1.1/go.mod h1:05ib4cKhjx3OQYUY22hTVd34Bc8upXjOLL2rKwwZBoA= +github.com/apache/arrow-go/v18 v18.2.0 h1:QhWqpgZMKfWOniGPhbUxrHohWnooGURqL2R2Gg4SO1Q= +github.com/apache/arrow-go/v18 v18.2.0/go.mod h1:Ic/01WSwGJWRrdAZcxjBZ5hbApNJ28K96jGYaxzzGUc= +github.com/apache/thrift v0.21.0 h1:tdPmh/ptjE1IJnhbhrcl2++TauVjy242rkV/UzJChnE= +github.com/apache/thrift v0.21.0/go.mod h1:W1H8aR/QRtYNvrPeFXBtobyRkd0/YVhTc6i07XIAgDw= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/bufbuild/protocompile v0.4.0 h1:LbFKd2XowZvQ/kajzguUp2DC9UEIQhIq77fZZlaQsNA= @@ -18,18 +23,17 @@ github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UF github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cheekybits/genny v1.0.0 h1:uGGa4nei+j20rOSeDeP5Of12XVm7TGUd4dJA9RDitfE= github.com/cheekybits/genny v1.0.0/go.mod h1:+tQajlRqAUrPI7DOSpB0XAqZYtQakVtB7wXkRAgjxjQ= -github.com/chromedp/cdproto v0.0.0-20241022234722-4d5d5faf59fb h1:noKVm2SsG4v0Yd0lHNtFYc9EUxIVvrr4kJ6hM8wvIYU= -github.com/chromedp/cdproto v0.0.0-20241022234722-4d5d5faf59fb/go.mod h1:4XqMl3iIW08jtieURWL6Tt5924w21pxirC6th662XUM= +github.com/chromedp/cdproto v0.0.0-20250429231605-6ed5b53462d4 h1:UZdrvid2JFwnvPlUSEFlE794XZL4Jmrj8fuxfcLECJE= +github.com/chromedp/cdproto v0.0.0-20250429231605-6ed5b53462d4/go.mod h1:NItd7aLkcfOA/dcMXvl8p1u+lQqioRMq/SqDp71Pb/k= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/cpuguy83/go-md2man/v2 v2.0.5 h1:ZtcqGrnekaHpVLArFSe4HK5DoKx1T0rq2DwVB0alcyc= github.com/cpuguy83/go-md2man/v2 v2.0.5/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/cpuguy83/go-md2man/v2 v2.0.7 h1:zbFlGlXEAKlwXpmvle3d8Oe3YnkKIK4xSRTd3sHPnBo= +github.com/cpuguy83/go-md2man/v2 v2.0.7/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/elazarl/goproxy v0.0.0-20240909085733-6741dbfc16a1 h1:g7YUigN4dW2+zpdusdTTghZ+5Py3BaUMAStvL8Nk+FY= -github.com/elazarl/goproxy v0.0.0-20240909085733-6741dbfc16a1/go.mod h1:thX175TtLTzLj3p7N/Q9IiKZ7NF+p72cvL91emV0hzo= -github.com/elazarl/goproxy/ext v0.0.0-20220115173737-adb46da277ac h1:9yrT5tmn9Zc0ytWPASlaPwQfQMQYnRf0RSDe1XvHw0Q= -github.com/elazarl/goproxy/ext v0.0.0-20220115173737-adb46da277ac/go.mod h1:gNh8nYJoAm43RfaxurUnxr+N1PwuFV3ZMl/efxlIlY8= +github.com/elazarl/goproxy v1.7.2 h1:Y2o6urb7Eule09PjlhQRGNsqRfPmYI3KKQLFpCAV3+o= +github.com/elazarl/goproxy v1.7.2/go.mod h1:82vkLNir0ALaW14Rc399OTTjyNREgmdL2cVoIbS6XaE= github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM= github.com/fatih/color v1.18.0/go.mod h1:4FelSpRwEGDpQ12mAdzqdOukCy4u8WUtOY6lkT/6HfU= @@ -37,32 +41,34 @@ github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2 github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/getkin/kin-openapi v0.128.0 h1:jqq3D9vC9pPq1dGcOCv7yOp1DaEe7c/T1vzcLbITSp4= -github.com/getkin/kin-openapi v0.128.0/go.mod h1:OZrfXzUfGrNbsKj+xmFBx6E5c6yH3At/tAKSc2UszXM= +github.com/getkin/kin-openapi v0.132.0 h1:3ISeLMsQzcb5v26yeJrBcdTCEQTag36ZjaGk7MIRUwk= +github.com/getkin/kin-openapi v0.132.0/go.mod h1:3OlG51PCYNsPByuiMB0t4fjnNlIDnaEDsjiKUV8nL58= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= -github.com/go-openapi/jsonpointer v0.21.0 h1:YgdVicSA9vH5RiHs9TZW5oyafXZFc6+2Vc1rr/O9oNQ= -github.com/go-openapi/jsonpointer v0.21.0/go.mod h1:IUyH9l/+uyhIYQ/PXVA41Rexl+kOkAPDdXEYns6fzUY= -github.com/go-openapi/swag v0.23.0 h1:vsEVJDUo2hPJ2tu0/Xc+4noaxyEffXNIs3cOULZ+GrE= -github.com/go-openapi/swag v0.23.0/go.mod h1:esZ8ITTYEsH1V2trKHjAN8Ai7xHb8RV+YSZ577vPjgQ= +github.com/go-openapi/jsonpointer v0.21.1 h1:whnzv/pNXtK2FbX/W9yJfRmE2gsmkfahjMKB0fZvcic= +github.com/go-openapi/jsonpointer v0.21.1/go.mod h1:50I1STOfbY1ycR8jGz8DaMeLCdXiI6aDteEdRNNzpdk= +github.com/go-openapi/swag v0.23.1 h1:lpsStH0n2ittzTnbaSloVZLuB5+fvSY/+hnagBjSNZU= +github.com/go-openapi/swag v0.23.1/go.mod h1:STZs8TbRvEQQKUA+JZNAm3EWlgaOBGpyFDqQnDHMef0= github.com/go-test/deep v1.0.8 h1:TDsG77qcSprGbC6vTN8OuXp5g+J+b5Pcguhf7Zt61VM= github.com/go-test/deep v1.0.8/go.mod h1:5C2ZWiW0ErCdrYzpqxLbTX7MG14M9iiw8DgHncVwcsE= -github.com/goccy/go-json v0.10.3 h1:KZ5WoDbxAIgm2HNbYckL0se1fHD6rz5j4ywS6ebzDqA= -github.com/goccy/go-json v0.10.3/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M= +github.com/goccy/go-json v0.10.5 h1:Fq85nIqj+gXn/S5ahsiTlK3TmC85qgirsdTP/+DeaC4= +github.com/goccy/go-json v0.10.5/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= -github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/google/flatbuffers v24.3.25+incompatible h1:CX395cjN9Kke9mmalRoL3d81AtFUxJM+yDthflgJGkI= -github.com/google/flatbuffers v24.3.25+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= -github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/golang/snappy v1.0.0 h1:Oy607GVXHs7RtbggtPBnr2RmDArIsAefDwvrdWvRhGs= +github.com/golang/snappy v1.0.0/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/google/flatbuffers v25.2.10+incompatible h1:F3vclr7C3HpB1k9mxCGRMXq6FdUalZ6H/pNX4FP1v0Q= +github.com/google/flatbuffers v25.2.10+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= +github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= @@ -70,26 +76,24 @@ github.com/gopherjs/gopherjs v0.0.0-20181103185306-d547d1d9531e h1:JKmoR8x90Iww1 github.com/gopherjs/gopherjs v0.0.0-20181103185306-d547d1d9531e/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ= -github.com/grafana/grafana-plugin-sdk-go v0.256.0 h1:Vh7A+QaaenNx2gwKQekwHuGEGz8XNvc6Q2ZU+H4/Y/A= -github.com/grafana/grafana-plugin-sdk-go v0.256.0/go.mod h1:ACAKXTUgobDFdroItuDxXzdOxa2aCsG1GfZ5+j+/i8M= +github.com/grafana/grafana-plugin-sdk-go v0.277.1 h1:CF2pk2Pc/VX0DNBdk1+n3XSL0KvzMEcy6oubN/qdEmY= +github.com/grafana/grafana-plugin-sdk-go v0.277.1/go.mod h1:2ekE3wh4VyHmvBKP3VBdJNoAK4fD50HLxhlco9FzTwg= github.com/grafana/otel-profiling-go v0.5.1 h1:stVPKAFZSa7eGiqbYuG25VcqYksR6iWvF3YH66t4qL8= github.com/grafana/otel-profiling-go v0.5.1/go.mod h1:ftN/t5A/4gQI19/8MoWurBEtC6gFw8Dns1sJZ9W4Tls= github.com/grafana/pyroscope-go/godeltaprof v0.1.8 h1:iwOtYXeeVSAeYefJNaxDytgjKtUuKQbJqgAIjlnicKg= github.com/grafana/pyroscope-go/godeltaprof v0.1.8/go.mod h1:2+l7K7twW49Ct4wFluZD3tZ6e0SjanjcUUBPVD/UuGU= github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus v1.0.1 h1:qnpSQwGEnkcRpTqNOIR6bJbR0gAorgP9CSALpRcKoAA= github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus v1.0.1/go.mod h1:lXGCsh6c22WGtjr+qGHj1otzZpV/1kwTMAqkwZsnWRU= -github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.1.0 h1:pRhl55Yx1eC7BZ1N+BBWwnKaMyD8uC+34TLdndZMAKk= -github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.1.0/go.mod h1:XKMd7iuf/RGPSMJ/U4HP0zS2Z9Fh8Ps9a+6X26m/tmI= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0 h1:asbCHRVmodnJTuQ3qamDwqVOIjwqUPTYmYuemVOx+Ys= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0/go.mod h1:ggCgvZ2r7uOoQjOyu2Y1NhHmEPPzzuhWgcza5M1Ji1I= +github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.3.2 h1:sGm2vDRFUrQJO/Veii4h4zG2vvqG6uWNkBHSTqXOZk0= +github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.3.2/go.mod h1:wd1YpapPLivG6nQgbf7ZkG1hhSOXDhhn4MLTknx2aAc= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.3 h1:5ZPtiqj0JL5oKWmcsq4VMaAW5ukBEgSGXEN89zeH1Jo= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.3/go.mod h1:ndYquD05frm2vACXE1nsccT4oJzjhw2arTS2cpUD1PI= github.com/hashicorp/go-hclog v1.6.3 h1:Qr2kF+eVWjTiYmU7Y31tYlP1h0q/X3Nl3tPGdaB11/k= github.com/hashicorp/go-hclog v1.6.3/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M= -github.com/hashicorp/go-plugin v1.6.2 h1:zdGAEd0V1lCaU0u+MxWQhtSDQmahpkwOun8U8EiRVog= -github.com/hashicorp/go-plugin v1.6.2/go.mod h1:CkgLQ5CZqNmdL9U9JzM532t8ZiYQ35+pj3b1FD37R0Q= +github.com/hashicorp/go-plugin v1.6.3 h1:xgHB+ZUSYeuJi96WtxEjzi23uh7YQpznjGh0U0UUrwg= +github.com/hashicorp/go-plugin v1.6.3/go.mod h1:MRobyh+Wc/nYy1V4KAXUiYfzxoYhs7V1mlH1Z7iY2h0= github.com/hashicorp/yamux v0.1.2 h1:XtB8kyFOyHXYVFnwT5C3+Bdo8gArse7j2AQ0DA0Uey8= github.com/hashicorp/yamux v0.1.2/go.mod h1:C+zze2n6e/7wshOZep2A70/aQU6QBRWJO/G6FT1wIns= -github.com/invopop/yaml v0.3.1 h1:f0+ZpmhfBSS4MhG+4HYseMdJhoeeopbSKbq5Rpeelso= -github.com/invopop/yaml v0.3.1/go.mod h1:PMOp3nn4/12yEZUFfmOuNHJsZToEEOwoWsT+D81KkeA= github.com/jhump/protoreflect v1.15.1 h1:HUMERORf3I3ZdX05WaQ6MIpd/NJ434hTp5YiKgfCL6c= github.com/jhump/protoreflect v1.15.1/go.mod h1:jD/2GMKKE6OqX8qTjhADU1e6DShO+gavG9e0Q693nKo= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= @@ -100,10 +104,12 @@ github.com/jtolds/gls v4.2.1+incompatible h1:fSuqC+Gmlu6l/ZYAoZzx2pyucC8Xza35fpR github.com/jtolds/gls v4.2.1+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/klauspost/compress v1.17.11 h1:In6xLpyWOi1+C7tXUUWv2ot1QvBjxevKAaI6IXrJmUc= -github.com/klauspost/compress v1.17.11/go.mod h1:pMDklpSncoRMuLFrf1W9Ss9KT+0rH90U12bZKk7uwG0= -github.com/klauspost/cpuid/v2 v2.2.8 h1:+StwCXwm9PdpiEkPyzBXIy+M9KUb4ODm0Zarf1kS5BM= -github.com/klauspost/cpuid/v2 v2.2.8/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= +github.com/klauspost/asmfmt v1.3.2 h1:4Ri7ox3EwapiOjCki+hw14RyKk201CN4rzyCJRFLpK4= +github.com/klauspost/asmfmt v1.3.2/go.mod h1:AG8TuvYojzulgDAMCnYn50l/5QV3Bs/tp6j0HLHbNSE= +github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo= +github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ= +github.com/klauspost/cpuid/v2 v2.2.10 h1:tBs3QSyvjDyFTq3uoc/9xFpCuOsJQFNPiAhYdw2skhE= +github.com/klauspost/cpuid/v2 v2.2.10/go.mod h1:hqwkgyIinND0mEev00jJYCxPNVRVXFQeu1XKlok6oO0= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= @@ -112,22 +118,25 @@ github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0 github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= github.com/magefile/mage v1.15.0 h1:BvGheCMAsG3bWUDbZ8AyXXpCNwU9u5CB6sM+HNb9HYg= github.com/magefile/mage v1.15.0/go.mod h1:z5UZb/iS3GoOSn0JgWuiw7dxlurVYTu+/jHXqQg881A= -github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= -github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= +github.com/mailru/easyjson v0.9.0 h1:PrnmzHw7262yW8sTBwxi1PdJA3Iw/EKBa8psRf7d9a4= +github.com/mailru/easyjson v0.9.0/go.mod h1:1+xMtQp2MRNVL/V1bOzuP3aP8VNwRW55fQUto+XFtTU= github.com/mattetti/filebuffer v1.0.1 h1:gG7pyfnSIZCxdoKq+cPa8T0hhYtD9NxCdI4D7PTjRLM= github.com/mattetti/filebuffer v1.0.1/go.mod h1:YdMURNDOttIiruleeVr6f56OrMc+MydEnTcXwtkxNVs= github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= -github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= -github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= +github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE= +github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= -github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc= github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= +github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8 h1:AMFGa4R4MiIpspGNG7Z948v4n35fFGB3RR3G/ry4FWs= +github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8/go.mod h1:mC1jAcsrzbxHt8iiaC+zU4b1ylILSosueou12R++wfY= +github.com/minio/c2goasm v0.0.0-20190812172519-36a3d3bbc4f3 h1:+n/aFZefKZp7spd8DFdX7uMikMLXX4oubIzJF4kv/wI= +github.com/minio/c2goasm v0.0.0-20190812172519-36a3d3bbc4f3/go.mod h1:RagcQ7I8IeTMnF8JTXieKnO4Z6JCsikNEzj0DwauVzE= github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ= github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= @@ -139,24 +148,28 @@ github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 h1:RWengNIwukTxcDr9 github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= +github.com/oasdiff/yaml v0.0.0-20250309154309-f31be36b4037 h1:G7ERwszslrBzRxj//JalHPu/3yz+De2J+4aLtSRlHiY= +github.com/oasdiff/yaml v0.0.0-20250309154309-f31be36b4037/go.mod h1:2bpvgLBZEtENV5scfDFEtB/5+1M4hkQhDQrccEJ/qGw= +github.com/oasdiff/yaml3 v0.0.0-20250309153720-d2182401db90 h1:bQx3WeLcUWy+RletIKwUIt4x3t8n2SxavmoclizMb8c= +github.com/oasdiff/yaml3 v0.0.0-20250309153720-d2182401db90/go.mod h1:y5+oSEHCPT/DGrS++Wc/479ERge0zTFxaF8PbGKcg2o= github.com/oklog/run v1.1.0 h1:GEenZ1cK0+q0+wsJew9qUg/DyD8k3JzYsZAi5gYi2mA= github.com/oklog/run v1.1.0/go.mod h1:sVPdnTZT1zYwAJeCMu2Th4T21pA3FPOQRfWjQlk7DVU= github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= github.com/perimeterx/marshmallow v1.1.5 h1:a2LALqQ1BlHM8PZblsDdidgv1mWi1DgC2UmX50IvK2s= github.com/perimeterx/marshmallow v1.1.5/go.mod h1:dsXbUu8CRzfYP5a87xpp0xq9S3u0Vchtcl8we9tYaXw= -github.com/pierrec/lz4/v4 v4.1.21 h1:yOVMLb6qSIDP67pl/5F7RepeKYu/VmTyEXvuMI5d9mQ= -github.com/pierrec/lz4/v4 v4.1.21/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= +github.com/pierrec/lz4/v4 v4.1.22 h1:cKFw6uJDK+/gfw5BcDL0JL5aBsAFdsIT18eRtLj7VIU= +github.com/pierrec/lz4/v4 v4.1.22/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/prometheus/client_golang v1.20.5 h1:cxppBPuYhUnsO6yo/aoRol4L7q7UFfdm+bR9r+8l63Y= -github.com/prometheus/client_golang v1.20.5/go.mod h1:PIEt8X02hGcP8JWbeHyeZ53Y/jReSnHgO035n//V5WE= -github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E= -github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY= -github.com/prometheus/common v0.60.0 h1:+V9PAREWNvJMAuJ1x1BaWl9dewMW4YrHZQbx0sJNllA= -github.com/prometheus/common v0.60.0/go.mod h1:h0LYf1R1deLSKtD4Vdg8gy4RuOvENW2J/h19V5NADQw= -github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc= -github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk= +github.com/prometheus/client_golang v1.22.0 h1:rb93p9lokFEsctTys46VnV1kLCDpVZ0a/Y92Vm0Zc6Q= +github.com/prometheus/client_golang v1.22.0/go.mod h1:R7ljNsLXhuQXYZYtw6GAE9AZg8Y7vEW5scdCXrWRXC0= +github.com/prometheus/client_model v0.6.2 h1:oBsgwpGs7iVziMvrGhE53c/GrLUsZdHnqNwqPLxwZyk= +github.com/prometheus/client_model v0.6.2/go.mod h1:y3m2F6Gdpfy6Ut/GBsUqTWZqCUvMVzSfMLjcu6wAwpE= +github.com/prometheus/common v0.63.0 h1:YR/EIY1o3mEFP/kZCD7iDMnLPlGyuU2Gb3HIcXnA98k= +github.com/prometheus/common v0.63.0/go.mod h1:VVFF/fBIoToEnWRVkYoXEkq3R3paCoxG9PXP74SnV18= +github.com/prometheus/procfs v0.16.1 h1:hZ15bTNuirocR6u0JZ6BAHHmwS1p8B4P6MRqxtzMyRg= +github.com/prometheus/procfs v0.16.1/go.mod h1:teAbpZRB1iIAJYREa1LsoWUXykVXA1KlTmWl8x/U+Is= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= @@ -179,8 +192,9 @@ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= -github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= +github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/ugorji/go/codec v1.2.7 h1:YPXUKf7fYbp/y8xloBqZOw2qaVggbfwMlI8WM3wZUJ0= github.com/ugorji/go/codec v1.2.7/go.mod h1:WGN1fab3R1fzQlVQTkfxVtIBhWDRqOviHU95kRgeqEY= github.com/unknwon/bra v0.0.0-20200517080246-1e3013ecaff8 h1:aVGB3YnaS/JNfOW3tiHIlmNmTDg618va+eT0mVomgyI= @@ -199,56 +213,60 @@ github.com/zeebo/assert v1.3.0 h1:g7C04CbJuIDKNPFHmsk4hwZDO5O+kntRxzaUoNXj+IQ= github.com/zeebo/assert v1.3.0/go.mod h1:Pq9JiuJQpG8JLJdtkwrJESF0Foym2/D9XMU5ciN/wJ0= github.com/zeebo/xxh3 v1.0.2 h1:xZmwmqxHZA8AI603jOQ0tMqmBr9lPeFwGg6d+xy9DC0= github.com/zeebo/xxh3 v1.0.2/go.mod h1:5NWz9Sef7zIDm2JHfFlcQvNekmcEl9ekUZQQKCYaDcA= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.56.0 h1:yMkBS9yViCc7U7yeLzJPM2XizlfdVvBRSmsQDWu6qc0= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.56.0/go.mod h1:n8MR6/liuGB5EmTETUBeU5ZgqMOlqKRxUaqPQBOANZ8= -go.opentelemetry.io/contrib/instrumentation/net/http/httptrace/otelhttptrace v0.56.0 h1:4BZHA+B1wXEQoGNHxW8mURaLhcdGwvRnmhGbm+odRbc= -go.opentelemetry.io/contrib/instrumentation/net/http/httptrace/otelhttptrace v0.56.0/go.mod h1:3qi2EEwMgB4xnKgPLqsDP3j9qxnHDZeHsnAxfjQqTko= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.56.0 h1:UP6IpuHFkUgOQL9FFQFrZ+5LiwhhYRbi7VZSIx6Nj5s= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.56.0/go.mod h1:qxuZLtbq5QDtdeSHsS7bcf6EH6uO6jUAgk764zd3rhM= -go.opentelemetry.io/contrib/propagators/jaeger v1.31.0 h1:k9P5RQEWIKUP6N18/ouSvPD/uTjc7s+8WPnuVK6lWOI= -go.opentelemetry.io/contrib/propagators/jaeger v1.31.0/go.mod h1:OpgiBRssaVKOTM5lSKkOBIGQh/ixvfZRmxQXARK/kGQ= -go.opentelemetry.io/contrib/samplers/jaegerremote v0.25.0 h1:nwxen/H3auImb5D4Neo8TDhDseskdRYmlHvi7j1sExc= -go.opentelemetry.io/contrib/samplers/jaegerremote v0.25.0/go.mod h1:KjcLnhrgBMLiPPAqyoGhuNmF6jm38LCPV6hdbBeFOTU= +go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA= +go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.60.0 h1:x7wzEgXfnzJcHDwStJT+mxOz4etr2EcexjqhBvmoakw= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.60.0/go.mod h1:rg+RlpR5dKwaS95IyyZqj5Wd4E13lk/msnTS0Xl9lJM= +go.opentelemetry.io/contrib/instrumentation/net/http/httptrace/otelhttptrace v0.60.0 h1:0tY123n7CdWMem7MOVdKOt0YfshufLCwfE5Bob+hQuM= +go.opentelemetry.io/contrib/instrumentation/net/http/httptrace/otelhttptrace v0.60.0/go.mod h1:CosX/aS4eHnG9D7nESYpV753l4j9q5j3SL/PUYd2lR8= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.60.0 h1:sbiXRNDSWJOTobXh5HyQKjq6wUC5tNybqjIqDpAY4CU= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.60.0/go.mod h1:69uWxva0WgAA/4bu2Yy70SLDBwZXuQ6PbBpbsa5iZrQ= +go.opentelemetry.io/contrib/propagators/jaeger v1.35.0 h1:UIrZgRBHUrYRlJ4V419lVb4rs2ar0wFzKNAebaP05XU= +go.opentelemetry.io/contrib/propagators/jaeger v1.35.0/go.mod h1:0ciyFyYZxE6JqRAQvIgGRabKWDUmNdW3GAQb6y/RlFU= +go.opentelemetry.io/contrib/samplers/jaegerremote v0.29.0 h1:VpYbyLrB5BS3blBCJMqHRIrbU4RlPnyFovR3La+1j4Q= +go.opentelemetry.io/contrib/samplers/jaegerremote v0.29.0/go.mod h1:XAJmM2MWhiIoTO4LCLBVeE8w009TmsYk6hq1UNdXs5A= go.opentelemetry.io/otel v1.21.0/go.mod h1:QZzNPQPm1zLX4gZK4cMi+71eaorMSGT3A4znnUvNNEo= -go.opentelemetry.io/otel v1.31.0 h1:NsJcKPIW0D0H3NgzPDHmo0WW6SptzPdqg/L1zsIm2hY= -go.opentelemetry.io/otel v1.31.0/go.mod h1:O0C14Yl9FgkjqcCZAsE053C13OaddMYr/hz6clDkEJE= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.31.0 h1:K0XaT3DwHAcV4nKLzcQvwAgSyisUghWoY20I7huthMk= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.31.0/go.mod h1:B5Ki776z/MBnVha1Nzwp5arlzBbE3+1jk+pGmaP5HME= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.31.0 h1:FFeLy03iVTXP6ffeN2iXrxfGsZGCjVx0/4KlizjyBwU= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.31.0/go.mod h1:TMu73/k1CP8nBUpDLc71Wj/Kf7ZS9FK5b53VapRsP9o= +go.opentelemetry.io/otel v1.35.0 h1:xKWKPxrxB6OtMCbmMY021CqC45J+3Onta9MqjhnusiQ= +go.opentelemetry.io/otel v1.35.0/go.mod h1:UEqy8Zp11hpkUrL73gSlELM0DupHoiq72dR+Zqel/+Y= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.35.0 h1:1fTNlAIJZGWLP5FVu0fikVry1IsiUnXjf7QFvoNN3Xw= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.35.0/go.mod h1:zjPK58DtkqQFn+YUMbx0M2XV3QgKU0gS9LeGohREyK4= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.35.0 h1:m639+BofXTvcY1q8CGs4ItwQarYtJPOWmVobfM1HpVI= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.35.0/go.mod h1:LjReUci/F4BUyv+y4dwnq3h/26iNOeC3wAIqgvTIZVo= go.opentelemetry.io/otel/metric v1.21.0/go.mod h1:o1p3CA8nNHW8j5yuQLdc1eeqEaPfzug24uvsyIEJRWM= -go.opentelemetry.io/otel/metric v1.31.0 h1:FSErL0ATQAmYHUIzSezZibnyVlft1ybhy4ozRPcF2fE= -go.opentelemetry.io/otel/metric v1.31.0/go.mod h1:C3dEloVbLuYoX41KpmAhOqNriGbA+qqH6PQ5E5mUfnY= +go.opentelemetry.io/otel/metric v1.35.0 h1:0znxYu2SNyuMSQT4Y9WDWej0VpcsxkuklLa4/siN90M= +go.opentelemetry.io/otel/metric v1.35.0/go.mod h1:nKVFgxBZ2fReX6IlyW28MgZojkoAkJGaE8CpgeAU3oE= go.opentelemetry.io/otel/sdk v1.21.0/go.mod h1:Nna6Yv7PWTdgJHVRD9hIYywQBRx7pbox6nwBnZIxl/E= -go.opentelemetry.io/otel/sdk v1.31.0 h1:xLY3abVHYZ5HSfOg3l2E5LUj2Cwva5Y7yGxnSW9H5Gk= -go.opentelemetry.io/otel/sdk v1.31.0/go.mod h1:TfRbMdhvxIIr/B2N2LQW2S5v9m3gOQ/08KsbbO5BPT0= +go.opentelemetry.io/otel/sdk v1.35.0 h1:iPctf8iprVySXSKJffSS79eOjl9pvxV9ZqOWT0QejKY= +go.opentelemetry.io/otel/sdk v1.35.0/go.mod h1:+ga1bZliga3DxJ3CQGg3updiaAJoNECOgJREo9KHGQg= +go.opentelemetry.io/otel/sdk/metric v1.34.0 h1:5CeK9ujjbFVL5c1PhLuStg1wxA7vQv7ce1EK0Gyvahk= +go.opentelemetry.io/otel/sdk/metric v1.34.0/go.mod h1:jQ/r8Ze28zRKoNRdkjCZxfs6YvBTG1+YIqyFVFYec5w= go.opentelemetry.io/otel/trace v1.21.0/go.mod h1:LGbsEB0f9LGjN+OZaQQ26sohbOmiMR+BaslueVtS/qQ= -go.opentelemetry.io/otel/trace v1.31.0 h1:ffjsj1aRouKewfr85U2aGagJ46+MvodynlQ1HYdmJys= -go.opentelemetry.io/otel/trace v1.31.0/go.mod h1:TXZkRk7SM2ZQLtR6eoAWQFIHPvzQ06FJAsO1tJg480A= -go.opentelemetry.io/proto/otlp v1.3.1 h1:TrMUixzpM0yuc/znrFTP9MMRh8trP93mkCiDVeXrui0= -go.opentelemetry.io/proto/otlp v1.3.1/go.mod h1:0X1WI4de4ZsLrrJNLAQbFeLCm3T7yBkR0XqQ7niQU+8= +go.opentelemetry.io/otel/trace v1.35.0 h1:dPpEfJu1sDIqruz7BHFG3c7528f6ddfSWfFDVt/xgMs= +go.opentelemetry.io/otel/trace v1.35.0/go.mod h1:WUk7DtFp1Aw2MkvqGdwiXYDZZNvA/1J8o6xRXLrIkyc= +go.opentelemetry.io/proto/otlp v1.6.0 h1:jQjP+AQyTf+Fe7OKj/MfkDrmK4MNVtw2NpXsf9fefDI= +go.opentelemetry.io/proto/otlp v1.6.0/go.mod h1:cicgGehlFuNdgZkcALOCh3VE6K/u2tAjzlRhDwmVpZc= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/exp v0.0.0-20241009180824-f66d83c29e7c h1:7dEasQXItcW1xKJ2+gg5VOiBnqWrJc+rq0DPKyvvdbY= -golang.org/x/exp v0.0.0-20241009180824-f66d83c29e7c/go.mod h1:NQtJDoLvd6faHhE7m4T/1IY708gDefGGjR/iUW8yQQ8= +golang.org/x/exp v0.0.0-20250506013437-ce4c2cf36ca6 h1:y5zboxd6LQAqYIhHnB48p0ByQ/GnQx2BE33L8BOHQkI= +golang.org/x/exp v0.0.0-20250506013437-ce4c2cf36ca6/go.mod h1:U6Lno4MTRCDY+Ba7aCcauB9T60gsv5s4ralQzP72ZoQ= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.21.0 h1:vvrHzRwRfVKSiLrG+d4FMl/Qi4ukBCE6kZlTUkDYRT0= -golang.org/x/mod v0.21.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= +golang.org/x/mod v0.24.0 h1:ZfthKaKaT4NrhGVZHO1/WDTwGES4De8KtWO0SIbNJMU= +golang.org/x/mod v0.24.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.30.0 h1:AcW1SDZMkb8IpzCdQUaIq2sP4sZ4zw+55h6ynffypl4= -golang.org/x/net v0.30.0/go.mod h1:2wGyMJ5iFasEhkwi13ChkO/t1ECNC4X4eBKkVFyYFlU= +golang.org/x/net v0.40.0 h1:79Xs7wF06Gbdcg4kdCCIQArK11Z1hr5POQ6+fIYHNuY= +golang.org/x/net v0.40.0/go.mod h1:y0hY0exeL2Pku80/zKK7tpntoX23cqL3Oa6njdgRtds= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= -golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.14.0 h1:woo0S4Yywslg6hp4eUFjTVOyKt0RookbpAHG4c1HmhQ= +golang.org/x/sync v0.14.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191020152052-9984515f0562/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -258,38 +276,36 @@ golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.26.0 h1:KHjCJyddX0LoSTb3J+vWpupP9p0oznkqVk/IfjymZbo= -golang.org/x/sys v0.26.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw= +golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.19.0 h1:kTxAhCbGbxhK0IwgSKiMO5awPoDQ0RpfiVYBfK860YM= -golang.org/x/text v0.19.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= +golang.org/x/text v0.25.0 h1:qVyWApTSYLk/drJRO5mDlNYskwQznZmkpV2c8q9zls4= +golang.org/x/text v0.25.0/go.mod h1:WEdwpYrmk1qmdHvhkSTNPm3app7v4rsT8F2UD6+VHIA= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.26.0 h1:v/60pFQmzmT9ExmjDv2gGIfi3OqfKoEP6I5+umXlbnQ= -golang.org/x/tools v0.26.0/go.mod h1:TPVVj70c7JJ3WCazhD8OdXcZg/og+b9+tH/KxylGwH0= +golang.org/x/tools v0.33.0 h1:4qz2S3zmRxbGIhDIAgjxvFutSvH5EfnsYrRBj0UI0bc= +golang.org/x/tools v0.33.0/go.mod h1:CIJMaWEY88juyUfo7UbgPqbC8rU2OqfAV1h2Qp0oMYI= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da h1:noIWHXmPHxILtqtCOPIhSt0ABwskkZKjD3bXGnZGpNY= golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da/go.mod h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90= -gonum.org/v1/gonum v0.12.0 h1:xKuo6hzt+gMav00meVPUlXwSdoEJP46BR+wdxQEFK2o= -gonum.org/v1/gonum v0.12.0/go.mod h1:73TDxJfAAHeA8Mk9mf8NlIppyhQNo5GLTcYeqgo2lvY= -google.golang.org/genproto/googleapis/api v0.0.0-20241021214115-324edc3d5d38 h1:2oV8dfuIkM1Ti7DwXc0BJfnwr9csz4TDXI9EmiI+Rbw= -google.golang.org/genproto/googleapis/api v0.0.0-20241021214115-324edc3d5d38/go.mod h1:vuAjtvlwkDKF6L1GQ0SokiRLCGFfeBUXWr/aFFkHACc= -google.golang.org/genproto/googleapis/rpc v0.0.0-20241021214115-324edc3d5d38 h1:zciRKQ4kBpFgpfC5QQCVtnnNAcLIqweL7plyZRQHVpI= -google.golang.org/genproto/googleapis/rpc v0.0.0-20241021214115-324edc3d5d38/go.mod h1:GX3210XPVPUjJbTUbvwI8f2IpZDMZuPJWDzDuebbviI= -google.golang.org/grpc v1.67.1 h1:zWnc1Vrcno+lHZCOofnIMvycFcc0QRGIzm9dhnDX68E= -google.golang.org/grpc v1.67.1/go.mod h1:1gLDyUQU7CTLJI90u3nXZ9ekeghjeM7pTDZlqFNg2AA= -google.golang.org/protobuf v1.35.1 h1:m3LfL6/Ca+fqnjnlqQXNpFPABW1UD7mjh8KO2mKFytA= -google.golang.org/protobuf v1.35.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +gonum.org/v1/gonum v0.15.1 h1:FNy7N6OUZVUaWG9pTiD+jlhdQ3lMP+/LcTpJ6+a8sQ0= +gonum.org/v1/gonum v0.15.1/go.mod h1:eZTZuRFrzu5pcyjN5wJhcIhnUdNijYxX1T2IcrOGY0o= +google.golang.org/genproto/googleapis/api v0.0.0-20250505200425-f936aa4a68b2 h1:vPV0tzlsK6EzEDHNNH5sa7Hs9bd7iXR7B1tSiPepkV0= +google.golang.org/genproto/googleapis/api v0.0.0-20250505200425-f936aa4a68b2/go.mod h1:pKLAc5OolXC3ViWGI62vvC0n10CpwAtRcTNCFwTKBEw= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250505200425-f936aa4a68b2 h1:IqsN8hx+lWLqlN+Sc3DoMy/watjofWiU8sRFgQ8fhKM= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250505200425-f936aa4a68b2/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A= +google.golang.org/grpc v1.72.0 h1:S7UkcVa60b5AAQTaO6ZKamFp1zMZSU0fGDK2WZLbBnM= +google.golang.org/grpc v1.72.0/go.mod h1:wH5Aktxcg25y1I3w7H69nHfXdOG3UiadoBtjh3izSDM= +google.golang.org/protobuf v1.36.6 h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9xY= +google.golang.org/protobuf v1.36.6/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= diff --git a/grafana/rmf-app/makefile b/grafana/rmf-app/makefile index 48dc5e7d..2cc2fcb2 100644 --- a/grafana/rmf-app/makefile +++ b/grafana/rmf-app/makefile @@ -16,7 +16,7 @@ all: clean build zip ## Executes clean build and zip tasks ##@ Dependencies node_modules: package.json yarn.lock - yarn install --frozen-lockfile + yarn install --immutable deps-frontend: node_modules ## Install Node.js dependencies diff --git a/grafana/rmf-app/package.json b/grafana/rmf-app/package.json index b4f98772..27503125 100644 --- a/grafana/rmf-app/package.json +++ b/grafana/rmf-app/package.json @@ -1,7 +1,7 @@ { "author": "IBM", "name": "ibm-rmf", - "version": "1.0.8", + "version": "1.0.9", "description": "IBM RMF for z/OS", "license": "Apache-2.0", "scripts": { @@ -28,58 +28,58 @@ "upgrade": "yarn upgrade --latest" }, "devDependencies": { - "@babel/core": "^7.25.9", + "@babel/core": "^7.27.1", "@grafana/eslint-config": "^8.0.0", "@grafana/tsconfig": "^2.0.0", - "@playwright/test": "^1.48.1", - "@swc/core": "^1.7.39", - "@swc/helpers": "^0.5.13", - "@swc/jest": "^0.2.36", - "@testing-library/jest-dom": "^6.6.2", - "@testing-library/react": "^16.0.1", + "@playwright/test": "^1.52.0", + "@swc/core": "^1.11.24", + "@swc/helpers": "^0.5.17", + "@swc/jest": "^0.2.38", + "@testing-library/jest-dom": "^6.6.3", + "@testing-library/react": "^16.3.0", "@types/jest": "^29.5.14", - "@types/lodash": "^4.17.12", - "@types/node": "^22.7.9", + "@types/lodash": "^4.17.16", + "@types/node": "^22.15.17", "@types/react-router-dom": "^5.3.3", - "copy-webpack-plugin": "^12.0.2", + "copy-webpack-plugin": "^13.0.0", "css-loader": "^7.1.2", "eslint-plugin-deprecation": "^3.0.0", - "eslint-webpack-plugin": "^4.2.0", - "fork-ts-checker-webpack-plugin": "^9.0.2", - "glob": "^11.0.0", + "eslint-webpack-plugin": "^5.0.1", + "fork-ts-checker-webpack-plugin": "^9.1.0", + "glob": "^11.0.2", "identity-obj-proxy": "^3.0.0", "imports-loader": "^5.0.0", "jest": "^29.7.0", "jest-environment-jsdom": "^29.7.0", - "prettier": "^3.3.3", + "prettier": "^3.5.3", "replace-in-file-webpack-plugin": "^1.0.6", - "sass": "^1.80.3", - "sass-loader": "^16.0.2", + "sass": "^1.87.0", + "sass-loader": "^16.0.5", "style-loader": "^4.0.0", "swc-loader": "^0.2.6", "ts-node": "^10.9.2", "tsconfig-paths": "^4.2.0", - "typescript": "^5.6.3", - "webpack": "^5.95.0", - "webpack-cli": "^5.1.4", + "typescript": "^5.8.3", + "webpack": "^5.99.8", + "webpack-cli": "^6.0.1", "webpack-livereload-plugin": "^3.0.2", "webpack-virtual-modules": "^0.6.2" }, "engines": { - "node": ">=20" + "node": ">=22" }, "dependencies": { - "@emotion/css": "^11.13.4", - "@grafana/data": "^11.3.0", - "@grafana/runtime": "^11.3.0", - "@grafana/schema": "^11.3.0", - "@grafana/ui": "^11.3.0", + "@emotion/css": "^11.13.5", + "@grafana/data": "^12.0.0", + "@grafana/runtime": "^12.0.0", + "@grafana/schema": "^12.0.0", + "@grafana/ui": "^12.0.0", "antlr4": "^4.13.2", - "react": "^18.3.1", - "react-dom": "^18.3.1", - "react-router-dom": "^6.27.0", - "rxjs": "^7.8.1", - "tslib": "^2.8.0" + "react": "^19.1.0", + "react-dom": "^19.1.0", + "react-router-dom": "^7.6.0", + "rxjs": "^7.8.2", + "tslib": "^2.8.1" }, - "packageManager": "yarn@4.5.0" + "packageManager": "yarn@4.9.1" } diff --git a/grafana/rmf-app/pkg/plugin/cache/channel.go b/grafana/rmf-app/pkg/plugin/cache/channel.go index 0ac92c3c..776b3d7c 100644 --- a/grafana/rmf-app/pkg/plugin/cache/channel.go +++ b/grafana/rmf-app/pkg/plugin/cache/channel.go @@ -1,6 +1,6 @@ /** -* (C) Copyright IBM Corp. 2023, 2024. -* (C) Copyright Rocket Software, Inc. 2023-2024. +* (C) Copyright IBM Corp. 2023, 2025. +* (C) Copyright Rocket Software, Inc. 2023-2025. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -19,39 +19,45 @@ package cache import ( "encoding/json" + "time" "github.com/IBM/RMF/grafana/rmf-app/pkg/plugin/frame" - "github.com/VictoriaMetrics/fastcache" + "github.com/grafana/grafana-plugin-sdk-go/backend" ) type ChannelCache struct { cache *fastcache.Cache } -func NewChannelCache(size int) *ChannelCache { - return &ChannelCache{cache: fastcache.New(size * 1024 * 1024)} +type Channel struct { + Resource string + TimeRange backend.TimeRange + Absolute bool + Step time.Duration + Fields frame.SeriesFields } -func (cc *ChannelCache) GetChannelQuery(path string) (*frame.QueryModel, error) { - var query frame.QueryModel - queryBytes := cc.cache.Get(nil, []byte(path)) - err := json.Unmarshal(queryBytes, &query) - return &query, err +func NewChannelCache(size int) *ChannelCache { + return &ChannelCache{cache: fastcache.New(size * 1024 * 1024)} } -func (cc *ChannelCache) SetChannelQuery(path string, query *frame.QueryModel) error { - queryBytes, err := json.Marshal(*query) - if err == nil { - cc.cache.Set([]byte(path), queryBytes) - } - return err +func (cc *ChannelCache) Reset() { + cc.cache.Reset() } -func (cc *ChannelCache) HasChannelQuery(path string) bool { - return cc.cache.Has([]byte(path)) +func (cc *ChannelCache) Get(path string) (*Channel, error) { + var c Channel + b := cc.cache.Get(nil, []byte(path)) + err := json.Unmarshal(b, &c) + return &c, err } -func (cc *ChannelCache) Reset() { - cc.cache.Reset() +func (cc *ChannelCache) Set(path string, c *Channel) error { + b, err := json.Marshal(*c) + if err != nil { + return err + } + cc.cache.Set([]byte(path), b) + return nil } diff --git a/grafana/rmf-app/pkg/plugin/cache/frame.go b/grafana/rmf-app/pkg/plugin/cache/frame.go index cb23db2a..2d25af8b 100644 --- a/grafana/rmf-app/pkg/plugin/cache/frame.go +++ b/grafana/rmf-app/pkg/plugin/cache/frame.go @@ -1,6 +1,6 @@ /** -* (C) Copyright IBM Corp. 2023, 2024. -* (C) Copyright Rocket Software, Inc. 2023-2024. +* (C) Copyright IBM Corp. 2023, 2025. +* (C) Copyright Rocket Software, Inc. 2023-2025. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -19,23 +19,15 @@ package cache import ( "encoding/json" - "math" - "time" + "fmt" - "github.com/IBM/RMF/grafana/rmf-app/pkg/plugin/frame" + "github.com/IBM/RMF/grafana/rmf-app/pkg/plugin/dds" "github.com/IBM/RMF/grafana/rmf-app/pkg/plugin/log" "github.com/VictoriaMetrics/fastcache" "github.com/grafana/grafana-plugin-sdk-go/data" ) -type CacheItemValue struct { - ValueKey time.Time - Value data.Frame - - frame.ResponseStatus -} - type FrameCache struct { cache *fastcache.Cache } @@ -44,68 +36,50 @@ func NewFrameCache(size int) *FrameCache { return &FrameCache{cache: fastcache.New(size * 1024 * 1024)} } -func (fc *FrameCache) getCacheItemValue(key []byte) *CacheItemValue { - logger := log.Logger.With("func", "getCacheItemValue") - byteCacheItemValue := fc.cache.GetBig(nil, key) - if byteCacheItemValue != nil { - var cacheItemValue CacheItemValue - err := json.Unmarshal(byteCacheItemValue, &cacheItemValue) - if err != nil { - logger.Debug("Unmarshal error", "err", err, "key", string(key)) - return nil - } - return &cacheItemValue - } - return nil +func (fc *FrameCache) Reset() { + fc.cache.Reset() } -func (fc *FrameCache) GetFrame(qm *frame.QueryModel) *data.Frame { - var ( - resultframe *data.Frame - ) - matchedCacheItem := fc.getCacheItemValue(qm.CacheKey()) - if matchedCacheItem != nil { - diffInSecs := int(matchedCacheItem.ValueKey.Sub(qm.CurrentTime).Seconds()) - if int(math.Abs(float64(diffInSecs))) <= int(matchedCacheItem.Mintime) { - qm.Update(&matchedCacheItem.ResponseStatus) - resultframe = &matchedCacheItem.Value - } +func FrameKey(r *dds.Request, wide bool) []byte { + format := "long" + if wide { + format = "wide" } - return resultframe + return []byte(fmt.Sprintf("%s[%s]@%d-%d", r.Resource, format, r.TimeRange.From.UnixMilli(), r.TimeRange.To.UnixMilli())) } -func (fc *FrameCache) SaveFrame(frame *data.Frame, qm *frame.QueryModel) error { - logger := log.Logger.With("func", "SaveFrame") +func (fc *FrameCache) Get(r *dds.Request, wide bool) *data.Frame { + logger := log.Logger.With("func", "FrameCache.Get") + defer log.LogAndRecover(logger) - var cacheItemValue *CacheItemValue - cacheItemValue = fc.getCacheItemValue(qm.CacheKey()) - if cacheItemValue != nil { - if cacheItemValue.CurrentTime.Equal(qm.CurrentTime) { - logger.Debug("cache item already exist", "key", string(qm.CacheKey())) + var frame data.Frame + key := FrameKey(r, wide) + buf := fc.cache.GetBig(nil, key) + if buf != nil { + // FIXME + // Sometimes it causes panic: "runtime error: index out of range [21] with length 21" and similar + // It's a Grafana SDK bug. + err := json.Unmarshal(buf, &frame) + if err != nil { + logger.Error("Unmarshal error", "err", err, "key", key) return nil + } else { + return &frame } } - var newCacheItemValue CacheItemValue = fc.createCacheItemValue(frame, qm) + return nil +} - if cacheItemValueBytes, err := json.Marshal(&newCacheItemValue); err != nil { +func (fc *FrameCache) Set(f *data.Frame, r *dds.Request, wide bool) error { + key := FrameKey(r, wide) + frame := fc.Get(r, wide) + if frame != nil { + return nil + } + val, err := json.Marshal(&f) + if err != nil { return err - } else { - fc.cache.SetBig(qm.CacheKey(), cacheItemValueBytes) - logger.Debug("cache item added", "key", string(qm.CacheKey())) } + fc.cache.SetBig(key, val) return nil } - -func (fc *FrameCache) createCacheItemValue(frame *data.Frame, qm *frame.QueryModel) CacheItemValue { - var ( - cacheItemValue CacheItemValue - ) - cacheItemValue.ValueKey = qm.CurrentTime - cacheItemValue.Value = *frame - cacheItemValue.Update(&qm.ResponseStatus) - return cacheItemValue -} - -func (fc *FrameCache) Reset() { - fc.cache.Reset() -} diff --git a/grafana/rmf-app/pkg/plugin/config.go b/grafana/rmf-app/pkg/plugin/config.go index 924809d9..5ab25b57 100644 --- a/grafana/rmf-app/pkg/plugin/config.go +++ b/grafana/rmf-app/pkg/plugin/config.go @@ -1,6 +1,6 @@ /** -* (C) Copyright IBM Corp. 2023, 2024. -* (C) Copyright Rocket Software, Inc. 2023-2024. +* (C) Copyright IBM Corp. 2023, 2025. +* (C) Copyright Rocket Software, Inc. 2023-2025. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -30,11 +30,6 @@ const DefaultHttpTimeout = 60 const DefaultCacheSizeMB = 1024 const MinimalCacheSizeMB = 128 -// There's up to two queries per channel to be cached. -// One query takes about 1KB of memory. -// So, 16MB means about 8k channels per data source. -const ChannelCacheSizeMB = 16 - type Config struct { URL string Timeout int @@ -95,7 +90,7 @@ func (ds *RMFDatasource) getConfig(settings backend.DataSourceInstanceSettings) } } if config.CacheSize, err = strconv.Atoi(config.JSON.CacheSizeRaw); err != nil { - logger.Warn("cache size is not valid, applying default", "cacheSize", config.JSON.CacheSizeRaw) + logger.Warn("cache size is not valid, applying default", "cacheSizeRaw", config.JSON.CacheSizeRaw) config.CacheSize = DefaultCacheSizeMB } if config.CacheSize < MinimalCacheSizeMB { diff --git a/grafana/rmf-app/pkg/plugin/datasource.go b/grafana/rmf-app/pkg/plugin/datasource.go index 3faf4d71..3cb980dc 100644 --- a/grafana/rmf-app/pkg/plugin/datasource.go +++ b/grafana/rmf-app/pkg/plugin/datasource.go @@ -1,6 +1,6 @@ /** -* (C) Copyright IBM Corp. 2023, 2024. -* (C) Copyright Rocket Software, Inc. 2023-2024. +* (C) Copyright IBM Corp. 2023, 2025. +* (C) Copyright Rocket Software, Inc. 2023-2025. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -21,8 +21,6 @@ import ( "context" "encoding/json" "errors" - "fmt" - "math" "net/http" "runtime/debug" "strings" @@ -54,7 +52,9 @@ var ( _ backend.StreamHandler = (*RMFDatasource)(nil) ) -const SdsDelay = 5 +const ChannelCacheSizeMB = 64 +const SdsDelay = 5 * time.Second +const TimeSeriesType = "TimeSeries" type RMFDatasource struct { uid string @@ -184,6 +184,14 @@ func (ds *RMFDatasource) CallResource(ctx context.Context, req *backend.CallReso } } +type RequestParams struct { + Resource struct { + Value string `json:"value"` + } `json:"selectedResource"` + AbsoluteTime bool `json:"absoluteTimeSelected"` + VisType string `json:"selectedVisualisationType"` +} + // QueryData handles multiple queries and returns multiple responses. // req contains the queries []DataQuery (where each query contains RefID as a unique identifier). // The QueryDataResponse contains a map of RefID to the response for each query, and each response @@ -221,34 +229,69 @@ func (ds *RMFDatasource) QueryData(ctx context.Context, req *backend.QueryDataRe for _, query := range req.Queries { wg.Add(1) - go func(q backend.DataQuery) { + go func(q *backend.DataQuery) { defer wg.Done() + var response *backend.DataResponse - qm, err := frame.NewQueryModel(q) + var params RequestParams + err := json.Unmarshal(q.JSON, ¶ms) + if err != nil { - if errors.Is(err, frame.ErrBlankResource) { - response = &backend.DataResponse{Status: backend.StatusOK} - } else { - response = &backend.DataResponse{Status: backend.StatusBadRequest, Error: err} - } + response = &backend.DataResponse{Status: backend.StatusBadRequest, Error: err} + } else if params.Resource.Value == "" { + response = &backend.DataResponse{Status: backend.StatusOK} } else { - // nolint:contextcheck - qm.TimeOffset = ds.ddsClient.GetCachedTimeOffset() - // nolint:contextcheck - qm.Mintime = ds.ddsClient.GetCachedMintime() - if qm.SelectedVisualisationType == frame.TimeSeriesType { - response = ds.queryTimeSeries(ctx, req.PluginContext, qm) + mintime := ds.ddsClient.GetCachedMintime() + if params.VisType == TimeSeriesType { + // Initialize time series stream + step := getStep(mintime, q.Interval) + fields := frame.SeriesFields{} + start := q.TimeRange.From + r := dds.NewRequest(params.Resource.Value, start, start, step) + f, jump, err := ds.getCachedTSFrames(r, q.TimeRange.To, step, fields) + if f == nil || err != nil { + f = frame.TaggedFrame(q.TimeRange.From, "No data yet...") + } + channel := live.Channel{ + Scope: live.ScopeDatasource, + Namespace: ds.uid, + Path: uuid.NewString(), + } + cachedChannel := cache.Channel{ + Resource: params.Resource.Value, + TimeRange: backend.TimeRange{From: start.Add(jump), To: q.TimeRange.To}, + Absolute: params.AbsoluteTime, + Step: step, + Fields: fields, + } + err = ds.channelCache.Set(channel.Path, &cachedChannel) + if err != nil { + response = &backend.DataResponse{Status: backend.StatusInternal, Error: err} + } else { + f.SetMeta(&data.FrameMeta{Channel: channel.String()}) + response = &backend.DataResponse{Frames: data.Frames{f}} + } } else { - // FIXME: it's not actually table data. Just not time series. - response = ds.queryTableData(ctx, qm) - } - if response == nil { - err = log.ErrorWithId(logger, log.InternalError, "query response is nil") - response = &backend.DataResponse{Status: backend.StatusInternal, Error: err} + // Query non-timeseries data + r := dds.NewRequest(params.Resource.Value, q.TimeRange.From, q.TimeRange.To, mintime) + response = &backend.DataResponse{} + // FIXME: doesn't it need to be cached? + if newFrame, err := ds.getFrame(r, false); err != nil { + var msg *dds.Message + if errors.As(err, &msg) { + response.Error = err + response.Status = backend.StatusBadRequest + } else { + response.Error = log.FrameErrorWithId(logger, err) + response.Status = backend.StatusInternal + } + } else if newFrame != nil { + response.Frames = append(response.Frames, newFrame) + } } } responseChan <- ResponseWithId{refId: q.RefID, response: response} - }(query) + }(&query) } @@ -262,406 +305,86 @@ func (ds *RMFDatasource) QueryData(ctx context.Context, req *backend.QueryDataRe return qr, nil } -func (ds *RMFDatasource) queryTimeSeries(ctx context.Context, pCtx backend.PluginContext, query *frame.QueryModel) *backend.DataResponse { - logger := log.Logger.With("func", "queryTimeSeries") - - var ( - newFrame *data.Frame - err error - dataResponse *backend.DataResponse = &backend.DataResponse{} - ) - - setQueryTimeRange(query, false) - if latestNotReady(query.CurrentTime, query.Mintime) { - logger.Debug("interval not yet ready, step back", "time", query.CurrentTime.String()) - moveNextPrevious(query, false) - } - if newFrame, err = ds.getFrameFromCacheOrServer(ctx, query); err != nil { - // nolint:errorlint - if cause, ok := errors.Unwrap(err).(*dds.Message); ok { - dataResponse.Error = cause - dataResponse.Status = backend.StatusBadRequest - } else { - dataResponse.Error = log.FrameErrorWithId(logger, err) - dataResponse.Status = backend.StatusInternal - } - } else if newFrame != nil { - dataResponse.Frames = append(dataResponse.Frames, newFrame) - if err := ds.createChannelForStreaming(pCtx, query, newFrame); err != nil { - dataResponse.Error = err - } - } - return dataResponse -} - -func (ds *RMFDatasource) createChannelForStreaming(pCtx backend.PluginContext, query *frame.QueryModel, firstFrame *data.Frame) error { - channelPath := uuid.New().String() - channel := live.Channel{ - Scope: live.ScopeDatasource, - Namespace: pCtx.DataSourceInstanceSettings.UID, - Path: channelPath, - } - firstFrame.SetMeta(&data.FrameMeta{Channel: channel.String()}) - query.SeriesFields = frame.SeriesFields{} - frame.SyncFieldNames(query.SeriesFields, firstFrame, query.CurrentTime) - return ds.channelCache.SetChannelQuery(channelPath, query) -} - -// RunStream is called once for any open channel. Results are shared with everyone +// RunStream is called once for any open channel. Results are shared with everyone // subscribed to the same channel. func (ds *RMFDatasource) RunStream(ctx context.Context, req *backend.RunStreamRequest, sender *backend.StreamSender) error { logger := log.Logger.With("func", "RunStream") // Recover from any panic so as to not bring down this backend datasource defer log.LogAndRecover(logger) - var err error - query, err := ds.channelCache.GetChannelQuery(req.Path) - if err != nil { - return err - } - logger.Debug("RunStream", "path", req.Path, "query", query.SelectedQuery, "dashboard", query.DashboardUid, "absoluteTime", query.AbsoluteTimeSelected) - // Stream absolute or relative timeline data - if query.AbsoluteTimeSelected { - err = ds.streamDataForAbsoluteRange(ctx, req, sender, query) - } else { - err = ds.streamDataForRelativeRange(ctx, req, sender, query) - } - return err -} - -func (ds *RMFDatasource) streamDataForAbsoluteRange(ctx context.Context, req *backend.RunStreamRequest, sender *backend.StreamSender, matchedQueryModel *frame.QueryModel) error { - var waitTime time.Duration - logger := log.Logger.With("func", "streamDataForAbsoluteRange") - //Recover from any panic so as to not bring down this backend datasource - defer log.LogAndRecover(logger) - - // Set wait time to 1/100th of a second - waitTime = (time.Second * time.Duration(1)) / 100 - - // Stream data frames periodically till stream closed by Grafana. - err := ds.streamDataAbsolute(ctx, req, sender, matchedQueryModel, waitTime) + // res, from, to, absolute, interval, err := decodeChannelPath(string(req.Path)) + c, err := ds.channelCache.Get(req.Path) if err != nil { - return err + logger.Error("unable to find channel", "err", err) + return nil } - - return nil -} - -func (ds *RMFDatasource) streamDataForRelativeRange(ctx context.Context, req *backend.RunStreamRequest, sender *backend.StreamSender, matchedQueryModel *frame.QueryModel) error { - logger := log.Logger.With("func", "streamDataForRelativeRange") - //Recover from any panic so as to not bring down this backend datasource - defer log.LogAndRecover(logger) - - // Set wait time to 'ServiceCallInterval' for relative and 1/100th of a second for historical - waitTime := (time.Second * time.Duration(matchedQueryModel.Mintime)) - histWaitTime := (time.Second * time.Duration(1)) / 100 - - // Stream data frames periodically till stream closed by Grafana. - err := ds.streamDataRelative(ctx, req, sender, matchedQueryModel, &waitTime, &histWaitTime) - if err != nil { - return err - } - return nil -} - -func (ds *RMFDatasource) streamDataAbsolute(ctx context.Context, req *backend.RunStreamRequest, sender *backend.StreamSender, matchedQueryModel *frame.QueryModel, waitTime time.Duration) error { - logger := log.Logger.With("func", "streamDataAbsolute") - var ( - newFrame *data.Frame - err error - ) - histTicker := time.NewTicker(waitTime) - seriesFields := matchedQueryModel.SeriesFields - + res := c.Resource + step := c.Step + absolute := c.Absolute + from := c.TimeRange.From + to := c.TimeRange.To + fields := c.Fields + + logger.Debug("starting streaming", "step", step.String(), "path", req.Path) + r := dds.NewRequest(res, from, from, step) + + // Stream historical part of time series + stop := to for { - select { - case <-ctx.Done(): - err := ctx.Err() - logger.Debug("closing stream: Done.", "reason", err, "path", req.Path) - histTicker.Stop() - return err - case <-histTicker.C: - if matchedQueryModel.TimeRangeExceeded() { - histTicker.Stop() - logger.Debug("closing stream", "reason", "finished with historical data", "path", req.Path, "CurrentTime", matchedQueryModel.CurrentTime.String(), "TimeRangeFrom", matchedQueryModel.TimeRangeFrom, "TimeRangeTo", matchedQueryModel.TimeRangeTo.String()) + if !absolute { + stop = time.Now().Add(-SdsDelay) + } + if r.TimeRange.To.After(stop) { + logger.Debug("finished with historical data", "request", r.String(), "path", req.Path) + break + } + f, jump, err := ds.getCachedTSFrames(r, stop, step, fields) + if err != nil { + logger.Info("streaming stopped", "reason", err, "path", req.Path) + return nil + } + if f != nil { + if err := sender.SendFrame(f, data.IncludeAll); err != nil { + logger.Info("streaming stopped", "reason", err, "path", req.Path) return nil } - setQueryTimeRange(matchedQueryModel) - if latestNotReady(matchedQueryModel.CurrentTime, matchedQueryModel.Mintime) { - logger.Debug("interval not yet ready", "time", matchedQueryModel.CurrentTime.String()) - continue - } - // Send new data periodically. - logger.Debug("executing query", "query", matchedQueryModel.SelectedQuery, "current", matchedQueryModel.CurrentTime, "to", matchedQueryModel.TimeRangeTo) - if newFrame, err = ds.getFrameFromCacheOrServer(ctx, matchedQueryModel); err != nil { - moveNextPrevious(matchedQueryModel, true) - return log.ErrorWithId(logger, log.InternalError, "could not get new frame", "error", err) - } - if matchedQueryModel.CurrentTime.Equal(matchedQueryModel.LastTime) { - moveNextPrevious(matchedQueryModel, true) - logger.Debug("skip frame due to duplication", "time", matchedQueryModel.CurrentTime.String()) - continue - } - matchedQueryModel.LastTime = matchedQueryModel.CurrentTime - frame.SyncFieldNames(seriesFields, newFrame, matchedQueryModel.CurrentTime) - err = sender.SendFrame(newFrame, data.IncludeAll) - if err != nil { - return log.ErrorWithId(logger, log.InternalError, "failed to send frame", "error", err) - } - err = ds.channelCache.SetChannelQuery(req.Path, matchedQueryModel) - if err != nil { - return log.ErrorWithId(logger, log.InternalError, "failed to save frame in cache", "error", err) - } + r.Add(jump) + continue } - } -} - -func (ds *RMFDatasource) streamDataRelative(ctx context.Context, req *backend.RunStreamRequest, sender *backend.StreamSender, matchedQueryModel *frame.QueryModel, waitTime *time.Duration, histWaitTime *time.Duration) error { - logger := log.Logger.With("func", "streamDataRelative") - var newFrame *data.Frame - // FIXME: tickers are not suitable for the streaming. - // Time for the next request should be calculated based on the time of the latest response. - // Also, requests for historical and current data should be synchronized. - mainTicker := time.NewTicker(*waitTime) - histTicker := time.NewTicker(*histWaitTime) - seriesFields := matchedQueryModel.SeriesFields - duration := matchedQueryModel.TimeRangeTo.Sub(matchedQueryModel.TimeRangeFrom) - - histQueryModel, err := ds.channelCache.GetChannelQuery(req.Path + "/h") - if err != nil { - histQueryModel = matchedQueryModel.Copy() - histQueryModel.AbsoluteTimeSelected = true - } - - for { - select { - case <-ctx.Done(): // Did the client cancel out? - err := ctx.Err() - logger.Debug("closing stream: Done.", "reason", err, "path", req.Path) - // Stop tickers to enable garbage collection of resources - mainTicker.Stop() - histTicker.Stop() - return err - case <-histTicker.C: - if histQueryModel.TimeRangeExceeded() { - histTicker.Stop() - logger.Debug("finished with historical data", "path", req.Path, "CurrentTime", histQueryModel.CurrentTime.String(), "TimeRangeFrom", matchedQueryModel.TimeRangeFrom.String(), "TimeRangeTo", matchedQueryModel.TimeRangeTo.String()) - continue - } - setQueryTimeRange(histQueryModel, true) - logger.Debug("executing query for historical data", "query", histQueryModel.SelectedQuery, "current", histQueryModel.CurrentTime, "from", histQueryModel.TimeRangeFrom) - // Fetch the data - if latestNotReady(histQueryModel.CurrentTime, histQueryModel.Mintime) { - logger.Debug("interval not yet ready", "time", histQueryModel.CurrentTime.String()) - continue - } - if newFrame, err = ds.getFrameFromCacheOrServer(ctx, histQueryModel); err != nil { - moveNextPrevious(histQueryModel, false) - return log.ErrorWithId(logger, log.InternalError, "could not get new frame for historical data", "error", err) - } - if histQueryModel.CurrentTime.Equal(histQueryModel.LastTime) { - logger.Debug("skip frame due to duplication", "time", histQueryModel.CurrentTime.String()) - moveNextPrevious(histQueryModel, false) - continue - } - histQueryModel.LastTime = histQueryModel.CurrentTime - frame.SyncFieldNames(seriesFields, newFrame, histQueryModel.CurrentTime) - err = sender.SendFrame(newFrame, data.IncludeAll) - if err != nil { - return log.ErrorWithId(logger, log.InternalError, "failed to send frame for historical data", "error", err) - } - err = ds.channelCache.SetChannelQuery(req.Path+"/h", matchedQueryModel) - if err != nil { - return log.ErrorWithId(logger, log.InternalError, "failed to save frame in cache", "error", err) - } - case <-mainTicker.C: - var numberOfIterations int - if numberOfIterations, err = getIterationsForRelativePlotting(matchedQueryModel); err != nil { - return err - } - logger.Debug("executing query for relative data", "query", matchedQueryModel.SelectedQuery, "iterations", numberOfIterations) - for counter := 0; counter < numberOfIterations; counter++ { - setQueryTimeRange(matchedQueryModel) - if latestNotReady(matchedQueryModel.CurrentTime, matchedQueryModel.Mintime) { - logger.Debug("interval not yet ready", "time", matchedQueryModel.CurrentTime.String()) - continue - } - logger.Debug("executing query", "query", matchedQueryModel.SelectedQuery, "current", matchedQueryModel.CurrentTime) - if newFrame, err = ds.getFrameFromCacheOrServer(ctx, matchedQueryModel); err != nil { - moveNextPrevious(matchedQueryModel, true) - return log.ErrorWithId(logger, log.InternalError, "could not get new frame for relative data", "error", err) - } - if matchedQueryModel.CurrentTime.Equal(matchedQueryModel.LastTime) { - moveNextPrevious(matchedQueryModel, true) - logger.Debug("skip frame due to duplication", "time", matchedQueryModel.CurrentTime.String()) - continue - } - matchedQueryModel.LastTime = matchedQueryModel.CurrentTime - frame.RemoveOldFieldNames(seriesFields, matchedQueryModel.CurrentTime.Add(-duration)) - frame.SyncFieldNames(seriesFields, newFrame, histQueryModel.CurrentTime) - err = sender.SendFrame(newFrame, data.IncludeAll) - if err != nil { - return log.ErrorWithId(logger, log.InternalError, "failed to send frame for relative data", "error", err) - } - // Save the query model in cache - err = ds.channelCache.SetChannelQuery(req.Path, matchedQueryModel) - if err != nil { - return log.ErrorWithId(logger, log.InternalError, "failed to save frame in cache", "error", err) - } - } + if err := ds.serveTSFrame(ctx, sender, fields, r, true); err != nil { + logger.Info("streaming stopped", "reason", err, "path", req.Path) + return nil } + r.Add(step) } -} - -func (ds *RMFDatasource) getFrame(ctx context.Context, queryModel *frame.QueryModel) (*data.Frame, error) { - path, params := queryModel.GetPathWithParams() - ddsResponse, err := ds.ddsClient.Get(ctx, path, params...) - if err != nil { - return nil, fmt.Errorf("failed to get DDS response: %w", err) - } - // nolint:contextcheck - newFrame, err := frame.Build(ddsResponse, ds.ddsClient.GetCachedHeaders(), queryModel) - if err != nil { - return nil, fmt.Errorf("failed to construct frame: %w", err) - } - return newFrame, nil -} - -func (ds *RMFDatasource) getFrameFromCacheOrServer(ctx context.Context, queryModel *frame.QueryModel) (*data.Frame, error) { - logger := log.Logger.With("func", "getFrameFromCacheOrServer") - key := string(queryModel.CacheKey()) - result, err, _ := ds.single.Do(key, func() (interface{}, error) { - var ( - newFrame *data.Frame - err error - ) - newFrame = ds.frameCache.GetFrame(queryModel) - // Fetch from the DDS Server and then save to cache if required. - if newFrame == nil { - newFrame, err = ds.getFrame(ctx, queryModel) - if err != nil { - return nil, err - } else { - if err = ds.frameCache.SaveFrame(newFrame, queryModel); err != nil { - return nil, err - } + if !absolute { + // Stream live data as it's being collected + for { + if err := ds.serveTSFrame(ctx, sender, fields, r, false); err != nil { + logger.Info("streaming stopped", "reason", err, "path", req.Path) + return nil } - } else { - logger.Debug("cached value exist", "key", key) + r.Add(step) + } + } else if len(fields) == 0 { + // There is no data at all, send a dummy frame without fields to reflect it in UI + f := data.NewFrame("") + if err := sender.SendFrame(f, data.IncludeAll); err != nil { + logger.Info("streaming stopped", "reason", err, "path", req.Path) + return nil } - return newFrame, nil - }) - if result != nil { - return result.(*data.Frame), err - } else { - return nil, err } + logger.Info("streaming stopped", "reason", "all the data sent", "path", req.Path) + return nil } // SubscribeStream is called when a client wants to connect to a stream. This callback // allows sending the first message. func (ds *RMFDatasource) SubscribeStream(_ context.Context, req *backend.SubscribeStreamRequest) (*backend.SubscribeStreamResponse, error) { - logger := log.Logger.With("func", "SubscribeStream") - // Recover from any panic so as to not bring down this backend datasource - defer log.LogAndRecover(logger) - - status := backend.SubscribeStreamStatusPermissionDenied - if ds.channelCache.HasChannelQuery(req.Path) { - status = backend.SubscribeStreamStatusOK - } - return &backend.SubscribeStreamResponse{Status: status}, nil + return &backend.SubscribeStreamResponse{Status: backend.SubscribeStreamStatusOK}, nil } // PublishStream is called when a client sends a message to the stream. func (d *RMFDatasource) PublishStream(_ context.Context, req *backend.PublishStreamRequest) (*backend.PublishStreamResponse, error) { - logger := log.Logger.With("func", "PublishStream") - // Recover from any panic so as to not bring down this backend datasource - defer log.LogAndRecover(logger) - - // Do not allow publishing at all. return &backend.PublishStreamResponse{Status: backend.PublishStreamStatusPermissionDenied}, nil } - -func (ds *RMFDatasource) queryTableData(ctx context.Context, qm *frame.QueryModel) *backend.DataResponse { - logger := log.Logger.With("func", "queryTableData") - dataResponse := &backend.DataResponse{} - // FIXME: doesn't it need to be cached? - if newFrame, err := ds.getFrame(ctx, qm); err != nil { - // nolint:errorlint - if cause, ok := errors.Unwrap(err).(*dds.Message); ok { - dataResponse.Error = cause - dataResponse.Status = backend.StatusBadRequest - } else { - dataResponse.Error = log.FrameErrorWithId(logger, err) - dataResponse.Status = backend.StatusInternal - } - } else if newFrame != nil { - dataResponse.Frames = append(dataResponse.Frames, newFrame) - } - return dataResponse -} - -func getIterationsForRelativePlotting(qm *frame.QueryModel) (int, error) { - currentTimeUTC := time.Now().UTC() - difference := qm.CurrentTime.Sub(currentTimeUTC) - differenceInSecs := int(math.Abs(difference.Seconds())) - if qm.Mintime == 0 { - return 0, errors.New("ServiceCallInterval must not be zero in GetIterationsForRelativePlotting()") - } - differenceInSecs -= qm.Mintime / 2 - differenceInSecs -= SdsDelay - result := int(differenceInSecs / int(qm.Mintime)) - if result == 0 { - // FIXME: it's not necessarily true. - result = 1 //We need to invoke the svc at least once. So return 1. - } - return result, nil -} - -func setQueryTimeRange(queryModel *frame.QueryModel, plotAbsoluteReverse ...bool) { - var plotReverse bool - if len(plotAbsoluteReverse) > 0 { - if plotAbsoluteReverse[0] { - plotReverse = true - } - } - - // Set the Query Model's TimeSeriesTimeRangeFrom and TimeSeriesTimeRangeTo properties - if queryModel.AbsoluteTimeSelected { // Absolute time - if queryModel.Mintime == 0 || queryModel.CurrentTime.IsZero() { - fromTime := queryModel.TimeRangeFrom - queryModel.CurrentTime = queryModel.AdjustRealtime(fromTime, queryModel.Mintime) - } else { - if plotReverse { - localPrevTime := queryModel.LocalPrev.Add(-1 * queryModel.TimeOffset) - queryModel.CurrentTime = queryModel.AdjustRealtime(localPrevTime, queryModel.Mintime) - } else { - addedTime := queryModel.CurrentTime.Add(time.Duration(time.Second * time.Duration(queryModel.Mintime))) - queryModel.CurrentTime = queryModel.AdjustRealtime(addedTime, queryModel.Mintime) - } - } - } else { // Relative time - if queryModel.Mintime == 0 || queryModel.CurrentTime.IsZero() { - toTime := queryModel.TimeRangeTo - queryModel.CurrentTime = queryModel.AdjustRealtime(toTime, queryModel.Mintime) - } else { - localNextTime := queryModel.LocalNext.Add(-1 * queryModel.TimeOffset) - queryModel.CurrentTime = queryModel.AdjustRealtime(localNextTime, queryModel.Mintime) - } - } -} - -func latestNotReady(t time.Time, m int) bool { - var now time.Time = time.Now() - return t.Add(time.Second*time.Duration(m/2) + SdsDelay).After(now) -} - -func moveNextPrevious(qm *frame.QueryModel, next bool) { - if next { - qm.CurrentTime = qm.CurrentTime.Add(time.Duration(qm.Mintime) * time.Second) - qm.LocalNext = qm.LocalNext.Add(time.Duration(qm.Mintime) * time.Second) - } else { - qm.CurrentTime = qm.CurrentTime.Add(-1 * time.Duration(qm.Mintime) * time.Second) - qm.LocalPrev = qm.LocalPrev.Add(-1 * time.Duration(qm.Mintime) * time.Second) - } -} diff --git a/grafana/rmf-app/pkg/plugin/dds/client.go b/grafana/rmf-app/pkg/plugin/dds/client.go index 1b17b620..62a66d79 100644 --- a/grafana/rmf-app/pkg/plugin/dds/client.go +++ b/grafana/rmf-app/pkg/plugin/dds/client.go @@ -1,6 +1,6 @@ /** -* (C) Copyright IBM Corp. 2023, 2024. -* (C) Copyright Rocket Software, Inc. 2023-2024. +* (C) Copyright IBM Corp. 2023, 2025. +* (C) Copyright Rocket Software, Inc. 2023-2025. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -36,6 +36,7 @@ import ( const UpdateInterval = 15 * time.Minute const DefaultTimeOffset = 0 +const DefaultMinTime = 100 const IndexPath = "/gpm/index.xml" const RootPath = "/gpm/root.xml" @@ -119,9 +120,17 @@ func (c *Client) Close() { }) } -func (c *Client) Get(ctx context.Context, path string, params ...string) (*Response, error) { +func (c *Client) GetByRequest(r *Request) (*Response, error) { + path, params, err := r.pathWithParams(c.GetCachedTimeOffset()) + if err != nil { + return nil, err + } + return c.Get(path, params...) +} + +func (c *Client) Get(path string, params ...string) (*Response, error) { var response Response - data, err := c.GetRaw(ctx, path, params...) + data, err := c.GetRaw(path, params...) if err != nil { return nil, err } @@ -131,7 +140,7 @@ func (c *Client) Get(ctx context.Context, path string, params ...string) (*Respo return &response, nil } -func (c *Client) GetRaw(ctx context.Context, path string, params ...string) ([]byte, error) { +func (c *Client) GetRaw(path string, params ...string) ([]byte, error) { logger := log.Logger.With("func", "GetRaw") path = strings.TrimLeft(path, "/") values := url.Values{} @@ -142,7 +151,8 @@ func (c *Client) GetRaw(ctx context.Context, path string, params ...string) ([]b values.Add(params[i], params[i+1]) } fullURL := fmt.Sprintf("%s/%s?%s", c.baseUrl, path, values.Encode()) - req, err := http.NewRequestWithContext(ctx, http.MethodGet, fullURL, http.NoBody) + // nolint:noctx + req, err := http.NewRequest(http.MethodGet, fullURL, http.NoBody) if err != nil { return nil, err } @@ -167,15 +177,15 @@ func (c *Client) GetRaw(ctx context.Context, path string, params ...string) ([]b } func (c *Client) GetRawIndex(ctx context.Context) ([]byte, error) { - return c.GetRaw(ctx, IndexPath) + return c.GetRaw(IndexPath) } func (c *Client) GetRoot(ctx context.Context) (*Response, error) { - return c.Get(ctx, RootPath) + return c.Get(RootPath) } func (c *Client) GetRawContained(ctx context.Context, resource string) ([]byte, error) { - return c.GetRaw(ctx, ContainedPath, "resource", resource) + return c.GetRaw(ContainedPath, "resource", resource) } func (c *Client) GetCachedTimeOffset() time.Duration { @@ -199,13 +209,15 @@ func (c *Client) ensureTimeData() *TimeData { func (c *Client) updateTimeData() *TimeData { logger := log.Logger.With("func", "updateTimeData") result, _, _ := c.single.Do("timeData", func() (any, error) { - response, err := c.Get(context.Background(), PerformPath, "resource", ",,SYSPLEX", "id", "8D0D50") + response, err := c.Get(PerformPath, "resource", ",,SYSPLEX", "id", "8D0D50") if err != nil { logger.Error("unable to fetch DDS time data", "error", err) + return nil, err } timeData := response.Reports[0].TimeData if timeData == nil { logger.Error("unable to fetch DDS time data", "error", "no time data in DDS response") + return nil, err } c.rwMutex.Lock() c.timeData = timeData @@ -219,10 +231,11 @@ func (c *Client) updateTimeData() *TimeData { return nil } -func (c *Client) GetCachedMintime() int { +func (c *Client) GetCachedMintime() time.Duration { timeData := c.ensureTimeData() - if timeData != nil { - return c.timeData.MinTime.Value + minTime := DefaultMinTime + if timeData != nil && timeData.MinTime.Value != 0 { + minTime = timeData.MinTime.Value } - return 0 + return time.Duration(minTime) * time.Second } diff --git a/grafana/rmf-app/pkg/plugin/dds/headers.go b/grafana/rmf-app/pkg/plugin/dds/headers.go index fa016453..106d1778 100644 --- a/grafana/rmf-app/pkg/plugin/dds/headers.go +++ b/grafana/rmf-app/pkg/plugin/dds/headers.go @@ -1,6 +1,6 @@ /** -* (C) Copyright IBM Corp. 2023, 2024. -* (C) Copyright Rocket Software, Inc. 2023-2024. +* (C) Copyright IBM Corp. 2023, 2025. +* (C) Copyright Rocket Software, Inc. 2023-2025. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,7 +18,6 @@ package dds import ( - "context" "encoding/xml" "regexp" "strings" @@ -78,7 +77,7 @@ func (c *Client) updateHeaders() *HeaderMap { logger := log.Logger.With("func", "GetHeaderMap") result, _, _ := c.single.Do("headers", func() (any, error) { headers := HeaderMap{} - raw, err := c.GetRaw(context.Background(), XslHeadersPath) + raw, err := c.GetRaw(XslHeadersPath) if err != nil { logger.Error("failed to fetch XSL header map", "error", err) return &headers, err @@ -105,14 +104,15 @@ func buildHeaders(res HeaderMap, report string, choose XslChoose) { match := XslConditionRe.FindStringSubmatch(condition) if len(match) > 0 { key, value := match[1], match[2] - if key == "var" { + switch key { + case "var": if _, ok := res[report]; !ok { res[report] = make(map[string]string) } res[report][value] = strings.TrimSpace(when.Text) - } else if key == "report" { + case "report": buildHeaders(res, value, when.Choose) - } else { + default: logger.Error("unexpected condition key in XSL header map", "key", key) } } else { diff --git a/grafana/rmf-app/pkg/plugin/dds/request.go b/grafana/rmf-app/pkg/plugin/dds/request.go new file mode 100644 index 00000000..c5106831 --- /dev/null +++ b/grafana/rmf-app/pkg/plugin/dds/request.go @@ -0,0 +1,81 @@ +/** +* (C) Copyright IBM Corp. 2023, 2025. +* (C) Copyright Rocket Software, Inc. 2023-2025. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. + */ + +package dds + +import ( + "fmt" + "net/url" + "strings" + "time" + + "github.com/grafana/grafana-plugin-sdk-go/data" +) + +type Request struct { + Resource string + TimeRange data.TimeRange +} + +func NewRequest(res string, from time.Time, to time.Time, step time.Duration) *Request { + q := Request{Resource: res, TimeRange: data.TimeRange{From: from, To: to}} + q.Align(step) + return &q +} + +func (r *Request) Align(d time.Duration) { + r.TimeRange.From = r.TimeRange.From.Truncate(d) + t := r.TimeRange.To.Truncate(d) + if t.Equal(r.TimeRange.From) || t.Before(r.TimeRange.To) { + r.TimeRange.To = t.Add(d) + } +} + +func (r *Request) Add(d time.Duration) { + r.TimeRange.From = r.TimeRange.From.Add(d) + r.TimeRange.To = r.TimeRange.To.Add(d) +} + +func (r *Request) String() string { + return fmt.Sprintf("%s [%s - %s]", r.Resource, r.TimeRange.From, r.TimeRange.To) +} + +func (r *Request) formatRange(timeOfs time.Duration) string { + from := r.TimeRange.From + to := r.TimeRange.To + return from.Add(timeOfs).Format(DateTimeFormat) + "," + to.Add(timeOfs).Format(DateTimeFormat) +} + +func (r *Request) pathWithParams(timeOfs time.Duration) (string, []string, error) { + path := "" + rawParams, err := url.ParseQuery(r.Resource) + if err != nil { + return "", nil, err + } + params := make([]string, 0, 1) + for key, values := range rawParams { + if key == "report" { + path = FullReportPath + } + params = append(params, key, strings.Join(values, ";")) + } + if path == "" { + path = PerformPath + } + params = append(params, "range", r.formatRange(timeOfs)) + return path, params, nil +} diff --git a/grafana/rmf-app/pkg/plugin/dds/response.go b/grafana/rmf-app/pkg/plugin/dds/response.go index a051ae7c..65d731c6 100644 --- a/grafana/rmf-app/pkg/plugin/dds/response.go +++ b/grafana/rmf-app/pkg/plugin/dds/response.go @@ -98,7 +98,7 @@ func (dt *DateTime) MarshalJSON() ([]byte, error) { if dt == nil { return nil, nil } - return []byte(`"` + dt.Time.Format(DateTimeFormat) + `"`), nil + return []byte(`"` + dt.Format(DateTimeFormat) + `"`), nil } type Message struct { diff --git a/grafana/rmf-app/pkg/plugin/frame/frame.go b/grafana/rmf-app/pkg/plugin/frame/frame.go index c8d42743..f85268d7 100644 --- a/grafana/rmf-app/pkg/plugin/frame/frame.go +++ b/grafana/rmf-app/pkg/plugin/frame/frame.go @@ -1,6 +1,6 @@ /** -* (C) Copyright IBM Corp. 2023, 2024. -* (C) Copyright Rocket Software, Inc. 2023-2024. +* (C) Copyright IBM Corp. 2023, 2025. +* (C) Copyright Rocket Software, Inc. 2023-2025. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -22,6 +22,7 @@ import ( "fmt" "math" "strconv" + "strings" "time" "github.com/grafana/grafana-plugin-sdk-go/data" @@ -34,7 +35,22 @@ const BannerPrefix = "Banner::" const CaptionPrefix = "Caption::" const ReportDateFormat = "01/02/2006 15:04:05" -func Build(ddsResponse *dds.Response, headers *dds.HeaderMap, queryModel *QueryModel) (*data.Frame, error) { +func TaggedFrame(t time.Time, tag string) *data.Frame { + return data.NewFrame( + "", + data.NewField("time", nil, []time.Time{t}), + data.NewField(tag, nil, []*float64{nil}), + ) +} + +func NoDataFrame(t time.Time) *data.Frame { + return data.NewFrame( + "", + data.NewField("time", nil, []time.Time{t}), + ) +} + +func Build(ddsResponse *dds.Response, headers *dds.HeaderMap, wide bool) (*data.Frame, error) { logger := log.Logger.With("func", "Build") reportsNum := len(ddsResponse.Reports) @@ -62,47 +78,28 @@ func Build(ddsResponse *dds.Response, headers *dds.HeaderMap, queryModel *QueryM } format := report.Metric.Format - timeCopy := queryModel.CurrentTime - queryModel.UpdateFromTimeData(report.TimeData) - if !queryModel.CurrentTime.Equal(timeCopy) { - logger.Debug("CurrentTime updated", "before", timeCopy.String(), - "after", queryModel.CurrentTime.String(), - "mintime", queryModel.Mintime, - "start", report.TimeData.LocalStart.Time.String(), - "end", report.TimeData.LocalEnd.Time.String(), - "prev", report.TimeData.LocalPrev.Time.String(), - "next", report.TimeData.LocalNext.Time.String()) - } + frameName := strings.Trim(report.Metric.Description, " ") var newFrame *data.Frame + if format == dds.ReportFormat { - newFrame = buildForReport(&report, headers, queryModel) + newFrame = buildForReport(&report, headers, frameName) + } else if wide { + return buildWideForMetric(&report, frameName), nil } else { - newFrame = buildForMetric(&report, queryModel) + return buildLongForMetric(&report, frameName), nil } return newFrame, nil } -// buildForMetric parses JSON string and create a data frame either for time series or a regular one. -func buildForMetric(report *dds.Report, query *QueryModel) *data.Frame { - queryName := getFrameName(query) - - if query.SelectedVisualisationType == TimeSeriesType { - return buildWideForMetric(report, queryName) - } else { - return buildLongForMetric(report, queryName) - } -} - // buildWideForMetric creates a time series data frame for a metric from pre-parsed DDS response. // Grafana frame format: wide. -func buildWideForMetric(report *dds.Report, queryName string) *data.Frame { - frameName := queryName +func buildWideForMetric(report *dds.Report, frameName string) *data.Frame { timestamp := report.TimeData.UTCEnd.Time metricFormat := report.Metric.Format - labels := getFrameLabels(metricFormat, queryName) + labels := getFrameLabels(metricFormat, frameName) resultFrame := data.NewFrame(frameName, data.NewField("time", nil, []time.Time{timestamp})) - iterateMetricRows(report, queryName, + iterateMetricRows(report, frameName, func(name string, value *float64) { newField := data.NewField(name, labels, []*float64{value}) resultFrame.Fields = append(resultFrame.Fields, newField) @@ -113,7 +110,7 @@ func buildWideForMetric(report *dds.Report, queryName string) *data.Frame { // Solution for single type metric is to send nil values if there's no data. // For list type metrics, we don't have column names to do the same; it has to be fixed differently. if len(resultFrame.Fields) == 1 && metricFormat == "single" { - newField := data.NewField(queryName, labels, []*float64{nil}) + newField := data.NewField(frameName, labels, []*float64{nil}) resultFrame.Fields = append(resultFrame.Fields, newField) } @@ -122,15 +119,15 @@ func buildWideForMetric(report *dds.Report, queryName string) *data.Frame { // buildLongForMetric creates a non time series data frame for a metric from pre-parsed DDS response. // Grafana frame format: long. -func buildLongForMetric(report *dds.Report, queryName string) *data.Frame { +func buildLongForMetric(report *dds.Report, frameName string) *data.Frame { metricFormat := report.Metric.Format nameField := "metric" timestamp := report.TimeData.UTCEnd.Time - valField := queryName + valField := frameName if metricFormat == "list" { - valField, nameField = splitQueryName(queryName) + valField, nameField = splitQueryName(frameName) if nameField == "" { - nameField = queryName + nameField = frameName valField = "value" } } @@ -141,7 +138,7 @@ func buildLongForMetric(report *dds.Report, queryName string) *data.Frame { data.NewField(valField, nil, []*float64{}), ) - iterateMetricRows(report, queryName, + iterateMetricRows(report, frameName, func(name string, value *float64) { resultFrame.Fields[0].Append(timestamp) resultFrame.Fields[1].Append(name) @@ -153,25 +150,40 @@ func buildLongForMetric(report *dds.Report, queryName string) *data.Frame { // iterateMetricRows parses metric key-value pairs and passes them to `process` while iterating over rows. func iterateMetricRows(report *dds.Report, defaultName string, process func(name string, value *float64)) { + colMap := map[string]bool{} + var sb strings.Builder for _, jsonRow := range report.Rows { cols := jsonRow.Cols name, rawValue := cols[0], cols[1] if name == "*NoData*" { continue } - if len(jsonRow.Cols) == 3 { - name += "[" + cols[2] + "]" + sb.Reset() + sb.WriteString(name) + if len(jsonRow.Cols) >= 3 { + sb.WriteString("[") + sb.WriteString(cols[2]) + if len(jsonRow.Cols) >= 4 && cols[3] != "" { + sb.WriteString(".") + sb.WriteString(cols[3]) + } + sb.WriteString("]") + } + if sb.Len() == 0 { + sb.WriteString(defaultName) } - if name == "" { - name = defaultName + colName := sb.String() + if _, ok := colMap[colName]; ok { + continue } - process(name, parseFloat(rawValue)) + colMap[colName] = true + process(colName, parseFloat(rawValue)) } } -func buildForReport(report *dds.Report, headers *dds.HeaderMap, qm *QueryModel) *data.Frame { +func buildForReport(report *dds.Report, headers *dds.HeaderMap, frameName string) *data.Frame { logger := log.Logger.With("func", "buildForReport") - frame := data.NewFrame(getFrameName(qm)) + frame := data.NewFrame(frameName) reportName := report.Metric.Id for i, col := range report.Headers.Cols { diff --git a/grafana/rmf-app/pkg/plugin/frame/frame_test.go b/grafana/rmf-app/pkg/plugin/frame/frame_test.go index e47ffacd..491e2b52 100644 --- a/grafana/rmf-app/pkg/plugin/frame/frame_test.go +++ b/grafana/rmf-app/pkg/plugin/frame/frame_test.go @@ -1,6 +1,6 @@ /** -* (C) Copyright IBM Corp. 2023, 2024. -* (C) Copyright Rocket Software, Inc. 2023-2024. +* (C) Copyright IBM Corp. 2023, 2025. +* (C) Copyright Rocket Software, Inc. 2023-2025. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -33,7 +33,7 @@ type TestCase struct { Name string Description string Skip bool - QueryModel QueryModel + Wide bool DdsResponse *dds.Response ExpectedFrame json.RawMessage ExpectedError string @@ -64,7 +64,7 @@ func TestFrame(t *testing.T) { var expectedJson bytes.Buffer err := json.Indent(&expectedJson, testCase.ExpectedFrame, "", " ") if assert.NoError(t, err, "failed to indent") { - frame, err := Build(testCase.DdsResponse, nil, &testCase.QueryModel) + frame, err := Build(testCase.DdsResponse, nil, testCase.Wide) if err == nil { actualJson, _ := json.MarshalIndent(frame, "", " ") assert.JSONEq(t, expectedJson.String(), string(actualJson), "frames are not identical") diff --git a/grafana/rmf-app/pkg/plugin/frame/query.go b/grafana/rmf-app/pkg/plugin/frame/query.go deleted file mode 100644 index fe2be068..00000000 --- a/grafana/rmf-app/pkg/plugin/frame/query.go +++ /dev/null @@ -1,214 +0,0 @@ -/** -* (C) Copyright IBM Corp. 2023, 2024. -* (C) Copyright Rocket Software, Inc. 2023-2024. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. - */ - -package frame - -import ( - "encoding/json" - "errors" - "net/url" - "strings" - "time" - - "github.com/IBM/RMF/grafana/rmf-app/pkg/plugin/dds" - "github.com/grafana/grafana-plugin-sdk-go/backend" -) - -const TimeSeriesType = "TimeSeries" - -var ErrBlankResource = errors.New("resource is blank") - -type ResponseStatus struct { - TimeOffset time.Duration // The timezone offset value from UTC time - Mintime int - LocalPrev time.Time - LocalNext time.Time - - CurrentTime time.Time -} - -func (rs *ResponseStatus) Update(other *ResponseStatus) { - rs.TimeOffset = other.TimeOffset - rs.Mintime = other.Mintime - rs.LocalPrev = other.LocalPrev - rs.LocalNext = other.LocalNext - rs.CurrentTime = other.CurrentTime -} - -func (rs *ResponseStatus) UpdateFromTimeData(timeData *dds.TimeData) { - rs.TimeOffset = timeData.LocalStart.Sub(timeData.UTCStart.Time) - rs.Mintime = timeData.MinTime.Value - rs.LocalPrev = timeData.LocalPrev.Time - rs.LocalNext = timeData.LocalNext.Time - //ensure CurrentTime inside interval - //currentMiddle = S+(E-S)/2 - currentMiddle := timeData.LocalStart.Time.Add( - time.Duration( - timeData.LocalEnd.Time.Sub(timeData.LocalStart.Time).Nanoseconds() / 2, - ), - ) - currentMiddle = currentMiddle.Add(-1 * rs.TimeOffset) - rs.CurrentTime = currentMiddle - duration := timeData.LocalEnd.Time.Sub(timeData.LocalStart.Time) - if int(duration.Seconds()) != rs.Mintime { - rs.AdjustCurrentTime() - } -} - -func (rs *ResponseStatus) AdjustCurrentTime() { - rs.CurrentTime = rs.AdjustRealtime(rs.CurrentTime, rs.Mintime) -} - -func (rs *ResponseStatus) AdjustRealtime(realtime time.Time, mintime int) time.Time { - if mintime == 0 { - return realtime - } - - y := realtime.Year() - M := realtime.Month() - d := realtime.Day() - h := realtime.Hour() - m := realtime.Minute() - s := realtime.Second() - - sec0 := m*60 + s - intnum := sec0 / int(mintime) - m = intnum * int(mintime) / 60 - s = intnum * int(mintime) % 60 - half := mintime / 2 - - t := time.Date( - y, - time.Month(M), - int(d), - int(h), - int(m), - int(s), - 0, realtime.Location()). - Add(time.Duration(time.Duration(half) * time.Second)) - return t -} - -type QueryModel struct { - SelectedQuery string `json:"selectedQuery"` - // FIXME: it contains also metric ID and needs to be re-parsed, e.g. id=8D21B0&resource=,,SYSPLEX - SelectedResource SelectedResource `json:"selectedResource"` - RefreshRequired bool `json:"refreshRequired"` - AbsoluteTimeSelected bool `json:"absoluteTimeSelected"` - DashboardUid string `json:"dashboardUid"` - SelectedVisualisationType string `json:"selectedVisualisationType"` - RMFPanelId string `json:"rmfPanelGuid"` - TimeRangeFrom time.Time // 'From' time converted to UTC - TimeRangeTo time.Time // 'To' time converted to UTC - SeriesFields SeriesFields // If it's a time series, we have to maintain field map - - ResponseStatus - LastTime time.Time -} - -func NewQueryModel(query backend.DataQuery) (*QueryModel, error) { - var qm QueryModel - if err := json.Unmarshal(query.JSON, &qm); err != nil { - return nil, err - } - if qm.SelectedQuery == "" { - return nil, ErrBlankResource - } - qm.TimeRangeFrom, qm.TimeRangeTo = query.TimeRange.From.UTC(), query.TimeRange.To.UTC() - return &qm, nil -} - -func (q *QueryModel) Copy() *QueryModel { - copy := *q - return © -} - -func (qm *QueryModel) getQueryType() string { - var resultQueryType string - if strings.Trim(qm.SelectedQuery, "") != "" { - splitStringSlice := strings.SplitAfter(qm.SelectedQuery, ".") - if len(splitStringSlice) > 1 { - vt := splitStringSlice[1] - if strings.ToLower(vt) == "report." { - resultQueryType = "report" - } else { - resultQueryType = "gauge" - } - } - } - return resultQueryType -} - -func (qm *QueryModel) getTime() string { - var time time.Time - if qm.SelectedVisualisationType == TimeSeriesType { - time = qm.CurrentTime.Add(qm.TimeOffset) - } else { - time = qm.TimeRangeFrom.Add(qm.TimeOffset) - } - return time.Format(dds.DateTimeFormat) -} - -func (qm *QueryModel) getTimeRange() string { - var ( - serverFromTime, serverToTime time.Time - ) - if qm.SelectedVisualisationType == TimeSeriesType { - serverFromTime = qm.CurrentTime.Add(qm.TimeOffset) - serverToTime = qm.CurrentTime.Add(qm.TimeOffset) - } else { - serverFromTime = qm.TimeRangeFrom.Add(qm.TimeOffset) - serverToTime = qm.TimeRangeTo.Add(qm.TimeOffset) - } - return serverFromTime.Format(dds.DateTimeFormat) + "," + serverToTime.Format(dds.DateTimeFormat) -} - -func (qm *QueryModel) GetPathWithParams() (string, []string) { - var path string - if qm.getQueryType() == "report" { - path = dds.FullReportPath - } else { - path = dds.PerformPath - } - paramList := make([]string, 0, 1) - if qm.SelectedVisualisationType == TimeSeriesType { - paramList = append(paramList, "time", qm.getTime()) - } else { - paramList = append(paramList, "range", qm.getTimeRange()) - } - // FIXME: process errors - params, _ := url.ParseQuery(qm.SelectedResource.Value) - for key, values := range params { - paramList = append(paramList, key, strings.Join(values, ";")) - } - return path, paramList -} - -func (q *QueryModel) CacheKey() []byte { - return []byte(q.SelectedResource.Value + " " + q.CurrentTime.String()) -} - -func (q *QueryModel) TimeRangeExceeded() bool { - return q.CurrentTime.Before(q.TimeRangeFrom. - Add(-1*time.Duration(time.Second*time.Duration(q.Mintime/2)))) || - q.CurrentTime.After(q.TimeRangeTo) -} - -type SelectedResource struct { - Label string `json:"label"` - Value string `json:"value"` -} diff --git a/grafana/rmf-app/pkg/plugin/frame/testdata/frames.json b/grafana/rmf-app/pkg/plugin/frame/testdata/frames.json index e87a04d9..d2667df7 100644 --- a/grafana/rmf-app/pkg/plugin/frame/testdata/frames.json +++ b/grafana/rmf-app/pkg/plugin/frame/testdata/frames.json @@ -3,133 +3,82 @@ "name": "OutOfRange", "description": "DDS returns interval different from what we requested for time series", "skip": true, + "wide": true, "ddsResponse": { "report": [ { "metric": { - "format": "single" + "format": "single", + "description": "MetricName" }, "row": [ { - "col": [ - "*NoData*", - "NaN" - ] + "col": ["*NoData*", "NaN"] } ] } ] }, - "queryModel": { - "timeRangeFrom": "2024-01-01T02:30:00Z", - "timeRangeTo": "2024-01-01T02:30:00Z", - "selectedQuery": "Resource.MetricName", - "ServerTimeData": { - "localStartTime": "2024-01-01T01:00:00Z", - "localEndTime": "2024-01-01T02:00:00Z" - }, - "selectedVisualisationType": "TimeSeries" - }, "expectedFrame": {}, "expectedError": "unexpected data in MetricFrameFromJson(): Error = requested time range is out of received interval" }, { "name": "NoReportSections", "description": "No reports in DDS response", + "wide": true, "ddsResponse": {}, - "queryModel": { - "selectedVisualisationType": "TimeSeries" - }, "expectedFrame": {}, "expectedError": "no reports in DDS response" }, { "name": "PositiveTimeSeriesList", "description": "Positive time series scenario for list format metric", + "wide": true, "ddsResponse": { "report": [ { "metric": { - "format": "list" + "format": "list", + "description": "MetricName by XYZ " }, "timeData": { "utcEnd": "20240101013000" }, "row": [ { - "col": [ - "ResourceName0", - "0" - ] + "col": ["ResourceName0", "0"] }, { - "col": [ - "ResourceName1", - "0.0" - ] + "col": ["ResourceName1", "0.0"] }, { - "col": [ - "ResourceName2", - "-0.0" - ] + "col": ["ResourceName2", "-0.0"] }, { - "col": [ - "ResourceName3", - "10.3" - ] + "col": ["ResourceName3", "10.3"] }, { - "col": [ - "ResourceName4", - "-10" - ] + "col": ["ResourceName4", "-10"] }, { - "col": [ - "ResourceName5", - "NaN" - ] + "col": ["ResourceName5", "NaN"] }, { - "col": [ - "ResourceName6", - "Deact" - ] + "col": ["ResourceName6", "Deact"] }, { - "col": [ - "ResourceName7", - "" - ] + "col": ["ResourceName7", ""] }, { - "col": [ - "*NoData*", - "NaN" - ] + "col": ["*NoData*", "NaN"] }, { - "col": [ - "*NoData*", - "0.0" - ] + "col": ["*NoData*", "0.0"] } ] } ] }, - "queryModel": { - "timeRangeFrom": "2024-01-01T01:30:00Z", - "timeRangeTo": "2024-01-01T01:30:00Z", - "selectedQuery": "Resource.MetricName by XYZ ", - "ServerTimeData": { - "localStartTime": "2024-01-01T01:00:00Z", - "localEndTime": "2024-01-01T02:00:00Z" - }, - "selectedVisualisationType": "TimeSeries" - }, "expectedFrame": { "schema": { "name": "MetricName by XYZ", @@ -232,56 +181,27 @@ ] }, "data": { - "values": [ - [ - 1704072600000 - ], - [ - 0 - ], - [ - 0 - ], - [ - -0 - ], - [ - 10.3 - ], - [ - -10 - ], - [ - null - ], - [ - null - ], - [ - null - ] - ] + "values": [[1704072600000], [0], [0], [-0], [10.3], [-10], [null], [null], [null]] } } }, { "name": "PositiveTimeSeriesSingle", "description": "Positive time series scenario for single format metric", + "wide": true, "ddsResponse": { "report": [ { "metric": { - "format": "single" + "format": "single", + "description": "MetricName" }, "timeData": { "utcEnd": "20240101013000" }, "row": [ { - "col": [ - "", - "42" - ] + "col": ["", "42"] } ] } @@ -320,25 +240,20 @@ ] }, "data": { - "values": [ - [ - 1704072600000 - ], - [ - 42 - ] - ] + "values": [[1704072600000], [42]] } } }, { "name": "NoRowsTimeSeriesList", "description": "No rows returned for time series list format frame", + "wide": true, "ddsResponse": { "report": [ { "metric": { - "format": "list" + "format": "list", + "description": "MetricName" }, "timeData": { "utcEnd": "20240101013000" @@ -347,16 +262,6 @@ } ] }, - "queryModel": { - "timeRangeFrom": "2024-01-01T01:30:00Z", - "timeRangeTo": "2024-01-01T01:30:00Z", - "selectedQuery": "Resource.MetricName", - "ServerTimeData": { - "localStartTime": "2024-01-01T01:00:00Z", - "localEndTime": "2024-01-01T02:00:00Z" - }, - "selectedVisualisationType": "TimeSeries" - }, "expectedFrame": { "schema": { "name": "MetricName", @@ -371,47 +276,32 @@ ] }, "data": { - "values": [ - [ - 1704072600000 - ] - ] + "values": [[1704072600000]] } } }, { "name": "NoDataTimeSeriesSingle", "description": "No data returned for time series single format frame", + "wide": true, "ddsResponse": { "report": [ { "metric": { - "format": "single" + "format": "single", + "description": "MetricName" }, "timeData": { "utcEnd": "20240101013000" }, "row": [ { - "col": [ - "*NoData*", - "NaN" - ] + "col": ["*NoData*", "NaN"] } ] } ] }, - "queryModel": { - "timeRangeFrom": "2024-01-01T01:30:00Z", - "timeRangeTo": "2024-01-01T01:30:00Z", - "selectedQuery": "Resource.MetricName", - "ServerTimeData": { - "localStartTime": "2024-01-01T01:00:00Z", - "localEndTime": "2024-01-01T02:00:00Z" - }, - "selectedVisualisationType": "TimeSeries" - }, "expectedFrame": { "schema": { "name": "MetricName", @@ -435,14 +325,7 @@ ] }, "data": { - "values": [ - [ - 1704072600000 - ], - [ - null - ] - ] + "values": [[1704072600000], [null]] } } }, @@ -453,85 +336,47 @@ "report": [ { "metric": { - "format": "list" + "format": "list", + "description": "MetricName by XYZ " }, "timeData": { "utcEnd": "20240101013000" }, "row": [ { - "col": [ - "ResourceName0", - "0" - ] + "col": ["ResourceName0", "0"] }, { - "col": [ - "ResourceName1", - "0.0" - ] + "col": ["ResourceName1", "0.0"] }, { - "col": [ - "ResourceName2", - "-0.0" - ] + "col": ["ResourceName2", "-0.0"] }, { - "col": [ - "ResourceName3", - "10.3" - ] + "col": ["ResourceName3", "10.3"] }, { - "col": [ - "ResourceName4", - "-10" - ] + "col": ["ResourceName4", "-10"] }, { - "col": [ - "ResourceName5", - "NaN" - ] + "col": ["ResourceName5", "NaN"] }, { - "col": [ - "ResourceName6", - "Deact" - ] + "col": ["ResourceName6", "Deact"] }, { - "col": [ - "ResourceName7", - "" - ] + "col": ["ResourceName7", ""] }, { - "col": [ - "*NoData*", - "NaN" - ] + "col": ["*NoData*", "NaN"] }, { - "col": [ - "*NoData*", - "0.0" - ] + "col": ["*NoData*", "0.0"] } ] } ] }, - "queryModel": { - "timeRangeFrom": "2024-01-01T01:30:00Z", - "timeRangeTo": "2024-01-01T01:30:00Z", - "selectedQuery": "Resource.MetricName by XYZ ", - "ServerTimeData": { - "localStartTime": "2024-01-01T01:00:00Z", - "localEndTime": "2024-01-01T02:00:00Z" - } - }, "expectedFrame": { "schema": { "fields": [ @@ -562,13 +407,7 @@ "data": { "values": [ [ - 1704072600000, - 1704072600000, - 1704072600000, - 1704072600000, - 1704072600000, - 1704072600000, - 1704072600000, + 1704072600000, 1704072600000, 1704072600000, 1704072600000, 1704072600000, 1704072600000, 1704072600000, 1704072600000 ], [ @@ -581,16 +420,7 @@ "ResourceName6", "ResourceName7" ], - [ - 0, - 0, - -0, - 10.3, - -10, - null, - null, - null - ] + [0, 0, -0, 10.3, -10, null, null, null] ] } } @@ -602,31 +432,20 @@ "report": [ { "metric": { - "format": "single" + "format": "single", + "description": "MetricName" }, "timeData": { "utcEnd": "20240101013000" }, "row": [ { - "col": [ - "", - "42" - ] + "col": ["", "42"] } ] } ] }, - "queryModel": { - "timeRangeFrom": "2024-01-01T01:30:00Z", - "timeRangeTo": "2024-01-01T01:30:00Z", - "selectedQuery": "Resource.MetricName", - "ServerTimeData": { - "localStartTime": "2024-01-01T01:00:00Z", - "localEndTime": "2024-01-01T02:00:00Z" - } - }, "expectedFrame": { "schema": { "fields": [ @@ -655,17 +474,7 @@ ] }, "data": { - "values": [ - [ - 1704072600000 - ], - [ - "MetricName" - ], - [ - 42 - ] - ] + "values": [[1704072600000], ["MetricName"], [42]] } } }, @@ -676,22 +485,14 @@ "report": [ { "metric": { - "format": "list" + "format": "list", + "description": "MetricName by XYZ " }, "timeData": {}, "row": [] } ] }, - "queryModel": { - "timeRangeFrom": "2024-01-01T01:30:00Z", - "timeRangeTo": "2024-01-01T01:30:00Z", - "selectedQuery": "Resource.MetricName by XYZ ", - "ServerTimeData": { - "localStartTime": "2024-01-01T01:00:00Z", - "localEndTime": "2024-01-01T02:00:00Z" - } - }, "expectedFrame": { "schema": { "fields": [ @@ -720,11 +521,7 @@ ] }, "data": { - "values": [ - [], - [], - [] - ] + "values": [[], [], []] } } }, @@ -735,29 +532,18 @@ "report": [ { "metric": { - "format": "single" + "format": "single", + "description": "MetricName " }, "timeData": {}, "row": [ { - "col": [ - "*NoData*", - "NaN" - ] + "col": ["*NoData*", "NaN"] } ] } ] }, - "queryModel": { - "timeRangeFrom": "2024-01-01T01:30:00Z", - "timeRangeTo": "2024-01-01T01:30:00Z", - "selectedQuery": "Resource.MetricName ", - "ServerTimeData": { - "localStartTime": "2024-01-01T01:00:00Z", - "localEndTime": "2024-01-01T02:00:00Z" - } - }, "expectedFrame": { "schema": { "fields": [ @@ -786,11 +572,7 @@ ] }, "data": { - "values": [ - [], - [], - [] - ] + "values": [[], [], []] } } } diff --git a/grafana/rmf-app/pkg/plugin/frame/utils.go b/grafana/rmf-app/pkg/plugin/frame/utils.go index edd62009..1e0a14fd 100644 --- a/grafana/rmf-app/pkg/plugin/frame/utils.go +++ b/grafana/rmf-app/pkg/plugin/frame/utils.go @@ -1,6 +1,6 @@ /** -* (C) Copyright IBM Corp. 2023, 2024. -* (C) Copyright Rocket Software, Inc. 2023-2024. +* (C) Copyright IBM Corp. 2023, 2025. +* (C) Copyright Rocket Software, Inc. 2023-2025. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,32 +18,13 @@ package frame import ( + "errors" "strings" "time" "github.com/grafana/grafana-plugin-sdk-go/data" ) -func getFrameName(qm *QueryModel) string { - var resultFrameName string - if strings.Trim(qm.SelectedQuery, " ") != "" { - splitStringSlice := strings.SplitAfter(qm.SelectedQuery, ".") - if len(splitStringSlice) > 1 { - vt := splitStringSlice[1] - if strings.ToLower(vt) == "report." { - resultFrameName = splitStringSlice[1] + splitStringSlice[2] - } else { - if strings.Contains(vt, "{") { - resultFrameName = vt[:strings.Index(vt, "{")] - } else { - resultFrameName = vt - } - } - } - } - return strings.Trim(resultFrameName, " ") -} - // getFrameLabels builds labels based on DDS metric name and type func getFrameLabels(metricType string, queryName string) data.Labels { labels := data.Labels{} @@ -94,3 +75,45 @@ func RemoveOldFieldNames(fieldMap SeriesFields, cutoffTime time.Time) { } } } + +func MergeInto(dst *data.Frame, src *data.Frame) (*data.Frame, error) { + if dst == nil { + dst = data.NewFrame(src.Name) + } + if src == nil { + return dst, nil + } + dstLen, err := dst.RowLen() + if err != nil { + return nil, err + } + srcLen, err := src.RowLen() + if err != nil { + return nil, err + } + for _, field2 := range src.Fields { + field1, _ := dst.FieldByName(field2.Name) + if field1 == nil { + switch field2.Type() { + case data.FieldTypeTime: + field1 = data.NewField(field2.Name, field2.Labels, make([]time.Time, dstLen)) + case data.FieldTypeNullableFloat64: + field1 = data.NewField(field2.Name, field2.Labels, make([]*float64, dstLen)) + default: + return nil, errors.New("unsupported field type") + } + dst.Fields = append(dst.Fields, field1) + } + for i := range srcLen { + field1.Append(field2.At(i)) + } + } + for _, field1 := range dst.Fields { + if field2, _ := src.FieldByName(field1.Name); field2 == nil { + for range srcLen { + field1.Append(nil) + } + } + } + return dst, nil +} diff --git a/grafana/rmf-app/pkg/plugin/query.go b/grafana/rmf-app/pkg/plugin/query.go new file mode 100644 index 00000000..49e79f21 --- /dev/null +++ b/grafana/rmf-app/pkg/plugin/query.go @@ -0,0 +1,137 @@ +/** +* (C) Copyright IBM Corp. 2023, 2025. +* (C) Copyright Rocket Software, Inc. 2023-2025. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. + */ + +package plugin + +import ( + "context" + "time" + + "github.com/IBM/RMF/grafana/rmf-app/pkg/plugin/cache" + "github.com/IBM/RMF/grafana/rmf-app/pkg/plugin/dds" + "github.com/IBM/RMF/grafana/rmf-app/pkg/plugin/frame" + "github.com/IBM/RMF/grafana/rmf-app/pkg/plugin/log" + "github.com/grafana/grafana-plugin-sdk-go/backend" + "github.com/grafana/grafana-plugin-sdk-go/data" +) + +func (ds *RMFDatasource) getFrame(r *dds.Request, wide bool) (*data.Frame, error) { + key := cache.FrameKey(r, wide) + result, err, _ := ds.single.Do(string(key), func() (interface{}, error) { + ddsResponse, err := ds.ddsClient.GetByRequest(r) + if err != nil { + return nil, err + } + headers := ds.ddsClient.GetCachedHeaders() + f, err := frame.Build(ddsResponse, headers, wide) + if err != nil { + return nil, err + } + return f, nil + }) + if result != nil { + return result.(*data.Frame), err + } else { + return nil, err + } +} + +// getStep calculates the most appropriate time series step. +// There's no ideal solution. We assume that it aligns with one hour. +// If it doesn't, streaming will still work, but some queries will miss cache. +func getStep(mintime time.Duration, limit time.Duration) time.Duration { + n := 3600 / int(mintime.Seconds()) + step := time.Hour // The maximum possible + for i := 1; i <= n; i++ { + if n%i == 0 && time.Duration(i)*mintime >= limit { + step = time.Duration(i) * mintime + break + } + } + return step +} + +// getCachedTSFrames fetches all sequentional time series frames from cache and merges it into one frame. +// It has to syncronize time series field set passed in `fields`. +func (ds *RMFDatasource) getCachedTSFrames(r *dds.Request, stop time.Time, step time.Duration, fields frame.SeriesFields) (*data.Frame, time.Duration, error) { + var ( + f *data.Frame + jump time.Duration + err error + ) + // Create a copy of the original request - don't alter it + cr := dds.NewRequest(r.Resource, r.TimeRange.From, r.TimeRange.To, step) + for r.TimeRange.To.Before(stop) { + next := ds.frameCache.Get(cr, true) + if next == nil { + break + } + frame.SyncFieldNames(fields, next, r.TimeRange.To) + f, err = frame.MergeInto(f, next) + if err != nil { + return nil, jump, err + } + cr.Add(step) + jump += step + } + return f, jump, err +} + +func (ds *RMFDatasource) serveTSFrame(ctx context.Context, sender *backend.StreamSender, fields frame.SeriesFields, r *dds.Request, hist bool) error { + logger := log.Logger.With("func", "serveTSFrame") + var f *data.Frame + var err error + + for { + if err = ctx.Err(); err != nil { + return err + } + if !hist { + d := time.Until(r.TimeRange.To.Add(SdsDelay)) + logger.Debug("sleeping", "request", r.String(), "duration", d.String()) + time.Sleep(d) + } + logger.Debug("executing query", "request", r.String()) + f, err = ds.getFrame(r, true) + if err != nil { + logger.Error("failed to get data", "request", r.String(), "reason", err) + f = frame.NoDataFrame(r.TimeRange.To) + } else { + if !hist { + t, ok := f.Fields[0].At(0).(time.Time) + if !ok || t.Before(r.TimeRange.To) { + logger.Debug("mintime is not ready yet") + time.Sleep(SdsDelay) + continue + } + } + if err := ds.frameCache.Set(f, r, true); err != nil { + logger.Error("failed to save data in cache", "request", r.String(), "reason", err) + } + } + break + } + // No data was returned by DDS yet by any previous request + if len(f.Fields) < 2 && len(fields) == 0 { + return nil + } + frame.SyncFieldNames(fields, f, r.TimeRange.To) + if err := sender.SendFrame(f, data.IncludeAll); err != nil { + return err + } + return nil +} diff --git a/grafana/rmf-app/yarn.lock b/grafana/rmf-app/yarn.lock index 9991ce7e..ca818b17 100644 --- a/grafana/rmf-app/yarn.lock +++ b/grafana/rmf-app/yarn.lock @@ -32,13 +32,14 @@ __metadata: languageName: node linkType: hard -"@babel/code-frame@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/code-frame@npm:7.25.9" +"@babel/code-frame@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/code-frame@npm:7.27.1" dependencies: - "@babel/highlight": "npm:^7.25.9" - picocolors: "npm:^1.0.0" - checksum: 10c0/88562eba0eeb5960b7004e108790aa00183d90cbbe70ce10dad01c2c48141d2ef54d6dcd0c678cc1e456de770ffeb68e28559f4d222c01a110c79aea8733074b + "@babel/helper-validator-identifier": "npm:^7.27.1" + js-tokens: "npm:^4.0.0" + picocolors: "npm:^1.1.1" + checksum: 10c0/5dd9a18baa5fce4741ba729acc3a3272c49c25cb8736c4b18e113099520e7ef7b545a4096a26d600e4416157e63e87d66db46aa3fbf0a5f2286da2705c12da00 languageName: node linkType: hard @@ -49,10 +50,10 @@ __metadata: languageName: node linkType: hard -"@babel/compat-data@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/compat-data@npm:7.25.9" - checksum: 10c0/8d9fc2074311ce61aaf5bccf740a808644d19d4859caf5fa46d8a7186a1ee0b0d8cbbc23f9371f8b397e84a885bdeab58d5f22d6799ddde55973252aac351a27 +"@babel/compat-data@npm:^7.27.2": + version: 7.27.2 + resolution: "@babel/compat-data@npm:7.27.2" + checksum: 10c0/077c9e01af3b90decee384a6a44dcf353898e980cee22ec7941f9074655dbbe97ec317345536cdc7ef7391521e1497930c522a3816af473076dd524be7fccd32 languageName: node linkType: hard @@ -79,26 +80,26 @@ __metadata: languageName: node linkType: hard -"@babel/core@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/core@npm:7.25.9" +"@babel/core@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/core@npm:7.27.1" dependencies: "@ampproject/remapping": "npm:^2.2.0" - "@babel/code-frame": "npm:^7.25.9" - "@babel/generator": "npm:^7.25.9" - "@babel/helper-compilation-targets": "npm:^7.25.9" - "@babel/helper-module-transforms": "npm:^7.25.9" - "@babel/helpers": "npm:^7.25.9" - "@babel/parser": "npm:^7.25.9" - "@babel/template": "npm:^7.25.9" - "@babel/traverse": "npm:^7.25.9" - "@babel/types": "npm:^7.25.9" + "@babel/code-frame": "npm:^7.27.1" + "@babel/generator": "npm:^7.27.1" + "@babel/helper-compilation-targets": "npm:^7.27.1" + "@babel/helper-module-transforms": "npm:^7.27.1" + "@babel/helpers": "npm:^7.27.1" + "@babel/parser": "npm:^7.27.1" + "@babel/template": "npm:^7.27.1" + "@babel/traverse": "npm:^7.27.1" + "@babel/types": "npm:^7.27.1" convert-source-map: "npm:^2.0.0" debug: "npm:^4.1.0" gensync: "npm:^1.0.0-beta.2" json5: "npm:^2.2.3" semver: "npm:^6.3.1" - checksum: 10c0/40d3064ebe906f65ed4153a0f4d75c679a19e4d71e425035b7bbe2d292a9167274f1a0d908d4d6c8f484fcddeb10bd91e0c7878fdb3dfad1bb00f6a319ce431d + checksum: 10c0/0fc31f87f5401ac5d375528cb009f4ea5527fc8c5bb5b64b5b22c033b60fd0ad723388933a5f3f5db14e1edd13c958e9dd7e5c68f9b68c767aeb496199c8a4bb languageName: node linkType: hard @@ -114,15 +115,16 @@ __metadata: languageName: node linkType: hard -"@babel/generator@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/generator@npm:7.25.9" +"@babel/generator@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/generator@npm:7.27.1" dependencies: - "@babel/types": "npm:^7.25.9" + "@babel/parser": "npm:^7.27.1" + "@babel/types": "npm:^7.27.1" "@jridgewell/gen-mapping": "npm:^0.3.5" "@jridgewell/trace-mapping": "npm:^0.3.25" jsesc: "npm:^3.0.2" - checksum: 10c0/fca49a1440ac550bb835a73c0e8314849cd493a468a5431ca7f9dbb3d3443e3a1a6dcba2426752e8a97cc2feed4a3b7a0c639e1c45871c4a9dd0c994f08dd25a + checksum: 10c0/c4156434b21818f558ebd93ce45f027c53ee570ce55a84fd2d9ba45a79ad204c17e0bff753c886fb6c07df3385445a9e34dc7ccb070d0ac7e80bb91c8b57f423 languageName: node linkType: hard @@ -139,16 +141,16 @@ __metadata: languageName: node linkType: hard -"@babel/helper-compilation-targets@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/helper-compilation-targets@npm:7.25.9" +"@babel/helper-compilation-targets@npm:^7.27.1": + version: 7.27.2 + resolution: "@babel/helper-compilation-targets@npm:7.27.2" dependencies: - "@babel/compat-data": "npm:^7.25.9" - "@babel/helper-validator-option": "npm:^7.25.9" + "@babel/compat-data": "npm:^7.27.2" + "@babel/helper-validator-option": "npm:^7.27.1" browserslist: "npm:^4.24.0" lru-cache: "npm:^5.1.1" semver: "npm:^6.3.1" - checksum: 10c0/a6b26a1e4222e69ef8e62ee19374308f060b007828bc11c65025ecc9e814aba21ff2175d6d3f8bf53c863edd728ee8f94ba7870f8f90a37d39552ad9933a8aaa + checksum: 10c0/f338fa00dcfea931804a7c55d1a1c81b6f0a09787e528ec580d5c21b3ecb3913f6cb0f361368973ce953b824d910d3ac3e8a8ee15192710d3563826447193ad1 languageName: node linkType: hard @@ -162,13 +164,13 @@ __metadata: languageName: node linkType: hard -"@babel/helper-module-imports@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/helper-module-imports@npm:7.25.9" +"@babel/helper-module-imports@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-module-imports@npm:7.27.1" dependencies: - "@babel/traverse": "npm:^7.25.9" - "@babel/types": "npm:^7.25.9" - checksum: 10c0/078d3c2b45d1f97ffe6bb47f61961be4785d2342a4156d8b42c92ee4e1b7b9e365655dd6cb25329e8fe1a675c91eeac7e3d04f0c518b67e417e29d6e27b6aa70 + "@babel/traverse": "npm:^7.27.1" + "@babel/types": "npm:^7.27.1" + checksum: 10c0/e00aace096e4e29290ff8648455c2bc4ed982f0d61dbf2db1b5e750b9b98f318bf5788d75a4f974c151bd318fd549e81dbcab595f46b14b81c12eda3023f51e8 languageName: node linkType: hard @@ -186,17 +188,16 @@ __metadata: languageName: node linkType: hard -"@babel/helper-module-transforms@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/helper-module-transforms@npm:7.25.9" +"@babel/helper-module-transforms@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-module-transforms@npm:7.27.1" dependencies: - "@babel/helper-module-imports": "npm:^7.25.9" - "@babel/helper-simple-access": "npm:^7.25.9" - "@babel/helper-validator-identifier": "npm:^7.25.9" - "@babel/traverse": "npm:^7.25.9" + "@babel/helper-module-imports": "npm:^7.27.1" + "@babel/helper-validator-identifier": "npm:^7.27.1" + "@babel/traverse": "npm:^7.27.1" peerDependencies: "@babel/core": ^7.0.0 - checksum: 10c0/cd005e7585806845d79c5c0ca9e8926f186b430b0a558dad08a3611365eaad3ac587672b0d903530117dec454f48b6bdc3d164b19ea1b71ca1b4eb3be7b452ef + checksum: 10c0/196ab29635fe6eb5ba6ead2972d41b1c0d40f400f99bd8fc109cef21440de24c26c972fabf932585e618694d590379ab8d22def8da65a54459d38ec46112ead7 languageName: node linkType: hard @@ -217,16 +218,6 @@ __metadata: languageName: node linkType: hard -"@babel/helper-simple-access@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/helper-simple-access@npm:7.25.9" - dependencies: - "@babel/traverse": "npm:^7.25.9" - "@babel/types": "npm:^7.25.9" - checksum: 10c0/3f1bcdb88ee3883ccf86959869a867f6bbf8c4737cd44fb9f799c38e54f67474590bc66802500ae9fe18161792875b2cfb7ec15673f48ed6c8663f6d09686ca8 - languageName: node - linkType: hard - "@babel/helper-string-parser@npm:^7.24.8": version: 7.24.8 resolution: "@babel/helper-string-parser@npm:7.24.8" @@ -234,10 +225,10 @@ __metadata: languageName: node linkType: hard -"@babel/helper-string-parser@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/helper-string-parser@npm:7.25.9" - checksum: 10c0/7244b45d8e65f6b4338a6a68a8556f2cb161b782343e97281a5f2b9b93e420cad0d9f5773a59d79f61d0c448913d06f6a2358a87f2e203cf112e3c5b53522ee6 +"@babel/helper-string-parser@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-string-parser@npm:7.27.1" + checksum: 10c0/8bda3448e07b5583727c103560bcf9c4c24b3c1051a4c516d4050ef69df37bb9a4734a585fe12725b8c2763de0a265aa1e909b485a4e3270b7cfd3e4dbe4b602 languageName: node linkType: hard @@ -248,10 +239,10 @@ __metadata: languageName: node linkType: hard -"@babel/helper-validator-identifier@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/helper-validator-identifier@npm:7.25.9" - checksum: 10c0/4fc6f830177b7b7e887ad3277ddb3b91d81e6c4a24151540d9d1023e8dc6b1c0505f0f0628ae653601eb4388a8db45c1c14b2c07a9173837aef7e4116456259d +"@babel/helper-validator-identifier@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-validator-identifier@npm:7.27.1" + checksum: 10c0/c558f11c4871d526498e49d07a84752d1800bf72ac0d3dad100309a2eaba24efbf56ea59af5137ff15e3a00280ebe588560534b0e894a4750f8b1411d8f78b84 languageName: node linkType: hard @@ -262,10 +253,10 @@ __metadata: languageName: node linkType: hard -"@babel/helper-validator-option@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/helper-validator-option@npm:7.25.9" - checksum: 10c0/27fb195d14c7dcb07f14e58fe77c44eea19a6a40a74472ec05c441478fa0bb49fa1c32b2d64be7a38870ee48ef6601bdebe98d512f0253aea0b39756c4014f3e +"@babel/helper-validator-option@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-validator-option@npm:7.27.1" + checksum: 10c0/6fec5f006eba40001a20f26b1ef5dbbda377b7b68c8ad518c05baa9af3f396e780bdfded24c4eef95d14bb7b8fd56192a6ed38d5d439b97d10efc5f1a191d148 languageName: node linkType: hard @@ -279,13 +270,13 @@ __metadata: languageName: node linkType: hard -"@babel/helpers@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/helpers@npm:7.25.9" +"@babel/helpers@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helpers@npm:7.27.1" dependencies: - "@babel/template": "npm:^7.25.9" - "@babel/types": "npm:^7.25.9" - checksum: 10c0/4354fbf050291937d0f127f6f927a0c471b604524e0767516fefb91dc36427f25904dd0d2b2b3bbc66bce1894c680cc37eac9ab46970d70f24bf3e53375612de + "@babel/template": "npm:^7.27.1" + "@babel/types": "npm:^7.27.1" + checksum: 10c0/e078257b9342dae2c041ac050276c5a28701434ad09478e6dc6976abd99f721a5a92e4bebddcbca6b1c3a7e8acace56a946340c701aad5e7507d2c87446459ba languageName: node linkType: hard @@ -301,18 +292,6 @@ __metadata: languageName: node linkType: hard -"@babel/highlight@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/highlight@npm:7.25.9" - dependencies: - "@babel/helper-validator-identifier": "npm:^7.25.9" - chalk: "npm:^2.4.2" - js-tokens: "npm:^4.0.0" - picocolors: "npm:^1.0.0" - checksum: 10c0/ae0ed93c151b85a07df42936117fa593ce91563a22dfc8944a90ae7088c9679645c33e00dcd20b081c1979665d65f986241172dae1fc9e5922692fc3ff685a49 - languageName: node - linkType: hard - "@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.23.9, @babel/parser@npm:^7.25.0, @babel/parser@npm:^7.25.6": version: 7.25.6 resolution: "@babel/parser@npm:7.25.6" @@ -324,14 +303,14 @@ __metadata: languageName: node linkType: hard -"@babel/parser@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/parser@npm:7.25.9" +"@babel/parser@npm:^7.27.1, @babel/parser@npm:^7.27.2": + version: 7.27.2 + resolution: "@babel/parser@npm:7.27.2" dependencies: - "@babel/types": "npm:^7.25.9" + "@babel/types": "npm:^7.27.1" bin: parser: ./bin/babel-parser.js - checksum: 10c0/143faff8a72331be5ed94080e0f4645cbeea814fb488cd9210154083735f67cb66fde32f6a4a80efd6c4cdf12c6f8b50995a465846093c7f65c5da8d7829627c + checksum: 10c0/3c06692768885c2f58207fc8c2cbdb4a44df46b7d93135a083f6eaa49310f7ced490ce76043a2a7606cdcc13f27e3d835e141b692f2f6337a2e7f43c1dbb04b4 languageName: node linkType: hard @@ -522,7 +501,7 @@ __metadata: languageName: node linkType: hard -"@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.10.1, @babel/runtime@npm:^7.11.1, @babel/runtime@npm:^7.11.2, @babel/runtime@npm:^7.12.0, @babel/runtime@npm:^7.12.1, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.18.0, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.20.0, @babel/runtime@npm:^7.20.7, @babel/runtime@npm:^7.23.2, @babel/runtime@npm:^7.23.9, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.8.7, @babel/runtime@npm:^7.9.2": +"@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.10.1, @babel/runtime@npm:^7.11.1, @babel/runtime@npm:^7.11.2, @babel/runtime@npm:^7.12.0, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.18.0, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.20.0, @babel/runtime@npm:^7.20.7, @babel/runtime@npm:^7.23.2, @babel/runtime@npm:^7.23.9, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.8.7": version: 7.25.6 resolution: "@babel/runtime@npm:7.25.6" dependencies: @@ -531,7 +510,14 @@ __metadata: languageName: node linkType: hard -"@babel/runtime@npm:^7.24.1, @babel/runtime@npm:^7.24.5": +"@babel/runtime@npm:^7.12.13, @babel/runtime@npm:^7.24.7, @babel/runtime@npm:^7.25.0, @babel/runtime@npm:^7.25.6, @babel/runtime@npm:^7.25.7, @babel/runtime@npm:^7.26.10": + version: 7.27.1 + resolution: "@babel/runtime@npm:7.27.1" + checksum: 10c0/530a7332f86ac5a7442250456823a930906911d895c0b743bf1852efc88a20a016ed4cd26d442d0ca40ae6d5448111e02a08dd638a4f1064b47d080e2875dc05 + languageName: node + linkType: hard + +"@babel/runtime@npm:^7.24.5": version: 7.25.7 resolution: "@babel/runtime@npm:7.25.7" dependencies: @@ -560,14 +546,14 @@ __metadata: languageName: node linkType: hard -"@babel/template@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/template@npm:7.25.9" +"@babel/template@npm:^7.27.1": + version: 7.27.2 + resolution: "@babel/template@npm:7.27.2" dependencies: - "@babel/code-frame": "npm:^7.25.9" - "@babel/parser": "npm:^7.25.9" - "@babel/types": "npm:^7.25.9" - checksum: 10c0/ebe677273f96a36c92cc15b7aa7b11cc8bc8a3bb7a01d55b2125baca8f19cae94ff3ce15f1b1880fb8437f3a690d9f89d4e91f16fc1dc4d3eb66226d128983ab + "@babel/code-frame": "npm:^7.27.1" + "@babel/parser": "npm:^7.27.2" + "@babel/types": "npm:^7.27.1" + checksum: 10c0/ed9e9022651e463cc5f2cc21942f0e74544f1754d231add6348ff1b472985a3b3502041c0be62dc99ed2d12cfae0c51394bf827452b98a2f8769c03b87aadc81 languageName: node linkType: hard @@ -586,18 +572,18 @@ __metadata: languageName: node linkType: hard -"@babel/traverse@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/traverse@npm:7.25.9" +"@babel/traverse@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/traverse@npm:7.27.1" dependencies: - "@babel/code-frame": "npm:^7.25.9" - "@babel/generator": "npm:^7.25.9" - "@babel/parser": "npm:^7.25.9" - "@babel/template": "npm:^7.25.9" - "@babel/types": "npm:^7.25.9" + "@babel/code-frame": "npm:^7.27.1" + "@babel/generator": "npm:^7.27.1" + "@babel/parser": "npm:^7.27.1" + "@babel/template": "npm:^7.27.1" + "@babel/types": "npm:^7.27.1" debug: "npm:^4.3.1" globals: "npm:^11.1.0" - checksum: 10c0/e90be586a714da4adb80e6cb6a3c5cfcaa9b28148abdafb065e34cc109676fc3db22cf98cd2b2fff66ffb9b50c0ef882cab0f466b6844be0f6c637b82719bba1 + checksum: 10c0/d912110037b03b1d70a2436cfd51316d930366a5f54252da2bced1ba38642f644f848240a951e5caf12f1ef6c40d3d96baa92ea6e84800f2e891c15e97b25d50 languageName: node linkType: hard @@ -612,13 +598,13 @@ __metadata: languageName: node linkType: hard -"@babel/types@npm:^7.25.9": - version: 7.25.9 - resolution: "@babel/types@npm:7.25.9" +"@babel/types@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/types@npm:7.27.1" dependencies: - "@babel/helper-string-parser": "npm:^7.25.9" - "@babel/helper-validator-identifier": "npm:^7.25.9" - checksum: 10c0/33890d08bcb06b26a3a60e4c6c996cbdf2b8d8a3c212664de659c2775f80b002c5f2bceedaa309c384ff5e99bd579794fe6a7e41de07df70246f43c55016d349 + "@babel/helper-string-parser": "npm:^7.27.1" + "@babel/helper-validator-identifier": "npm:^7.27.1" + checksum: 10c0/ed736f14db2fdf0d36c539c8e06b6bb5e8f9649a12b5c0e1c516fed827f27ef35085abe08bf4d1302a4e20c9a254e762eed453bce659786d4a6e01ba26a91377 languageName: node linkType: hard @@ -645,10 +631,10 @@ __metadata: languageName: node linkType: hard -"@discoveryjs/json-ext@npm:^0.5.0": - version: 0.5.7 - resolution: "@discoveryjs/json-ext@npm:0.5.7" - checksum: 10c0/e10f1b02b78e4812646ddf289b7d9f2cb567d336c363b266bd50cd223cf3de7c2c74018d91cd2613041568397ef3a4a2b500aba588c6e5bd78c38374ba68f38c +"@discoveryjs/json-ext@npm:^0.6.1": + version: 0.6.3 + resolution: "@discoveryjs/json-ext@npm:0.6.3" + checksum: 10c0/778a9f9d5c3696da3c1f9fa4186613db95a1090abbfb6c2601430645c0d0158cd5e4ba4f32c05904e2dd2747d57710f6aab22bd2f8aa3c4e8feab9b247c65d85 languageName: node linkType: hard @@ -671,6 +657,25 @@ __metadata: languageName: node linkType: hard +"@emotion/babel-plugin@npm:^11.13.5": + version: 11.13.5 + resolution: "@emotion/babel-plugin@npm:11.13.5" + dependencies: + "@babel/helper-module-imports": "npm:^7.16.7" + "@babel/runtime": "npm:^7.18.3" + "@emotion/hash": "npm:^0.9.2" + "@emotion/memoize": "npm:^0.9.0" + "@emotion/serialize": "npm:^1.3.3" + babel-plugin-macros: "npm:^3.1.0" + convert-source-map: "npm:^1.5.0" + escape-string-regexp: "npm:^4.0.0" + find-root: "npm:^1.1.0" + source-map: "npm:^0.5.7" + stylis: "npm:4.2.0" + checksum: 10c0/8ccbfec7defd0e513cb8a1568fa179eac1e20c35fda18aed767f6c59ea7314363ebf2de3e9d2df66c8ad78928dc3dceeded84e6fa8059087cae5c280090aeeeb + languageName: node + linkType: hard + "@emotion/cache@npm:^11.13.0, @emotion/cache@npm:^11.4.0": version: 11.13.1 resolution: "@emotion/cache@npm:11.13.1" @@ -684,16 +689,29 @@ __metadata: languageName: node linkType: hard -"@emotion/css@npm:11.13.4, @emotion/css@npm:^11.13.4": - version: 11.13.4 - resolution: "@emotion/css@npm:11.13.4" +"@emotion/cache@npm:^11.13.5, @emotion/cache@npm:^11.14.0": + version: 11.14.0 + resolution: "@emotion/cache@npm:11.14.0" dependencies: - "@emotion/babel-plugin": "npm:^11.12.0" - "@emotion/cache": "npm:^11.13.0" - "@emotion/serialize": "npm:^1.3.0" + "@emotion/memoize": "npm:^0.9.0" "@emotion/sheet": "npm:^1.4.0" - "@emotion/utils": "npm:^1.4.0" - checksum: 10c0/57971732b983f43e642e30496257168d5ecdd05be4d4a3cd7ff778f9e402a71fd8679272cb797abd61eab65724dad26af04c418a41219a062b8faa9cc01d3848 + "@emotion/utils": "npm:^1.4.2" + "@emotion/weak-memoize": "npm:^0.4.0" + stylis: "npm:4.2.0" + checksum: 10c0/3fa3e7a431ab6f8a47c67132a00ac8358f428c1b6c8421d4b20de9df7c18e95eec04a5a6ff5a68908f98d3280044f247b4965ac63df8302d2c94dba718769724 + languageName: node + linkType: hard + +"@emotion/css@npm:11.13.5, @emotion/css@npm:^11.13.5": + version: 11.13.5 + resolution: "@emotion/css@npm:11.13.5" + dependencies: + "@emotion/babel-plugin": "npm:^11.13.5" + "@emotion/cache": "npm:^11.13.5" + "@emotion/serialize": "npm:^1.3.3" + "@emotion/sheet": "npm:^1.4.0" + "@emotion/utils": "npm:^1.4.2" + checksum: 10c0/45d444b08c1a9776046786f1ad8b93297d9e0fb79e6a40b73e9f9c5c20a071f83bae2408e7b98fe526fc123774a18b12ae3c8dc5b5883b8169685ee7b8df9463 languageName: node linkType: hard @@ -711,7 +729,28 @@ __metadata: languageName: node linkType: hard -"@emotion/react@npm:11.13.3, @emotion/react@npm:^11.8.1": +"@emotion/react@npm:11.14.0": + version: 11.14.0 + resolution: "@emotion/react@npm:11.14.0" + dependencies: + "@babel/runtime": "npm:^7.18.3" + "@emotion/babel-plugin": "npm:^11.13.5" + "@emotion/cache": "npm:^11.14.0" + "@emotion/serialize": "npm:^1.3.3" + "@emotion/use-insertion-effect-with-fallbacks": "npm:^1.2.0" + "@emotion/utils": "npm:^1.4.2" + "@emotion/weak-memoize": "npm:^0.4.0" + hoist-non-react-statics: "npm:^3.3.1" + peerDependencies: + react: ">=16.8.0" + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 10c0/d0864f571a9f99ec643420ef31fde09e2006d3943a6aba079980e4d5f6e9f9fecbcc54b8f617fe003c00092ff9d5241179149ffff2810cb05cf72b4620cfc031 + languageName: node + linkType: hard + +"@emotion/react@npm:^11.8.1": version: 11.13.3 resolution: "@emotion/react@npm:11.13.3" dependencies: @@ -732,20 +771,20 @@ __metadata: languageName: node linkType: hard -"@emotion/serialize@npm:1.3.2": - version: 1.3.2 - resolution: "@emotion/serialize@npm:1.3.2" +"@emotion/serialize@npm:1.3.3, @emotion/serialize@npm:^1.3.3": + version: 1.3.3 + resolution: "@emotion/serialize@npm:1.3.3" dependencies: "@emotion/hash": "npm:^0.9.2" "@emotion/memoize": "npm:^0.9.0" "@emotion/unitless": "npm:^0.10.0" - "@emotion/utils": "npm:^1.4.1" + "@emotion/utils": "npm:^1.4.2" csstype: "npm:^3.0.2" - checksum: 10c0/b4873b643721d28b4450f9d77b71e6c8d0109e6825c54fc79e649d2fa438fe4080d2fa696ec8fda421b8e713fcd42306d6197b6121ddd2486ffab8e4b6311ce0 + checksum: 10c0/b28cb7de59de382021de2b26c0c94ebbfb16967a1b969a56fdb6408465a8993df243bfbd66430badaa6800e1834724e84895f5a6a9d97d0d224de3d77852acb4 languageName: node linkType: hard -"@emotion/serialize@npm:^1.2.0, @emotion/serialize@npm:^1.3.0, @emotion/serialize@npm:^1.3.1": +"@emotion/serialize@npm:^1.2.0, @emotion/serialize@npm:^1.3.1": version: 1.3.1 resolution: "@emotion/serialize@npm:1.3.1" dependencies: @@ -781,6 +820,15 @@ __metadata: languageName: node linkType: hard +"@emotion/use-insertion-effect-with-fallbacks@npm:^1.2.0": + version: 1.2.0 + resolution: "@emotion/use-insertion-effect-with-fallbacks@npm:1.2.0" + peerDependencies: + react: ">=16.8.0" + checksum: 10c0/074dbc92b96bdc09209871070076e3b0351b6b47efefa849a7d9c37ab142130767609ca1831da0055988974e3b895c1de7606e4c421fecaa27c3e56a2afd3b08 + languageName: node + linkType: hard + "@emotion/utils@npm:^1.4.0": version: 1.4.0 resolution: "@emotion/utils@npm:1.4.0" @@ -788,10 +836,10 @@ __metadata: languageName: node linkType: hard -"@emotion/utils@npm:^1.4.1": - version: 1.4.1 - resolution: "@emotion/utils@npm:1.4.1" - checksum: 10c0/f4704e0bdf48062fd6eb9c64771c88f521aab1e108a48cb23d65b6438597c63a6945301cef4c43611e79e0e76a304ec5481c31025ea8f573d7ad5423d747602c +"@emotion/utils@npm:^1.4.2": + version: 1.4.2 + resolution: "@emotion/utils@npm:1.4.2" + checksum: 10c0/7d0010bf60a2a8c1a033b6431469de4c80e47aeb8fd856a17c1d1f76bbc3a03161a34aeaa78803566e29681ca551e7bf9994b68e9c5f5c796159923e44f78d9a languageName: node linkType: hard @@ -844,17 +892,17 @@ __metadata: languageName: node linkType: hard -"@floating-ui/react@npm:0.26.24": - version: 0.26.24 - resolution: "@floating-ui/react@npm:0.26.24" +"@floating-ui/react@npm:0.27.7": + version: 0.27.7 + resolution: "@floating-ui/react@npm:0.27.7" dependencies: "@floating-ui/react-dom": "npm:^2.1.2" - "@floating-ui/utils": "npm:^0.2.8" + "@floating-ui/utils": "npm:^0.2.9" tabbable: "npm:^6.0.0" peerDependencies: - react: ">=16.8.0" - react-dom: ">=16.8.0" - checksum: 10c0/c5c3ac265802087673a69b0e08b3bea1ee02de9da4cdbc40bb1c9e06823be72628a82f1655b40d56a4383715b4ab3b6deddff4e69146f513970ee592e1dd8f92 + react: ">=17.0.0" + react-dom: ">=17.0.0" + checksum: 10c0/bb79c89a63dfb44917f1583548905437adb7ba3fc9ece27c45b12532a60423425f8ae9fde8a54b10711e6449585ffde0951aa70a4f13f99eaeacd5006d7d69e5 languageName: node linkType: hard @@ -865,10 +913,10 @@ __metadata: languageName: node linkType: hard -"@floating-ui/utils@npm:^0.2.8": - version: 0.2.8 - resolution: "@floating-ui/utils@npm:0.2.8" - checksum: 10c0/a8cee5f17406c900e1c3ef63e3ca89b35e7a2ed645418459a73627b93b7377477fc888081011c6cd177cac45ec2b92a6cab018c14ea140519465498dddd2d3f9 +"@floating-ui/utils@npm:^0.2.9": + version: 0.2.9 + resolution: "@floating-ui/utils@npm:0.2.9" + checksum: 10c0/48bbed10f91cb7863a796cc0d0e917c78d11aeb89f98d03fc38d79e7eb792224a79f538ed8a2d5d5584511d4ca6354ef35f1712659fd569868e342df4398ad6f languageName: node linkType: hard @@ -921,49 +969,51 @@ __metadata: languageName: node linkType: hard -"@grafana/data@npm:11.3.0, @grafana/data@npm:^11.3.0": - version: 11.3.0 - resolution: "@grafana/data@npm:11.3.0" +"@grafana/data@npm:12.0.0, @grafana/data@npm:^12.0.0": + version: 12.0.0 + resolution: "@grafana/data@npm:12.0.0" dependencies: "@braintree/sanitize-url": "npm:7.0.1" - "@grafana/schema": "npm:11.3.0" + "@grafana/schema": "npm:12.0.0" "@types/d3-interpolate": "npm:^3.0.0" "@types/string-hash": "npm:1.1.3" + "@types/systemjs": "npm:6.15.1" d3-interpolate: "npm:3.0.1" - date-fns: "npm:3.6.0" - dompurify: "npm:^3.0.0" + date-fns: "npm:4.1.0" + dompurify: "npm:3.2.5" eventemitter3: "npm:5.0.1" fast_array_intersect: "npm:1.1.0" history: "npm:4.10.1" lodash: "npm:4.17.21" - marked: "npm:12.0.2" - marked-mangle: "npm:1.1.9" + marked: "npm:15.0.6" + marked-mangle: "npm:1.1.10" moment: "npm:2.30.1" - moment-timezone: "npm:0.5.46" + moment-timezone: "npm:0.5.47" ol: "npm:7.4.0" - papaparse: "npm:5.4.1" - react-use: "npm:17.5.1" + papaparse: "npm:5.5.2" + react-use: "npm:17.6.0" rxjs: "npm:7.8.1" string-hash: "npm:^1.1.3" tinycolor2: "npm:1.6.0" - tslib: "npm:2.7.0" - uplot: "npm:1.6.31" + tslib: "npm:2.8.1" + uplot: "npm:1.6.32" xss: "npm:^1.0.14" peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - checksum: 10c0/6e09e3fc109259b2efd4ba3fe182b7ee3eb6c7c997f2a2befd38e75cf09a0cbfb47511f8b14fbca15fa38a9ff73a52d953ad8b07043e94bbe4bb983fb7bb2851 + checksum: 10c0/3cbb001e3871c81cdbb830499f81b31aa02c7add43a1f694dc6fc0559db4c8b911b266a20ba37f7e5503bdd8decd8ff0d3a9feca462ff5dc662c3fa7a81b93ee languageName: node linkType: hard -"@grafana/e2e-selectors@npm:11.3.0": - version: 11.3.0 - resolution: "@grafana/e2e-selectors@npm:11.3.0" +"@grafana/e2e-selectors@npm:12.0.0": + version: 12.0.0 + resolution: "@grafana/e2e-selectors@npm:12.0.0" dependencies: "@grafana/tsconfig": "npm:^2.0.0" - tslib: "npm:2.7.0" - typescript: "npm:5.5.4" - checksum: 10c0/6b6fec3e00e173d5bece9744e6531dd8f6c44ee09d909a47df9dcec3ee8206911db2a6fead9e52078bec1e9415f0bf4698b421b751016bc9efedbd9f239c9e0e + semver: "npm:^7.7.0" + tslib: "npm:2.8.1" + typescript: "npm:5.7.3" + checksum: 10c0/b3b0f3c27f187270b39556c0f321c52b9bd1947cf9187e95601eeb3aedc1dfe0315ec9c8da8e2fa47f060625f329b2ee10f376027464e1631cad016d4e57b97a languageName: node linkType: hard @@ -984,53 +1034,56 @@ __metadata: languageName: node linkType: hard -"@grafana/faro-core@npm:^1.10.0": - version: 1.10.0 - resolution: "@grafana/faro-core@npm:1.10.0" +"@grafana/faro-core@npm:^1.18.1": + version: 1.18.1 + resolution: "@grafana/faro-core@npm:1.18.1" dependencies: "@opentelemetry/api": "npm:^1.9.0" - "@opentelemetry/otlp-transformer": "npm:^0.53.0" - checksum: 10c0/c61a68e0a0354b8223a72e36bfa3bf264321153601192d62c836d703837a845af22ac2bb8da060981fa755aeba47469b00917e4bf28a440e765b504e3e446238 + "@opentelemetry/otlp-transformer": "npm:^0.200.0" + checksum: 10c0/0fd3eeba7f33bfac7cdb6be8a0de52c831994c78388b3a5510ad6feded3bbd86390336ff8b4119e22c9827092a34338ad0eb7fd750ae7950dede8269268555fa languageName: node linkType: hard -"@grafana/faro-web-sdk@npm:^1.3.6": - version: 1.10.0 - resolution: "@grafana/faro-web-sdk@npm:1.10.0" +"@grafana/faro-web-sdk@npm:^1.13.2": + version: 1.18.1 + resolution: "@grafana/faro-web-sdk@npm:1.18.1" dependencies: - "@grafana/faro-core": "npm:^1.10.0" + "@grafana/faro-core": "npm:^1.18.1" ua-parser-js: "npm:^1.0.32" web-vitals: "npm:^4.0.1" - checksum: 10c0/cebdf0be3fe3fa892e8d8656b51044f7a58f88c7f7d4950e30902a2b51e610b6634c12534467b68ba1c2bd1b18fe8c7cb959e50feae30829dfc7d391950072af + checksum: 10c0/c54357bfdaae21b77fade72f9440d76fd4064ff30dd918368f30ed943c03e87008d0d95a7f3d63ae830ecf52ebd6d37c7f97281c04deb8124badf6cfe0e80483 languageName: node linkType: hard -"@grafana/runtime@npm:^11.3.0": - version: 11.3.0 - resolution: "@grafana/runtime@npm:11.3.0" +"@grafana/runtime@npm:^12.0.0": + version: 12.0.0 + resolution: "@grafana/runtime@npm:12.0.0" dependencies: - "@grafana/data": "npm:11.3.0" - "@grafana/e2e-selectors": "npm:11.3.0" - "@grafana/faro-web-sdk": "npm:^1.3.6" - "@grafana/schema": "npm:11.3.0" - "@grafana/ui": "npm:11.3.0" + "@grafana/data": "npm:12.0.0" + "@grafana/e2e-selectors": "npm:12.0.0" + "@grafana/faro-web-sdk": "npm:^1.13.2" + "@grafana/schema": "npm:12.0.0" + "@grafana/ui": "npm:12.0.0" + "@types/systemjs": "npm:6.15.1" history: "npm:4.10.1" lodash: "npm:4.17.21" + react-loading-skeleton: "npm:3.5.0" + react-use: "npm:17.6.0" rxjs: "npm:7.8.1" - tslib: "npm:2.7.0" + tslib: "npm:2.8.1" peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - checksum: 10c0/aa8f4d75fed10d25761276f0d45f1101760125e21a15d05ddc4b0cfb2adbc71612455df416beb1410174b0772beb0dade0efc637a2e3cb70b28bb1c7917a5b53 + checksum: 10c0/6c5c78dff9198ce38a2a5d7946c80e7df622c4b530464a9ed7a495c37f06cc2b9b230339171207098f7c77b25201ed46250f5ea0f967c2804a88c8e1709f5675 languageName: node linkType: hard -"@grafana/schema@npm:11.3.0, @grafana/schema@npm:^11.3.0": - version: 11.3.0 - resolution: "@grafana/schema@npm:11.3.0" +"@grafana/schema@npm:12.0.0, @grafana/schema@npm:^12.0.0": + version: 12.0.0 + resolution: "@grafana/schema@npm:12.0.0" dependencies: - tslib: "npm:2.7.0" - checksum: 10c0/27863a97e1084c6a04655987361c7c8e0870a66e459a0e867efb42de0a0b39beb22f921c6de2dafcc3ffcd3146278021048465def1e7e23bbb52d634c295ee33 + tslib: "npm:2.8.1" + checksum: 10c0/cbf5c1bd8267ca2a48d9b609840f481cd5bc6b81e363bf11c961e82a16d0266646ce9db52ce3d2f2838eb4790a6b3a293781a3fdc22d1e110a79f808fc940143 languageName: node linkType: hard @@ -1041,40 +1094,39 @@ __metadata: languageName: node linkType: hard -"@grafana/ui@npm:11.3.0, @grafana/ui@npm:^11.3.0": - version: 11.3.0 - resolution: "@grafana/ui@npm:11.3.0" +"@grafana/ui@npm:12.0.0, @grafana/ui@npm:^12.0.0": + version: 12.0.0 + resolution: "@grafana/ui@npm:12.0.0" dependencies: - "@emotion/css": "npm:11.13.4" - "@emotion/react": "npm:11.13.3" - "@emotion/serialize": "npm:1.3.2" - "@floating-ui/react": "npm:0.26.24" - "@grafana/data": "npm:11.3.0" - "@grafana/e2e-selectors": "npm:11.3.0" - "@grafana/faro-web-sdk": "npm:^1.3.6" - "@grafana/schema": "npm:11.3.0" - "@hello-pangea/dnd": "npm:16.6.0" - "@leeoniya/ufuzzy": "npm:1.0.14" + "@emotion/css": "npm:11.13.5" + "@emotion/react": "npm:11.14.0" + "@emotion/serialize": "npm:1.3.3" + "@floating-ui/react": "npm:0.27.7" + "@grafana/data": "npm:12.0.0" + "@grafana/e2e-selectors": "npm:12.0.0" + "@grafana/faro-web-sdk": "npm:^1.13.2" + "@grafana/schema": "npm:12.0.0" + "@hello-pangea/dnd": "npm:17.0.0" + "@leeoniya/ufuzzy": "npm:1.0.18" "@monaco-editor/react": "npm:4.6.0" "@popperjs/core": "npm:2.11.8" - "@react-aria/dialog": "npm:3.5.18" - "@react-aria/focus": "npm:3.18.3" - "@react-aria/overlays": "npm:3.23.3" - "@react-aria/utils": "npm:3.25.3" + "@react-aria/dialog": "npm:3.5.23" + "@react-aria/focus": "npm:3.20.1" + "@react-aria/overlays": "npm:3.26.1" + "@react-aria/utils": "npm:3.28.1" "@tanstack/react-virtual": "npm:^3.5.1" - "@types/jquery": "npm:3.5.31" - "@types/lodash": "npm:4.17.10" + "@types/jquery": "npm:3.5.32" + "@types/lodash": "npm:4.17.15" "@types/react-table": "npm:7.7.20" - ansicolor: "npm:1.1.100" calculate-size: "npm:1.1.1" classnames: "npm:2.5.1" d3: "npm:7.9.0" - date-fns: "npm:3.6.0" + date-fns: "npm:4.1.0" downshift: "npm:^9.0.6" hoist-non-react-statics: "npm:3.3.2" - i18next: "npm:^23.0.0" - i18next-browser-languagedetector: "npm:^7.0.2" - immutable: "npm:4.3.7" + i18next: "npm:^24.0.0" + i18next-browser-languagedetector: "npm:^8.0.0" + immutable: "npm:5.0.3" is-hotkey: "npm:0.2.0" jquery: "npm:3.7.1" lodash: "npm:4.17.21" @@ -1082,94 +1134,97 @@ __metadata: moment: "npm:2.30.1" monaco-editor: "npm:0.34.1" ol: "npm:7.4.0" - prismjs: "npm:1.29.0" - rc-cascader: "npm:3.28.1" + prismjs: "npm:1.30.0" + rc-cascader: "npm:3.33.0" rc-drawer: "npm:7.2.0" - rc-slider: "npm:11.1.7" - rc-time-picker: "npm:^3.7.3" - rc-tooltip: "npm:6.2.1" - react-calendar: "npm:5.0.0" + rc-picker: "npm:4.9.2" + rc-slider: "npm:11.1.8" + rc-tooltip: "npm:6.4.0" + react-calendar: "npm:^5.1.0" react-colorful: "npm:5.6.1" react-custom-scrollbars-2: "npm:4.5.0" - react-dropzone: "npm:14.2.9" - react-highlight-words: "npm:0.20.0" + react-data-grid: "npm:7.0.0-beta.46" + react-dropzone: "npm:14.3.5" + react-highlight-words: "npm:0.21.0" react-hook-form: "npm:^7.49.2" - react-i18next: "npm:^14.0.0" - react-inlinesvg: "npm:3.0.2" + react-i18next: "npm:^15.0.0" + react-inlinesvg: "npm:4.2.0" react-loading-skeleton: "npm:3.5.0" + react-router-dom: "npm:5.3.4" react-router-dom-v5-compat: "npm:^6.26.1" - react-select: "npm:5.8.1" + react-select: "npm:5.10.0" react-table: "npm:7.8.0" react-transition-group: "npm:4.4.5" - react-use: "npm:17.5.1" - react-window: "npm:1.8.10" + react-use: "npm:17.6.0" + react-window: "npm:1.8.11" rxjs: "npm:7.8.1" slate: "npm:0.47.9" slate-plain-serializer: "npm:0.7.13" slate-react: "npm:0.22.10" tinycolor2: "npm:1.6.0" - tslib: "npm:2.7.0" - uplot: "npm:1.6.31" - uuid: "npm:9.0.1" + tslib: "npm:2.8.1" + uplot: "npm:1.6.32" + uuid: "npm:11.0.5" + uwrap: "npm:0.1.1" peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - checksum: 10c0/dc0dc9a8bae9ece475596a9f743d375ea1bb997627efccb6da76a4c2bb0a14105f81fb79208f4e3d10702638797265c0ca8cb239e6f69b9d442853180034739b + checksum: 10c0/e3cde603de6dbca2bac7d40f9869f072bb349a4536c89130b36eb389fa84bb5c738fb4e957c9fb1a5a9fabcd5045f7751f5b3123c9b8491db74f4cdd0f8c8951 languageName: node linkType: hard -"@hello-pangea/dnd@npm:16.6.0": - version: 16.6.0 - resolution: "@hello-pangea/dnd@npm:16.6.0" +"@hello-pangea/dnd@npm:17.0.0": + version: 17.0.0 + resolution: "@hello-pangea/dnd@npm:17.0.0" dependencies: - "@babel/runtime": "npm:^7.24.1" + "@babel/runtime": "npm:^7.25.6" css-box-model: "npm:^1.2.1" memoize-one: "npm:^6.0.0" raf-schd: "npm:^4.0.3" - react-redux: "npm:^8.1.3" - redux: "npm:^4.2.1" + react-redux: "npm:^9.1.2" + redux: "npm:^5.0.1" use-memo-one: "npm:^1.1.3" peerDependencies: - react: ^16.8.5 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.5 || ^17.0.0 || ^18.0.0 - checksum: 10c0/ef43ba21f063f6497f399b457452d45be456b1f28405b148d9683d2ca65e5f77e2685a0b7e9998aaca4f8676b1642ba2c277fc78643ea59fd6b9f71a56ffc5e0 + react: ^18.0.0 + react-dom: ^18.0.0 + checksum: 10c0/93417c055267f6f12a37a1cdb08d9db85ab021b102315e1e5a70a79d7de6c2ffaeff211e3ec40441c110f39e60688cfcea85ab86c21820041d974415c1ca715e languageName: node linkType: hard -"@internationalized/date@npm:^3.5.6": - version: 3.5.6 - resolution: "@internationalized/date@npm:3.5.6" +"@internationalized/date@npm:^3.8.0": + version: 3.8.0 + resolution: "@internationalized/date@npm:3.8.0" dependencies: "@swc/helpers": "npm:^0.5.0" - checksum: 10c0/25d3150247175892705aeaf8e1a78295717d420c37cb3065a766c4058a1aed460a69dc5362f7073425c95095c27036c7ed65f0ce5fbb32b20f917132e8dc543f + checksum: 10c0/7ac0cae2f1832fe2f2950e22208812ed8bf2845dd903ec93bd3aa024ca020124e137638b11bb5817b92abde1daa3f881cc81d62db0b20f5db2d9e07ab0cd9e01 languageName: node linkType: hard -"@internationalized/message@npm:^3.1.5": - version: 3.1.5 - resolution: "@internationalized/message@npm:3.1.5" +"@internationalized/message@npm:^3.1.7": + version: 3.1.7 + resolution: "@internationalized/message@npm:3.1.7" dependencies: "@swc/helpers": "npm:^0.5.0" intl-messageformat: "npm:^10.1.0" - checksum: 10c0/81a2ef21154d0b00796fd2ecfb5365248fe50f64a7ad1616dbe4e491555e7e018557b061df145d0ab5b68cb1e757ac203d3892c42f791f169360b98d77fa5091 + checksum: 10c0/0e3d46c97e790e34074f2589cbbe220bac8da453bf6d5d5da5d545b8a3989d37dc02d5209296f3cb900cea5a1220658821c7fe04fd00b2a27c446fcc6f062b1a languageName: node linkType: hard -"@internationalized/number@npm:^3.5.4": - version: 3.5.4 - resolution: "@internationalized/number@npm:3.5.4" +"@internationalized/number@npm:^3.6.1": + version: 3.6.1 + resolution: "@internationalized/number@npm:3.6.1" dependencies: "@swc/helpers": "npm:^0.5.0" - checksum: 10c0/d01a1845ad9815756ceb59eeb75792ee89105d073ce232350c0644453a3470e3ebaffc2b00ebd2dd8238957b0ae12d1551633308897fa9c332dda82f2af8c5cf + checksum: 10c0/2605245bec05c5ff2e100d0cf5541b1f08e9038d76c18f11ce9142f538a5a06f1f5459506e7ef6d1b162b4bcc34bf2d8eebb39fe235048cb41eebd00ec04fd65 languageName: node linkType: hard -"@internationalized/string@npm:^3.2.4": - version: 3.2.4 - resolution: "@internationalized/string@npm:3.2.4" +"@internationalized/string@npm:^3.2.6": + version: 3.2.6 + resolution: "@internationalized/string@npm:3.2.6" dependencies: "@swc/helpers": "npm:^0.5.0" - checksum: 10c0/5a03ff3d7bea1eb0e7ef8f7b00d148b6b8afa90600434db61389e6a8a83e3ca89e469c730eb02ef6284e7b559ce4be8f46cb446387e137931bc47acb8cbcd841 + checksum: 10c0/8ed556697fee4aa2a115ea9d44075e8be8a7f80c76ebfcc6a4f14681175c4e59438f7ba049748d9c9cd0b46c7927b731d7c1f7fa53aaaf58b4c46dbd9f471b61 languageName: node linkType: hard @@ -1498,7 +1553,7 @@ __metadata: languageName: node linkType: hard -"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.18, @jridgewell/trace-mapping@npm:^0.3.20, @jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.25": +"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.18, @jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.25": version: 0.3.25 resolution: "@jridgewell/trace-mapping@npm:0.3.25" dependencies: @@ -1508,10 +1563,10 @@ __metadata: languageName: node linkType: hard -"@leeoniya/ufuzzy@npm:1.0.14": - version: 1.0.14 - resolution: "@leeoniya/ufuzzy@npm:1.0.14" - checksum: 10c0/d66b409e49366d2c77cb8f750dd19cceeb49a232ce3d1a44315664dcf72e4e023d006c2b4f35f04588c17e660283ff7be6f419f14f5b910ba1726b1d8a4a128d +"@leeoniya/ufuzzy@npm:1.0.18": + version: 1.0.18 + resolution: "@leeoniya/ufuzzy@npm:1.0.18" + checksum: 10c0/d8fa13373f5de666b5a65585a8d2e8f99ba24e5d2f695099194560f02c9184dbceaa0490e712fa4851f972a5dbbcdcc71569e0091afbd2e6e772d716065b200a languageName: node linkType: hard @@ -1630,104 +1685,104 @@ __metadata: languageName: node linkType: hard -"@opentelemetry/api-logs@npm:0.53.0": - version: 0.53.0 - resolution: "@opentelemetry/api-logs@npm:0.53.0" +"@opentelemetry/api-logs@npm:0.200.0": + version: 0.200.0 + resolution: "@opentelemetry/api-logs@npm:0.200.0" dependencies: - "@opentelemetry/api": "npm:^1.0.0" - checksum: 10c0/969ad3bbb74e3de6fdfe8eb9b3ab86d3dc284ca7bffd0ca67eef64efd08c97a4305696afe0b7b03e5d356f15d0a1a67ac517e5fa7d1ddee6fdc249eef2209fcb + "@opentelemetry/api": "npm:^1.3.0" + checksum: 10c0/c6bc3cfba35c69411f294519d93d0ff9f603517030d1162839ee42ac22ed1b0235edaf71d00cabc40125f813d8b4dc830d14315afcebcef138c1df560eaa5c91 languageName: node linkType: hard -"@opentelemetry/api@npm:^1.0.0, @opentelemetry/api@npm:^1.9.0": +"@opentelemetry/api@npm:^1.3.0, @opentelemetry/api@npm:^1.9.0": version: 1.9.0 resolution: "@opentelemetry/api@npm:1.9.0" checksum: 10c0/9aae2fe6e8a3a3eeb6c1fdef78e1939cf05a0f37f8a4fae4d6bf2e09eb1e06f966ece85805626e01ba5fab48072b94f19b835449e58b6d26720ee19a58298add languageName: node linkType: hard -"@opentelemetry/core@npm:1.26.0": - version: 1.26.0 - resolution: "@opentelemetry/core@npm:1.26.0" +"@opentelemetry/core@npm:2.0.0": + version: 2.0.0 + resolution: "@opentelemetry/core@npm:2.0.0" dependencies: - "@opentelemetry/semantic-conventions": "npm:1.27.0" + "@opentelemetry/semantic-conventions": "npm:^1.29.0" peerDependencies: "@opentelemetry/api": ">=1.0.0 <1.10.0" - checksum: 10c0/8038a3b9124a0b3b48dceb3949f88726c6853eac33b79fc049856f78dcf4b7ee453db1e6f4d5205a79b315caba809cb7d2f853946cf14773e50ce6a87fd5260e + checksum: 10c0/d2cc6d8a955305b9de15cc36135e5d5b0f0405fead8bbd4de51433f2d05369af0a3bcb2c6fe7fe6d9e61b0db782511bcadc5d93ed906027d4c00d5c2e3575a24 languageName: node linkType: hard -"@opentelemetry/otlp-transformer@npm:^0.53.0": - version: 0.53.0 - resolution: "@opentelemetry/otlp-transformer@npm:0.53.0" +"@opentelemetry/otlp-transformer@npm:^0.200.0": + version: 0.200.0 + resolution: "@opentelemetry/otlp-transformer@npm:0.200.0" dependencies: - "@opentelemetry/api-logs": "npm:0.53.0" - "@opentelemetry/core": "npm:1.26.0" - "@opentelemetry/resources": "npm:1.26.0" - "@opentelemetry/sdk-logs": "npm:0.53.0" - "@opentelemetry/sdk-metrics": "npm:1.26.0" - "@opentelemetry/sdk-trace-base": "npm:1.26.0" + "@opentelemetry/api-logs": "npm:0.200.0" + "@opentelemetry/core": "npm:2.0.0" + "@opentelemetry/resources": "npm:2.0.0" + "@opentelemetry/sdk-logs": "npm:0.200.0" + "@opentelemetry/sdk-metrics": "npm:2.0.0" + "@opentelemetry/sdk-trace-base": "npm:2.0.0" protobufjs: "npm:^7.3.0" peerDependencies: "@opentelemetry/api": ^1.3.0 - checksum: 10c0/d9a43bb00ce5386aeb477cd95e72cd86114ed01b2e11e8f39c3988aa2bb56cbda16b533ffd55396ed374961c32e1cc76face565e21b6cedcc85e844776912666 + checksum: 10c0/4f5383fad48c62e17824df91f6944b0376cb17f7b132b11d62fa5cf46747f224c980960209c85669b6e341a131f94586c6ad52bc1a6d2fb8d5295e23b460600c languageName: node linkType: hard -"@opentelemetry/resources@npm:1.26.0": - version: 1.26.0 - resolution: "@opentelemetry/resources@npm:1.26.0" +"@opentelemetry/resources@npm:2.0.0": + version: 2.0.0 + resolution: "@opentelemetry/resources@npm:2.0.0" dependencies: - "@opentelemetry/core": "npm:1.26.0" - "@opentelemetry/semantic-conventions": "npm:1.27.0" + "@opentelemetry/core": "npm:2.0.0" + "@opentelemetry/semantic-conventions": "npm:^1.29.0" peerDependencies: - "@opentelemetry/api": ">=1.0.0 <1.10.0" - checksum: 10c0/62ffbf7edee8676055661cf608b32a52bfa46fedb1a88830b4d4d0faf6664edbcbf7922034d3690d11fe9ebef9d9f5ffcb05645e8c7b27c707bf57d5289617e9 + "@opentelemetry/api": ">=1.3.0 <1.10.0" + checksum: 10c0/2f331ff8268ef7168e8f24312fd7505900693c0ea302f6025937e94c157b8173ee54f5d5a737c06b956da721aa63443ac520f530cade880ef3cd40a2a25c702c languageName: node linkType: hard -"@opentelemetry/sdk-logs@npm:0.53.0": - version: 0.53.0 - resolution: "@opentelemetry/sdk-logs@npm:0.53.0" +"@opentelemetry/sdk-logs@npm:0.200.0": + version: 0.200.0 + resolution: "@opentelemetry/sdk-logs@npm:0.200.0" dependencies: - "@opentelemetry/api-logs": "npm:0.53.0" - "@opentelemetry/core": "npm:1.26.0" - "@opentelemetry/resources": "npm:1.26.0" + "@opentelemetry/api-logs": "npm:0.200.0" + "@opentelemetry/core": "npm:2.0.0" + "@opentelemetry/resources": "npm:2.0.0" peerDependencies: "@opentelemetry/api": ">=1.4.0 <1.10.0" - checksum: 10c0/bd47e9a70966c53ac7b394ba0f27a4400b4fdebfbe781027f53457954b79b1c821301936bc87f5fe09a462af579c02c4fa27f353b6d9a1dca0b760cc284ec068 + checksum: 10c0/031dc40dd012fad102e5c8c0c9bdbbce051dbc7fcc2e05e003f959aeb34d252dc3595b353ea2a9f900ff40f45d19cb4c8f7ab95a9faa01391f6b415c7780c786 languageName: node linkType: hard -"@opentelemetry/sdk-metrics@npm:1.26.0": - version: 1.26.0 - resolution: "@opentelemetry/sdk-metrics@npm:1.26.0" +"@opentelemetry/sdk-metrics@npm:2.0.0": + version: 2.0.0 + resolution: "@opentelemetry/sdk-metrics@npm:2.0.0" dependencies: - "@opentelemetry/core": "npm:1.26.0" - "@opentelemetry/resources": "npm:1.26.0" + "@opentelemetry/core": "npm:2.0.0" + "@opentelemetry/resources": "npm:2.0.0" peerDependencies: - "@opentelemetry/api": ">=1.3.0 <1.10.0" - checksum: 10c0/640a0dcfa4af73a029ef57b51f8ecc1d08dfb0c3a5242552876fab36c7f9ae7c410fa52dbc5202a2d8675fcfe61df3c49205079963f1c11acfe42981d1d01a76 + "@opentelemetry/api": ">=1.9.0 <1.10.0" + checksum: 10c0/9a3c87738671f29a496a39d65b3ab0829b52d0f31c0be662ea575a8f77bc5444044fd01513c891abdff6bf6344a08730e18f79253a85e68962669f3e1fa12e72 languageName: node linkType: hard -"@opentelemetry/sdk-trace-base@npm:1.26.0": - version: 1.26.0 - resolution: "@opentelemetry/sdk-trace-base@npm:1.26.0" +"@opentelemetry/sdk-trace-base@npm:2.0.0": + version: 2.0.0 + resolution: "@opentelemetry/sdk-trace-base@npm:2.0.0" dependencies: - "@opentelemetry/core": "npm:1.26.0" - "@opentelemetry/resources": "npm:1.26.0" - "@opentelemetry/semantic-conventions": "npm:1.27.0" + "@opentelemetry/core": "npm:2.0.0" + "@opentelemetry/resources": "npm:2.0.0" + "@opentelemetry/semantic-conventions": "npm:^1.29.0" peerDependencies: - "@opentelemetry/api": ">=1.0.0 <1.10.0" - checksum: 10c0/0d5fc19179375f1599edae91b7232f432faf8631746835a10d0cd0c4907d0ca3ed156cc8087d4e78efdfbd9ba5ba414cc9e1399172c2aa68d7e0cd5190394d87 + "@opentelemetry/api": ">=1.3.0 <1.10.0" + checksum: 10c0/c63cc052741e4cc01d084c883e24a1c0792f081a242e14e5cf526d5a3d96bac5974006fa0d8f902bd04f34ed9ce95a0d0f01b7fdb37fcc813cea9f818f2b8f43 languageName: node linkType: hard -"@opentelemetry/semantic-conventions@npm:1.27.0": - version: 1.27.0 - resolution: "@opentelemetry/semantic-conventions@npm:1.27.0" - checksum: 10c0/b859773ba06b7e53dd9c6b45a171bf3000e405733adbf462ae91004ed011bc80edb5beecb817fb344a085adfd06045ab5b729c9bd0f1479650ad377134fb798c +"@opentelemetry/semantic-conventions@npm:^1.29.0": + version: 1.33.0 + resolution: "@opentelemetry/semantic-conventions@npm:1.33.0" + checksum: 10c0/b2d9d5e7e828140f00fec034462fcca190ace989937d6f7d8e9671e8313c70506a4e1d77d9e88e8e6032d24ba713a97672d99882a050ce6096a18fa9864624c5 languageName: node linkType: hard @@ -1879,14 +1934,14 @@ __metadata: languageName: node linkType: hard -"@playwright/test@npm:^1.48.1": - version: 1.48.1 - resolution: "@playwright/test@npm:1.48.1" +"@playwright/test@npm:^1.52.0": + version: 1.52.0 + resolution: "@playwright/test@npm:1.52.0" dependencies: - playwright: "npm:1.48.1" + playwright: "npm:1.52.0" bin: playwright: cli.js - checksum: 10c0/32cedc3b2d375cb8f4a830bc820d7726b0235be7a6202e1d6ee46e739b83666271c47c100c11311cf5a916468c18e6a4dc526accf9ef090786e7614c2633b2b8 + checksum: 10c0/1c428b421593eb4f79b7c99783a389c3ab3526c9051ec772749f4fca61414dfa9f2344eba846faac5f238084aa96c836364a91d81d3034ac54924f239a93e247 languageName: node linkType: hard @@ -2001,261 +2056,267 @@ __metadata: languageName: node linkType: hard -"@react-aria/dialog@npm:3.5.18": - version: 3.5.18 - resolution: "@react-aria/dialog@npm:3.5.18" +"@react-aria/dialog@npm:3.5.23": + version: 3.5.23 + resolution: "@react-aria/dialog@npm:3.5.23" dependencies: - "@react-aria/focus": "npm:^3.18.3" - "@react-aria/overlays": "npm:^3.23.3" - "@react-aria/utils": "npm:^3.25.3" - "@react-types/dialog": "npm:^3.5.13" - "@react-types/shared": "npm:^3.25.0" + "@react-aria/interactions": "npm:^3.24.1" + "@react-aria/overlays": "npm:^3.26.1" + "@react-aria/utils": "npm:^3.28.1" + "@react-types/dialog": "npm:^3.5.16" + "@react-types/shared": "npm:^3.28.0" "@swc/helpers": "npm:^0.5.0" peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - checksum: 10c0/9c2fd70b9c704813608da24edb658139549eec19df421e235cf231218f9350a938edeffc30c19b08ab5af65f66120f427cfc6fde3d543951574d9fbaa0b85b60 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + checksum: 10c0/6501509895665674c85ccef569fa5102f15c495c9809c499eb6633ab017491ed526a82b837de6eb903e1f6a1e207c9622d241ca455081f82166d8e9ab44b213d languageName: node linkType: hard -"@react-aria/focus@npm:3.18.3, @react-aria/focus@npm:^3.18.3": - version: 3.18.3 - resolution: "@react-aria/focus@npm:3.18.3" +"@react-aria/focus@npm:3.20.1": + version: 3.20.1 + resolution: "@react-aria/focus@npm:3.20.1" dependencies: - "@react-aria/interactions": "npm:^3.22.3" - "@react-aria/utils": "npm:^3.25.3" - "@react-types/shared": "npm:^3.25.0" + "@react-aria/interactions": "npm:^3.24.1" + "@react-aria/utils": "npm:^3.28.1" + "@react-types/shared": "npm:^3.28.0" "@swc/helpers": "npm:^0.5.0" clsx: "npm:^2.0.0" peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - checksum: 10c0/b7a3e469ab646203ae3c70128ec21be10eb174f038e029e40e4e62fdd963ac5de7bf481a4a48be8a197834393d871d6ebbf1bcd6dcec6b7b93e4a10fe7c9e5ee + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + checksum: 10c0/be982f6cff4531d12894f35b99c326835315d723bf736e36d044cbbffab3b35307620bdbcbd92454010f94a35d851e5976fa9318b4b38ad8d15b1dee447710d6 languageName: node linkType: hard -"@react-aria/focus@npm:^3.18.4": - version: 3.18.4 - resolution: "@react-aria/focus@npm:3.18.4" +"@react-aria/focus@npm:^3.20.1, @react-aria/focus@npm:^3.20.2": + version: 3.20.2 + resolution: "@react-aria/focus@npm:3.20.2" dependencies: - "@react-aria/interactions": "npm:^3.22.4" - "@react-aria/utils": "npm:^3.25.3" - "@react-types/shared": "npm:^3.25.0" + "@react-aria/interactions": "npm:^3.25.0" + "@react-aria/utils": "npm:^3.28.2" + "@react-types/shared": "npm:^3.29.0" "@swc/helpers": "npm:^0.5.0" clsx: "npm:^2.0.0" peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - checksum: 10c0/141f8ef80060c5b58384af4af9446c0792618671e9f963942c3edc29bb15b7eb0ebb62cbe118135c7379c2732e86071aa7d7c890903a0ae411be07f2ec854e6a + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + checksum: 10c0/83c7ce227affed990833664b75c99601390ea9c879a44032541447268da22508712c512f5a943f702aef07bfe1e0ea51f554f49db132f17d80b2da9cb71ec687 languageName: node linkType: hard -"@react-aria/i18n@npm:^3.12.3": - version: 3.12.3 - resolution: "@react-aria/i18n@npm:3.12.3" +"@react-aria/i18n@npm:^3.12.7, @react-aria/i18n@npm:^3.12.8": + version: 3.12.8 + resolution: "@react-aria/i18n@npm:3.12.8" dependencies: - "@internationalized/date": "npm:^3.5.6" - "@internationalized/message": "npm:^3.1.5" - "@internationalized/number": "npm:^3.5.4" - "@internationalized/string": "npm:^3.2.4" - "@react-aria/ssr": "npm:^3.9.6" - "@react-aria/utils": "npm:^3.25.3" - "@react-types/shared": "npm:^3.25.0" + "@internationalized/date": "npm:^3.8.0" + "@internationalized/message": "npm:^3.1.7" + "@internationalized/number": "npm:^3.6.1" + "@internationalized/string": "npm:^3.2.6" + "@react-aria/ssr": "npm:^3.9.8" + "@react-aria/utils": "npm:^3.28.2" + "@react-types/shared": "npm:^3.29.0" "@swc/helpers": "npm:^0.5.0" peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - checksum: 10c0/98210abb15d598a6e4a35eae6df1d70ae6376ef9a5e1c3d298e03f4cc006df696785006323fa97ac57ce14c5b5c8d108690a5c2b187624cad5956778ffc25ca9 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + checksum: 10c0/fc6ccd3a44b084a9ad4001f8adfd086598ed4be229b51c3702b3d289003a67cf0ffd1d93174c16e51bb1745930571ba277d3132a25e6f8d4cc610ef273da7bdb languageName: node linkType: hard -"@react-aria/interactions@npm:^3.22.3": - version: 3.22.3 - resolution: "@react-aria/interactions@npm:3.22.3" +"@react-aria/interactions@npm:^3.24.1, @react-aria/interactions@npm:^3.25.0": + version: 3.25.0 + resolution: "@react-aria/interactions@npm:3.25.0" dependencies: - "@react-aria/ssr": "npm:^3.9.6" - "@react-aria/utils": "npm:^3.25.3" - "@react-types/shared": "npm:^3.25.0" + "@react-aria/ssr": "npm:^3.9.8" + "@react-aria/utils": "npm:^3.28.2" + "@react-stately/flags": "npm:^3.1.1" + "@react-types/shared": "npm:^3.29.0" "@swc/helpers": "npm:^0.5.0" peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - checksum: 10c0/3b683e97c9d41eb3540c0347314d43499a162cba05875ab717a5d92eb67f60e0f319844f4123fb54c2889ee65cceb86bf9708f1a9010f7df540d6f9dc2c1624a + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + checksum: 10c0/091c7b7b2f94b2fefed440b97a986eff0320d5ba5e1a43c195a912e035aa8ce4d4be15f1852b2dffdbcc6a70190a74f0809e4d4cf3d7646b70c9f9b0fca829f5 languageName: node linkType: hard -"@react-aria/interactions@npm:^3.22.4": - version: 3.22.4 - resolution: "@react-aria/interactions@npm:3.22.4" +"@react-aria/overlays@npm:3.26.1": + version: 3.26.1 + resolution: "@react-aria/overlays@npm:3.26.1" dependencies: - "@react-aria/ssr": "npm:^3.9.6" - "@react-aria/utils": "npm:^3.25.3" - "@react-types/shared": "npm:^3.25.0" + "@react-aria/focus": "npm:^3.20.1" + "@react-aria/i18n": "npm:^3.12.7" + "@react-aria/interactions": "npm:^3.24.1" + "@react-aria/ssr": "npm:^3.9.7" + "@react-aria/utils": "npm:^3.28.1" + "@react-aria/visually-hidden": "npm:^3.8.21" + "@react-stately/overlays": "npm:^3.6.14" + "@react-types/button": "npm:^3.11.0" + "@react-types/overlays": "npm:^3.8.13" + "@react-types/shared": "npm:^3.28.0" "@swc/helpers": "npm:^0.5.0" peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - checksum: 10c0/8455a68540a4085b71ed034cad5c349a7e756e44cd30d69d340d7f7a66ce1886882021fbcc8049a5d8aeba54b47cd2ca49a7bc4e6910aab2d13b41703d55c7a5 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + checksum: 10c0/6dfb5de858643d87103261c9663fbf155f5d988c03d42fa601233906425cc0fa4d09c519b8b02e9addd48a44afb69a8eb1ee666fe2f2ec1a0dcc137f5a2c8bb4 languageName: node linkType: hard -"@react-aria/overlays@npm:3.23.3": - version: 3.23.3 - resolution: "@react-aria/overlays@npm:3.23.3" +"@react-aria/overlays@npm:^3.26.1": + version: 3.27.0 + resolution: "@react-aria/overlays@npm:3.27.0" dependencies: - "@react-aria/focus": "npm:^3.18.3" - "@react-aria/i18n": "npm:^3.12.3" - "@react-aria/interactions": "npm:^3.22.3" - "@react-aria/ssr": "npm:^3.9.6" - "@react-aria/utils": "npm:^3.25.3" - "@react-aria/visually-hidden": "npm:^3.8.16" - "@react-stately/overlays": "npm:^3.6.11" - "@react-types/button": "npm:^3.10.0" - "@react-types/overlays": "npm:^3.8.10" - "@react-types/shared": "npm:^3.25.0" + "@react-aria/focus": "npm:^3.20.2" + "@react-aria/i18n": "npm:^3.12.8" + "@react-aria/interactions": "npm:^3.25.0" + "@react-aria/ssr": "npm:^3.9.8" + "@react-aria/utils": "npm:^3.28.2" + "@react-aria/visually-hidden": "npm:^3.8.22" + "@react-stately/overlays": "npm:^3.6.15" + "@react-types/button": "npm:^3.12.0" + "@react-types/overlays": "npm:^3.8.14" + "@react-types/shared": "npm:^3.29.0" "@swc/helpers": "npm:^0.5.0" peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - checksum: 10c0/ef3633acb5d1386852de7585b7de666d05f2d8d439bb2d7f17100ce960cdba2d117b46c56f1cc24f5b53a9fb842cdf98389097800251466ec667082b7f1a78e0 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + checksum: 10c0/2835dba32a055160341b0c04c8922c4cfb905d2c630508f9b6fc94844131e5359fd27e72f44b7d313339519285465cc6b08c720f2deb8511185d1bdd6c7b10f3 languageName: node linkType: hard -"@react-aria/overlays@npm:^3.23.3": - version: 3.23.4 - resolution: "@react-aria/overlays@npm:3.23.4" +"@react-aria/ssr@npm:^3.9.7, @react-aria/ssr@npm:^3.9.8": + version: 3.9.8 + resolution: "@react-aria/ssr@npm:3.9.8" dependencies: - "@react-aria/focus": "npm:^3.18.4" - "@react-aria/i18n": "npm:^3.12.3" - "@react-aria/interactions": "npm:^3.22.4" - "@react-aria/ssr": "npm:^3.9.6" - "@react-aria/utils": "npm:^3.25.3" - "@react-aria/visually-hidden": "npm:^3.8.17" - "@react-stately/overlays": "npm:^3.6.11" - "@react-types/button": "npm:^3.10.0" - "@react-types/overlays": "npm:^3.8.10" - "@react-types/shared": "npm:^3.25.0" "@swc/helpers": "npm:^0.5.0" peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - checksum: 10c0/174c8ef7d52123e8d979044dd36373314328086b2dc37a8b4f1fab8344be74c77925595dca86f720fd661eeffd5b632261f9a57e813d0f91460d1f08a090504e + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + checksum: 10c0/848cac34f8584477ab6c91686ab447c7f7eee997e0b1771cc71298d15a4dd0400ce7b899ad8c1603a72d59a72f24a390964133693a3ba602828801d4dacc3f45 languageName: node linkType: hard -"@react-aria/ssr@npm:^3.9.6": - version: 3.9.6 - resolution: "@react-aria/ssr@npm:3.9.6" +"@react-aria/utils@npm:3.28.1": + version: 3.28.1 + resolution: "@react-aria/utils@npm:3.28.1" dependencies: + "@react-aria/ssr": "npm:^3.9.7" + "@react-stately/flags": "npm:^3.1.0" + "@react-stately/utils": "npm:^3.10.5" + "@react-types/shared": "npm:^3.28.0" "@swc/helpers": "npm:^0.5.0" + clsx: "npm:^2.0.0" peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - checksum: 10c0/be52f2909035e093d3f72cccde15b66b4eef2dc30c71dac46a1ea43d3847dace1a709114640bfa3e9aa72ba716749635fb72116f4da16f7d80248ca348146456 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + checksum: 10c0/dcda0e238b3bbd9cd6a59563a0491320cf68f27b0b1e2bd4ee540ab4d7aaa7483cf20d96bbcd0041b5746598f4990239d1a697a6d57348607ac4cc452f69a147 languageName: node linkType: hard -"@react-aria/utils@npm:3.25.3, @react-aria/utils@npm:^3.25.3": - version: 3.25.3 - resolution: "@react-aria/utils@npm:3.25.3" +"@react-aria/utils@npm:^3.28.1, @react-aria/utils@npm:^3.28.2": + version: 3.28.2 + resolution: "@react-aria/utils@npm:3.28.2" dependencies: - "@react-aria/ssr": "npm:^3.9.6" - "@react-stately/utils": "npm:^3.10.4" - "@react-types/shared": "npm:^3.25.0" + "@react-aria/ssr": "npm:^3.9.8" + "@react-stately/flags": "npm:^3.1.1" + "@react-stately/utils": "npm:^3.10.6" + "@react-types/shared": "npm:^3.29.0" "@swc/helpers": "npm:^0.5.0" clsx: "npm:^2.0.0" peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - checksum: 10c0/dc86ea48c24232f5c51d0b5317d947c4ccf01a8afb3bdc89cb880a7b0a695a04c8a7c615fb190664f4f3c7da8669ab2bd2f7cdfb2861339f5816cbd600249a84 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + checksum: 10c0/69fc00d5dbd0fae9349a06cc3bcf327aa1edcb9049a491d0949b4de30c1b7669edc7150cc6885aa362af74a21b68c400b2965c3e117871264c47c379f4a98695 languageName: node linkType: hard -"@react-aria/visually-hidden@npm:^3.8.16": - version: 3.8.16 - resolution: "@react-aria/visually-hidden@npm:3.8.16" +"@react-aria/visually-hidden@npm:^3.8.21, @react-aria/visually-hidden@npm:^3.8.22": + version: 3.8.22 + resolution: "@react-aria/visually-hidden@npm:3.8.22" dependencies: - "@react-aria/interactions": "npm:^3.22.3" - "@react-aria/utils": "npm:^3.25.3" - "@react-types/shared": "npm:^3.25.0" + "@react-aria/interactions": "npm:^3.25.0" + "@react-aria/utils": "npm:^3.28.2" + "@react-types/shared": "npm:^3.29.0" "@swc/helpers": "npm:^0.5.0" peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - checksum: 10c0/a33e262d7dbc33386e44ef5a26aab44da1856089d60b205c0b5d61995cb0b34efb543324ec008000004661541436dc2e2e79eda56c8d0a8222eebff4de2bfdc9 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + checksum: 10c0/fbf527b526250865731737d3d421d796ab0a2a2bb0dbd2532a506693fe8902fa2a53b0afbb7ee4d295028621bdcbe8e50583d3d6d0f87d5ae014eb97953e0a2a languageName: node linkType: hard -"@react-aria/visually-hidden@npm:^3.8.17": - version: 3.8.17 - resolution: "@react-aria/visually-hidden@npm:3.8.17" +"@react-stately/flags@npm:^3.1.0, @react-stately/flags@npm:^3.1.1": + version: 3.1.1 + resolution: "@react-stately/flags@npm:3.1.1" dependencies: - "@react-aria/interactions": "npm:^3.22.4" - "@react-aria/utils": "npm:^3.25.3" - "@react-types/shared": "npm:^3.25.0" "@swc/helpers": "npm:^0.5.0" - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - checksum: 10c0/411699c167686509583debc659e734ec3c123198570104abbd4fe74a5a60d93a305d73f6d761ec67846c672d1076d8f089a6f90d2e2653e1a334fe7344088bd5 + checksum: 10c0/3f64deb7b5daa787072f77e358624b65ad0627ee148d968423f3a5968b655d99671673927e21e4ba2ad0c9828d6ea75dae8ca421af90f9b41986a28341a4101f languageName: node linkType: hard -"@react-stately/overlays@npm:^3.6.11": - version: 3.6.11 - resolution: "@react-stately/overlays@npm:3.6.11" +"@react-stately/overlays@npm:^3.6.14, @react-stately/overlays@npm:^3.6.15": + version: 3.6.15 + resolution: "@react-stately/overlays@npm:3.6.15" dependencies: - "@react-stately/utils": "npm:^3.10.4" - "@react-types/overlays": "npm:^3.8.10" + "@react-stately/utils": "npm:^3.10.6" + "@react-types/overlays": "npm:^3.8.14" "@swc/helpers": "npm:^0.5.0" peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - checksum: 10c0/559efc68bdb4512b8049f31a83e15404f7a306e960763570d876a08aee165656fdfbef4533251709e0576b1a7d6fd1f4e575ebfabc93738deb686c52571d36f9 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + checksum: 10c0/4e75602378869027bb752500c771a732e5c9d7963f8101eb03941b350e6b6a74c0da20ab75de9daa28e3fa10f7230952636957caf16953c8b70fa8eb836a4657 languageName: node linkType: hard -"@react-stately/utils@npm:^3.10.4": - version: 3.10.4 - resolution: "@react-stately/utils@npm:3.10.4" +"@react-stately/utils@npm:^3.10.5, @react-stately/utils@npm:^3.10.6": + version: 3.10.6 + resolution: "@react-stately/utils@npm:3.10.6" dependencies: "@swc/helpers": "npm:^0.5.0" peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - checksum: 10c0/875c11424fadf4419caceeee13e5bfdee2b0c330fe0220c0ea9d68d570cc9a34525f2f124d977e519b397a738cd2f8e36b7b03a046e3e7da99460e99282977a4 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + checksum: 10c0/09403746285a3866765c04bed5f2505e0bdbb971bdeb2eedee31ebf5bad3d0c0c0cef9d0dd5852fc6c58f6b552cbc90364eb32403245dfc04dc22c5e2fbfbe32 languageName: node linkType: hard -"@react-types/button@npm:^3.10.0": - version: 3.10.0 - resolution: "@react-types/button@npm:3.10.0" +"@react-types/button@npm:^3.11.0, @react-types/button@npm:^3.12.0": + version: 3.12.0 + resolution: "@react-types/button@npm:3.12.0" dependencies: - "@react-types/shared": "npm:^3.25.0" + "@react-types/shared": "npm:^3.29.0" peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - checksum: 10c0/89395334f286f1a97a584715bbb87e7bb017d7366aa73ce0cec36ec8cb59059dec1f5afe3ab44f3972e0c50f44daeb2d531b10191d6f2b7f70c3ce7d3c94c0da + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + checksum: 10c0/6412c06f1a590581283d8cfe7661bbc9f1916b827ecb332fc7d65c918f9e52496fd11ce7859742532ab0d75b8746098e9fe04561efc700969d41e59179f15c30 languageName: node linkType: hard -"@react-types/dialog@npm:^3.5.13": - version: 3.5.13 - resolution: "@react-types/dialog@npm:3.5.13" +"@react-types/dialog@npm:^3.5.16": + version: 3.5.17 + resolution: "@react-types/dialog@npm:3.5.17" dependencies: - "@react-types/overlays": "npm:^3.8.10" - "@react-types/shared": "npm:^3.25.0" + "@react-types/overlays": "npm:^3.8.14" + "@react-types/shared": "npm:^3.29.0" peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - checksum: 10c0/9cb9043694a1e48fbf0221effd28da602c314c64d653455d5616d8384adf93c78c87453a5b210ff587a221836adb5e2e7f9cb5b3f9a04c3522ad35dadba5d39a + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + checksum: 10c0/44245c862f44a296e2692a757205aad40557040b1412e2afa1b22e77624772f699b1acb35e24b955f580df93cd84c85917e249ecda216ab53c4c33c0734c3c11 languageName: node linkType: hard -"@react-types/overlays@npm:^3.8.10": - version: 3.8.10 - resolution: "@react-types/overlays@npm:3.8.10" +"@react-types/overlays@npm:^3.8.13, @react-types/overlays@npm:^3.8.14": + version: 3.8.14 + resolution: "@react-types/overlays@npm:3.8.14" dependencies: - "@react-types/shared": "npm:^3.25.0" + "@react-types/shared": "npm:^3.29.0" peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - checksum: 10c0/753fd637dab9e189403cab8567a88fce183de8013dcec705fe3ed813facaa7a95fa754af5a45f364787c4351132d27ebaf3184e0e14955c47bf80b82560c3539 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + checksum: 10c0/a30a90997d40139a99d85b5a2f5e07ead48163e909f25e0ca1ff4664ebf8bd3bb59cebd3124b0eeba2e45226d36a54265eae5946dc587ec168acae47ed8f8090 languageName: node linkType: hard -"@react-types/shared@npm:^3.25.0": - version: 3.25.0 - resolution: "@react-types/shared@npm:3.25.0" +"@react-types/shared@npm:^3.28.0, @react-types/shared@npm:^3.29.0": + version: 3.29.0 + resolution: "@react-types/shared@npm:3.29.0" peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0 - checksum: 10c0/d168f6b404c345928ef8ead94f0cecd3831d8f6df708dbe897ac62d566949a0931c3b0d95ef6dd02bc5af05b183781b531e6f041ffd1d320bc2cab7697fd27d0 + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + checksum: 10c0/a629e4fe9ce9062de603a1e01ae90a999b07f1367143f3b66921c8a0c8e59d90a528263be74d930162ed4a78a725a253c48b6f3b00a85767549e86cac4cc8218 languageName: node linkType: hard @@ -2273,13 +2334,6 @@ __metadata: languageName: node linkType: hard -"@sindresorhus/merge-streams@npm:^2.1.0": - version: 2.3.0 - resolution: "@sindresorhus/merge-streams@npm:2.3.0" - checksum: 10c0/69ee906f3125fb2c6bb6ec5cdd84e8827d93b49b3892bce8b62267116cc7e197b5cccf20c160a1d32c26014ecd14470a72a5e3ee37a58f1d6dadc0db1ccf3894 - languageName: node - linkType: hard - "@sinonjs/commons@npm:^3.0.0": version: 3.0.1 resolution: "@sinonjs/commons@npm:3.0.1" @@ -2298,94 +2352,94 @@ __metadata: languageName: node linkType: hard -"@swc/core-darwin-arm64@npm:1.7.39": - version: 1.7.39 - resolution: "@swc/core-darwin-arm64@npm:1.7.39" +"@swc/core-darwin-arm64@npm:1.11.24": + version: 1.11.24 + resolution: "@swc/core-darwin-arm64@npm:1.11.24" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@swc/core-darwin-x64@npm:1.7.39": - version: 1.7.39 - resolution: "@swc/core-darwin-x64@npm:1.7.39" +"@swc/core-darwin-x64@npm:1.11.24": + version: 1.11.24 + resolution: "@swc/core-darwin-x64@npm:1.11.24" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@swc/core-linux-arm-gnueabihf@npm:1.7.39": - version: 1.7.39 - resolution: "@swc/core-linux-arm-gnueabihf@npm:1.7.39" +"@swc/core-linux-arm-gnueabihf@npm:1.11.24": + version: 1.11.24 + resolution: "@swc/core-linux-arm-gnueabihf@npm:1.11.24" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@swc/core-linux-arm64-gnu@npm:1.7.39": - version: 1.7.39 - resolution: "@swc/core-linux-arm64-gnu@npm:1.7.39" +"@swc/core-linux-arm64-gnu@npm:1.11.24": + version: 1.11.24 + resolution: "@swc/core-linux-arm64-gnu@npm:1.11.24" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@swc/core-linux-arm64-musl@npm:1.7.39": - version: 1.7.39 - resolution: "@swc/core-linux-arm64-musl@npm:1.7.39" +"@swc/core-linux-arm64-musl@npm:1.11.24": + version: 1.11.24 + resolution: "@swc/core-linux-arm64-musl@npm:1.11.24" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@swc/core-linux-x64-gnu@npm:1.7.39": - version: 1.7.39 - resolution: "@swc/core-linux-x64-gnu@npm:1.7.39" +"@swc/core-linux-x64-gnu@npm:1.11.24": + version: 1.11.24 + resolution: "@swc/core-linux-x64-gnu@npm:1.11.24" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@swc/core-linux-x64-musl@npm:1.7.39": - version: 1.7.39 - resolution: "@swc/core-linux-x64-musl@npm:1.7.39" +"@swc/core-linux-x64-musl@npm:1.11.24": + version: 1.11.24 + resolution: "@swc/core-linux-x64-musl@npm:1.11.24" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@swc/core-win32-arm64-msvc@npm:1.7.39": - version: 1.7.39 - resolution: "@swc/core-win32-arm64-msvc@npm:1.7.39" +"@swc/core-win32-arm64-msvc@npm:1.11.24": + version: 1.11.24 + resolution: "@swc/core-win32-arm64-msvc@npm:1.11.24" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@swc/core-win32-ia32-msvc@npm:1.7.39": - version: 1.7.39 - resolution: "@swc/core-win32-ia32-msvc@npm:1.7.39" +"@swc/core-win32-ia32-msvc@npm:1.11.24": + version: 1.11.24 + resolution: "@swc/core-win32-ia32-msvc@npm:1.11.24" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@swc/core-win32-x64-msvc@npm:1.7.39": - version: 1.7.39 - resolution: "@swc/core-win32-x64-msvc@npm:1.7.39" +"@swc/core-win32-x64-msvc@npm:1.11.24": + version: 1.11.24 + resolution: "@swc/core-win32-x64-msvc@npm:1.11.24" conditions: os=win32 & cpu=x64 languageName: node linkType: hard -"@swc/core@npm:^1.7.39": - version: 1.7.39 - resolution: "@swc/core@npm:1.7.39" +"@swc/core@npm:^1.11.24": + version: 1.11.24 + resolution: "@swc/core@npm:1.11.24" dependencies: - "@swc/core-darwin-arm64": "npm:1.7.39" - "@swc/core-darwin-x64": "npm:1.7.39" - "@swc/core-linux-arm-gnueabihf": "npm:1.7.39" - "@swc/core-linux-arm64-gnu": "npm:1.7.39" - "@swc/core-linux-arm64-musl": "npm:1.7.39" - "@swc/core-linux-x64-gnu": "npm:1.7.39" - "@swc/core-linux-x64-musl": "npm:1.7.39" - "@swc/core-win32-arm64-msvc": "npm:1.7.39" - "@swc/core-win32-ia32-msvc": "npm:1.7.39" - "@swc/core-win32-x64-msvc": "npm:1.7.39" + "@swc/core-darwin-arm64": "npm:1.11.24" + "@swc/core-darwin-x64": "npm:1.11.24" + "@swc/core-linux-arm-gnueabihf": "npm:1.11.24" + "@swc/core-linux-arm64-gnu": "npm:1.11.24" + "@swc/core-linux-arm64-musl": "npm:1.11.24" + "@swc/core-linux-x64-gnu": "npm:1.11.24" + "@swc/core-linux-x64-musl": "npm:1.11.24" + "@swc/core-win32-arm64-msvc": "npm:1.11.24" + "@swc/core-win32-ia32-msvc": "npm:1.11.24" + "@swc/core-win32-x64-msvc": "npm:1.11.24" "@swc/counter": "npm:^0.1.3" - "@swc/types": "npm:^0.1.13" + "@swc/types": "npm:^0.1.21" peerDependencies: - "@swc/helpers": "*" + "@swc/helpers": ">=0.5.17" dependenciesMeta: "@swc/core-darwin-arm64": optional: true @@ -2410,7 +2464,7 @@ __metadata: peerDependenciesMeta: "@swc/helpers": optional: true - checksum: 10c0/9997aad27290107b9fb864fe4bdc38a376e788c073e6edb62b7ea06d1fa8dde8f707c9ea6b3cc82f4cbfa49a38bd228f83503d4e8318e8a9917e947497e253af + checksum: 10c0/26c524a505927ebd4229ec20fecf5f38b6a3265f22f3ede3a334834b37d01eedd133676e231d19ecaae2923bdfb0fa66acb925ffaee6e472e36ed81a7ace90f7 languageName: node linkType: hard @@ -2421,7 +2475,7 @@ __metadata: languageName: node linkType: hard -"@swc/helpers@npm:^0.5.0, @swc/helpers@npm:^0.5.13": +"@swc/helpers@npm:^0.5.0": version: 0.5.13 resolution: "@swc/helpers@npm:0.5.13" dependencies: @@ -2430,25 +2484,34 @@ __metadata: languageName: node linkType: hard -"@swc/jest@npm:^0.2.36": - version: 0.2.36 - resolution: "@swc/jest@npm:0.2.36" +"@swc/helpers@npm:^0.5.17": + version: 0.5.17 + resolution: "@swc/helpers@npm:0.5.17" + dependencies: + tslib: "npm:^2.8.0" + checksum: 10c0/fe1f33ebb968558c5a0c595e54f2e479e4609bff844f9ca9a2d1ffd8dd8504c26f862a11b031f48f75c95b0381c2966c3dd156e25942f90089badd24341e7dbb + languageName: node + linkType: hard + +"@swc/jest@npm:^0.2.38": + version: 0.2.38 + resolution: "@swc/jest@npm:0.2.38" dependencies: "@jest/create-cache-key-function": "npm:^29.7.0" "@swc/counter": "npm:^0.1.3" jsonc-parser: "npm:^3.2.0" peerDependencies: "@swc/core": "*" - checksum: 10c0/7f1993f9201420bb499c92ab28797352bcbf9e3a6c7b5a1806fdc34c9c3b46ea9e5b2f070c0e13fcf7f3c3fadbbc38777840baabb178f589bf1f67543763adb6 + checksum: 10c0/d92078dd6a32c2c1106d4eeb6b78340bedad9c2a27f1aa29b69ba638942d34f1dbf6eb4ef75692d2297c66e7442e9b355ab6b879540f9cf8a37f644a5a6e6924 languageName: node linkType: hard -"@swc/types@npm:^0.1.13": - version: 0.1.13 - resolution: "@swc/types@npm:0.1.13" +"@swc/types@npm:^0.1.21": + version: 0.1.21 + resolution: "@swc/types@npm:0.1.21" dependencies: "@swc/counter": "npm:^0.1.3" - checksum: 10c0/f85a850dead981ca9a26ae366529f2b383fa26324ffcbbee46d7b48399e6ed36d6a6a3d55398f17f87c65f550e28d642a35877d40f389c78765a31ecdfc88bd9 + checksum: 10c0/2baa89c824426e0de0c84e212278010e2df8dc2d6ffaa6f1e306e1b2930c6404b3d3f8989307e8c42ceb95ac143ab7a80be138af6a014d5c782dce5be94dcd5e languageName: node linkType: hard @@ -2471,9 +2534,9 @@ __metadata: languageName: node linkType: hard -"@testing-library/jest-dom@npm:^6.6.2": - version: 6.6.2 - resolution: "@testing-library/jest-dom@npm:6.6.2" +"@testing-library/jest-dom@npm:^6.6.3": + version: 6.6.3 + resolution: "@testing-library/jest-dom@npm:6.6.3" dependencies: "@adobe/css-tools": "npm:^4.4.0" aria-query: "npm:^5.0.0" @@ -2482,27 +2545,27 @@ __metadata: dom-accessibility-api: "npm:^0.6.3" lodash: "npm:^4.17.21" redent: "npm:^3.0.0" - checksum: 10c0/1c51390f97063ce8b06a7267534aac0d6ac9b1f27042a0ae43ca52d886b32c9d2b0ff85e62e7cfeb7e1f089ef03c4d75fda4f2b7b1f08afb4bdb09a5d56566d9 + checksum: 10c0/5566b6c0b7b0709bc244aec3aa3dc9e5f4663e8fb2b99d8cd456fc07279e59db6076cbf798f9d3099a98fca7ef4cd50e4e1f4c4dec5a60a8fad8d24a638a5bf6 languageName: node linkType: hard -"@testing-library/react@npm:^16.0.1": - version: 16.0.1 - resolution: "@testing-library/react@npm:16.0.1" +"@testing-library/react@npm:^16.3.0": + version: 16.3.0 + resolution: "@testing-library/react@npm:16.3.0" dependencies: "@babel/runtime": "npm:^7.12.5" peerDependencies: "@testing-library/dom": ^10.0.0 - "@types/react": ^18.0.0 - "@types/react-dom": ^18.0.0 - react: ^18.0.0 - react-dom: ^18.0.0 + "@types/react": ^18.0.0 || ^19.0.0 + "@types/react-dom": ^18.0.0 || ^19.0.0 + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 peerDependenciesMeta: "@types/react": optional: true "@types/react-dom": optional: true - checksum: 10c0/67d05dec5ad5a2e6f92b6a3234af785435c7bb62bdbf12f3bfc89c9bca0c871a189e88c4ba023ed4cea504704c87c6ac7e86e24a3962df6c521ae89b62f48ff7 + checksum: 10c0/3a2cb1f87c9a67e1ebbbcfd99b94b01e496fc35147be8bc5d8bf07a699c7d523a09d57ef2f7b1d91afccd1a28e21eda3b00d80187fbb51b1de01e422592d845e languageName: node linkType: hard @@ -2598,23 +2661,40 @@ __metadata: languageName: node linkType: hard -"@types/eslint@npm:^8.56.10": - version: 8.56.12 - resolution: "@types/eslint@npm:8.56.12" +"@types/eslint-scope@npm:^3.7.7": + version: 3.7.7 + resolution: "@types/eslint-scope@npm:3.7.7" + dependencies: + "@types/eslint": "npm:*" + "@types/estree": "npm:*" + checksum: 10c0/a0ecbdf2f03912679440550817ff77ef39a30fa8bfdacaf6372b88b1f931828aec392f52283240f0d648cf3055c5ddc564544a626bcf245f3d09fcb099ebe3cc + languageName: node + linkType: hard + +"@types/eslint@npm:*, @types/eslint@npm:^9.6.1": + version: 9.6.1 + resolution: "@types/eslint@npm:9.6.1" dependencies: "@types/estree": "npm:*" "@types/json-schema": "npm:*" - checksum: 10c0/e4ca426abe9d55f82b69a3250bec78b6d340ad1e567f91c97ecc59d3b2d6a1d8494955ac62ad0ea14b97519db580611c02be8277cbea370bdfb0f96aa2910504 + checksum: 10c0/69ba24fee600d1e4c5abe0df086c1a4d798abf13792d8cfab912d76817fe1a894359a1518557d21237fbaf6eda93c5ab9309143dee4c59ef54336d1b3570420e languageName: node linkType: hard -"@types/estree@npm:*, @types/estree@npm:^1.0.5": +"@types/estree@npm:*": version: 1.0.5 resolution: "@types/estree@npm:1.0.5" checksum: 10c0/b3b0e334288ddb407c7b3357ca67dbee75ee22db242ca7c56fe27db4e1a31989cb8af48a84dd401deb787fe10cc6b2ab1ee82dc4783be87ededbe3d53c79c70d languageName: node linkType: hard +"@types/estree@npm:^1.0.6": + version: 1.0.7 + resolution: "@types/estree@npm:1.0.7" + checksum: 10c0/be815254316882f7c40847336cd484c3bc1c3e34f710d197160d455dc9d6d050ffbf4c3bc76585dba86f737f020ab20bdb137ebe0e9116b0c86c7c0342221b8c + languageName: node + linkType: hard + "@types/graceful-fs@npm:^4.1.3": version: 4.1.9 resolution: "@types/graceful-fs@npm:4.1.9" @@ -2631,16 +2711,6 @@ __metadata: languageName: node linkType: hard -"@types/hoist-non-react-statics@npm:^3.3.1": - version: 3.3.5 - resolution: "@types/hoist-non-react-statics@npm:3.3.5" - dependencies: - "@types/react": "npm:*" - hoist-non-react-statics: "npm:^3.3.0" - checksum: 10c0/2a3b64bf3d9817d7830afa60ee314493c475fb09570a64e7737084cd482d2177ebdddf888ce837350bac51741278b077683facc9541f052d4bbe8487b4e3e618 - languageName: node - linkType: hard - "@types/istanbul-lib-coverage@npm:*, @types/istanbul-lib-coverage@npm:^2.0.0, @types/istanbul-lib-coverage@npm:^2.0.1": version: 2.0.6 resolution: "@types/istanbul-lib-coverage@npm:2.0.6" @@ -2676,12 +2746,12 @@ __metadata: languageName: node linkType: hard -"@types/jquery@npm:3.5.31": - version: 3.5.31 - resolution: "@types/jquery@npm:3.5.31" +"@types/jquery@npm:3.5.32": + version: 3.5.32 + resolution: "@types/jquery@npm:3.5.32" dependencies: "@types/sizzle": "npm:*" - checksum: 10c0/94a6e209382908e102199aa32d261147c97bf578693a6e7657d12a35e1304940b18bebadb21c207cd3efa51b4d16eb117be36af235c27f399be09cc56ed125b5 + checksum: 10c0/4a17ad6819b89026c21323656ab01b0b263f9d470910a87c8740920ff98319d503c7352b85b50134a39724ecbfccabc73aa4c741dfdd460cf8bbe714f9259054 languageName: node linkType: hard @@ -2703,24 +2773,24 @@ __metadata: languageName: node linkType: hard -"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.8, @types/json-schema@npm:^7.0.9": +"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.15, @types/json-schema@npm:^7.0.8, @types/json-schema@npm:^7.0.9": version: 7.0.15 resolution: "@types/json-schema@npm:7.0.15" checksum: 10c0/a996a745e6c5d60292f36731dd41341339d4eeed8180bb09226e5c8d23759067692b1d88e5d91d72ee83dfc00d3aca8e7bd43ea120516c17922cbcb7c3e252db languageName: node linkType: hard -"@types/lodash@npm:4.17.10": - version: 4.17.10 - resolution: "@types/lodash@npm:4.17.10" - checksum: 10c0/149b2b9fcc277204393423ed14df28894980c2322ec522fc23f2c6f7edef6ee8d876ee09ed4520f45d128adc0a7a6e618bb0017668349716cd99c6ef54a21621 +"@types/lodash@npm:4.17.15": + version: 4.17.15 + resolution: "@types/lodash@npm:4.17.15" + checksum: 10c0/2eb2dc6d231f5fb4603d176c08c8d7af688f574d09af47466a179cd7812d9f64144ba74bb32ca014570ffdc544eedc51b7a5657212bad083b6eecbd72223f9bb languageName: node linkType: hard -"@types/lodash@npm:^4.17.12": - version: 4.17.12 - resolution: "@types/lodash@npm:4.17.12" - checksum: 10c0/106008f628ea3c74ed7ee7842dee79e230c84e3721ac38c293700031adb5bd130113048c22f476dbde0d0c119506b0fc447d4bd62eca922682d11e00e1377967 +"@types/lodash@npm:^4.17.16": + version: 4.17.16 + resolution: "@types/lodash@npm:4.17.16" + checksum: 10c0/cf017901b8ab1d7aabc86d5189d9288f4f99f19a75caf020c0e2c77b8d4cead4db0d0b842d009b029339f92399f49f34377dd7c2721053388f251778b4c23534 languageName: node linkType: hard @@ -2733,12 +2803,12 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:^22.7.9": - version: 22.7.9 - resolution: "@types/node@npm:22.7.9" +"@types/node@npm:^22.15.17": + version: 22.15.17 + resolution: "@types/node@npm:22.15.17" dependencies: - undici-types: "npm:~6.19.2" - checksum: 10c0/2d1917702b9d9ede8e4d8151cd8b1af8bc147d543486474ffbe0742e38764ea73105939e6a767addf7a4c39e842e16eae762bff90617d7b7f9ee3fbbb2d23bfa + undici-types: "npm:~6.21.0" + checksum: 10c0/fb92aa10b628683c5b965749f955bc2322485ecb0ea6c2f4cae5f2c7537a16834607e67083a9e9281faaae8d7dee9ada8d6a5c0de9a52c17d82912ef00c0fdd4 languageName: node linkType: hard @@ -2826,6 +2896,13 @@ __metadata: languageName: node linkType: hard +"@types/systemjs@npm:6.15.1": + version: 6.15.1 + resolution: "@types/systemjs@npm:6.15.1" + checksum: 10c0/e403ed96f3e5bdb81bd818c5a18f89bd84535b64d9fa4a8a6a12344debf61a62222c716a4a4028c24d9b44f0eb506599fbd82228fd06122689d81ede4f9530b4 + languageName: node + linkType: hard + "@types/tough-cookie@npm:*": version: 4.0.5 resolution: "@types/tough-cookie@npm:4.0.5" @@ -2833,10 +2910,17 @@ __metadata: languageName: node linkType: hard -"@types/use-sync-external-store@npm:^0.0.3": - version: 0.0.3 - resolution: "@types/use-sync-external-store@npm:0.0.3" - checksum: 10c0/82824c1051ba40a00e3d47964cdf4546a224e95f172e15a9c62aa3f118acee1c7518b627a34f3aa87298a2039f982e8509f92bfcc18bea7c255c189c293ba547 +"@types/trusted-types@npm:^2.0.7": + version: 2.0.7 + resolution: "@types/trusted-types@npm:2.0.7" + checksum: 10c0/4c4855f10de7c6c135e0d32ce462419d8abbbc33713b31d294596c0cc34ae1fa6112a2f9da729c8f7a20707782b0d69da3b1f8df6645b0366d08825ca1522e0c + languageName: node + linkType: hard + +"@types/use-sync-external-store@npm:^0.0.6": + version: 0.0.6 + resolution: "@types/use-sync-external-store@npm:0.0.6" + checksum: 10c0/77c045a98f57488201f678b181cccd042279aff3da34540ad242f893acc52b358bd0a8207a321b8ac09adbcef36e3236944390e2df4fcedb556ce7bb2a88f2a8 languageName: node linkType: hard @@ -2916,187 +3000,187 @@ __metadata: languageName: node linkType: hard -"@webassemblyjs/ast@npm:1.12.1, @webassemblyjs/ast@npm:^1.12.1": - version: 1.12.1 - resolution: "@webassemblyjs/ast@npm:1.12.1" +"@webassemblyjs/ast@npm:1.14.1, @webassemblyjs/ast@npm:^1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/ast@npm:1.14.1" dependencies: - "@webassemblyjs/helper-numbers": "npm:1.11.6" - "@webassemblyjs/helper-wasm-bytecode": "npm:1.11.6" - checksum: 10c0/ba7f2b96c6e67e249df6156d02c69eb5f1bd18d5005303cdc42accb053bebbbde673826e54db0437c9748e97abd218366a1d13fa46859b23cde611b6b409998c + "@webassemblyjs/helper-numbers": "npm:1.13.2" + "@webassemblyjs/helper-wasm-bytecode": "npm:1.13.2" + checksum: 10c0/67a59be8ed50ddd33fbb2e09daa5193ac215bf7f40a9371be9a0d9797a114d0d1196316d2f3943efdb923a3d809175e1563a3cb80c814fb8edccd1e77494972b languageName: node linkType: hard -"@webassemblyjs/floating-point-hex-parser@npm:1.11.6": - version: 1.11.6 - resolution: "@webassemblyjs/floating-point-hex-parser@npm:1.11.6" - checksum: 10c0/37fe26f89e18e4ca0e7d89cfe3b9f17cfa327d7daf906ae01400416dbb2e33c8a125b4dc55ad7ff405e5fcfb6cf0d764074c9bc532b9a31a71e762be57d2ea0a +"@webassemblyjs/floating-point-hex-parser@npm:1.13.2": + version: 1.13.2 + resolution: "@webassemblyjs/floating-point-hex-parser@npm:1.13.2" + checksum: 10c0/0e88bdb8b50507d9938be64df0867f00396b55eba9df7d3546eb5dc0ca64d62e06f8d881ec4a6153f2127d0f4c11d102b6e7d17aec2f26bb5ff95a5e60652412 languageName: node linkType: hard -"@webassemblyjs/helper-api-error@npm:1.11.6": - version: 1.11.6 - resolution: "@webassemblyjs/helper-api-error@npm:1.11.6" - checksum: 10c0/a681ed51863e4ff18cf38d223429f414894e5f7496856854d9a886eeddcee32d7c9f66290f2919c9bb6d2fc2b2fae3f989b6a1e02a81e829359738ea0c4d371a +"@webassemblyjs/helper-api-error@npm:1.13.2": + version: 1.13.2 + resolution: "@webassemblyjs/helper-api-error@npm:1.13.2" + checksum: 10c0/31be497f996ed30aae4c08cac3cce50c8dcd5b29660383c0155fce1753804fc55d47fcba74e10141c7dd2899033164e117b3bcfcda23a6b043e4ded4f1003dfb languageName: node linkType: hard -"@webassemblyjs/helper-buffer@npm:1.12.1": - version: 1.12.1 - resolution: "@webassemblyjs/helper-buffer@npm:1.12.1" - checksum: 10c0/0270724afb4601237410f7fd845ab58ccda1d5456a8783aadfb16eaaf3f2c9610c28e4a5bcb6ad880cde5183c82f7f116d5ccfc2310502439d33f14b6888b48a +"@webassemblyjs/helper-buffer@npm:1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/helper-buffer@npm:1.14.1" + checksum: 10c0/0d54105dc373c0fe6287f1091e41e3a02e36cdc05e8cf8533cdc16c59ff05a646355415893449d3768cda588af451c274f13263300a251dc11a575bc4c9bd210 languageName: node linkType: hard -"@webassemblyjs/helper-numbers@npm:1.11.6": - version: 1.11.6 - resolution: "@webassemblyjs/helper-numbers@npm:1.11.6" +"@webassemblyjs/helper-numbers@npm:1.13.2": + version: 1.13.2 + resolution: "@webassemblyjs/helper-numbers@npm:1.13.2" dependencies: - "@webassemblyjs/floating-point-hex-parser": "npm:1.11.6" - "@webassemblyjs/helper-api-error": "npm:1.11.6" + "@webassemblyjs/floating-point-hex-parser": "npm:1.13.2" + "@webassemblyjs/helper-api-error": "npm:1.13.2" "@xtuc/long": "npm:4.2.2" - checksum: 10c0/c7d5afc0ff3bd748339b466d8d2f27b908208bf3ff26b2e8e72c39814479d486e0dca6f3d4d776fd9027c1efe05b5c0716c57a23041eb34473892b2731c33af3 + checksum: 10c0/9c46852f31b234a8fb5a5a9d3f027bc542392a0d4de32f1a9c0075d5e8684aa073cb5929b56df565500b3f9cc0a2ab983b650314295b9bf208d1a1651bfc825a languageName: node linkType: hard -"@webassemblyjs/helper-wasm-bytecode@npm:1.11.6": - version: 1.11.6 - resolution: "@webassemblyjs/helper-wasm-bytecode@npm:1.11.6" - checksum: 10c0/79d2bebdd11383d142745efa32781249745213af8e022651847382685ca76709f83e1d97adc5f0d3c2b8546bf02864f8b43a531fdf5ca0748cb9e4e0ef2acaa5 +"@webassemblyjs/helper-wasm-bytecode@npm:1.13.2": + version: 1.13.2 + resolution: "@webassemblyjs/helper-wasm-bytecode@npm:1.13.2" + checksum: 10c0/c4355d14f369b30cf3cbdd3acfafc7d0488e086be6d578e3c9780bd1b512932352246be96e034e2a7fcfba4f540ec813352f312bfcbbfe5bcfbf694f82ccc682 languageName: node linkType: hard -"@webassemblyjs/helper-wasm-section@npm:1.12.1": - version: 1.12.1 - resolution: "@webassemblyjs/helper-wasm-section@npm:1.12.1" +"@webassemblyjs/helper-wasm-section@npm:1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/helper-wasm-section@npm:1.14.1" dependencies: - "@webassemblyjs/ast": "npm:1.12.1" - "@webassemblyjs/helper-buffer": "npm:1.12.1" - "@webassemblyjs/helper-wasm-bytecode": "npm:1.11.6" - "@webassemblyjs/wasm-gen": "npm:1.12.1" - checksum: 10c0/0546350724d285ae3c26e6fc444be4c3b5fb824f3be0ec8ceb474179dc3f4430336dd2e36a44b3e3a1a6815960e5eec98cd9b3a8ec66dc53d86daedd3296a6a2 + "@webassemblyjs/ast": "npm:1.14.1" + "@webassemblyjs/helper-buffer": "npm:1.14.1" + "@webassemblyjs/helper-wasm-bytecode": "npm:1.13.2" + "@webassemblyjs/wasm-gen": "npm:1.14.1" + checksum: 10c0/1f9b33731c3c6dbac3a9c483269562fa00d1b6a4e7133217f40e83e975e636fd0f8736e53abd9a47b06b66082ecc976c7384391ab0a68e12d509ea4e4b948d64 languageName: node linkType: hard -"@webassemblyjs/ieee754@npm:1.11.6": - version: 1.11.6 - resolution: "@webassemblyjs/ieee754@npm:1.11.6" +"@webassemblyjs/ieee754@npm:1.13.2": + version: 1.13.2 + resolution: "@webassemblyjs/ieee754@npm:1.13.2" dependencies: "@xtuc/ieee754": "npm:^1.2.0" - checksum: 10c0/59de0365da450322c958deadade5ec2d300c70f75e17ae55de3c9ce564deff5b429e757d107c7ec69bd0ba169c6b6cc2ff66293ab7264a7053c829b50ffa732f + checksum: 10c0/2e732ca78c6fbae3c9b112f4915d85caecdab285c0b337954b180460290ccd0fb00d2b1dc4bb69df3504abead5191e0d28d0d17dfd6c9d2f30acac8c4961c8a7 languageName: node linkType: hard -"@webassemblyjs/leb128@npm:1.11.6": - version: 1.11.6 - resolution: "@webassemblyjs/leb128@npm:1.11.6" +"@webassemblyjs/leb128@npm:1.13.2": + version: 1.13.2 + resolution: "@webassemblyjs/leb128@npm:1.13.2" dependencies: "@xtuc/long": "npm:4.2.2" - checksum: 10c0/cb344fc04f1968209804de4da018679c5d4708a03b472a33e0fa75657bb024978f570d3ccf9263b7f341f77ecaa75d0e051b9cd4b7bb17a339032cfd1c37f96e + checksum: 10c0/dad5ef9e383c8ab523ce432dfd80098384bf01c45f70eb179d594f85ce5db2f80fa8c9cba03adafd85684e6d6310f0d3969a882538975989919329ac4c984659 languageName: node linkType: hard -"@webassemblyjs/utf8@npm:1.11.6": - version: 1.11.6 - resolution: "@webassemblyjs/utf8@npm:1.11.6" - checksum: 10c0/14d6c24751a89ad9d801180b0d770f30a853c39f035a15fbc96266d6ac46355227abd27a3fd2eeaa97b4294ced2440a6b012750ae17bafe1a7633029a87b6bee +"@webassemblyjs/utf8@npm:1.13.2": + version: 1.13.2 + resolution: "@webassemblyjs/utf8@npm:1.13.2" + checksum: 10c0/d3fac9130b0e3e5a1a7f2886124a278e9323827c87a2b971e6d0da22a2ba1278ac9f66a4f2e363ecd9fac8da42e6941b22df061a119e5c0335f81006de9ee799 languageName: node linkType: hard -"@webassemblyjs/wasm-edit@npm:^1.12.1": - version: 1.12.1 - resolution: "@webassemblyjs/wasm-edit@npm:1.12.1" +"@webassemblyjs/wasm-edit@npm:^1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/wasm-edit@npm:1.14.1" dependencies: - "@webassemblyjs/ast": "npm:1.12.1" - "@webassemblyjs/helper-buffer": "npm:1.12.1" - "@webassemblyjs/helper-wasm-bytecode": "npm:1.11.6" - "@webassemblyjs/helper-wasm-section": "npm:1.12.1" - "@webassemblyjs/wasm-gen": "npm:1.12.1" - "@webassemblyjs/wasm-opt": "npm:1.12.1" - "@webassemblyjs/wasm-parser": "npm:1.12.1" - "@webassemblyjs/wast-printer": "npm:1.12.1" - checksum: 10c0/972f5e6c522890743999e0ed45260aae728098801c6128856b310dd21f1ee63435fc7b518e30e0ba1cdafd0d1e38275829c1e4451c3536a1d9e726e07a5bba0b + "@webassemblyjs/ast": "npm:1.14.1" + "@webassemblyjs/helper-buffer": "npm:1.14.1" + "@webassemblyjs/helper-wasm-bytecode": "npm:1.13.2" + "@webassemblyjs/helper-wasm-section": "npm:1.14.1" + "@webassemblyjs/wasm-gen": "npm:1.14.1" + "@webassemblyjs/wasm-opt": "npm:1.14.1" + "@webassemblyjs/wasm-parser": "npm:1.14.1" + "@webassemblyjs/wast-printer": "npm:1.14.1" + checksum: 10c0/5ac4781086a2ca4b320bdbfd965a209655fe8a208ca38d89197148f8597e587c9a2c94fb6bd6f1a7dbd4527c49c6844fcdc2af981f8d793a97bf63a016aa86d2 languageName: node linkType: hard -"@webassemblyjs/wasm-gen@npm:1.12.1": - version: 1.12.1 - resolution: "@webassemblyjs/wasm-gen@npm:1.12.1" +"@webassemblyjs/wasm-gen@npm:1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/wasm-gen@npm:1.14.1" dependencies: - "@webassemblyjs/ast": "npm:1.12.1" - "@webassemblyjs/helper-wasm-bytecode": "npm:1.11.6" - "@webassemblyjs/ieee754": "npm:1.11.6" - "@webassemblyjs/leb128": "npm:1.11.6" - "@webassemblyjs/utf8": "npm:1.11.6" - checksum: 10c0/1e257288177af9fa34c69cab94f4d9036ebed611f77f3897c988874e75182eeeec759c79b89a7a49dd24624fc2d3d48d5580b62b67c4a1c9bfbdcd266b281c16 + "@webassemblyjs/ast": "npm:1.14.1" + "@webassemblyjs/helper-wasm-bytecode": "npm:1.13.2" + "@webassemblyjs/ieee754": "npm:1.13.2" + "@webassemblyjs/leb128": "npm:1.13.2" + "@webassemblyjs/utf8": "npm:1.13.2" + checksum: 10c0/d678810d7f3f8fecb2e2bdadfb9afad2ec1d2bc79f59e4711ab49c81cec578371e22732d4966f59067abe5fba8e9c54923b57060a729d28d408e608beef67b10 languageName: node linkType: hard -"@webassemblyjs/wasm-opt@npm:1.12.1": - version: 1.12.1 - resolution: "@webassemblyjs/wasm-opt@npm:1.12.1" +"@webassemblyjs/wasm-opt@npm:1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/wasm-opt@npm:1.14.1" dependencies: - "@webassemblyjs/ast": "npm:1.12.1" - "@webassemblyjs/helper-buffer": "npm:1.12.1" - "@webassemblyjs/wasm-gen": "npm:1.12.1" - "@webassemblyjs/wasm-parser": "npm:1.12.1" - checksum: 10c0/992a45e1f1871033c36987459436ab4e6430642ca49328e6e32a13de9106fe69ae6c0ac27d7050efd76851e502d11cd1ac0e06b55655dfa889ad82f11a2712fb + "@webassemblyjs/ast": "npm:1.14.1" + "@webassemblyjs/helper-buffer": "npm:1.14.1" + "@webassemblyjs/wasm-gen": "npm:1.14.1" + "@webassemblyjs/wasm-parser": "npm:1.14.1" + checksum: 10c0/515bfb15277ee99ba6b11d2232ddbf22aed32aad6d0956fe8a0a0a004a1b5a3a277a71d9a3a38365d0538ac40d1b7b7243b1a244ad6cd6dece1c1bb2eb5de7ee languageName: node linkType: hard -"@webassemblyjs/wasm-parser@npm:1.12.1, @webassemblyjs/wasm-parser@npm:^1.12.1": - version: 1.12.1 - resolution: "@webassemblyjs/wasm-parser@npm:1.12.1" +"@webassemblyjs/wasm-parser@npm:1.14.1, @webassemblyjs/wasm-parser@npm:^1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/wasm-parser@npm:1.14.1" dependencies: - "@webassemblyjs/ast": "npm:1.12.1" - "@webassemblyjs/helper-api-error": "npm:1.11.6" - "@webassemblyjs/helper-wasm-bytecode": "npm:1.11.6" - "@webassemblyjs/ieee754": "npm:1.11.6" - "@webassemblyjs/leb128": "npm:1.11.6" - "@webassemblyjs/utf8": "npm:1.11.6" - checksum: 10c0/e85cec1acad07e5eb65b92d37c8e6ca09c6ca50d7ca58803a1532b452c7321050a0328c49810c337cc2dfd100c5326a54d5ebd1aa5c339ebe6ef10c250323a0e + "@webassemblyjs/ast": "npm:1.14.1" + "@webassemblyjs/helper-api-error": "npm:1.13.2" + "@webassemblyjs/helper-wasm-bytecode": "npm:1.13.2" + "@webassemblyjs/ieee754": "npm:1.13.2" + "@webassemblyjs/leb128": "npm:1.13.2" + "@webassemblyjs/utf8": "npm:1.13.2" + checksum: 10c0/95427b9e5addbd0f647939bd28e3e06b8deefdbdadcf892385b5edc70091bf9b92fa5faac3fce8333554437c5d85835afef8c8a7d9d27ab6ba01ffab954db8c6 languageName: node linkType: hard -"@webassemblyjs/wast-printer@npm:1.12.1": - version: 1.12.1 - resolution: "@webassemblyjs/wast-printer@npm:1.12.1" +"@webassemblyjs/wast-printer@npm:1.14.1": + version: 1.14.1 + resolution: "@webassemblyjs/wast-printer@npm:1.14.1" dependencies: - "@webassemblyjs/ast": "npm:1.12.1" + "@webassemblyjs/ast": "npm:1.14.1" "@xtuc/long": "npm:4.2.2" - checksum: 10c0/39bf746eb7a79aa69953f194943bbc43bebae98bd7cadd4d8bc8c0df470ca6bf9d2b789effaa180e900fab4e2691983c1f7d41571458bd2a26267f2f0c73705a + checksum: 10c0/8d7768608996a052545251e896eac079c98e0401842af8dd4de78fba8d90bd505efb6c537e909cd6dae96e09db3fa2e765a6f26492553a675da56e2db51f9d24 languageName: node linkType: hard -"@webpack-cli/configtest@npm:^2.1.1": - version: 2.1.1 - resolution: "@webpack-cli/configtest@npm:2.1.1" +"@webpack-cli/configtest@npm:^3.0.1": + version: 3.0.1 + resolution: "@webpack-cli/configtest@npm:3.0.1" peerDependencies: - webpack: 5.x.x - webpack-cli: 5.x.x - checksum: 10c0/a8da1f15702cb289807da99235ed95326ed7dabeb1a36ca59bd3a5dbe6adcc946a9a2767936050fc4d5ed14efab0e5b5a641dfe8e3d862c36caa5791ac12759d + webpack: ^5.82.0 + webpack-cli: 6.x.x + checksum: 10c0/edd24ecfc429298fe86446f7d7daedfe82d72e7f6236c81420605484fdadade5d59c6bcef3d76bd724e11d9727f74e75de183223ae62d3a568b2d54199688cbe languageName: node linkType: hard -"@webpack-cli/info@npm:^2.0.2": - version: 2.0.2 - resolution: "@webpack-cli/info@npm:2.0.2" +"@webpack-cli/info@npm:^3.0.1": + version: 3.0.1 + resolution: "@webpack-cli/info@npm:3.0.1" peerDependencies: - webpack: 5.x.x - webpack-cli: 5.x.x - checksum: 10c0/ca88a35604dc9aedac7c26e8f6793c5039dc1eea2b12a85fbfd669a5f21ecf9cf169d7fd157ea366a62666e3fa05b776306a96742ac61a9868f44fdce6b40f7d + webpack: ^5.82.0 + webpack-cli: 6.x.x + checksum: 10c0/b23b94e7dc8c93e79248f20d5f1bd0fbb7b9ba4b012803e2fdc5440b8f2ee1f3eca7f4933bbca346c8168673bf572b1858169a3cb2c17d9b8bcd833d480c2170 languageName: node linkType: hard -"@webpack-cli/serve@npm:^2.0.5": - version: 2.0.5 - resolution: "@webpack-cli/serve@npm:2.0.5" +"@webpack-cli/serve@npm:^3.0.1": + version: 3.0.1 + resolution: "@webpack-cli/serve@npm:3.0.1" peerDependencies: - webpack: 5.x.x - webpack-cli: 5.x.x + webpack: ^5.82.0 + webpack-cli: 6.x.x peerDependenciesMeta: webpack-dev-server: optional: true - checksum: 10c0/36079d34971ff99a58b66b13f4184dcdd8617853c48cccdbc3f9ab7ea9e5d4fcf504e873c298ea7aa15e0b51ad2c4aee4d7a70bd7d9364e60f57b0eb93ca15fc + checksum: 10c0/65245e45bfa35e11a5b30631b99cfed0c1b39b2cc8320fa2d2a4185264535618827d349ec032c58af4201d6236cbc43bec894fcb840fdd06314611537a80e210 languageName: node linkType: hard @@ -3152,15 +3236,6 @@ __metadata: languageName: node linkType: hard -"acorn-import-attributes@npm:^1.9.5": - version: 1.9.5 - resolution: "acorn-import-attributes@npm:1.9.5" - peerDependencies: - acorn: ^8 - checksum: 10c0/5926eaaead2326d5a86f322ff1b617b0f698aa61dc719a5baa0e9d955c9885cc71febac3fb5bacff71bbf2c4f9c12db2056883c68c53eb962c048b952e1e013d - languageName: node - linkType: hard - "acorn-walk@npm:^8.0.2, acorn-walk@npm:^8.1.1": version: 8.3.4 resolution: "acorn-walk@npm:8.3.4" @@ -3170,7 +3245,7 @@ __metadata: languageName: node linkType: hard -"acorn@npm:^8.1.0, acorn@npm:^8.11.0, acorn@npm:^8.4.1, acorn@npm:^8.7.1, acorn@npm:^8.8.1, acorn@npm:^8.8.2": +"acorn@npm:^8.1.0, acorn@npm:^8.11.0, acorn@npm:^8.4.1, acorn@npm:^8.8.1, acorn@npm:^8.8.2": version: 8.12.1 resolution: "acorn@npm:8.12.1" bin: @@ -3179,12 +3254,12 @@ __metadata: languageName: node linkType: hard -"add-dom-event-listener@npm:^1.1.0": - version: 1.1.0 - resolution: "add-dom-event-listener@npm:1.1.0" - dependencies: - object-assign: "npm:4.x" - checksum: 10c0/79e490bebebbc1dbded6d86240d1532cd319a4cdd2b7682e46411bd6224bb2d3ea41661eeccebbc53a004005dac8edaaf5c56c7981d3697ec8c5c83008f2b6e7 +"acorn@npm:^8.14.0": + version: 8.14.1 + resolution: "acorn@npm:8.14.1" + bin: + acorn: bin/acorn + checksum: 10c0/dbd36c1ed1d2fa3550140000371fcf721578095b18777b85a79df231ca093b08edc6858d75d6e48c73e431c174dcf9214edbd7e6fa5911b93bd8abfa54e47123 languageName: node linkType: hard @@ -3336,13 +3411,6 @@ __metadata: languageName: node linkType: hard -"ansicolor@npm:1.1.100": - version: 1.1.100 - resolution: "ansicolor@npm:1.1.100" - checksum: 10c0/2c2584195934b1e367601a569ee95fa57d7a8472ccfe0d40db97b1dae100d4965db3d3d3051603bf4b822bf5bb4a5df1fcb6d149de06964c888bef26ce79943a - languageName: node - linkType: hard - "antlr4@npm:^4.13.2": version: 4.13.2 resolution: "antlr4@npm:4.13.2" @@ -3350,7 +3418,7 @@ __metadata: languageName: node linkType: hard -"anymatch@npm:^3.0.3, anymatch@npm:^3.1.1, anymatch@npm:~3.1.2": +"anymatch@npm:^3.0.3, anymatch@npm:^3.1.1": version: 3.1.3 resolution: "anymatch@npm:3.1.3" dependencies: @@ -3392,13 +3460,6 @@ __metadata: languageName: node linkType: hard -"array-tree-filter@npm:^2.1.0": - version: 2.1.0 - resolution: "array-tree-filter@npm:2.1.0" - checksum: 10c0/6fd1677522b20d10fd918e446db40c3e313eac9ed77ca8a5ea45f43b69c40300655c69760c159fd2cd189985323231a5077858c59fa3ca9c6c2439635eb8557e - languageName: node - linkType: hard - "array-union@npm:^2.1.0": version: 2.1.0 resolution: "array-union@npm:2.1.0" @@ -3422,10 +3483,10 @@ __metadata: languageName: node linkType: hard -"attr-accept@npm:^2.2.2": - version: 2.2.2 - resolution: "attr-accept@npm:2.2.2" - checksum: 10c0/f77c073ac9616a783f2df814a56f65f1c870193e8da6097139e30b3be84ecc19fb835b93e81315d1da4f19e80721f14e8c8075014205e00abd37b856fe030b80 +"attr-accept@npm:^2.2.4": + version: 2.2.5 + resolution: "attr-accept@npm:2.2.5" + checksum: 10c0/9b4cb82213925cab2d568f71b3f1c7a7778f9192829aac39a281e5418cd00c04a88f873eb89f187e0bf786fa34f8d52936f178e62cbefb9254d57ecd88ada99b languageName: node linkType: hard @@ -3519,16 +3580,6 @@ __metadata: languageName: node linkType: hard -"babel-runtime@npm:6.x, babel-runtime@npm:^6.26.0": - version: 6.26.0 - resolution: "babel-runtime@npm:6.26.0" - dependencies: - core-js: "npm:^2.4.0" - regenerator-runtime: "npm:^0.11.0" - checksum: 10c0/caa752004936b1463765ed3199c52f6a55d0613b9bed108743d6f13ca532b821d4ea9decc4be1b583193164462b1e3e7eefdfa36b15c72e7daac58dd72c1772f - languageName: node - linkType: hard - "balanced-match@npm:^1.0.0": version: 1.0.2 resolution: "balanced-match@npm:1.0.2" @@ -3536,13 +3587,6 @@ __metadata: languageName: node linkType: hard -"binary-extensions@npm:^2.0.0": - version: 2.3.0 - resolution: "binary-extensions@npm:2.3.0" - checksum: 10c0/75a59cafc10fb12a11d510e77110c6c7ae3f4ca22463d52487709ca7f18f69d886aa387557cc9864fbdb10153d0bdb4caacabf11541f55e89ed6e18d12ece2b5 - languageName: node - linkType: hard - "body@npm:^5.1.0": version: 5.1.0 resolution: "body@npm:5.1.0" @@ -3574,7 +3618,7 @@ __metadata: languageName: node linkType: hard -"braces@npm:^3.0.3, braces@npm:~3.0.2": +"braces@npm:^3.0.3": version: 3.0.3 resolution: "braces@npm:3.0.3" dependencies: @@ -3583,7 +3627,7 @@ __metadata: languageName: node linkType: hard -"browserslist@npm:^4.21.10, browserslist@npm:^4.23.1": +"browserslist@npm:^4.23.1": version: 4.23.3 resolution: "browserslist@npm:4.23.3" dependencies: @@ -3747,25 +3791,6 @@ __metadata: languageName: node linkType: hard -"chokidar@npm:^3.5.3": - version: 3.6.0 - resolution: "chokidar@npm:3.6.0" - dependencies: - anymatch: "npm:~3.1.2" - braces: "npm:~3.0.2" - fsevents: "npm:~2.3.2" - glob-parent: "npm:~5.1.2" - is-binary-path: "npm:~2.1.0" - is-glob: "npm:~4.0.1" - normalize-path: "npm:~3.0.0" - readdirp: "npm:~3.6.0" - dependenciesMeta: - fsevents: - optional: true - checksum: 10c0/8361dcd013f2ddbe260eacb1f3cb2f2c6f2b0ad118708a343a5ed8158941a39cb8fb1d272e0f389712e74ee90ce8ba864eece9e0e62b9705cb468a2f6d917462 - languageName: node - linkType: hard - "chokidar@npm:^4.0.0": version: 4.0.1 resolution: "chokidar@npm:4.0.1" @@ -3775,6 +3800,15 @@ __metadata: languageName: node linkType: hard +"chokidar@npm:^4.0.1": + version: 4.0.3 + resolution: "chokidar@npm:4.0.3" + dependencies: + readdirp: "npm:^4.0.1" + checksum: 10c0/a58b9df05bb452f7d105d9e7229ac82fa873741c0c40ddcc7bb82f8a909fbe3f7814c9ebe9bc9a2bef9b737c0ec6e2d699d179048ef06ad3ec46315df0ebe6ad + languageName: node + linkType: hard + "chownr@npm:^2.0.0": version: 2.0.0 resolution: "chownr@npm:2.0.0" @@ -3915,10 +3949,10 @@ __metadata: languageName: node linkType: hard -"commander@npm:^10.0.1": - version: 10.0.1 - resolution: "commander@npm:10.0.1" - checksum: 10c0/53f33d8927758a911094adadda4b2cbac111a5b377d8706700587650fd8f45b0bbe336de4b5c3fe47fd61f420a3d9bd452b6e0e6e5600a7e74d7bf0174f6efe3 +"commander@npm:^12.1.0": + version: 12.1.0 + resolution: "commander@npm:12.1.0" + checksum: 10c0/6e1996680c083b3b897bfc1cfe1c58dfbcd9842fd43e1aaf8a795fbc237f65efcc860a3ef457b318e73f29a4f4a28f6403c3d653d021d960e4632dd45bde54a9 languageName: node linkType: hard @@ -3929,22 +3963,6 @@ __metadata: languageName: node linkType: hard -"component-classes@npm:^1.2.5": - version: 1.2.6 - resolution: "component-classes@npm:1.2.6" - dependencies: - component-indexof: "npm:0.0.3" - checksum: 10c0/5b2f7a7c897c3eec94b8d09bab0e1725ad596fae661a5ed850f924855c8fa73e783050b9b998a5732ba619ca0b4b550a1a2a50652bf8f34bd3773277547e3b0c - languageName: node - linkType: hard - -"component-indexof@npm:0.0.3": - version: 0.0.3 - resolution: "component-indexof@npm:0.0.3" - checksum: 10c0/0acb68802318f69fe60b1a48b9df7d36c2ace0837f7fb9e0c7bd4915dc4682c276be1cf1c1686e8c023f24b5e43edf4aaadc5d6dae04378f43f7869e89896966 - languageName: node - linkType: hard - "compute-scroll-into-view@npm:^3.1.0": version: 3.1.0 resolution: "compute-scroll-into-view@npm:3.1.0" @@ -3980,6 +3998,13 @@ __metadata: languageName: node linkType: hard +"cookie@npm:^1.0.1": + version: 1.0.2 + resolution: "cookie@npm:1.0.2" + checksum: 10c0/fd25fe79e8fbcfcaf6aa61cd081c55d144eeeba755206c058682257cb38c4bd6795c6620de3f064c740695bb65b7949ebb1db7a95e4636efb8357a335ad3f54b + languageName: node + linkType: hard + "copy-to-clipboard@npm:^3.3.1": version: 3.3.3 resolution: "copy-to-clipboard@npm:3.3.3" @@ -3989,26 +4014,18 @@ __metadata: languageName: node linkType: hard -"copy-webpack-plugin@npm:^12.0.2": - version: 12.0.2 - resolution: "copy-webpack-plugin@npm:12.0.2" +"copy-webpack-plugin@npm:^13.0.0": + version: 13.0.0 + resolution: "copy-webpack-plugin@npm:13.0.0" dependencies: - fast-glob: "npm:^3.3.2" glob-parent: "npm:^6.0.1" - globby: "npm:^14.0.0" normalize-path: "npm:^3.0.0" schema-utils: "npm:^4.2.0" serialize-javascript: "npm:^6.0.2" + tinyglobby: "npm:^0.2.12" peerDependencies: webpack: ^5.1.0 - checksum: 10c0/1a2715a1280a37b81b7040b89ed962db4aa75475b164f84f266fa4e81f209269b13f8bff10b104dff7558854bafedcdd4f30c40fd23ecd8fa28af45516b459cd - languageName: node - linkType: hard - -"core-js@npm:^2.4.0": - version: 2.6.12 - resolution: "core-js@npm:2.6.12" - checksum: 10c0/00128efe427789120a06b819adc94cc72b96955acb331cb71d09287baf9bd37bebd191d91f1ee4939c893a050307ead4faea08876f09115112612b6a05684b63 + checksum: 10c0/955037f77c6beb249b690710c35bacceb03b61bb5b7c5fc59ac7dff122c706eb794ef601bc3d9bbdb1350bda3e2615e0b43bf33f1ce2ca14ed934d9a89f43637 languageName: node linkType: hard @@ -4077,16 +4094,6 @@ __metadata: languageName: node linkType: hard -"css-animation@npm:^1.3.2": - version: 1.6.1 - resolution: "css-animation@npm:1.6.1" - dependencies: - babel-runtime: "npm:6.x" - component-classes: "npm:^1.2.5" - checksum: 10c0/fc5ef573f4a676b56c1b588f15cb9ef24086fbb907dd848b35bee1f835f7c0d726db5179e2deeff57865a9ae12c58454cee229949a9e2511b2d47d7d47df7d81 - languageName: node - linkType: hard - "css-box-model@npm:^1.2.1": version: 1.2.1 resolution: "css-box-model@npm:1.2.1" @@ -4528,10 +4535,10 @@ __metadata: languageName: node linkType: hard -"date-fns@npm:3.6.0": - version: 3.6.0 - resolution: "date-fns@npm:3.6.0" - checksum: 10c0/0b5fb981590ef2f8e5a3ba6cd6d77faece0ea7f7158948f2eaae7bbb7c80a8f63ae30b01236c2923cf89bb3719c33aeb150c715ea4fe4e86e37dcf06bed42fb6 +"date-fns@npm:4.1.0": + version: 4.1.0 + resolution: "date-fns@npm:4.1.0" + checksum: 10c0/b79ff32830e6b7faa009590af6ae0fb8c3fd9ffad46d930548fbb5acf473773b4712ae887e156ba91a7b3dc30591ce0f517d69fd83bd9c38650fdc03b4e0bac8 languageName: node linkType: hard @@ -4671,13 +4678,6 @@ __metadata: languageName: node linkType: hard -"dom-align@npm:^1.7.0": - version: 1.12.4 - resolution: "dom-align@npm:1.12.4" - checksum: 10c0/358f1601fc6b6518c0726ee99e9124212b34ca2828a194c816f247b913415416098cf016391f89741cddccf9b98a98a077469d565630bd4f8143edac81a97186 - languageName: node - linkType: hard - "dom-css@npm:^2.0.0": version: 2.1.0 resolution: "dom-css@npm:2.1.0" @@ -4708,10 +4708,15 @@ __metadata: languageName: node linkType: hard -"dompurify@npm:^3.0.0": - version: 3.1.6 - resolution: "dompurify@npm:3.1.6" - checksum: 10c0/3de1cca187c78d3d8cb4134fc2985b644d6a81f6b4e024c77cfb04c1c2f38544ccf7b0ea37a48ce22fcca64594170ed7c22252574c75b801c44345cdd7b06c64 +"dompurify@npm:3.2.5": + version: 3.2.5 + resolution: "dompurify@npm:3.2.5" + dependencies: + "@types/trusted-types": "npm:^2.0.7" + dependenciesMeta: + "@types/trusted-types": + optional: true + checksum: 10c0/b564167cc588933ad2d25c185296716bdd7124e9d2a75dac76efea831bb22d1230ce5205a1ab6ce4c1010bb32ac35f7a5cb2dd16c78cbf382111f1228362aa59 languageName: node linkType: hard @@ -4812,12 +4817,12 @@ __metadata: languageName: node linkType: hard -"envinfo@npm:^7.7.3": - version: 7.13.0 - resolution: "envinfo@npm:7.13.0" +"envinfo@npm:^7.14.0": + version: 7.14.0 + resolution: "envinfo@npm:7.14.0" bin: envinfo: dist/cli.js - checksum: 10c0/9c279213cbbb353b3171e8e333fd2ed564054abade08ab3d735fe136e10a0e14e0588e1ce77e6f01285f2462eaca945d64f0778be5ae3d9e82804943e36a4411 + checksum: 10c0/059a031eee101e056bd9cc5cbfe25c2fab433fe1780e86cf0a82d24a000c6931e327da6a8ffb3dce528a24f83f256e7efc0b36813113eff8fdc6839018efe327 languageName: node linkType: hard @@ -4955,19 +4960,19 @@ __metadata: languageName: node linkType: hard -"eslint-webpack-plugin@npm:^4.2.0": - version: 4.2.0 - resolution: "eslint-webpack-plugin@npm:4.2.0" +"eslint-webpack-plugin@npm:^5.0.1": + version: 5.0.1 + resolution: "eslint-webpack-plugin@npm:5.0.1" dependencies: - "@types/eslint": "npm:^8.56.10" + "@types/eslint": "npm:^9.6.1" jest-worker: "npm:^29.7.0" - micromatch: "npm:^4.0.5" + micromatch: "npm:^4.0.8" normalize-path: "npm:^3.0.0" - schema-utils: "npm:^4.2.0" + schema-utils: "npm:^4.3.0" peerDependencies: eslint: ^8.0.0 || ^9.0.0 webpack: ^5.0.0 - checksum: 10c0/cf5c9b7afa3c025fffadb3e1451e7a55d914c3070614bb4d57f887774d164ca4298bb777f7c3afa16f47af9869174a19d6aebb4d1ca719bc2cc49f2eccd71a3b + checksum: 10c0/bb20c8584086e9d1114f9830229c08b622ef2a198507c547a37bd6eff250e45f1cb91f202d5af2a6fa5f1ab13600675956564af959eb63e81629fb0c7e7eb6e0 languageName: node linkType: hard @@ -5051,13 +5056,6 @@ __metadata: languageName: node linkType: hard -"exenv@npm:^1.2.2": - version: 1.2.2 - resolution: "exenv@npm:1.2.2" - checksum: 10c0/4e96b355a6b9b9547237288ca779dd673b2e698458b409e88b50df09feb7c85ef94c07354b6b87bc3ed0193a94009a6f7a3c71956da12f45911c0d0f5aa3caa0 - languageName: node - linkType: hard - "exit@npm:^0.1.2": version: 0.1.2 resolution: "exit@npm:0.1.2" @@ -5092,7 +5090,7 @@ __metadata: languageName: node linkType: hard -"fast-glob@npm:^3.2.9, fast-glob@npm:^3.3.2": +"fast-glob@npm:^3.2.9": version: 3.3.2 resolution: "fast-glob@npm:3.3.2" dependencies: @@ -5174,12 +5172,24 @@ __metadata: languageName: node linkType: hard -"file-selector@npm:^0.6.0": - version: 0.6.0 - resolution: "file-selector@npm:0.6.0" +"fdir@npm:^6.4.4": + version: 6.4.4 + resolution: "fdir@npm:6.4.4" + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + checksum: 10c0/6ccc33be16945ee7bc841e1b4178c0b4cf18d3804894cb482aa514651c962a162f96da7ffc6ebfaf0df311689fb70091b04dd6caffe28d56b9ebdc0e7ccadfdd + languageName: node + linkType: hard + +"file-selector@npm:^2.1.0": + version: 2.1.2 + resolution: "file-selector@npm:2.1.2" dependencies: - tslib: "npm:^2.4.0" - checksum: 10c0/477ca1b56274db9fee1a8a623c4bfef580389726a5fef843af8c1f2f17f70ec2d1e41b29115777c92e120a15f1cca734c6ef36bb48bfa2ee027c68da16cd0d28 + tslib: "npm:^2.7.0" + checksum: 10c0/fe827e0e95410aacfcc3eabc38c29cc36055257f03c1c06b631a2b5af9730c142ad2c52f5d64724d02231709617bda984701f52bd1f4b7aca50fb6585a27c1d2 languageName: node linkType: hard @@ -5228,13 +5238,13 @@ __metadata: languageName: node linkType: hard -"fork-ts-checker-webpack-plugin@npm:^9.0.2": - version: 9.0.2 - resolution: "fork-ts-checker-webpack-plugin@npm:9.0.2" +"fork-ts-checker-webpack-plugin@npm:^9.1.0": + version: 9.1.0 + resolution: "fork-ts-checker-webpack-plugin@npm:9.1.0" dependencies: "@babel/code-frame": "npm:^7.16.7" chalk: "npm:^4.1.2" - chokidar: "npm:^3.5.3" + chokidar: "npm:^4.0.1" cosmiconfig: "npm:^8.2.0" deepmerge: "npm:^4.2.2" fs-extra: "npm:^10.0.0" @@ -5247,7 +5257,7 @@ __metadata: peerDependencies: typescript: ">3.6.0" webpack: ^5.11.0 - checksum: 10c0/37e11dadcc65d297f07882f1661795289f2bf16fa9dea0b90bcc438855d48787378bce4dfcd8e842782f220503438995efbb28cbe560126f6a744ff740e8cc38 + checksum: 10c0/b4acdf400862af5f57d3e159b3a444e7f9f73e9f4609d54604c3810f75f8adcea0165a8b17ee856ed3c65591d058ffd73cd08d273e289d4952844e75f6efa85d languageName: node linkType: hard @@ -5315,7 +5325,7 @@ __metadata: languageName: node linkType: hard -"fsevents@npm:^2.3.2, fsevents@npm:~2.3.2": +"fsevents@npm:^2.3.2": version: 2.3.3 resolution: "fsevents@npm:2.3.3" dependencies: @@ -5334,7 +5344,7 @@ __metadata: languageName: node linkType: hard -"fsevents@patch:fsevents@npm%3A^2.3.2#optional!builtin, fsevents@patch:fsevents@npm%3A~2.3.2#optional!builtin": +"fsevents@patch:fsevents@npm%3A^2.3.2#optional!builtin": version: 2.3.3 resolution: "fsevents@patch:fsevents@npm%3A2.3.3#optional!builtin::version=2.3.3&hash=df0bf1" dependencies: @@ -5432,7 +5442,7 @@ __metadata: languageName: node linkType: hard -"glob-parent@npm:^5.1.2, glob-parent@npm:~5.1.2": +"glob-parent@npm:^5.1.2": version: 5.1.2 resolution: "glob-parent@npm:5.1.2" dependencies: @@ -5473,9 +5483,9 @@ __metadata: languageName: node linkType: hard -"glob@npm:^11.0.0": - version: 11.0.0 - resolution: "glob@npm:11.0.0" +"glob@npm:^11.0.2": + version: 11.0.2 + resolution: "glob@npm:11.0.2" dependencies: foreground-child: "npm:^3.1.0" jackspeak: "npm:^4.0.1" @@ -5485,7 +5495,7 @@ __metadata: path-scurry: "npm:^2.0.0" bin: glob: dist/esm/bin.mjs - checksum: 10c0/419866015d8795258a8ac51de5b9d1a99c72634fc3ead93338e4da388e89773ab21681e494eac0fbc4250b003451ca3110bb4f1c9393d15d14466270094fdb4e + checksum: 10c0/49f91c64ca882d5e3a72397bd45a146ca91fd3ca53dafb5254daf6c0e83fc510d39ea66f136f9ac7ca075cdd11fbe9aaa235b28f743bd477622e472f4fdc0240 languageName: node linkType: hard @@ -5524,20 +5534,6 @@ __metadata: languageName: node linkType: hard -"globby@npm:^14.0.0": - version: 14.0.2 - resolution: "globby@npm:14.0.2" - dependencies: - "@sindresorhus/merge-streams": "npm:^2.1.0" - fast-glob: "npm:^3.3.2" - ignore: "npm:^5.2.4" - path-type: "npm:^5.0.0" - slash: "npm:^5.1.0" - unicorn-magic: "npm:^0.1.0" - checksum: 10c0/3f771cd683b8794db1e7ebc8b6b888d43496d93a82aad4e9d974620f578581210b6c5a6e75ea29573ed16a1345222fab6e9b877a8d1ed56eeb147e09f69c6f78 - languageName: node - linkType: hard - "gopd@npm:^1.0.1": version: 1.0.1 resolution: "gopd@npm:1.0.1" @@ -5614,7 +5610,7 @@ __metadata: languageName: node linkType: hard -"history@npm:4.10.1": +"history@npm:4.10.1, history@npm:^4.9.0": version: 4.10.1 resolution: "history@npm:4.10.1" dependencies: @@ -5637,7 +5633,7 @@ __metadata: languageName: node linkType: hard -"hoist-non-react-statics@npm:3.3.2, hoist-non-react-statics@npm:^3.3.0, hoist-non-react-statics@npm:^3.3.1, hoist-non-react-statics@npm:^3.3.2": +"hoist-non-react-statics@npm:3.3.2, hoist-non-react-statics@npm:^3.1.0, hoist-non-react-statics@npm:^3.3.1": version: 3.3.2 resolution: "hoist-non-react-statics@npm:3.3.2" dependencies: @@ -5740,21 +5736,26 @@ __metadata: languageName: node linkType: hard -"i18next-browser-languagedetector@npm:^7.0.2": - version: 7.2.1 - resolution: "i18next-browser-languagedetector@npm:7.2.1" +"i18next-browser-languagedetector@npm:^8.0.0": + version: 8.1.0 + resolution: "i18next-browser-languagedetector@npm:8.1.0" dependencies: "@babel/runtime": "npm:^7.23.2" - checksum: 10c0/44fa71af4efb4cd6cc8bfbbd3f3b2735159e17d8f4396346e4016c6dd0ecbcdd68f1ec17609fd0de8dd6754c3d847d6e7e03227c19c1879d4c265cb1918948bb + checksum: 10c0/d55162f8062e4fdca07403273ef352e7122e1f9abe479404c6711f5a9b75ddb4b33d49b5a50416637d3a3f0553881ba6a570062c8f6e6c52b031eceb0bb8669e languageName: node linkType: hard -"i18next@npm:^23.0.0": - version: 23.15.1 - resolution: "i18next@npm:23.15.1" +"i18next@npm:^24.0.0": + version: 24.2.3 + resolution: "i18next@npm:24.2.3" dependencies: - "@babel/runtime": "npm:^7.23.2" - checksum: 10c0/06bf6c45c70ebe8cc1181ce5f367f6a60acc798abb1926329e67e092a25762cabbfed64ac149745d515f724d2a6fef3bf809bd4fd8f505a7966e9e4dd2e3fd69 + "@babel/runtime": "npm:^7.26.10" + peerDependencies: + typescript: ^5 + peerDependenciesMeta: + typescript: + optional: true + checksum: 10c0/7ac11a67d618ec714beef303aa497c1249bf5f1977dd3ebe9ca2673dfa6cadbba9e2d39ec1337688903ae3866ce9c1bc22cd6b265e66cce54c5db3a9bbedd390 languageName: node linkType: hard @@ -5762,51 +5763,51 @@ __metadata: version: 0.0.0-use.local resolution: "ibm-rmf@workspace:." dependencies: - "@babel/core": "npm:^7.25.9" - "@emotion/css": "npm:^11.13.4" - "@grafana/data": "npm:^11.3.0" + "@babel/core": "npm:^7.27.1" + "@emotion/css": "npm:^11.13.5" + "@grafana/data": "npm:^12.0.0" "@grafana/eslint-config": "npm:^8.0.0" - "@grafana/runtime": "npm:^11.3.0" - "@grafana/schema": "npm:^11.3.0" + "@grafana/runtime": "npm:^12.0.0" + "@grafana/schema": "npm:^12.0.0" "@grafana/tsconfig": "npm:^2.0.0" - "@grafana/ui": "npm:^11.3.0" - "@playwright/test": "npm:^1.48.1" - "@swc/core": "npm:^1.7.39" - "@swc/helpers": "npm:^0.5.13" - "@swc/jest": "npm:^0.2.36" - "@testing-library/jest-dom": "npm:^6.6.2" - "@testing-library/react": "npm:^16.0.1" + "@grafana/ui": "npm:^12.0.0" + "@playwright/test": "npm:^1.52.0" + "@swc/core": "npm:^1.11.24" + "@swc/helpers": "npm:^0.5.17" + "@swc/jest": "npm:^0.2.38" + "@testing-library/jest-dom": "npm:^6.6.3" + "@testing-library/react": "npm:^16.3.0" "@types/jest": "npm:^29.5.14" - "@types/lodash": "npm:^4.17.12" - "@types/node": "npm:^22.7.9" + "@types/lodash": "npm:^4.17.16" + "@types/node": "npm:^22.15.17" "@types/react-router-dom": "npm:^5.3.3" antlr4: "npm:^4.13.2" - copy-webpack-plugin: "npm:^12.0.2" + copy-webpack-plugin: "npm:^13.0.0" css-loader: "npm:^7.1.2" eslint-plugin-deprecation: "npm:^3.0.0" - eslint-webpack-plugin: "npm:^4.2.0" - fork-ts-checker-webpack-plugin: "npm:^9.0.2" - glob: "npm:^11.0.0" + eslint-webpack-plugin: "npm:^5.0.1" + fork-ts-checker-webpack-plugin: "npm:^9.1.0" + glob: "npm:^11.0.2" identity-obj-proxy: "npm:^3.0.0" imports-loader: "npm:^5.0.0" jest: "npm:^29.7.0" jest-environment-jsdom: "npm:^29.7.0" - prettier: "npm:^3.3.3" - react: "npm:^18.3.1" - react-dom: "npm:^18.3.1" - react-router-dom: "npm:^6.27.0" + prettier: "npm:^3.5.3" + react: "npm:^19.1.0" + react-dom: "npm:^19.1.0" + react-router-dom: "npm:^7.6.0" replace-in-file-webpack-plugin: "npm:^1.0.6" - rxjs: "npm:^7.8.1" - sass: "npm:^1.80.3" - sass-loader: "npm:^16.0.2" + rxjs: "npm:^7.8.2" + sass: "npm:^1.87.0" + sass-loader: "npm:^16.0.5" style-loader: "npm:^4.0.0" swc-loader: "npm:^0.2.6" ts-node: "npm:^10.9.2" tsconfig-paths: "npm:^4.2.0" - tslib: "npm:^2.8.0" - typescript: "npm:^5.6.3" - webpack: "npm:^5.95.0" - webpack-cli: "npm:^5.1.4" + tslib: "npm:^2.8.1" + typescript: "npm:^5.8.3" + webpack: "npm:^5.99.8" + webpack-cli: "npm:^6.0.1" webpack-livereload-plugin: "npm:^3.0.2" webpack-virtual-modules: "npm:^0.6.2" languageName: unknown @@ -5846,17 +5847,24 @@ __metadata: languageName: node linkType: hard -"ignore@npm:^5.2.0, ignore@npm:^5.2.4": +"ignore@npm:^5.2.0": version: 5.3.2 resolution: "ignore@npm:5.3.2" checksum: 10c0/f9f652c957983634ded1e7f02da3b559a0d4cc210fca3792cb67f1b153623c9c42efdc1c4121af171e295444459fc4a9201101fb041b1104a3c000bccb188337 languageName: node linkType: hard -"immutable@npm:4.3.7, immutable@npm:^4.0.0": - version: 4.3.7 - resolution: "immutable@npm:4.3.7" - checksum: 10c0/9b099197081b22f6433003e34929da8ecddbbdc1474cdc8aa3b7669dee4adda349c06143de22def36016d1b6de5322b043eccd7a11db1dad2ca85dad4fff5435 +"immutable@npm:5.0.3": + version: 5.0.3 + resolution: "immutable@npm:5.0.3" + checksum: 10c0/3269827789e1026cd25c2ea97f0b2c19be852ffd49eda1b674b20178f73d84fa8d945ad6f5ac5bc4545c2b4170af9f6e1f77129bc1cae7974a4bf9b04a9cdfb9 + languageName: node + linkType: hard + +"immutable@npm:^5.0.2": + version: 5.1.2 + resolution: "immutable@npm:5.1.2" + checksum: 10c0/da5af92d2c70323c1f9a0e418832c9eef441feadaf6a295a4e07764bd2400c85186872e016071d9253549d58d364160d55dca8dcdf59fd4a6a06c6756fe61657 languageName: node linkType: hard @@ -5986,15 +5994,6 @@ __metadata: languageName: node linkType: hard -"is-binary-path@npm:~2.1.0": - version: 2.1.0 - resolution: "is-binary-path@npm:2.1.0" - dependencies: - binary-extensions: "npm:^2.0.0" - checksum: 10c0/a16eaee59ae2b315ba36fad5c5dcaf8e49c3e27318f8ab8fa3cdb8772bf559c8d1ba750a589c2ccb096113bb64497084361a25960899cb6172a6925ab6123d38 - languageName: node - linkType: hard - "is-core-module@npm:^2.13.0": version: 2.15.1 resolution: "is-core-module@npm:2.15.1" @@ -6025,7 +6024,7 @@ __metadata: languageName: node linkType: hard -"is-glob@npm:^4.0.1, is-glob@npm:^4.0.3, is-glob@npm:~4.0.1": +"is-glob@npm:^4.0.1, is-glob@npm:^4.0.3": version: 4.0.3 resolution: "is-glob@npm:4.0.3" dependencies: @@ -6099,6 +6098,13 @@ __metadata: languageName: node linkType: hard +"isarray@npm:0.0.1": + version: 0.0.1 + resolution: "isarray@npm:0.0.1" + checksum: 10c0/ed1e62da617f71fe348907c71743b5ed550448b455f8d269f89a7c7ddb8ae6e962de3dab6a74a237b06f5eb7f6ece7a45ada8ce96d87fe972926530f91ae3311 + languageName: node + linkType: hard + "isexe@npm:^2.0.0": version: 2.0.0 resolution: "isexe@npm:2.0.0" @@ -6926,7 +6932,7 @@ __metadata: languageName: node linkType: hard -"loose-envify@npm:^1.0.0, loose-envify@npm:^1.1.0, loose-envify@npm:^1.2.0, loose-envify@npm:^1.4.0": +"loose-envify@npm:^1.0.0, loose-envify@npm:^1.2.0, loose-envify@npm:^1.3.1, loose-envify@npm:^1.4.0": version: 1.4.0 resolution: "loose-envify@npm:1.4.0" dependencies: @@ -7021,21 +7027,21 @@ __metadata: languageName: node linkType: hard -"marked-mangle@npm:1.1.9": - version: 1.1.9 - resolution: "marked-mangle@npm:1.1.9" +"marked-mangle@npm:1.1.10": + version: 1.1.10 + resolution: "marked-mangle@npm:1.1.10" peerDependencies: - marked: ">=4 <15" - checksum: 10c0/8df929fa8a52b889a3767621d2e69421e472c3ea11226f5fa3fae9f521447155a451127499c24a3952a5aeb7439ebe043b0223f258bb4744eef0b001e3a03ad4 + marked: ">=4 <16" + checksum: 10c0/085186a6c6cd99428e029ecb2f17dc501c640d16a38b833c5833aab5dc8e71955cac6341ec193e9040f7154a5ab149c867ca58bb77a7122a69062a08df0ca80b languageName: node linkType: hard -"marked@npm:12.0.2": - version: 12.0.2 - resolution: "marked@npm:12.0.2" +"marked@npm:15.0.6": + version: 15.0.6 + resolution: "marked@npm:15.0.6" bin: marked: bin/marked.js - checksum: 10c0/45ae2e1e3f06b30a5b5f64efc6cde9830c81d1d024fd7668772a3217f1bc0f326e66a6b8970482d9783edf1f581fecac7023a7fa160f2c14dbcc16e064b4eafb + checksum: 10c0/8f30972ac5fdf879353484bdd7717409c241d15031a58bbc483070dedb58e4b314c41c0b59b78e536658907c02ee149eaf4b9be221f198df97beae703f529d40 languageName: node linkType: hard @@ -7107,7 +7113,7 @@ __metadata: languageName: node linkType: hard -"micromatch@npm:^4.0.4, micromatch@npm:^4.0.5": +"micromatch@npm:^4.0.4, micromatch@npm:^4.0.5, micromatch@npm:^4.0.8": version: 4.0.8 resolution: "micromatch@npm:4.0.8" dependencies: @@ -7292,16 +7298,16 @@ __metadata: languageName: node linkType: hard -"moment-timezone@npm:0.5.46": - version: 0.5.46 - resolution: "moment-timezone@npm:0.5.46" +"moment-timezone@npm:0.5.47": + version: 0.5.47 + resolution: "moment-timezone@npm:0.5.47" dependencies: moment: "npm:^2.29.4" - checksum: 10c0/003fd278d1aa3e63afff340a318735db80157b7a343e3f807cac10e026def214f0e71b52d582b89a11ee0a19f5d9f0da2752b7959d855429f2b715d4859d3722 + checksum: 10c0/6f7cdbebe712dcbb767a6380e097d352776b83dd7d1d797546d6ff21d813e8380633373da93aea1d24f2c3c031044fd4a18726cacad14eda3f1f428192ad955c languageName: node linkType: hard -"moment@npm:2.30.1, moment@npm:2.x, moment@npm:^2.29.4": +"moment@npm:2.30.1, moment@npm:^2.29.4": version: 2.30.1 resolution: "moment@npm:2.30.1" checksum: 10c0/865e4279418c6de666fca7786607705fd0189d8a7b7624e2e56be99290ac846f90878a6f602e34b4e0455c549b85385b1baf9966845962b313699e7cb847543a @@ -7432,7 +7438,7 @@ __metadata: languageName: node linkType: hard -"normalize-path@npm:^3.0.0, normalize-path@npm:~3.0.0": +"normalize-path@npm:^3.0.0": version: 3.0.0 resolution: "normalize-path@npm:3.0.0" checksum: 10c0/e008c8142bcc335b5e38cf0d63cfd39d6cf2d97480af9abdbe9a439221fd4d749763bab492a8ee708ce7a194bb00c9da6d0a115018672310850489137b3da046 @@ -7455,7 +7461,7 @@ __metadata: languageName: node linkType: hard -"object-assign@npm:4.x, object-assign@npm:^4.1.0, object-assign@npm:^4.1.1": +"object-assign@npm:^4.1.0, object-assign@npm:^4.1.1": version: 4.1.1 resolution: "object-assign@npm:4.1.1" checksum: 10c0/1f4df9945120325d041ccf7b86f31e8bcc14e73d29171e37a7903050e96b81323784ec59f93f102ec635bcf6fa8034ba3ea0a8c7e69fa202b87ae3b6cec5a414 @@ -7588,10 +7594,10 @@ __metadata: languageName: node linkType: hard -"papaparse@npm:5.4.1": - version: 5.4.1 - resolution: "papaparse@npm:5.4.1" - checksum: 10c0/201f37c4813453fed5bfb4c01816696b099d2db9ff1e8fb610acc4771fdde91d2a22b6094721edb0fedb21ca3c46f04263f68be4beb3e35b8c72278f0cedc7b7 +"papaparse@npm:5.5.2": + version: 5.5.2 + resolution: "papaparse@npm:5.5.2" + checksum: 10c0/83b8c0cf570395581a42331cd9231194dbba43bc8c608026739f5180827506575993dc788def039a9666bc103e2a96075de8732ea8a63e507b74c02aa757bcd5 languageName: node linkType: hard @@ -7680,6 +7686,15 @@ __metadata: languageName: node linkType: hard +"path-to-regexp@npm:^1.7.0": + version: 1.9.0 + resolution: "path-to-regexp@npm:1.9.0" + dependencies: + isarray: "npm:0.0.1" + checksum: 10c0/de9ddb01b84d9c2c8e2bed18630d8d039e2d6f60a6538595750fa08c7a6482512257464c8da50616f266ab2cdd2428387e85f3b089e4c3f25d0c537e898a0751 + languageName: node + linkType: hard + "path-type@npm:^4.0.0": version: 4.0.0 resolution: "path-type@npm:4.0.0" @@ -7687,13 +7702,6 @@ __metadata: languageName: node linkType: hard -"path-type@npm:^5.0.0": - version: 5.0.0 - resolution: "path-type@npm:5.0.0" - checksum: 10c0/e8f4b15111bf483900c75609e5e74e3fcb79f2ddb73e41470028fcd3e4b5162ec65da9907be077ee5012c18801ff7fffb35f9f37a077f3f81d85a0b7d6578efd - languageName: node - linkType: hard - "pbf@npm:3.2.1": version: 3.2.1 resolution: "pbf@npm:3.2.1" @@ -7720,13 +7728,27 @@ __metadata: languageName: node linkType: hard -"picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.2.3, picomatch@npm:^2.3.1": +"picocolors@npm:^1.1.1": + version: 1.1.1 + resolution: "picocolors@npm:1.1.1" + checksum: 10c0/e2e3e8170ab9d7c7421969adaa7e1b31434f789afb9b3f115f6b96d91945041ac3ceb02e9ec6fe6510ff036bcc0bf91e69a1772edc0b707e12b19c0f2d6bcf58 + languageName: node + linkType: hard + +"picomatch@npm:^2.0.4, picomatch@npm:^2.2.3, picomatch@npm:^2.3.1": version: 2.3.1 resolution: "picomatch@npm:2.3.1" checksum: 10c0/26c02b8d06f03206fc2ab8d16f19960f2ff9e81a658f831ecb656d8f17d9edc799e8364b1f4a7873e89d9702dff96204be0fa26fe4181f6843f040f819dac4be languageName: node linkType: hard +"picomatch@npm:^4.0.2": + version: 4.0.2 + resolution: "picomatch@npm:4.0.2" + checksum: 10c0/7c51f3ad2bb42c776f49ebf964c644958158be30d0a510efd5a395e8d49cb5acfed5b82c0c5b365523ce18e6ab85013c9ebe574f60305892ec3fa8eee8304ccc + languageName: node + linkType: hard + "pirates@npm:^4.0.4": version: 4.0.6 resolution: "pirates@npm:4.0.6" @@ -7743,27 +7765,27 @@ __metadata: languageName: node linkType: hard -"playwright-core@npm:1.48.1": - version: 1.48.1 - resolution: "playwright-core@npm:1.48.1" +"playwright-core@npm:1.52.0": + version: 1.52.0 + resolution: "playwright-core@npm:1.52.0" bin: playwright-core: cli.js - checksum: 10c0/2f75532b9b7dfa0e586f5660ac1d8ea729bbdbd28dd2c0711e7cfc1adfe5cf7448d7f15a018ec9851a8f50c0743c3990cb9df23064bed603627baeac4dce3915 + checksum: 10c0/640945507e6ca2144e9f596b2a6ecac042c2fd3683ff99e6271e9a7b38f3602d415f282609d569456f66680aab8b3c5bb1b257d8fb63a7fc0ed648261110421f languageName: node linkType: hard -"playwright@npm:1.48.1": - version: 1.48.1 - resolution: "playwright@npm:1.48.1" +"playwright@npm:1.52.0": + version: 1.52.0 + resolution: "playwright@npm:1.52.0" dependencies: fsevents: "npm:2.3.2" - playwright-core: "npm:1.48.1" + playwright-core: "npm:1.52.0" dependenciesMeta: fsevents: optional: true bin: playwright: cli.js - checksum: 10c0/96280ae656226e52015c0c69c4c19e9f594c19353a79012a19bd7b7175d7b409c1aed289a629df49ef897a57ccd24668ad15b86c283db10f76212a4db90a94ac + checksum: 10c0/2c6edf1e15e59bbaf77f3fa0fe0ac975793c17cff835d9c8b8bc6395a3b6f1c01898b3058ab37891b2e4d424bcc8f1b4844fe70d943e0143d239d7451408c579 languageName: node linkType: hard @@ -7857,12 +7879,12 @@ __metadata: languageName: node linkType: hard -"prettier@npm:^3.3.3": - version: 3.3.3 - resolution: "prettier@npm:3.3.3" +"prettier@npm:^3.5.3": + version: 3.5.3 + resolution: "prettier@npm:3.5.3" bin: prettier: bin/prettier.cjs - checksum: 10c0/b85828b08e7505716324e4245549b9205c0cacb25342a030ba8885aba2039a115dbcf75a0b7ca3b37bc9d101ee61fab8113fc69ca3359f2a226f1ecc07ad2e26 + checksum: 10c0/3880cb90b9dc0635819ab52ff571518c35bd7f15a6e80a2054c05dbc8a3aa6e74f135519e91197de63705bcb38388ded7e7230e2178432a1468005406238b877 languageName: node linkType: hard @@ -7877,10 +7899,10 @@ __metadata: languageName: node linkType: hard -"prismjs@npm:1.29.0": - version: 1.29.0 - resolution: "prismjs@npm:1.29.0" - checksum: 10c0/d906c4c4d01b446db549b4f57f72d5d7e6ccaca04ecc670fb85cea4d4b1acc1283e945a9cbc3d81819084a699b382f970e02f9d1378e14af9808d366d9ed7ec6 +"prismjs@npm:1.30.0": + version: 1.30.0 + resolution: "prismjs@npm:1.30.0" + checksum: 10c0/f56205bfd58ef71ccfcbcb691fd0eb84adc96c6ff21b0b69fc6fdcf02be42d6ef972ba4aed60466310de3d67733f6a746f89f2fb79c00bf217406d465b3e8f23 languageName: node linkType: hard @@ -7911,7 +7933,7 @@ __metadata: languageName: node linkType: hard -"prop-types@npm:15.x, prop-types@npm:^15.5.10, prop-types@npm:^15.5.8, prop-types@npm:^15.6.0, prop-types@npm:^15.6.2, prop-types@npm:^15.8.1": +"prop-types@npm:^15.5.10, prop-types@npm:^15.5.8, prop-types@npm:^15.6.0, prop-types@npm:^15.6.2, prop-types@npm:^15.8.1": version: 15.8.1 resolution: "prop-types@npm:15.8.1" dependencies: @@ -8014,7 +8036,7 @@ __metadata: languageName: node linkType: hard -"raf@npm:^3.1.0, raf@npm:^3.4.0, raf@npm:^3.4.1": +"raf@npm:^3.1.0": version: 3.4.1 resolution: "raf@npm:3.4.1" dependencies: @@ -8051,47 +8073,19 @@ __metadata: languageName: node linkType: hard -"rc-align@npm:^2.4.0": - version: 2.4.5 - resolution: "rc-align@npm:2.4.5" - dependencies: - babel-runtime: "npm:^6.26.0" - dom-align: "npm:^1.7.0" - prop-types: "npm:^15.5.8" - rc-util: "npm:^4.0.4" - checksum: 10c0/460b3717636f9eea8e0537af4b8179690c1deeda2628bdcce6f218b099ebcf8ea48ad8b487b5d971e59fbbce24f10abca89d98eeff99316e8f056658c7854df0 - languageName: node - linkType: hard - -"rc-animate@npm:2.x": - version: 2.11.1 - resolution: "rc-animate@npm:2.11.1" +"rc-cascader@npm:3.33.0": + version: 3.33.0 + resolution: "rc-cascader@npm:3.33.0" dependencies: - babel-runtime: "npm:6.x" - classnames: "npm:^2.2.6" - css-animation: "npm:^1.3.2" - prop-types: "npm:15.x" - raf: "npm:^3.4.0" - rc-util: "npm:^4.15.3" - react-lifecycles-compat: "npm:^3.0.4" - checksum: 10c0/a4d31bb5065031de58ee9f4a06ebf4bd4f8e4b8a10103fbad5a68ec39c655f7bff84df21b05356a94405fcb3de0dd7d9e45d526042199d80c88d02a57c3acbdc - languageName: node - linkType: hard - -"rc-cascader@npm:3.28.1": - version: 3.28.1 - resolution: "rc-cascader@npm:3.28.1" - dependencies: - "@babel/runtime": "npm:^7.12.5" - array-tree-filter: "npm:^2.1.0" + "@babel/runtime": "npm:^7.25.7" classnames: "npm:^2.3.1" - rc-select: "npm:~14.15.0" - rc-tree: "npm:~5.9.0" - rc-util: "npm:^5.37.0" + rc-select: "npm:~14.16.2" + rc-tree: "npm:~5.13.0" + rc-util: "npm:^5.43.0" peerDependencies: react: ">=16.9.0" react-dom: ">=16.9.0" - checksum: 10c0/ffa13db0728d7021e3d0b6586e681c029ca1f112e78f4c2c0b1becd66386ef2e3201d02880e06867dfbc77b75bee624766d7fad95e0a26d204451657fb7d2d76 + checksum: 10c0/834e267c0718a4331e5221615cdfc1b9661a98927524ed5d3375d4bd56e4040b747e8a65998ae0445ba3455ad07956794abc58bdbb1563ccdf2403b228d5cc67 languageName: node linkType: hard @@ -8140,6 +8134,51 @@ __metadata: languageName: node linkType: hard +"rc-overflow@npm:^1.3.2": + version: 1.4.1 + resolution: "rc-overflow@npm:1.4.1" + dependencies: + "@babel/runtime": "npm:^7.11.1" + classnames: "npm:^2.2.1" + rc-resize-observer: "npm:^1.0.0" + rc-util: "npm:^5.37.0" + peerDependencies: + react: ">=16.9.0" + react-dom: ">=16.9.0" + checksum: 10c0/ac47d2c7b4cfc99e8ca20c75f99e601eac4d524f6690d9a36fb65d84b9f627f13aa70f11fc5c09b24c1e9a0395a15c16998a57f2517c08a6abe545539cb5e162 + languageName: node + linkType: hard + +"rc-picker@npm:4.9.2": + version: 4.9.2 + resolution: "rc-picker@npm:4.9.2" + dependencies: + "@babel/runtime": "npm:^7.24.7" + "@rc-component/trigger": "npm:^2.0.0" + classnames: "npm:^2.2.1" + rc-overflow: "npm:^1.3.2" + rc-resize-observer: "npm:^1.4.0" + rc-util: "npm:^5.43.0" + peerDependencies: + date-fns: ">= 2.x" + dayjs: ">= 1.x" + luxon: ">= 3.x" + moment: ">= 2.x" + react: ">=16.9.0" + react-dom: ">=16.9.0" + peerDependenciesMeta: + date-fns: + optional: true + dayjs: + optional: true + luxon: + optional: true + moment: + optional: true + checksum: 10c0/052a78e5277f71e8eaf66333dba5aea165bf999ffeef2cea1f5b63395dc083ce80a398dcd51002fe808961282089dfcf92a81ded326fe2bf54f320a24c8f4dbb + languageName: node + linkType: hard + "rc-resize-observer@npm:^1.0.0, rc-resize-observer@npm:^1.3.1": version: 1.4.0 resolution: "rc-resize-observer@npm:1.4.0" @@ -8155,9 +8194,24 @@ __metadata: languageName: node linkType: hard -"rc-select@npm:~14.15.0": - version: 14.15.2 - resolution: "rc-select@npm:14.15.2" +"rc-resize-observer@npm:^1.4.0": + version: 1.4.3 + resolution: "rc-resize-observer@npm:1.4.3" + dependencies: + "@babel/runtime": "npm:^7.20.7" + classnames: "npm:^2.2.1" + rc-util: "npm:^5.44.1" + resize-observer-polyfill: "npm:^1.5.1" + peerDependencies: + react: ">=16.9.0" + react-dom: ">=16.9.0" + checksum: 10c0/93073c9ef5cc704f9d99307f58f8eeccabb953edf4e8a056b090104fc28ed19b77c2a32bd88ca2e0407fbedeb266d1985e655b35b8bc36b04d243e9d0471c911 + languageName: node + linkType: hard + +"rc-select@npm:~14.16.2": + version: 14.16.7 + resolution: "rc-select@npm:14.16.7" dependencies: "@babel/runtime": "npm:^7.10.1" "@rc-component/trigger": "npm:^2.1.1" @@ -8169,13 +8223,13 @@ __metadata: peerDependencies: react: "*" react-dom: "*" - checksum: 10c0/00151da840002e30ee2b1f372c416e8370495524cf46e587eeb903fce2d1fd43167774a49cb7aed3e9816d2a200b46150c7d1fdcb1b17a21ca19d3a3cf930792 + checksum: 10c0/9429dd7d2d2ff5df56efea946d95901650378e7b8ceed37ef586f5cde64cdb52be390c2176ce516bb3bbdbab15305524c5c0d8cc9d0998cc39bd4e917360329f languageName: node linkType: hard -"rc-slider@npm:11.1.7": - version: 11.1.7 - resolution: "rc-slider@npm:11.1.7" +"rc-slider@npm:11.1.8": + version: 11.1.8 + resolution: "rc-slider@npm:11.1.8" dependencies: "@babel/runtime": "npm:^7.10.1" classnames: "npm:^2.2.5" @@ -8183,41 +8237,28 @@ __metadata: peerDependencies: react: ">=16.9.0" react-dom: ">=16.9.0" - checksum: 10c0/ddb870a8f9982565c3ab4e7ece12a224c4d6f1983a0760d516561fa8963c2bc6d9e25bed6b87cad007b3d4962194398e1490231d0b5ab062262c0ea0ba734b85 + checksum: 10c0/b202599abf85e21234c2cababe9c6f908aa7fcdde9eca413ef96b209838f3b1a33292d1a1bbe571b84bf46f8a5d28d5c1a070f331bddc0504101e9e2a75cf422 languageName: node linkType: hard -"rc-time-picker@npm:^3.7.3": - version: 3.7.3 - resolution: "rc-time-picker@npm:3.7.3" - dependencies: - classnames: "npm:2.x" - moment: "npm:2.x" - prop-types: "npm:^15.5.8" - raf: "npm:^3.4.1" - rc-trigger: "npm:^2.2.0" - react-lifecycles-compat: "npm:^3.0.4" - checksum: 10c0/f9c3e39a40a3db2c0a89c07bdbae82b053ea99cf169ec26f26b16492ff37961f73541756177b28e618028246baa72148ba2083b9d25e9053da4319f0f3d2d268 - languageName: node - linkType: hard - -"rc-tooltip@npm:6.2.1": - version: 6.2.1 - resolution: "rc-tooltip@npm:6.2.1" +"rc-tooltip@npm:6.4.0": + version: 6.4.0 + resolution: "rc-tooltip@npm:6.4.0" dependencies: "@babel/runtime": "npm:^7.11.2" "@rc-component/trigger": "npm:^2.0.0" classnames: "npm:^2.3.1" + rc-util: "npm:^5.44.3" peerDependencies: react: ">=16.9.0" react-dom: ">=16.9.0" - checksum: 10c0/879341bcb7c162faa51b187482947c4f7d67b223f3999cf4a0fc5f4ffd15030086cef05b32464203c6ea7d07fc9f68cca85d806bf65ffdb91a5e7a76e46c839d + checksum: 10c0/49b9c56fc877b38084b4076edb1b61f0272bdd290c6ef161a0e1cf6426488e948c20439cf4ae31e076f3957b894feb326e4a1d7880400de2c29b1d54f736a342 languageName: node linkType: hard -"rc-tree@npm:~5.9.0": - version: 5.9.0 - resolution: "rc-tree@npm:5.9.0" +"rc-tree@npm:~5.13.0": + version: 5.13.1 + resolution: "rc-tree@npm:5.13.1" dependencies: "@babel/runtime": "npm:^7.10.1" classnames: "npm:2.x" @@ -8227,35 +8268,7 @@ __metadata: peerDependencies: react: "*" react-dom: "*" - checksum: 10c0/07cb1126910739060170be6348835bb39cfdf0ddf6fffbbfda2eca49cadee9233fd2031a0cabce07e4874df29ccdc1168b47695dec5e03ecfe502c0fa49712a9 - languageName: node - linkType: hard - -"rc-trigger@npm:^2.2.0": - version: 2.6.5 - resolution: "rc-trigger@npm:2.6.5" - dependencies: - babel-runtime: "npm:6.x" - classnames: "npm:^2.2.6" - prop-types: "npm:15.x" - rc-align: "npm:^2.4.0" - rc-animate: "npm:2.x" - rc-util: "npm:^4.4.0" - react-lifecycles-compat: "npm:^3.0.4" - checksum: 10c0/29ba7a0eab6a281e77754050c84a80d9aaa4134e89db8319a61d9d1cc9296b873c208135d01495733e3f8e2bbe4c90d2fa28754da92a5f0b1064ee08b0dd1d4d - languageName: node - linkType: hard - -"rc-util@npm:^4.0.4, rc-util@npm:^4.15.3, rc-util@npm:^4.4.0": - version: 4.21.1 - resolution: "rc-util@npm:4.21.1" - dependencies: - add-dom-event-listener: "npm:^1.1.0" - prop-types: "npm:^15.5.10" - react-is: "npm:^16.12.0" - react-lifecycles-compat: "npm:^3.0.4" - shallowequal: "npm:^1.1.0" - checksum: 10c0/f91fe2ba98658c1bd67d8d3edd5ed5a2425ff44d3cd30f96b71b6058bd6c852bbf82e00716e219c10f6fac20e9b9cbb447e39cd69e12cdcfeda6dcd824adc790 + checksum: 10c0/4a27783d319f9e5367e9d123a2f9a6daa0383e705e055abb47f3ff7fa93249c5c26bbb27b7c6602163faefbfe0f3e923eb3a55d1e1f1d09d04b7bdf37942c2d4 languageName: node linkType: hard @@ -8272,6 +8285,19 @@ __metadata: languageName: node linkType: hard +"rc-util@npm:^5.44.1, rc-util@npm:^5.44.3": + version: 5.44.4 + resolution: "rc-util@npm:5.44.4" + dependencies: + "@babel/runtime": "npm:^7.18.3" + react-is: "npm:^18.2.0" + peerDependencies: + react: ">=16.9.0" + react-dom: ">=16.9.0" + checksum: 10c0/748b71a6280ddaaac93d1fb2c92f03818775468e7ccb6c221484687cc0b7e879d083e98e338f75ac0fe2e942dbb9c2405bd32d25e5a804bf1fb7a11f3f897127 + languageName: node + linkType: hard + "rc-virtual-list@npm:^3.5.1, rc-virtual-list@npm:^3.5.2": version: 3.14.5 resolution: "rc-virtual-list@npm:3.14.5" @@ -8287,9 +8313,9 @@ __metadata: languageName: node linkType: hard -"react-calendar@npm:5.0.0": - version: 5.0.0 - resolution: "react-calendar@npm:5.0.0" +"react-calendar@npm:^5.1.0": + version: 5.1.0 + resolution: "react-calendar@npm:5.1.0" dependencies: "@wojtekmaj/date-utils": "npm:^1.1.3" clsx: "npm:^2.0.0" @@ -8302,7 +8328,7 @@ __metadata: peerDependenciesMeta: "@types/react": optional: true - checksum: 10c0/d0b393b22fb1607dd2a7743f104f6d7fe2f3dba39bfbce301b5100d35bed239f51a7b08eec2a7fea77d88af60aecc0b36c2435f36d0e07b88f4a826a67c5a91e + checksum: 10c0/27673f639c5d6296342a2a888436b31a5d602faeaae01be83b2beb98ff568b0a3d1514f5cc50fcacf3ac50b9c0b9d2fb423b0c001a8f5f1a22816671409e2616 languageName: node linkType: hard @@ -8330,50 +8356,60 @@ __metadata: languageName: node linkType: hard -"react-dom@npm:^18.3.1": - version: 18.3.1 - resolution: "react-dom@npm:18.3.1" +"react-data-grid@npm:7.0.0-beta.46": + version: 7.0.0-beta.46 + resolution: "react-data-grid@npm:7.0.0-beta.46" dependencies: - loose-envify: "npm:^1.1.0" - scheduler: "npm:^0.23.2" + clsx: "npm:^2.0.0" peerDependencies: - react: ^18.3.1 - checksum: 10c0/a752496c1941f958f2e8ac56239172296fcddce1365ce45222d04a1947e0cc5547df3e8447f855a81d6d39f008d7c32eab43db3712077f09e3f67c4874973e85 + react: ^18.0 || ^19.0 + react-dom: ^18.0 || ^19.0 + checksum: 10c0/38cfafaae84faac49d638d21a5f327b6d7e6dd119bec752d87add6c4b9f2830eb73ba4c52339a130eb049efc2ae42114bda537da84b1fb6c0b17c7ff4e631937 languageName: node linkType: hard -"react-dropzone@npm:14.2.9": - version: 14.2.9 - resolution: "react-dropzone@npm:14.2.9" +"react-dom@npm:^19.1.0": + version: 19.1.0 + resolution: "react-dom@npm:19.1.0" dependencies: - attr-accept: "npm:^2.2.2" - file-selector: "npm:^0.6.0" + scheduler: "npm:^0.26.0" + peerDependencies: + react: ^19.1.0 + checksum: 10c0/3e26e89bb6c67c9a6aa86cb888c7a7f8258f2e347a6d2a15299c17eb16e04c19194e3452bc3255bd34000a61e45e2cb51e46292392340432f133e5a5d2dfb5fc + languageName: node + linkType: hard + +"react-dropzone@npm:14.3.5": + version: 14.3.5 + resolution: "react-dropzone@npm:14.3.5" + dependencies: + attr-accept: "npm:^2.2.4" + file-selector: "npm:^2.1.0" prop-types: "npm:^15.8.1" peerDependencies: react: ">= 16.8 || 18.0.0" - checksum: 10c0/07c69f5c43500edae8916af54bff53bd27e7a4ba127228d130a5346e49f41ff16b47357d97871b4167d6cd9e65e65b9052d1ea7e59d16caeabf1565a73026f58 + checksum: 10c0/e3e5dddd3bead7c6410bd3fccc3a87e93086ceac47526a2d35421ef7e11a9e59f47c8af8da5c4600a58ef238a5af87c751a71b6391d5c6f77f1f2857946c07cc languageName: node linkType: hard -"react-from-dom@npm:^0.6.2": - version: 0.6.2 - resolution: "react-from-dom@npm:0.6.2" +"react-from-dom@npm:^0.7.5": + version: 0.7.5 + resolution: "react-from-dom@npm:0.7.5" peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 10c0/4955650801361afb8d4edf2ef8a7f0a55ab5af238042264c3ffe0f834f1af7ed2ebba9e2a382cd548200e8f2ad86c19ee6387d63a49a0a50722b5272e26244c7 + react: 16.8 - 19 + checksum: 10c0/1f1fd17d5d08ca2a714dde9a9559c54747eefdc9d1a45d84befb4e036957f197681c0ac5ddea325ac30d0a646c070ec9bb458ebfab281f4e380023451a3a28a0 languageName: node linkType: hard -"react-highlight-words@npm:0.20.0": - version: 0.20.0 - resolution: "react-highlight-words@npm:0.20.0" +"react-highlight-words@npm:0.21.0": + version: 0.21.0 + resolution: "react-highlight-words@npm:0.21.0" dependencies: highlight-words-core: "npm:^1.2.0" memoize-one: "npm:^4.0.0" - prop-types: "npm:^15.5.8" peerDependencies: - react: ^0.14.0 || ^15.0.0 || ^16.0.0-0 || ^17.0.0-0 || ^18.0.0-0 - checksum: 10c0/1d3aec0c8b8865e3b2855a2fbb11c0af3fad7fc3e2685fcd4952e8bd59b8d8874ecff773830bdcc135f81ec7d13e1f2d6de0f05a153a82b4e192534339cb5550 + react: ^0.14.0 || ^15.0.0 || ^16.0.0-0 || ^17.0.0-0 || ^18.0.0-0 || ^19.0.0-0 + checksum: 10c0/8704097b6ca2b08a943e55e66493fab21d523362c8ea754ef4c7a351b4625b684d7ed1e9155f97d033be78783dacdd88bb83e2766cfc3d462c311551552b8ad5 languageName: node linkType: hard @@ -8386,21 +8422,24 @@ __metadata: languageName: node linkType: hard -"react-i18next@npm:^14.0.0": - version: 14.1.3 - resolution: "react-i18next@npm:14.1.3" +"react-i18next@npm:^15.0.0": + version: 15.5.1 + resolution: "react-i18next@npm:15.5.1" dependencies: - "@babel/runtime": "npm:^7.23.9" + "@babel/runtime": "npm:^7.25.0" html-parse-stringify: "npm:^3.0.1" peerDependencies: i18next: ">= 23.2.3" react: ">= 16.8.0" + typescript: ^5 peerDependenciesMeta: react-dom: optional: true react-native: optional: true - checksum: 10c0/a10426585a3bdfecbec5afc7eeb35df8005fa9d47032dd70dea170adb5506c13ea4e5f417a50669f59c547537d1b3a80e638580987f1c1bbc628ddc8f5974ec9 + typescript: + optional: true + checksum: 10c0/448e190beb3338e5e6e48936c82b5e8610fdb54d0b3dafc14c2af76115a6c931eff601c3e4aee00b3d3c1b78d4d7061bbac443fc9bcff786d131e695c79f5822 languageName: node linkType: hard @@ -8415,15 +8454,14 @@ __metadata: languageName: node linkType: hard -"react-inlinesvg@npm:3.0.2": - version: 3.0.2 - resolution: "react-inlinesvg@npm:3.0.2" +"react-inlinesvg@npm:4.2.0": + version: 4.2.0 + resolution: "react-inlinesvg@npm:4.2.0" dependencies: - exenv: "npm:^1.2.2" - react-from-dom: "npm:^0.6.2" + react-from-dom: "npm:^0.7.5" peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 10c0/f82f7aa02d4090d6fb7e809d1a0f0e924559e419b311474d3f6ef8342d077ab7ce22699f850b91ba2c84a9fc6f13d38fce07a61e91fcd4cd6e1181f87a09bcc0 + react: 16.8 - 19 + checksum: 10c0/6133c275d96977ff62add59070bbd49965d0941980f6d8f900d87a54d1d56eef6353104c4ea5c6d4fbe014f6333162852dbef28dbdc6ced989d9b8d42c7862e6 languageName: node linkType: hard @@ -8434,7 +8472,7 @@ __metadata: languageName: node linkType: hard -"react-is@npm:^16.12.0, react-is@npm:^16.13.1, react-is@npm:^16.7.0": +"react-is@npm:^16.13.1, react-is@npm:^16.6.0, react-is@npm:^16.7.0": version: 16.13.1 resolution: "react-is@npm:16.13.1" checksum: 10c0/33977da7a5f1a287936a0c85639fec6ca74f4f15ef1e59a6bc20338fc73dc69555381e211f7a3529b8150a1f71e4225525b41b60b52965bda53ce7d47377ada1 @@ -8448,13 +8486,6 @@ __metadata: languageName: node linkType: hard -"react-lifecycles-compat@npm:^3.0.4": - version: 3.0.4 - resolution: "react-lifecycles-compat@npm:3.0.4" - checksum: 10c0/1d0df3c85af79df720524780f00c064d53a9dd1899d785eddb7264b378026979acbddb58a4b7e06e7d0d12aa1494fd5754562ee55d32907b15601068dae82c27 - languageName: node - linkType: hard - "react-loading-skeleton@npm:3.5.0": version: 3.5.0 resolution: "react-loading-skeleton@npm:3.5.0" @@ -8464,35 +8495,22 @@ __metadata: languageName: node linkType: hard -"react-redux@npm:^8.1.3": - version: 8.1.3 - resolution: "react-redux@npm:8.1.3" +"react-redux@npm:^9.1.2": + version: 9.2.0 + resolution: "react-redux@npm:9.2.0" dependencies: - "@babel/runtime": "npm:^7.12.1" - "@types/hoist-non-react-statics": "npm:^3.3.1" - "@types/use-sync-external-store": "npm:^0.0.3" - hoist-non-react-statics: "npm:^3.3.2" - react-is: "npm:^18.0.0" - use-sync-external-store: "npm:^1.0.0" - peerDependencies: - "@types/react": ^16.8 || ^17.0 || ^18.0 - "@types/react-dom": ^16.8 || ^17.0 || ^18.0 - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - react-native: ">=0.59" - redux: ^4 || ^5.0.0-beta.0 + "@types/use-sync-external-store": "npm:^0.0.6" + use-sync-external-store: "npm:^1.4.0" + peerDependencies: + "@types/react": ^18.2.25 || ^19 + react: ^18.0 || ^19 + redux: ^5.0.0 peerDependenciesMeta: "@types/react": optional: true - "@types/react-dom": - optional: true - react-dom: - optional: true - react-native: - optional: true redux: optional: true - checksum: 10c0/64c8be2765568dc66a3c442a41dd0ed74fe048d5ceb7a4fe72e5bac3d3687996a7115f57b5156af7406521087065a0e60f9194318c8ca99c55e9ce48558980ce + checksum: 10c0/00d485f9d9219ca1507b4d30dde5f6ff8fb68ba642458f742e0ec83af052f89e65cd668249b99299e1053cc6ad3d2d8ac6cb89e2f70d2ac5585ae0d7fa0ef259 languageName: node linkType: hard @@ -8511,16 +8529,51 @@ __metadata: languageName: node linkType: hard -"react-router-dom@npm:^6.27.0": - version: 6.27.0 - resolution: "react-router-dom@npm:6.27.0" +"react-router-dom@npm:5.3.4": + version: 5.3.4 + resolution: "react-router-dom@npm:5.3.4" dependencies: - "@remix-run/router": "npm:1.20.0" - react-router: "npm:6.27.0" + "@babel/runtime": "npm:^7.12.13" + history: "npm:^4.9.0" + loose-envify: "npm:^1.3.1" + prop-types: "npm:^15.6.2" + react-router: "npm:5.3.4" + tiny-invariant: "npm:^1.0.2" + tiny-warning: "npm:^1.0.0" peerDependencies: - react: ">=16.8" - react-dom: ">=16.8" - checksum: 10c0/7db48ffd0b387af0eed060ceaf42075d074e63fbd30f4cf60993526b3610883a9ff82615965001165ed69d2bf2f1bce05c594a21c8d0d845e7b9bf203201116e + react: ">=15" + checksum: 10c0/f04f727e2ed2e9d1d3830af02cc61690ff67b1524c0d18690582bfba0f4d14142ccc88fb6da6befad644fddf086f5ae4c2eb7048c67da8a0b0929c19426421b0 + languageName: node + linkType: hard + +"react-router-dom@npm:^7.6.0": + version: 7.6.0 + resolution: "react-router-dom@npm:7.6.0" + dependencies: + react-router: "npm:7.6.0" + peerDependencies: + react: ">=18" + react-dom: ">=18" + checksum: 10c0/a13098a0dac97cde81f9af061c0dfb5ebf76ca00bdb75618d84b26e8abddab1fe9f3db88bce1736dc7c1a8f205ad0135a00148dd43ba72f2ed2c7e69ab77a739 + languageName: node + linkType: hard + +"react-router@npm:5.3.4": + version: 5.3.4 + resolution: "react-router@npm:5.3.4" + dependencies: + "@babel/runtime": "npm:^7.12.13" + history: "npm:^4.9.0" + hoist-non-react-statics: "npm:^3.1.0" + loose-envify: "npm:^1.3.1" + path-to-regexp: "npm:^1.7.0" + prop-types: "npm:^15.6.2" + react-is: "npm:^16.6.0" + tiny-invariant: "npm:^1.0.2" + tiny-warning: "npm:^1.0.0" + peerDependencies: + react: ">=15" + checksum: 10c0/e15c00dfef199249b4c6e6d98e5e76cc352ce66f3270f13df37cc069ddf7c05e43281e8c308fc407e4435d72924373baef1d2890e0f6b0b1eb423cf47315a053 languageName: node linkType: hard @@ -8535,9 +8588,25 @@ __metadata: languageName: node linkType: hard -"react-select@npm:5.8.1": - version: 5.8.1 - resolution: "react-select@npm:5.8.1" +"react-router@npm:7.6.0": + version: 7.6.0 + resolution: "react-router@npm:7.6.0" + dependencies: + cookie: "npm:^1.0.1" + set-cookie-parser: "npm:^2.6.0" + peerDependencies: + react: ">=18" + react-dom: ">=18" + peerDependenciesMeta: + react-dom: + optional: true + checksum: 10c0/abc4d37c01804a3137b1cfd12cf7e55bff092a67c835404ab9da1411ec9e170fe72773b9846d2db084cc0272179237e59d88dbf46cef9db031892feebcb48640 + languageName: node + linkType: hard + +"react-select@npm:5.10.0": + version: 5.10.0 + resolution: "react-select@npm:5.10.0" dependencies: "@babel/runtime": "npm:^7.12.0" "@emotion/cache": "npm:^11.4.0" @@ -8547,11 +8616,11 @@ __metadata: memoize-one: "npm:^6.0.0" prop-types: "npm:^15.6.0" react-transition-group: "npm:^4.3.0" - use-isomorphic-layout-effect: "npm:^1.1.2" + use-isomorphic-layout-effect: "npm:^1.2.0" peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 10c0/0fd73e1e472105f980e09c86f0e6adbdc9f2f5c1befa275b08c71653becdd1829f596155a81b5085cb86f18b20bf4f4cc439ab5fe23e68f326e169dcfe00ccf6 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + checksum: 10c0/64cc73ef43556d0a199420d7d19f9f72e3c5e3a7f6828aef5421ec16cc0e4bc337061a8fa3c03afc5b929a087a4ca866f497e0ef865b03fe014c5cacde5e71dd languageName: node linkType: hard @@ -8589,9 +8658,9 @@ __metadata: languageName: node linkType: hard -"react-use@npm:17.5.1": - version: 17.5.1 - resolution: "react-use@npm:17.5.1" +"react-use@npm:17.6.0": + version: 17.6.0 + resolution: "react-use@npm:17.6.0" dependencies: "@types/js-cookie": "npm:^2.2.6" "@xobotyi/scrollbar-width": "npm:^1.9.5" @@ -8610,29 +8679,27 @@ __metadata: peerDependencies: react: "*" react-dom: "*" - checksum: 10c0/3d6a8f46539b32698d31600239e72b5c23376a5343d0d687c6520e14532ed7f5c72c9b99d222be4eeacb0401ce3ae763d5648d0476440c8b4a6afbd56dc98bfa + checksum: 10c0/d122199f3edd056bfd866837b0f19a44366e77c7535c6c2c5eb5f400409eae4c9b1fe73c9d35073c8434080eee388ca8fe49a68d09d6f794ccaa35a4ae2112a9 languageName: node linkType: hard -"react-window@npm:1.8.10": - version: 1.8.10 - resolution: "react-window@npm:1.8.10" +"react-window@npm:1.8.11": + version: 1.8.11 + resolution: "react-window@npm:1.8.11" dependencies: "@babel/runtime": "npm:^7.0.0" memoize-one: "npm:>=3.1.1 <6" peerDependencies: - react: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 - react-dom: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 - checksum: 10c0/eda9afb667d9784513dcc2755b65edf3a1412e7877975322993c1382908aaef0c0b948b7e3b2d705e353306556274d90f7ab19ac40aef2184fa39d4c1e2232ea + react: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + checksum: 10c0/5ae8da1bc5c47d8f0a428b28a600256e2db511975573e52cb65a9b27ed1a0e5b9f7b3bee5a54fb0da93956d782c24010be434be451072f46ba5a89159d2b3944 languageName: node linkType: hard -"react@npm:^18.3.1": - version: 18.3.1 - resolution: "react@npm:18.3.1" - dependencies: - loose-envify: "npm:^1.1.0" - checksum: 10c0/283e8c5efcf37802c9d1ce767f302dd569dd97a70d9bb8c7be79a789b9902451e0d16334b05d73299b20f048cbc3c7d288bbbde10b701fa194e2089c237dbea3 +"react@npm:^19.1.0": + version: 19.1.0 + resolution: "react@npm:19.1.0" + checksum: 10c0/530fb9a62237d54137a13d2cfb67a7db6a2156faed43eecc423f4713d9b20c6f2728b026b45e28fcd72e8eadb9e9ed4b089e99f5e295d2f0ad3134251bdd3698 languageName: node linkType: hard @@ -8643,15 +8710,6 @@ __metadata: languageName: node linkType: hard -"readdirp@npm:~3.6.0": - version: 3.6.0 - resolution: "readdirp@npm:3.6.0" - dependencies: - picomatch: "npm:^2.2.1" - checksum: 10c0/6fa848cf63d1b82ab4e985f4cf72bd55b7dcfd8e0a376905804e48c3634b7e749170940ba77b32804d5fe93b3cc521aa95a8d7e7d725f830da6d93f3669ce66b - languageName: node - linkType: hard - "rechoir@npm:^0.8.0": version: 0.8.0 resolution: "rechoir@npm:0.8.0" @@ -8671,19 +8729,10 @@ __metadata: languageName: node linkType: hard -"redux@npm:^4.2.1": - version: 4.2.1 - resolution: "redux@npm:4.2.1" - dependencies: - "@babel/runtime": "npm:^7.9.2" - checksum: 10c0/136d98b3d5dbed1cd6279c8c18a6a74c416db98b8a432a46836bdd668475de6279a2d4fd9d1363f63904e00f0678a8a3e7fa532c897163340baf1e71bb42c742 - languageName: node - linkType: hard - -"regenerator-runtime@npm:^0.11.0": - version: 0.11.1 - resolution: "regenerator-runtime@npm:0.11.1" - checksum: 10c0/69cfa839efcf2d627fe358bf302ab8b24e5f182cb69f13e66f0612d3640d7838aad1e55662135e3ef2c1cc4322315b757626094fab13a48f9a64ab4bdeb8795b +"redux@npm:^5.0.1": + version: 5.0.1 + resolution: "redux@npm:5.0.1" + checksum: 10c0/b10c28357194f38e7d53b760ed5e64faa317cc63de1fb95bc5d9e127fab956392344368c357b8e7a9bedb0c35b111e7efa522210cfdc3b3c75e5074718e9069c languageName: node linkType: hard @@ -8847,7 +8896,7 @@ __metadata: languageName: node linkType: hard -"rxjs@npm:7.8.1, rxjs@npm:^7.8.1": +"rxjs@npm:7.8.1": version: 7.8.1 resolution: "rxjs@npm:7.8.1" dependencies: @@ -8856,6 +8905,15 @@ __metadata: languageName: node linkType: hard +"rxjs@npm:^7.8.2": + version: 7.8.2 + resolution: "rxjs@npm:7.8.2" + dependencies: + tslib: "npm:^2.1.0" + checksum: 10c0/1fcd33d2066ada98ba8f21fcbbcaee9f0b271de1d38dc7f4e256bfbc6ffcdde68c8bfb69093de7eeb46f24b1fb820620bf0223706cff26b4ab99a7ff7b2e2c45 + languageName: node + linkType: hard + "safe-buffer@npm:>=5.1.0, safe-buffer@npm:^5.1.0": version: 5.2.1 resolution: "safe-buffer@npm:5.2.1" @@ -8877,9 +8935,9 @@ __metadata: languageName: node linkType: hard -"sass-loader@npm:^16.0.2": - version: 16.0.2 - resolution: "sass-loader@npm:16.0.2" +"sass-loader@npm:^16.0.5": + version: 16.0.5 + resolution: "sass-loader@npm:16.0.5" dependencies: neo-async: "npm:^2.6.2" peerDependencies: @@ -8899,21 +8957,24 @@ __metadata: optional: true webpack: optional: true - checksum: 10c0/9c5165b44fc6229d8f36fb2af3ebb9d1e3a837bcc80040d3f3fc5793cd2998407e2ed55853c2b342cca2b5e17fa141160198ad034685a95b17126200c320ae11 + checksum: 10c0/216422b7b9e6e3f22739dc96887d883d2415f188d5c47631fd28c80608b5fae71167b26d0c74a1e917614e4d494fa73b1190ad5ca2f587c1afee84dc1d30f003 languageName: node linkType: hard -"sass@npm:^1.80.3": - version: 1.80.3 - resolution: "sass@npm:1.80.3" +"sass@npm:^1.87.0": + version: 1.87.0 + resolution: "sass@npm:1.87.0" dependencies: "@parcel/watcher": "npm:^2.4.1" chokidar: "npm:^4.0.0" - immutable: "npm:^4.0.0" + immutable: "npm:^5.0.2" source-map-js: "npm:>=0.6.2 <2.0.0" + dependenciesMeta: + "@parcel/watcher": + optional: true bin: sass: sass.js - checksum: 10c0/fa08043fc36b854717b6eaf6247ee11341d0aff5e17a645965071866bd677930c9c9467d82ed5a4a666d7897a82be8a61427cd81b808e6b9e2d3b32cf278bebd + checksum: 10c0/bd245faf14e4783dc547765350cf05817edaac0d6d6f6e4da8ab751f3eb3cc3873afd563c0ce416a24aa6c9c4e9023b05096447fc006660a01f76adffb54fbc6 languageName: node linkType: hard @@ -8926,12 +8987,10 @@ __metadata: languageName: node linkType: hard -"scheduler@npm:^0.23.2": - version: 0.23.2 - resolution: "scheduler@npm:0.23.2" - dependencies: - loose-envify: "npm:^1.1.0" - checksum: 10c0/26383305e249651d4c58e6705d5f8425f153211aef95f15161c151f7b8de885f24751b377e4a0b3dd42cce09aad3f87a61dab7636859c0d89b7daf1a1e2a5c78 +"scheduler@npm:^0.26.0": + version: 0.26.0 + resolution: "scheduler@npm:0.26.0" + checksum: 10c0/5b8d5bfddaae3513410eda54f2268e98a376a429931921a81b5c3a2873aab7ca4d775a8caac5498f8cbc7d0daeab947cf923dbd8e215d61671f9f4e392d34356 languageName: node linkType: hard @@ -8947,7 +9006,7 @@ __metadata: languageName: node linkType: hard -"schema-utils@npm:^3.1.1, schema-utils@npm:^3.2.0": +"schema-utils@npm:^3.1.1": version: 3.3.0 resolution: "schema-utils@npm:3.3.0" dependencies: @@ -8958,6 +9017,18 @@ __metadata: languageName: node linkType: hard +"schema-utils@npm:^4.3.0, schema-utils@npm:^4.3.2": + version: 4.3.2 + resolution: "schema-utils@npm:4.3.2" + dependencies: + "@types/json-schema": "npm:^7.0.9" + ajv: "npm:^8.9.0" + ajv-formats: "npm:^2.1.1" + ajv-keywords: "npm:^5.1.0" + checksum: 10c0/981632f9bf59f35b15a9bcdac671dd183f4946fe4b055ae71a301e66a9797b95e5dd450de581eb6cca56fb6583ce8f24d67b2d9f8e1b2936612209697f6c277e + languageName: node + linkType: hard + "screenfull@npm:^5.1.0": version: 5.2.0 resolution: "screenfull@npm:5.2.0" @@ -8990,7 +9061,16 @@ __metadata: languageName: node linkType: hard -"serialize-javascript@npm:^6.0.1, serialize-javascript@npm:^6.0.2": +"semver@npm:^7.7.0": + version: 7.7.1 + resolution: "semver@npm:7.7.1" + bin: + semver: bin/semver.js + checksum: 10c0/fd603a6fb9c399c6054015433051bdbe7b99a940a8fb44b85c2b524c4004b023d7928d47cb22154f8d054ea7ee8597f586605e05b52047f048278e4ac56ae958 + languageName: node + linkType: hard + +"serialize-javascript@npm:^6.0.2": version: 6.0.2 resolution: "serialize-javascript@npm:6.0.2" dependencies: @@ -8999,6 +9079,13 @@ __metadata: languageName: node linkType: hard +"set-cookie-parser@npm:^2.6.0": + version: 2.7.1 + resolution: "set-cookie-parser@npm:2.7.1" + checksum: 10c0/060c198c4c92547ac15988256f445eae523f57f2ceefeccf52d30d75dedf6bff22b9c26f756bd44e8e560d44ff4ab2130b178bd2e52ef5571bf7be3bd7632d9a + languageName: node + linkType: hard + "set-function-length@npm:^1.2.1": version: 1.2.2 resolution: "set-function-length@npm:1.2.2" @@ -9029,13 +9116,6 @@ __metadata: languageName: node linkType: hard -"shallowequal@npm:^1.1.0": - version: 1.1.0 - resolution: "shallowequal@npm:1.1.0" - checksum: 10c0/b926efb51cd0f47aa9bc061add788a4a650550bbe50647962113a4579b60af2abe7b62f9b02314acc6f97151d4cf87033a2b15fc20852fae306d1a095215396c - languageName: node - linkType: hard - "shebang-command@npm:^2.0.0": version: 2.0.0 resolution: "shebang-command@npm:2.0.0" @@ -9092,13 +9172,6 @@ __metadata: languageName: node linkType: hard -"slash@npm:^5.1.0": - version: 5.1.0 - resolution: "slash@npm:5.1.0" - checksum: 10c0/eb48b815caf0bdc390d0519d41b9e0556a14380f6799c72ba35caf03544d501d18befdeeef074bc9c052acf69654bc9e0d79d7f1de0866284137a40805299eb3 - languageName: node - linkType: hard - "slate-base64-serializer@npm:^0.2.112": version: 0.2.115 resolution: "slate-base64-serializer@npm:0.2.115" @@ -9602,15 +9675,15 @@ __metadata: languageName: node linkType: hard -"terser-webpack-plugin@npm:^5.3.10": - version: 5.3.10 - resolution: "terser-webpack-plugin@npm:5.3.10" +"terser-webpack-plugin@npm:^5.3.11": + version: 5.3.14 + resolution: "terser-webpack-plugin@npm:5.3.14" dependencies: - "@jridgewell/trace-mapping": "npm:^0.3.20" + "@jridgewell/trace-mapping": "npm:^0.3.25" jest-worker: "npm:^27.4.5" - schema-utils: "npm:^3.1.1" - serialize-javascript: "npm:^6.0.1" - terser: "npm:^5.26.0" + schema-utils: "npm:^4.3.0" + serialize-javascript: "npm:^6.0.2" + terser: "npm:^5.31.1" peerDependencies: webpack: ^5.1.0 peerDependenciesMeta: @@ -9620,13 +9693,13 @@ __metadata: optional: true uglify-js: optional: true - checksum: 10c0/66d1ed3174542560911cf96f4716aeea8d60e7caab212291705d50072b6ba844c7391442541b13c848684044042bea9ec87512b8506528c12854943da05faf91 + checksum: 10c0/9b060947241af43bd6fd728456f60e646186aef492163672a35ad49be6fbc7f63b54a7356c3f6ff40a8f83f00a977edc26f044b8e106cc611c053c8c0eaf8569 languageName: node linkType: hard -"terser@npm:^5.26.0": - version: 5.32.0 - resolution: "terser@npm:5.32.0" +"terser@npm:^5.31.1": + version: 5.39.0 + resolution: "terser@npm:5.39.0" dependencies: "@jridgewell/source-map": "npm:^0.3.3" acorn: "npm:^8.8.2" @@ -9634,7 +9707,7 @@ __metadata: source-map-support: "npm:~0.5.20" bin: terser: bin/terser - checksum: 10c0/94daae4881258eb7d09abd46378e23d11ee46caa507b2fb26c5595c7e490914be734e0de38c50041dc38fae5fca24de11badf042dfbbfc1d336ed117335c420a + checksum: 10c0/83326545ea1aecd6261030568b6191ccfa4cb6aa61d9ea41746a52479f50017a78b77e4725fbbc207c5df841ffa66a773c5ac33636e95c7ab94fe7e0379ae5c7 languageName: node linkType: hard @@ -9698,6 +9771,16 @@ __metadata: languageName: node linkType: hard +"tinyglobby@npm:^0.2.12": + version: 0.2.13 + resolution: "tinyglobby@npm:0.2.13" + dependencies: + fdir: "npm:^6.4.4" + picomatch: "npm:^4.0.2" + checksum: 10c0/ef07dfaa7b26936601d3f6d999f7928a4d1c6234c5eb36896bb88681947c0d459b7ebe797022400e555fe4b894db06e922b95d0ce60cb05fd827a0a66326b18c + languageName: node + linkType: hard + "tmpl@npm:1.0.5": version: 1.0.5 resolution: "tmpl@npm:1.0.5" @@ -9839,7 +9922,14 @@ __metadata: languageName: node linkType: hard -"tslib@npm:2.7.0, tslib@npm:^2.1.0, tslib@npm:^2.3.1, tslib@npm:^2.4.0, tslib@npm:^2.6.2": +"tslib@npm:2.8.1, tslib@npm:^2.7.0, tslib@npm:^2.8.1": + version: 2.8.1 + resolution: "tslib@npm:2.8.1" + checksum: 10c0/9c4759110a19c53f992d9aae23aac5ced636e99887b51b9e61def52611732872ff7668757d4e4c61f19691e36f4da981cd9485e869b4a7408d689f6bf1f14e62 + languageName: node + linkType: hard + +"tslib@npm:^2.1.0, tslib@npm:^2.3.1, tslib@npm:^2.4.0, tslib@npm:^2.6.2": version: 2.7.0 resolution: "tslib@npm:2.7.0" checksum: 10c0/469e1d5bf1af585742128827000711efa61010b699cb040ab1800bcd3ccdd37f63ec30642c9e07c4439c1db6e46345582614275daca3e0f4abae29b0083f04a6 @@ -9874,43 +9964,43 @@ __metadata: languageName: node linkType: hard -"typescript@npm:5.5.4": - version: 5.5.4 - resolution: "typescript@npm:5.5.4" +"typescript@npm:5.7.3": + version: 5.7.3 + resolution: "typescript@npm:5.7.3" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 10c0/422be60f89e661eab29ac488c974b6cc0a660fb2228003b297c3d10c32c90f3bcffc1009b43876a082515a3c376b1eefcce823d6e78982e6878408b9a923199c + checksum: 10c0/b7580d716cf1824736cc6e628ab4cd8b51877408ba2be0869d2866da35ef8366dd6ae9eb9d0851470a39be17cbd61df1126f9e211d8799d764ea7431d5435afa languageName: node linkType: hard -"typescript@npm:^5.6.3": - version: 5.6.3 - resolution: "typescript@npm:5.6.3" +"typescript@npm:^5.8.3": + version: 5.8.3 + resolution: "typescript@npm:5.8.3" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 10c0/44f61d3fb15c35359bc60399cb8127c30bae554cd555b8e2b46d68fa79d680354b83320ad419ff1b81a0bdf324197b29affe6cc28988cd6a74d4ac60c94f9799 + checksum: 10c0/5f8bb01196e542e64d44db3d16ee0e4063ce4f3e3966df6005f2588e86d91c03e1fb131c2581baf0fb65ee79669eea6e161cd448178986587e9f6844446dbb48 languageName: node linkType: hard -"typescript@patch:typescript@npm%3A5.5.4#optional!builtin": - version: 5.5.4 - resolution: "typescript@patch:typescript@npm%3A5.5.4#optional!builtin::version=5.5.4&hash=379a07" +"typescript@patch:typescript@npm%3A5.7.3#optional!builtin": + version: 5.7.3 + resolution: "typescript@patch:typescript@npm%3A5.7.3#optional!builtin::version=5.7.3&hash=5786d5" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 10c0/73409d7b9196a5a1217b3aaad929bf76294d3ce7d6e9766dd880ece296ee91cf7d7db6b16c6c6c630ee5096eccde726c0ef17c7dfa52b01a243e57ae1f09ef07 + checksum: 10c0/6fd7e0ed3bf23a81246878c613423730c40e8bdbfec4c6e4d7bf1b847cbb39076e56ad5f50aa9d7ebd89877999abaee216002d3f2818885e41c907caaa192cc4 languageName: node linkType: hard -"typescript@patch:typescript@npm%3A^5.6.3#optional!builtin": - version: 5.6.3 - resolution: "typescript@patch:typescript@npm%3A5.6.3#optional!builtin::version=5.6.3&hash=8c6c40" +"typescript@patch:typescript@npm%3A^5.8.3#optional!builtin": + version: 5.8.3 + resolution: "typescript@patch:typescript@npm%3A5.8.3#optional!builtin::version=5.8.3&hash=5786d5" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 10c0/7c9d2e07c81226d60435939618c91ec2ff0b75fbfa106eec3430f0fcf93a584bc6c73176676f532d78c3594fe28a54b36eb40b3d75593071a7ec91301533ace7 + checksum: 10c0/39117e346ff8ebd87ae1510b3a77d5d92dae5a89bde588c747d25da5c146603a99c8ee588c7ef80faaf123d89ed46f6dbd918d534d641083177d5fac38b8a1cb languageName: node linkType: hard @@ -9928,10 +10018,10 @@ __metadata: languageName: node linkType: hard -"unicorn-magic@npm:^0.1.0": - version: 0.1.0 - resolution: "unicorn-magic@npm:0.1.0" - checksum: 10c0/e4ed0de05b0a05e735c7d8a2930881e5efcfc3ec897204d5d33e7e6247f4c31eac92e383a15d9a6bccb7319b4271ee4bea946e211bf14951fec6ff2cbbb66a92 +"undici-types@npm:~6.21.0": + version: 6.21.0 + resolution: "undici-types@npm:6.21.0" + checksum: 10c0/c01ed51829b10aa72fc3ce64b747f8e74ae9b60eafa19a7b46ef624403508a54c526ffab06a14a26b3120d055e1104d7abe7c9017e83ced038ea5cf52f8d5e04 languageName: node linkType: hard @@ -9981,10 +10071,10 @@ __metadata: languageName: node linkType: hard -"uplot@npm:1.6.31": - version: 1.6.31 - resolution: "uplot@npm:1.6.31" - checksum: 10c0/b1b03ebb23bda148c16e085006db183f93e99c63dd457863217c81fe7f9d99d680b2bf18f5ea2e39c39df67e20d7bae4e7730853c0af9c86c0eb8e8004e2f8ed +"uplot@npm:1.6.32": + version: 1.6.32 + resolution: "uplot@npm:1.6.32" + checksum: 10c0/4d9cdd5f53371656cfc178ea4ae0d8c9bdbe4c98c99df847926d7e5f5a5bcb8043561219da2979fee7616aabe3619d80fee093befdfe39aae65e6621284c39b1 languageName: node linkType: hard @@ -10007,15 +10097,15 @@ __metadata: languageName: node linkType: hard -"use-isomorphic-layout-effect@npm:^1.1.2": - version: 1.1.2 - resolution: "use-isomorphic-layout-effect@npm:1.1.2" +"use-isomorphic-layout-effect@npm:^1.2.0": + version: 1.2.0 + resolution: "use-isomorphic-layout-effect@npm:1.2.0" peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 peerDependenciesMeta: "@types/react": optional: true - checksum: 10c0/d8deea8b85e55ac6daba237a889630bfdbf0ebf60e9e22b6a78a78c26fabe6025e04ada7abef1e444e6786227d921e648b2707db8b3564daf757264a148a6e23 + checksum: 10c0/2e4bdee68d65893b37e716ebdcc111550775189c80e662eda87d6f5b54dc431d3383a18914ea01a893ee5478902a878012713eaebcacbb6611ab88c463accb83 languageName: node linkType: hard @@ -10028,12 +10118,12 @@ __metadata: languageName: node linkType: hard -"use-sync-external-store@npm:^1.0.0": - version: 1.2.2 - resolution: "use-sync-external-store@npm:1.2.2" +"use-sync-external-store@npm:^1.4.0": + version: 1.5.0 + resolution: "use-sync-external-store@npm:1.5.0" peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 10c0/23b1597c10adf15b26ade9e8c318d8cc0abc9ec0ab5fc7ca7338da92e89c2536abd150a5891bf076836c352fdfa104fc7231fb48f806fd9960e0cbe03601abaf + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + checksum: 10c0/1b8663515c0be34fa653feb724fdcce3984037c78dd4a18f68b2c8be55cc1a1084c578d5b75f158d41b5ddffc2bf5600766d1af3c19c8e329bb20af2ec6f52f4 languageName: node linkType: hard @@ -10044,12 +10134,19 @@ __metadata: languageName: node linkType: hard -"uuid@npm:9.0.1": - version: 9.0.1 - resolution: "uuid@npm:9.0.1" +"uuid@npm:11.0.5": + version: 11.0.5 + resolution: "uuid@npm:11.0.5" bin: - uuid: dist/bin/uuid - checksum: 10c0/1607dd32ac7fc22f2d8f77051e6a64845c9bce5cd3dd8aa0070c074ec73e666a1f63c7b4e0f4bf2bc8b9d59dc85a15e17807446d9d2b17c8485fbc2147b27f9b + uuid: dist/esm/bin/uuid + checksum: 10c0/6f59f0c605e02c14515401084ca124b9cb462b4dcac866916a49862bcf831874508a308588c23a7718269226ad11a92da29b39d761ad2b86e736623e3a33b6e7 + languageName: node + linkType: hard + +"uwrap@npm:0.1.1": + version: 0.1.1 + resolution: "uwrap@npm:0.1.1" + checksum: 10c0/1af6f62992e5253d365a9c8ffa87c1069df0e0f88642aa9d55eb1a422cecba3ae0e945110c8283d4abac506ed5beb75ebca0506213a5bccb9bcb1d698302298b languageName: node linkType: hard @@ -10143,35 +10240,33 @@ __metadata: languageName: node linkType: hard -"webpack-cli@npm:^5.1.4": - version: 5.1.4 - resolution: "webpack-cli@npm:5.1.4" +"webpack-cli@npm:^6.0.1": + version: 6.0.1 + resolution: "webpack-cli@npm:6.0.1" dependencies: - "@discoveryjs/json-ext": "npm:^0.5.0" - "@webpack-cli/configtest": "npm:^2.1.1" - "@webpack-cli/info": "npm:^2.0.2" - "@webpack-cli/serve": "npm:^2.0.5" + "@discoveryjs/json-ext": "npm:^0.6.1" + "@webpack-cli/configtest": "npm:^3.0.1" + "@webpack-cli/info": "npm:^3.0.1" + "@webpack-cli/serve": "npm:^3.0.1" colorette: "npm:^2.0.14" - commander: "npm:^10.0.1" + commander: "npm:^12.1.0" cross-spawn: "npm:^7.0.3" - envinfo: "npm:^7.7.3" + envinfo: "npm:^7.14.0" fastest-levenshtein: "npm:^1.0.12" import-local: "npm:^3.0.2" interpret: "npm:^3.1.1" rechoir: "npm:^0.8.0" - webpack-merge: "npm:^5.7.3" + webpack-merge: "npm:^6.0.1" peerDependencies: - webpack: 5.x.x + webpack: ^5.82.0 peerDependenciesMeta: - "@webpack-cli/generators": - optional: true webpack-bundle-analyzer: optional: true webpack-dev-server: optional: true bin: - webpack-cli: bin/cli.js - checksum: 10c0/4266909ae5e2e662c8790ac286e965b2c7fd5a4a2f07f48e28576234c9a5f631847ccddc18e1b3281c7b4be04a7ff4717d2636033a322dde13ac995fd0d9de10 + webpack-cli: ./bin/cli.js + checksum: 10c0/2aaca78e277427f03f528602abd707d224696048fb46286ea636c7975592409c4381ca94d68bbbb3900f195ca97f256e619583e8feb34a80da531461323bf3e2 languageName: node linkType: hard @@ -10189,14 +10284,14 @@ __metadata: languageName: node linkType: hard -"webpack-merge@npm:^5.7.3": - version: 5.10.0 - resolution: "webpack-merge@npm:5.10.0" +"webpack-merge@npm:^6.0.1": + version: 6.0.1 + resolution: "webpack-merge@npm:6.0.1" dependencies: clone-deep: "npm:^4.0.1" flat: "npm:^5.0.2" - wildcard: "npm:^2.0.0" - checksum: 10c0/b607c84cabaf74689f965420051a55a08722d897bdd6c29cb0b2263b451c090f962d41ecf8c9bf56b0ab3de56e65476ace0a8ecda4f4a4663684243d90e0512b + wildcard: "npm:^2.0.1" + checksum: 10c0/bf1429567858b353641801b8a2696ca0aac270fc8c55d4de8a7b586fe07d27fdcfc83099a98ab47e6162383db8dd63bb8cc25b1beb2ec82150422eec843b0dc0 languageName: node linkType: hard @@ -10214,17 +10309,18 @@ __metadata: languageName: node linkType: hard -"webpack@npm:^5.95.0": - version: 5.95.0 - resolution: "webpack@npm:5.95.0" +"webpack@npm:^5.99.8": + version: 5.99.8 + resolution: "webpack@npm:5.99.8" dependencies: - "@types/estree": "npm:^1.0.5" - "@webassemblyjs/ast": "npm:^1.12.1" - "@webassemblyjs/wasm-edit": "npm:^1.12.1" - "@webassemblyjs/wasm-parser": "npm:^1.12.1" - acorn: "npm:^8.7.1" - acorn-import-attributes: "npm:^1.9.5" - browserslist: "npm:^4.21.10" + "@types/eslint-scope": "npm:^3.7.7" + "@types/estree": "npm:^1.0.6" + "@types/json-schema": "npm:^7.0.15" + "@webassemblyjs/ast": "npm:^1.14.1" + "@webassemblyjs/wasm-edit": "npm:^1.14.1" + "@webassemblyjs/wasm-parser": "npm:^1.14.1" + acorn: "npm:^8.14.0" + browserslist: "npm:^4.24.0" chrome-trace-event: "npm:^1.0.2" enhanced-resolve: "npm:^5.17.1" es-module-lexer: "npm:^1.2.1" @@ -10236,9 +10332,9 @@ __metadata: loader-runner: "npm:^4.2.0" mime-types: "npm:^2.1.27" neo-async: "npm:^2.6.2" - schema-utils: "npm:^3.2.0" + schema-utils: "npm:^4.3.2" tapable: "npm:^2.1.1" - terser-webpack-plugin: "npm:^5.3.10" + terser-webpack-plugin: "npm:^5.3.11" watchpack: "npm:^2.4.1" webpack-sources: "npm:^3.2.3" peerDependenciesMeta: @@ -10246,7 +10342,7 @@ __metadata: optional: true bin: webpack: bin/webpack.js - checksum: 10c0/b9e6d0f8ebcbf0632494ac0b90fe4acb8f4a9b83f7ace4a67a15545a36fe58599c912ab58e625e1bf58ab3b0916c75fe99da6196d412ee0cab0b5065edd84238 + checksum: 10c0/c4852c3b795ed3fba799d2925802a4e259b2de7c2c597f0aaf0e228acfdc6755389ed8c29f1dad86610a9c6ad968c0b57c702b93891d60f09d302af63b2debe0 languageName: node linkType: hard @@ -10316,7 +10412,7 @@ __metadata: languageName: node linkType: hard -"wildcard@npm:^2.0.0": +"wildcard@npm:^2.0.1": version: 2.0.1 resolution: "wildcard@npm:2.0.1" checksum: 10c0/08f70cd97dd9a20aea280847a1fe8148e17cae7d231640e41eb26d2388697cbe65b67fd9e68715251c39b080c5ae4f76d71a9a69fa101d897273efdfb1b58bf7