@abtnode/webapp 1.6.2 → 1.6.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/blocklet.js +6 -6
- package/blocklet.yml +1 -1
- package/build/asset-manifest.json +12 -12
- package/build/index.html +1 -1
- package/build/{precache-manifest.54f923266e29dae897f8d192362a30c6.js → precache-manifest.1558be3423b90c3ee00cb9250332b50a.js} +10 -10
- package/build/service-worker.js +1 -1
- package/build/static/js/{11.6f496046.chunk.js → 11.cecc7bc6.chunk.js} +3 -3
- package/build/static/js/{11.6f496046.chunk.js.LICENSE.txt → 11.cecc7bc6.chunk.js.LICENSE.txt} +0 -0
- package/build/static/js/11.cecc7bc6.chunk.js.map +1 -0
- package/build/static/js/24.3c40e3e2.chunk.js +2 -0
- package/build/static/js/24.3c40e3e2.chunk.js.map +1 -0
- package/build/static/js/main.d1e0c404.chunk.js +2 -0
- package/build/static/js/main.d1e0c404.chunk.js.map +1 -0
- package/build/static/js/{runtime-main.c8f005b7.js → runtime-main.e6ba0944.js} +2 -2
- package/build/static/js/{runtime-main.c8f005b7.js.map → runtime-main.e6ba0944.js.map} +1 -1
- package/package.json +1 -1
- package/build/static/js/11.6f496046.chunk.js.map +0 -1
- package/build/static/js/24.cfc9ccb4.chunk.js +0 -2
- package/build/static/js/24.cfc9ccb4.chunk.js.map +0 -1
- package/build/static/js/main.807925b9.chunk.js +0 -2
- package/build/static/js/main.807925b9.chunk.js.map +0 -1
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
(this["webpackJsonp@abtnode/webapp"]=this["webpackJsonp@abtnode/webapp"]||[]).push([[24],{1236:function(e,t,n){"use strict";n.d(t,"b",(function(){return f})),n.d(t,"a",(function(){return p}));var a=n(119),r=n(15),c=n(0),o=n.n(c),i=n(66),l=["initialTime","format"],m=1,s=60,u=3600,d=86400,f=function(e,t){var n=Object(c.useState)(0),a=Object(r.a)(n,2),o=a[0],i=a[1],l=function(e){return e>=d?d:e>=u?u:e>=s?s:m},f=Object(c.useState)(l(e/1e3)),p=Object(r.a)(f,2),v=p[0],b=p[1];return Object(c.useEffect)((function(){var t=setInterval((function(){i(o+v);var t=l(e/1e3+o+v);v!==t&&b(t)}),1e3*v);return function(){return clearInterval(t)}}),[v,o]),Object(c.useEffect)((function(){i(0),b(l(e/1e3))}),[e]),t(e+1e3*o)};function p(e){var t=e.initialTime,n=e.format,r=Object(a.a)(e,l),c=f(t,n);return o.a.createElement(i.a,r,c)}p.defaultProps={format:function(e){return e}}},1828:function(e,t,n){"use strict";n.r(t),n.d(t,"default",(function(){return oe}));var a=n(34),r=n(63),c=n(15),o=n(12),i=n.n(o),l=n(21),m=n(0),s=n.n(m),u=n(16),d=n(4),f=n(19),p=n(393),v=n.n(p),b=n(1201),h=n(1083),g=n.n(h),E=n(371),x=n.n(E),y=n(546),j=n.n(y),k=n(1658),O=n.n(k),N=n(931),_=n(66),w=n(53),I=n.n(w),P=n(893),C=n(896),S=n(305),U=n(193),D=n.n(U),T=n(981),V=n.n(T),A=n(1659),W=n.n(A),L=n(356),F=n.n(L),J=n(24),Y=n(966),z=n(31),B=n(352),M=n(98),q=n(25),G=s.a.createContext({}),H=G.Provider;G.Consumer;function K(e){var t=e.children,n=Object(z.c)().info,a=Object(M.b)(),r=Object(m.useState)(null),o=Object(c.a)(r,2),u=o[0],d=o[1],f=Object(m.useState)(!1),p=Object(c.a)(f,2),v=p[0],b=p[1],h=Object(m.useState)([]),g=Object(c.a)(h,2),E=g[0],x=g[1],y=function(){var e=Object(l.a)(i.a.mark((function e(){var t,r,c,o,l,m,s,u=arguments;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t=u.length>0&&void 0!==u[0]?u[0]:{},r=t.silent,c=void 0===r||r,o=t.retries,l=void 0===o?4:o,c||b(!0),e.prev=2,d(null),e.next=6,a.getUsers({input:{teamDid:n.did}});case 6:m=e.sent,s=m.users,b(!1),x(s),e.next=15;break;case 12:e.prev=12,e.t0=e.catch(2),l>0?setTimeout((function(){return y({silent:c,retries:l-1})}),1e3):(b(!1),d(e.t0));case 15:case"end":return e.stop()}}),e,null,[[2,12]])})));return function(){return e.apply(this,arguments)}}();Object(m.useEffect)((function(){y({silent:!1})}),[]),Object(q.c)("user.added",(function(e){e.teamDid===n.did&&y()})),Object(q.c)("user.removed",(function(e){var t=e.teamDid,a=e.user.did;t===n.did&&x((function(e){return e.filter((function(e){return e.did!==a}))}))})),Object(q.c)("user.updated",(function(e){e.teamDid===n.did&&y()}));var j={loading:v,error:u,users:E,refresh:y};return s.a.createElement(H,{value:{users:j}},t)}var Q,R,X=n(67),Z=n(1236),$=function(){var e=Object(l.a)(i.a.mark((function e(t){var n;return i.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,t.getNodeEnv();case 2:return n=e.sent,e.abrupt("return",Object.assign({},n.info||{}));case 4:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}(),ee=Object(d.a)((function(e){return{root:{height:20},colorPrimary:{backgroundColor:e.palette.grey["light"===e.palette.type?200:700]},bar:{backgroundColor:"#1a90ff"}}}))(C.a);function te(e){var t=e.value;return s.a.createElement(S.a,{display:"flex",alignItems:"center"},s.a.createElement(S.a,{width:"100%",style:{overflow:"hidden"},mr:1},s.a.createElement(ee,Object.assign({variant:"determinate"},e))),s.a.createElement(S.a,{minWidth:35},s.a.createElement(_.a,{variant:"body2",color:"textSecondary"},"".concat(Math.round(t),"%"))))}var ne=function(e){var t=e.className,n=e.title,a=e.titleUnit;return s.a.createElement(ce,{className:t},s.a.createElement("div",{className:"item-content"},s.a.createElement("div",null,n),s.a.createElement("div",null,a)))};function ae(){var e=Object(z.c)(),t=Object(B.b)().data,n=Object(m.useContext)(G).users.users,a=x()((function(){return $(e.api)})),o=Object(m.useContext)(J.LocaleContext),i=o.t,l=o.locale,u=Object(m.useState)({}),d=Object(c.a)(u,2),p=d[0],h=d[1],E=Object(f.a)(),y=Object(Z.b)(+new Date-e.info.uptime,(function(e){var t={compact:!0,verbose:!0,locale:Object(X.i)(l)};return g()(e,t)}));Object(q.c)("system.info",(function(e){return h(e)}));var k=null;if(e.loading)k=s.a.createElement(I.a,null);else{var w=[{name:i("dashboard.nodeDid"),value:s.a.createElement(F.a,null,e.info.did)},{name:i("dashboard.ownerDid"),value:s.a.createElement(F.a,null,e.info.nodeOwner.did)}],C=[];e.info.launcherInfo&&(C=[{name:i("common.did"),value:s.a.createElement(F.a,null,e.info.launcherInfo.did)},{name:i("common.type"),value:e.info.launcherInfo.type},{name:i("launcherInfo.cloudService"),value:e.info.launcherInfo.cloudService},{name:i("launcherInfo.adminUrl"),value:s.a.createElement(N.a,{target:"_blank",href:e.info.launcherInfo.url},e.info.launcherInfo.url)}]);var S=function(e,t){return"-"===e?e:t&&"-"!==t?s.a.createElement(_.a,{component:"ul"},s.a.createElement("li",{className:"ip-item"},s.a.createElement(D.a,null,"IPV4"),s.a.createElement(Y.a,null,e)),s.a.createElement("li",{className:"ip-item"},s.a.createElement(D.a,null,"IPV6"),s.a.createElement(Y.a,null,t))):s.a.createElement(_.a,{className:"ip-item"},s.a.createElement(D.a,null,"IPV4"),s.a.createElement(Y.a,null,e))},U=a.value?[{name:"".concat(i("common.version")),value:e.info.version}].concat(Object(r.a)(function(){var e=[{name:"".concat(i("common.internalIp")),value:S(a.value.ip.internalV4,a.value.ip.internalV6)},{name:"".concat(i("common.externalIp")),value:S(a.value.ip.externalV4,a.value.ip.externalV6)}];return a.value.docker?[]:e}()),[{name:"".concat(i("common.os")),value:a.value.os},a.value.docker?{name:"".concat(i("common.docker")),value:s.a.createElement(D.a,{type:"success"},"Yes")}:null,a.value.gitpod?{name:"".concat(i("common.gitpod")),value:s.a.createElement(D.a,{type:"success"},"Yes")}:null]).filter(Boolean):[];Array.isArray(j()(a,"value.blockletEngines",null))&&a.value.blockletEngines.filter((function(e){return e.visible&&e.available})).forEach((function(e){U.push({name:e.displayName,value:s.a.createElement(D.a,{type:"success"},"".concat(e.version)||"N/A")})}));var T=n.length,A=n.filter((function(e){return e.approved})).length,L=T;A&&(L+="<small><strong>".concat(O()(i("common.approved"))," ").concat(A,"</strong></small>"));var M=0,H=0;t&&(M=t.length,H=t.filter((function(e){return"running"===e.status})).length);var K=M;H&&(K+="<small>".concat(i("common.running")," ").concat(H,"</small>"));var Q=[{name:i("common.blocklets"),value:K,icon:"blocklets"},{name:i("common.members"),value:L,icon:"member"},{name:i("common.uptime"),value:y,icon:"time"},{name:i("common.created"),value:Object(b.a)(new Date(e.info.createdAt).getTime(),Object(X.i)(l)),icon:"time"}],R=[];a.value&&a.value.disk&&(R=[{name:i("common.blockletsStorage"),value:v()(a.value.disk.blocklets||0).toUpperCase(),icon:"storage"},{name:i("common.dataStorage"),value:v()(a.value.disk.data||0).toUpperCase(),icon:"storage"},{name:i("common.logStorage"),value:v()(a.value.disk.log||0).toUpperCase(),icon:"storage"},{name:i("common.cacheStorage"),value:v()(a.value.disk.cache||0).toUpperCase(),icon:"storage"},{name:i("common.coreStorage"),value:v()(a.value.disk.app||0).toUpperCase(),icon:"storage"}]);var ee=[{id:1,className:"used",title:i("system.used"),titleUnit:p.mem?v()(p.mem.used):""},{id:2,className:"free",title:i("system.free"),titleUnit:p.mem?v()(p.mem.free):""},{id:3,className:"total",title:i("system.total"),titleUnit:p.mem?v()(p.mem.total):""}],ae=j()(p,"osInfo.platform",""),ce=[{id:1,className:"used",title:i("system.used"),titleUnit:p.disk?Object(X.f)(p.disk.used,ae):""},{id:2,className:"free",title:i("system.free"),titleUnit:p.disk?Object(X.f)(p.disk.total-p.disk.used,ae):""},{id:3,className:"total",title:i("system.total"),titleUnit:p.disk?Object(X.f)(p.disk.total,ae):""}],oe=0,ie=0,le=0;try{oe=p.cpu.currentLoad}catch(me){oe=0}try{ie=p.mem.used/p.mem.total*100}catch(me){ie=0}try{le=p.disk.used/p.disk.total*100}catch(me){le=0}k=s.a.createElement(s.a.Fragment,null,s.a.createElement("div",{className:"section"},s.a.createElement(_.a,{className:"section__header",component:"h2",variant:"h4",color:"textPrimary"},i("common.overview")),s.a.createElement(P.a,{className:"page-metrics",container:!0,spacing:5},Q.map((function(t){return s.a.createElement(P.a,{item:!0,key:t.name,lg:3,md:4,sm:6,xs:12},s.a.createElement(W.a,Object.assign({},t,{prefix:e.prefix})))})))),s.a.createElement("div",{className:"section"},s.a.createElement(_.a,{className:"section__header",component:"h2",variant:"h4",color:"textPrimary"},i("common.storage")),s.a.createElement(P.a,{className:"page-metrics",container:!0,spacing:5},R.map((function(t){return s.a.createElement(P.a,{item:!0,key:t.name,lg:3,md:4,sm:6,xs:12},s.a.createElement(W.a,Object.assign({},t,{prefix:e.prefix})))})))),s.a.createElement("div",{className:"section"},s.a.createElement(_.a,{className:"section__header",component:"h2",variant:"h4",color:"textPrimary"},i("common.monitor")),s.a.createElement(P.a,{className:"page-metrics",container:!0,spacing:5},s.a.createElement(P.a,{item:!0,key:"cpu",lg:6,md:12,sm:12,xs:12},s.a.createElement(_.a,{className:"section__header",component:"h3",variant:"h5",color:"textPrimary"},i("common.cpu")),p.cpu?s.a.createElement(s.a.Fragment,null,s.a.createElement(te,{value:oe}),s.a.createElement("div",{className:"section-item-desc"},i("system.cores"),": ",p.cpu.cores)):null),s.a.createElement(P.a,{item:!0,key:"memory",lg:6,md:12,sm:12,xs:12},s.a.createElement(_.a,{className:"section__header",component:"h3",variant:"h5",color:"textPrimary"},i("common.memory")),s.a.createElement(te,{value:ie}),s.a.createElement("div",{className:"section-item-desc"},ee.map((function(e){return s.a.createElement(ne,Object.assign({key:e.id},e))})))),s.a.createElement(P.a,{item:!0,key:"disk",lg:6,md:12,sm:12,xs:12},s.a.createElement(_.a,{className:"section__header",component:"h3",variant:"h5",color:"textPrimary"},i("common.disk")),s.a.createElement(te,{value:le}),s.a.createElement("div",{className:"section-item-desc"},ce.map((function(e){return s.a.createElement(ne,Object.assign({key:e.id},e))})))))),s.a.createElement("div",{className:"section"},s.a.createElement(_.a,{className:"section__header",component:"h2",variant:"h4",color:"textPrimary"},i("common.meta")),s.a.createElement(P.a,{className:"page-metrics",container:!0,spacing:5},s.a.createElement(P.a,{item:!0,key:"address",lg:6,md:12,sm:12,xs:12},s.a.createElement(_.a,{className:"section__header",component:"h3",variant:"h5",color:"textPrimary"},i("common.dAddress")),w.map((function(e){return s.a.createElement(V.a,{key:e.name,nameWidth:150,name:e.name},e.value)})),C.length>0&&s.a.createElement("div",{style:{marginTop:"".concat(E.spacing(8),"px")}},s.a.createElement(_.a,{className:"section__header",component:"h3",variant:"h5",color:"textPrimary"},i("common.launcherInfo")),C.map((function(e){return s.a.createElement(V.a,{key:e.name,nameWidth:150,name:e.name},e.value)})))),s.a.createElement(P.a,{item:!0,key:"environment",lg:6,md:12,sm:12,xs:12},s.a.createElement(_.a,{className:"section__header",component:"h3",variant:"h5",color:"textPrimary"},i("common.env")),U.map((function(e){return s.a.createElement(V.a,{valueComponent:"div",key:e.name,nameWidth:150,name:e.name},e.value)}))))))}return s.a.createElement(re,null,k)}var re=u.default.main(Q||(Q=Object(a.a)(["\n .page-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n }\n\n .page-content {\n margin-top: 16px;\n }\n\n .section {\n display: flex;\n flex-direction: column;\n margin-bottom: 64px;\n\n .section__header {\n font-weight: bold;\n margin-bottom: 24px;\n }\n\n .info-row__name {\n text-transform: uppercase;\n font-size: 0.9em;\n }\n\n .info-row__value .ip-item {\n display: flex;\n align-items: center;\n }\n\n .info-row__value .ip-item:not(:first-child) {\n margin-top: 5px;\n }\n }\n\n .section-flex {\n flex-direction: row;\n }\n\n .section-item {\n flex: 1;\n }\n\n .section-item-desc {\n display: flex;\n margin-top: 15px;\n }\n\n .used::before {\n content: ' ';\n border: 0;\n background-color: #1a90ff;\n }\n\n .free::before {\n content: ' ';\n border: 0;\n background-color: #eeeeee;\n }\n\n @media (max-width: ","px) {\n .section-flex {\n flex-direction: column;\n }\n }\n"])),(function(e){return e.theme.breakpoints.values.md})),ce=u.default.div(R||(R=Object(a.a)(["\n flex: 1;\n display: flex;\n\n &::before {\n content: '';\n display: block;\n width: 12px;\n height: 12px;\n border: 1px solid #999;\n border-radius: 2px;\n margin-top: 3px;\n margin-right: 10px;\n }\n"])));function oe(){return s.a.createElement(K,null,s.a.createElement(ae,null))}},966:function(e,t,n){"use strict";n.d(t,"a",(function(){return s}));var a=n(119),r=n(0),c=n.n(r),o=n(1040),i=n.n(o),l=n(24),m=["children"];function s(e){var t=e.children,n=Object(a.a)(e,m),o=Object(r.useContext)(l.LocaleContext).t;return c.a.createElement(i.a,Object.assign({tip:o("common.copyTip"),copiedTip:o("common.copiedTip")},n),t)}}}]);
|
|
2
|
-
//# sourceMappingURL=24.cfc9ccb4.chunk.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["components/uptime.js","contexts/user.js","pages/dashboard/index.js","components/click-to-copy.js"],"names":["times","useUpTime","initialTime","format","useState","elapsedTime","setElapsedTime","setDelayTimes","time","delay","setDelay","useEffect","timer","setInterval","delayTime","clearInterval","UpTime","rest","useFormat","defaultProps","t","UserContext","React","createContext","Provider","Consumer","UserProvider","children","nodeInfo","useNodeContext","info","client","getClient","error","setError","loading","setLoading","users","setUsers","getUsers","a","silent","retries","input","teamDid","did","data","setTimeout","useSubscription","user","list","filter","d","value","refresh","getExtraInfo","api","getNodeEnv","res","Object","assign","BorderLinearProgress","withStyles","theme","root","height","colorPrimary","backgroundColor","palette","grey","type","bar","LinearProgress","LinearProgressWithLabel","props","Box","display","alignItems","width","style","overflow","mr","variant","minWidth","Typography","color","Math","round","MemoryItem","className","title","titleUnit","Item","Dashboard","node","blocklets","useBlockletContext","useContext","extra","useAsyncRetry","LocaleContext","locale","system","setSystem","useTheme","uptime","Date","x","options","compact","verbose","formatLocale","prettyMs","content","didRows","name","nodeOwner","launcherInfoRows","launcherInfo","cloudService","Link","target","href","url","renderIp","v4","v6","component","envRows","version","ipRows","ip","internalV4","internalV6","externalV4","externalV6","docker","isDockerRow","os","gitpod","Boolean","Array","isArray","get","blockletEngines","e","visible","available","forEach","push","displayName","totalMemberCount","length","approvedMemberCount","approved","memberStats","lowerCase","totalBlocklets","runningBlocklets","status","blockletStats","metrics","icon","createdAt","getTime","storageMetrics","disk","filesize","toUpperCase","log","cache","app","memoryList","id","mem","used","free","total","serverPlatform","diskList","formatDiskSize","cpu","memory","currentLoad","Grid","container","spacing","map","item","key","lg","md","sm","xs","prefix","cores","row","nameWidth","marginTop","valueComponent","Main","styled","main","breakpoints","values","div","Wrapper","ClickToCopy","tip","copiedTip"],"mappings":"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","file":"static/js/24.cfc9ccb4.chunk.js","sourcesContent":["import React, { useState, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport Typography from '@material-ui/core/Typography';\n\nconst times = {\n oneSecond: 1,\n oneMin: 1 * 60,\n oneHour: 1 * 60 * 60,\n oneDay: 24 * 60 * 60,\n};\n\nexport const useUpTime = (initialTime, format) => {\n const [elapsedTime, setElapsedTime] = useState(0);\n\n const setDelayTimes = time => {\n if (time >= times.oneDay) {\n return times.oneDay;\n }\n\n if (time >= times.oneHour) {\n return times.oneHour;\n }\n\n if (time >= times.oneMin) {\n return times.oneMin;\n }\n\n return times.oneSecond;\n };\n\n const [delay, setDelay] = useState(setDelayTimes(initialTime / 1000));\n\n useEffect(() => {\n const timer = setInterval(() => {\n setElapsedTime(elapsedTime + delay);\n\n const delayTime = setDelayTimes(initialTime / 1000 + elapsedTime + delay);\n if (delay !== delayTime) {\n setDelay(delayTime);\n }\n }, delay * 1000);\n\n return () => clearInterval(timer);\n // eslint-disable-next-line\n }, [delay, elapsedTime]);\n\n useEffect(() => {\n setElapsedTime(0);\n setDelay(setDelayTimes(initialTime / 1000));\n }, [initialTime]); // eslint-disable-line\n\n return format(initialTime + elapsedTime * 1000);\n};\n\nexport default function UpTime({ initialTime, format, ...rest }) {\n const useFormat = useUpTime(initialTime, format);\n\n return <Typography {...rest}>{useFormat}</Typography>;\n}\n\nUpTime.propTypes = {\n initialTime: PropTypes.number.isRequired,\n format: PropTypes.func,\n};\n\nUpTime.defaultProps = {\n format: t => t,\n};\n","import React, { useState, useContext, useEffect } from 'react';\n\nimport getClient from '../libs/node';\nimport { useNodeContext } from './node';\nimport { useSubscription } from '../libs/ws';\n\nconst UserContext = React.createContext({});\nconst { Provider, Consumer } = UserContext;\n\n// eslint-disable-next-line react/prop-types\nfunction UserProvider({ children }) {\n const { info: nodeInfo } = useNodeContext();\n const client = getClient();\n const [error, setError] = useState(null);\n const [loading, setLoading] = useState(false);\n\n const [users, setUsers] = useState([]);\n\n const MAX_RETRY = 4;\n\n const getUsers = async ({ silent = true, retries = MAX_RETRY } = {}) => {\n if (!silent) {\n setLoading(true);\n }\n try {\n setError(null);\n const { users: data } = await client.getUsers({ input: { teamDid: nodeInfo.did } });\n setLoading(false);\n setUsers(data);\n } catch (err) {\n if (retries > 0) {\n setTimeout(() => getUsers({ silent, retries: retries - 1 }), 1000);\n } else {\n setLoading(false);\n setError(err);\n }\n }\n };\n\n useEffect(() => {\n getUsers({ silent: false });\n }, []); // eslint-disable-line\n\n useSubscription('user.added', ({ teamDid }) => {\n if (teamDid === nodeInfo.did) {\n getUsers();\n }\n });\n useSubscription('user.removed', ({ teamDid, user: { did } }) => {\n if (teamDid === nodeInfo.did) {\n setUsers(list => list.filter(d => d.did !== did));\n }\n });\n useSubscription('user.updated', ({ teamDid }) => {\n if (teamDid === nodeInfo.did) {\n getUsers();\n }\n });\n\n const value = {\n loading,\n error,\n users,\n refresh: getUsers,\n };\n\n return <Provider value={{ users: value }}>{children}</Provider>;\n}\n\nfunction useUserContext() {\n const { users } = useContext(UserContext);\n return users;\n}\n\nexport { UserContext, UserProvider, Consumer as UserConsumer, useUserContext };\n","/* eslint-disable react/jsx-one-expression-per-line */\nimport React, { useContext, useState } from 'react';\nimport styled from 'styled-components';\nimport { withStyles, useTheme } from '@material-ui/core/styles';\nimport filesize from 'filesize';\nimport { format } from 'timeago.js';\nimport prettyMs from 'pretty-ms-i18n';\nimport useAsyncRetry from 'react-use/lib/useAsyncRetry';\nimport get from 'lodash/get';\nimport lowerCase from 'lodash/lowerCase';\nimport PropTypes from 'prop-types';\nimport Link from '@material-ui/core/Link';\n\nimport Typography from '@material-ui/core/Typography';\nimport Spinner from '@arcblock/ux/lib/Spinner';\nimport Grid from '@material-ui/core/Grid';\nimport LinearProgress from '@material-ui/core/LinearProgress';\nimport Box from '@material-ui/core/Box';\n\nimport Tag from '@arcblock/ux/lib/Tag';\nimport InfoRow from '@arcblock/ux/lib/InfoRow';\nimport Metric from '@arcblock/ux/lib/Metric';\nimport DidAddress from '@arcblock/did-connect/lib/Address';\nimport { LocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport ClickToCopy from '../../components/click-to-copy';\n\nimport { useNodeContext } from '../../contexts/node';\nimport { useBlockletContext } from '../../contexts/blocklets';\nimport { UserProvider, useUserContext } from '../../contexts/user';\nimport { formatLocale, formatDiskSize } from '../../libs/util';\nimport { useSubscription } from '../../libs/ws';\nimport { useUpTime } from '../../components/uptime';\n\nconst getExtraInfo = async api => {\n const res = await api.getNodeEnv();\n return Object.assign({}, res.info || {});\n};\n\nconst BorderLinearProgress = withStyles(theme => ({\n root: {\n height: 20,\n },\n colorPrimary: {\n backgroundColor: theme.palette.grey[theme.palette.type === 'light' ? 200 : 700],\n },\n bar: {\n backgroundColor: '#1a90ff',\n },\n}))(LinearProgress);\n\nfunction LinearProgressWithLabel(props) {\n const { value } = props;\n return (\n <Box display=\"flex\" alignItems=\"center\">\n <Box width=\"100%\" style={{ overflow: 'hidden' }} mr={1}>\n <BorderLinearProgress variant=\"determinate\" {...props} />\n </Box>\n <Box minWidth={35}>\n <Typography variant=\"body2\" color=\"textSecondary\">{`${Math.round(value)}%`}</Typography>\n </Box>\n </Box>\n );\n}\n\nLinearProgressWithLabel.propTypes = {\n value: PropTypes.number.isRequired,\n};\n\nconst MemoryItem = ({ className, title, titleUnit }) => (\n <Item className={className}>\n <div className=\"item-content\">\n <div>{title}</div>\n <div>{titleUnit}</div>\n </div>\n </Item>\n);\n\nMemoryItem.propTypes = {\n className: PropTypes.string.isRequired,\n title: PropTypes.string.isRequired,\n titleUnit: PropTypes.string.isRequired,\n};\n\nfunction Dashboard() {\n const node = useNodeContext();\n const { data: blocklets } = useBlockletContext();\n const { users } = useUserContext();\n const extra = useAsyncRetry(() => getExtraInfo(node.api));\n const { t, locale } = useContext(LocaleContext);\n const [system, setSystem] = useState({});\n const theme = useTheme();\n const uptime = useUpTime(+new Date() - node.info.uptime, x => {\n const options = { compact: true, verbose: true, locale: formatLocale(locale) };\n return prettyMs(x, options);\n });\n\n useSubscription('system.info', res => setSystem(res));\n\n let content = null;\n if (node.loading) {\n content = <Spinner />;\n } else {\n const didRows = [\n { name: t('dashboard.nodeDid'), value: <DidAddress>{node.info.did}</DidAddress> },\n { name: t('dashboard.ownerDid'), value: <DidAddress>{node.info.nodeOwner.did}</DidAddress> },\n ];\n\n let launcherInfoRows = [];\n if (node.info.launcherInfo) {\n launcherInfoRows = [\n { name: t('common.did'), value: <DidAddress>{node.info.launcherInfo.did}</DidAddress> },\n { name: t('common.type'), value: node.info.launcherInfo.type },\n { name: t('launcherInfo.cloudService'), value: node.info.launcherInfo.cloudService },\n {\n name: t('launcherInfo.adminUrl'),\n value: (\n <Link target=\"_blank\" href={node.info.launcherInfo.url}>\n {node.info.launcherInfo.url}\n </Link>\n ),\n },\n ];\n }\n\n const renderIp = (v4, v6) => {\n if (v4 === '-') {\n return v4;\n }\n\n if (!v6 || v6 === '-') {\n return (\n <Typography className=\"ip-item\">\n <Tag>IPV4</Tag>\n <ClickToCopy>{v4}</ClickToCopy>\n </Typography>\n );\n }\n\n return (\n <Typography component=\"ul\">\n <li className=\"ip-item\">\n <Tag>IPV4</Tag>\n <ClickToCopy>{v4}</ClickToCopy>\n </li>\n <li className=\"ip-item\">\n <Tag>IPV6</Tag>\n <ClickToCopy>{v6}</ClickToCopy>\n </li>\n </Typography>\n );\n };\n\n const isDockerRow = () => {\n const ipRows = [\n {\n name: `${t('common.internalIp')}`,\n value: renderIp(extra.value.ip.internalV4, extra.value.ip.internalV6),\n },\n {\n name: `${t('common.externalIp')}`,\n value: renderIp(extra.value.ip.externalV4, extra.value.ip.externalV6),\n },\n ];\n return extra.value.docker ? [] : ipRows;\n };\n\n // prettier-ignore\n const envRows = extra.value\n ? [\n { name: `${t('common.version')}`, value: node.info.version },\n ...isDockerRow(),\n { name: `${t('common.os')}`, value: extra.value.os },\n extra.value.docker ? { name: `${t('common.docker')}`, value: <Tag type=\"success\">Yes</Tag> } : null,\n extra.value.gitpod ? { name: `${t('common.gitpod')}`, value: <Tag type=\"success\">Yes</Tag> } : null,\n ].filter(Boolean)\n : [];\n\n if (Array.isArray(get(extra, 'value.blockletEngines', null))) {\n extra.value.blockletEngines\n .filter(e => e.visible && e.available)\n .forEach(e => {\n envRows.push({\n name: e.displayName,\n value: <Tag type=\"success\">{`${e.version}` || 'N/A'}</Tag>,\n });\n });\n }\n\n const totalMemberCount = users.length;\n const approvedMemberCount = users.filter(x => x.approved).length;\n let memberStats = totalMemberCount;\n if (approvedMemberCount) {\n memberStats += `<small><strong>${lowerCase(t('common.approved'))} ${approvedMemberCount}</strong></small>`;\n }\n\n let totalBlocklets = 0;\n let runningBlocklets = 0;\n if (blocklets) {\n totalBlocklets = blocklets.length;\n runningBlocklets = blocklets.filter(x => x.status === 'running').length;\n }\n let blockletStats = totalBlocklets;\n if (runningBlocklets) {\n blockletStats += `<small>${t('common.running')} ${runningBlocklets}</small>`;\n }\n\n const metrics = [\n {\n name: t('common.blocklets'),\n value: blockletStats,\n icon: 'blocklets',\n },\n {\n name: t('common.members'),\n value: memberStats,\n icon: 'member',\n },\n {\n name: t('common.uptime'),\n value: uptime,\n icon: 'time',\n },\n {\n name: t('common.created'),\n value: format(new Date(node.info.createdAt).getTime(), formatLocale(locale)),\n icon: 'time',\n },\n ];\n\n let storageMetrics = [];\n if (extra.value && extra.value.disk) {\n storageMetrics = [\n {\n name: t('common.blockletsStorage'),\n value: filesize(extra.value.disk.blocklets || 0).toUpperCase(),\n icon: 'storage',\n },\n {\n name: t('common.dataStorage'),\n value: filesize(extra.value.disk.data || 0).toUpperCase(),\n icon: 'storage',\n },\n {\n name: t('common.logStorage'),\n value: filesize(extra.value.disk.log || 0).toUpperCase(),\n icon: 'storage',\n },\n {\n name: t('common.cacheStorage'),\n value: filesize(extra.value.disk.cache || 0).toUpperCase(),\n icon: 'storage',\n },\n {\n name: t('common.coreStorage'),\n value: filesize(extra.value.disk.app || 0).toUpperCase(),\n icon: 'storage',\n },\n ];\n }\n\n const memoryList = [\n {\n id: 1,\n className: 'used',\n title: t('system.used'),\n titleUnit: system.mem ? filesize(system.mem.used) : '',\n },\n {\n id: 2,\n className: 'free',\n title: t('system.free'),\n titleUnit: system.mem ? filesize(system.mem.free) : '',\n },\n {\n id: 3,\n className: 'total',\n title: t('system.total'),\n titleUnit: system.mem ? filesize(system.mem.total) : '',\n },\n ];\n\n const serverPlatform = get(system, 'osInfo.platform', '');\n const diskList = [\n {\n id: 1,\n className: 'used',\n title: t('system.used'),\n titleUnit: system.disk ? formatDiskSize(system.disk.used, serverPlatform) : '',\n },\n {\n id: 2,\n className: 'free',\n title: t('system.free'),\n titleUnit: system.disk ? formatDiskSize(system.disk.total - system.disk.used, serverPlatform) : '',\n },\n {\n id: 3,\n className: 'total',\n title: t('system.total'),\n titleUnit: system.disk ? formatDiskSize(system.disk.total, serverPlatform) : '',\n },\n ];\n\n let cpu = 0;\n let memory = 0;\n let disk = 0;\n try {\n cpu = system.cpu.currentLoad;\n } catch (error) {\n cpu = 0;\n }\n\n try {\n memory = (system.mem.used / system.mem.total) * 100;\n } catch (error) {\n memory = 0;\n }\n\n try {\n disk = (system.disk.used / system.disk.total) * 100;\n } catch (error) {\n disk = 0;\n }\n\n content = (\n <>\n <div className=\"section\">\n <Typography className=\"section__header\" component=\"h2\" variant=\"h4\" color=\"textPrimary\">\n {t('common.overview')}\n </Typography>\n <Grid className=\"page-metrics\" container spacing={5}>\n {metrics.map(x => (\n <Grid item key={x.name} lg={3} md={4} sm={6} xs={12}>\n <Metric {...x} prefix={node.prefix} />\n </Grid>\n ))}\n </Grid>\n </div>\n <div className=\"section\">\n <Typography className=\"section__header\" component=\"h2\" variant=\"h4\" color=\"textPrimary\">\n {t('common.storage')}\n </Typography>\n <Grid className=\"page-metrics\" container spacing={5}>\n {storageMetrics.map(x => (\n <Grid item key={x.name} lg={3} md={4} sm={6} xs={12}>\n <Metric {...x} prefix={node.prefix} />\n </Grid>\n ))}\n </Grid>\n </div>\n <div className=\"section\">\n <Typography className=\"section__header\" component=\"h2\" variant=\"h4\" color=\"textPrimary\">\n {t('common.monitor')}\n </Typography>\n <Grid className=\"page-metrics\" container spacing={5}>\n <Grid item key=\"cpu\" lg={6} md={12} sm={12} xs={12}>\n <Typography className=\"section__header\" component=\"h3\" variant=\"h5\" color=\"textPrimary\">\n {t('common.cpu')}\n </Typography>\n {system.cpu ? (\n <>\n <LinearProgressWithLabel value={cpu} />\n <div className=\"section-item-desc\">\n {t('system.cores')}: {system.cpu.cores}\n </div>\n </>\n ) : null}\n </Grid>\n <Grid item key=\"memory\" lg={6} md={12} sm={12} xs={12}>\n <Typography className=\"section__header\" component=\"h3\" variant=\"h5\" color=\"textPrimary\">\n {t('common.memory')}\n </Typography>\n <LinearProgressWithLabel value={memory} />\n <div className=\"section-item-desc\">\n {memoryList.map(x => (\n <MemoryItem key={x.id} {...x} />\n ))}\n </div>\n </Grid>\n <Grid item key=\"disk\" lg={6} md={12} sm={12} xs={12}>\n <Typography className=\"section__header\" component=\"h3\" variant=\"h5\" color=\"textPrimary\">\n {t('common.disk')}\n </Typography>\n <LinearProgressWithLabel value={disk} />\n <div className=\"section-item-desc\">\n {diskList.map(x => (\n <MemoryItem key={x.id} {...x} />\n ))}\n </div>\n </Grid>\n </Grid>\n </div>\n <div className=\"section\">\n <Typography className=\"section__header\" component=\"h2\" variant=\"h4\" color=\"textPrimary\">\n {t('common.meta')}\n </Typography>\n <Grid className=\"page-metrics\" container spacing={5}>\n <Grid item key=\"address\" lg={6} md={12} sm={12} xs={12}>\n <Typography className=\"section__header\" component=\"h3\" variant=\"h5\" color=\"textPrimary\">\n {t('common.dAddress')}\n </Typography>\n {didRows.map(row => (\n <InfoRow key={row.name} nameWidth={150} name={row.name}>\n {row.value}\n </InfoRow>\n ))}\n {launcherInfoRows.length > 0 && (\n <div style={{ marginTop: `${theme.spacing(8)}px` }}>\n <Typography className=\"section__header\" component=\"h3\" variant=\"h5\" color=\"textPrimary\">\n {t('common.launcherInfo')}\n </Typography>\n {launcherInfoRows.map(row => (\n <InfoRow key={row.name} nameWidth={150} name={row.name}>\n {row.value}\n </InfoRow>\n ))}\n </div>\n )}\n </Grid>\n <Grid item key=\"environment\" lg={6} md={12} sm={12} xs={12}>\n <Typography className=\"section__header\" component=\"h3\" variant=\"h5\" color=\"textPrimary\">\n {t('common.env')}\n </Typography>\n {envRows.map(row => (\n <InfoRow valueComponent=\"div\" key={row.name} nameWidth={150} name={row.name}>\n {row.value}\n </InfoRow>\n ))}\n </Grid>\n </Grid>\n </div>\n </>\n );\n }\n\n return <Main>{content}</Main>;\n}\n\nconst Main = styled.main`\n .page-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n }\n\n .page-content {\n margin-top: 16px;\n }\n\n .section {\n display: flex;\n flex-direction: column;\n margin-bottom: 64px;\n\n .section__header {\n font-weight: bold;\n margin-bottom: 24px;\n }\n\n .info-row__name {\n text-transform: uppercase;\n font-size: 0.9em;\n }\n\n .info-row__value .ip-item {\n display: flex;\n align-items: center;\n }\n\n .info-row__value .ip-item:not(:first-child) {\n margin-top: 5px;\n }\n }\n\n .section-flex {\n flex-direction: row;\n }\n\n .section-item {\n flex: 1;\n }\n\n .section-item-desc {\n display: flex;\n margin-top: 15px;\n }\n\n .used::before {\n content: ' ';\n border: 0;\n background-color: #1a90ff;\n }\n\n .free::before {\n content: ' ';\n border: 0;\n background-color: #eeeeee;\n }\n\n @media (max-width: ${props => props.theme.breakpoints.values.md}px) {\n .section-flex {\n flex-direction: column;\n }\n }\n`;\n\nconst Item = styled.div`\n flex: 1;\n display: flex;\n\n &::before {\n content: '';\n display: block;\n width: 12px;\n height: 12px;\n border: 1px solid #999;\n border-radius: 2px;\n margin-top: 3px;\n margin-right: 10px;\n }\n`;\n\nexport default function Wrapper() {\n return (\n <UserProvider>\n <Dashboard />\n </UserProvider>\n );\n}\n","import React, { useContext } from 'react';\nimport PropTypes from 'prop-types';\nimport Copy from '@arcblock/ux/lib/ClickToCopy';\nimport { LocaleContext } from '@arcblock/ux/lib/Locale/context';\n\nexport default function ClickToCopy({ children, ...rest }) {\n const { t } = useContext(LocaleContext);\n return (\n <Copy tip={t('common.copyTip')} copiedTip={t('common.copiedTip')} {...rest}>\n {children}\n </Copy>\n );\n}\n\nClickToCopy.propTypes = {\n children: PropTypes.any.isRequired,\n};\n"],"sourceRoot":""}
|