{"version":3,"sources":["lib/utils.ts","components/RenderData.tsx","App.tsx","index.tsx"],"names":["average","arr","reduce","p","c","length","RenderData","data","className","style","width","map","item","i","DataOra","format","Ping","Download","Upload","toFixed","App","useState","setData","useEffect","axios","get","process","then","res","response","addToResponse","isItemValid","push","tempItem","resetTempItem","undefined","match","forEach","row","startsWith","split","moment","sort","a","b","processRows","role","ReactDOM","render","StrictMode","document","getElementById"],"mappings":"kOAKaA,G,MAAU,SAACC,GAAD,OAAmBA,EAAIC,QAAO,SAACC,EAAGC,GAAJ,OAAUD,EAAIC,IAAG,GAAKH,EAAII,S,OCyChEC,EAzCoC,SAAC,GAAc,IAAZC,EAAW,EAAXA,KACpD,OACE,qCACE,qBAAKC,UAAU,cAAf,SACE,oBAAG,cAAa,cAAhB,iBAAgCD,QAAhC,IAAgCA,OAAhC,EAAgCA,EAAMF,OAAtC,oBAGF,wBAAOI,MAAO,CAAEC,MAAO,QAAvB,UACE,gCACE,+BACE,sCACA,sCACA,0CACA,6CAGJ,uCACGH,QADH,IACGA,OADH,EACGA,EAAMI,KAAI,SAACC,EAAMC,GAAO,IAAD,EACtB,OACE,qBAAY,cAAa,eAAzB,UACE,uCAAKD,EAAKE,eAAV,aAAK,EAAcC,OAAO,oBAC1B,+BAAKH,EAAKI,KAAV,SACA,+BAAKJ,EAAKK,SAAV,aACA,+BAAKL,EAAKM,OAAV,eAJOL,QASf,gCACE,+BACE,sCACA,+BAAKN,GAAQP,EAAQO,EAAKI,KAAI,SAACC,GAAD,uBAAUA,EAAKI,YAAf,QAAuB,MAAIG,QAAQ,GAAjE,SACA,+BAAKZ,GAAQP,EAAQO,EAAKI,KAAI,SAACC,GAAD,uBAAUA,EAAKK,gBAAf,QAA2B,MAAIE,QAAQ,GAArE,aACA,+BAAKZ,GAAQP,EAAQO,EAAKI,KAAI,SAACC,GAAD,uBAAUA,EAAKM,cAAf,QAAyB,MAAIC,QAAQ,GAAnE,yBCdGC,MAjBf,WACE,MAAwBC,qBAAxB,mBAAOd,EAAP,KAAae,EAAb,KAOA,OANAC,qBAAU,WAAO,IAAD,EACdC,IAAMC,IAAN,UAAkBC,uDAAlB,EAAsD,KAAKC,MAAK,SAACC,GAC/DN,EFLqB,SAACf,GAAkB,IAAD,EACrCsB,EAAsB,GAGtBC,EAAgB,SAAClB,IADH,SAACA,GAAD,OAAmBA,EAAKI,MAAQJ,EAAKM,QAAUN,EAAKK,UAAYL,EAAKE,SAEvFiB,CAAYnB,IAASiB,EAASG,KAAKpB,GACnCqB,EAAWC,KAEPA,EAAgB,WACpB,MAAO,CACLlB,UAAMmB,EACNlB,cAAUkB,EACVjB,YAAQiB,EACRrB,aAASqB,IAITF,EAAWC,IAiBf,OAhBkB,UAAG3B,EAAK6B,MAAM,oBAAd,QAA8B,IACnCC,SAAQ,SAACC,GAChBA,EAAIC,WAAW,MACjBT,EAAcG,GACLK,EAAIC,WAAW,QACxBN,EAASjB,MAAQsB,EAAIE,MAAM,KAAK,GACvBF,EAAIC,WAAW,YACxBN,EAAShB,UAAYqB,EAAIE,MAAM,KAAK,GAC3BF,EAAIC,WAAW,UACxBN,EAASf,QAAUoB,EAAIE,MAAM,KAAK,GAElCP,EAASnB,QAAU2B,IAAOH,EAAK,kCAGnCR,EAAcG,GAEPJ,EAASa,MACd,SAACC,EAAGC,GAAJ,gBAAW,UAACA,EAAE9B,eAAH,QAAc2B,OAAU1B,OAAO,kBAAmB,UAAC4B,EAAE7B,eAAH,QAAc2B,OAAU1B,OAAO,mBE9BlF8B,CAAYjB,EAAIrB,YAEzB,IAGD,qBAAKC,UAAU,YAAf,SACE,sBAAMsC,KAAK,OAAOtC,UAAU,OAA5B,SACGD,EAAO,cAAC,EAAD,CAAYA,KAAMA,IAAW,kBCZ7CwC,IAASC,OACP,cAAC,IAAMC,WAAP,UACE,cAAC,EAAD,MAEFC,SAASC,eAAe,W","file":"static/js/main.45df8f37.chunk.js","sourcesContent":["import moment from 'moment'\nimport 'moment/locale/it'\n\nimport { StatRow } from 'interfaces/StatRow'\n\nexport const average = (arr: number[]) => arr.reduce((p, c) => p + c, 0) / arr.length\nexport const processRows = (data: string) => {\n const response: StatRow[] = []\n\n const isItemValid = (item: StatRow) => item.Ping && item.Upload && item.Download && item.DataOra\n const addToResponse = (item: StatRow) => {\n isItemValid(item) && response.push(item)\n tempItem = resetTempItem()\n }\n const resetTempItem = (): StatRow => {\n return {\n Ping: undefined,\n Download: undefined,\n Upload: undefined,\n DataOra: undefined,\n }\n }\n\n let tempItem = resetTempItem()\n const arrayOfLines = data.match(/[^\\r\\n]+/g) ?? []\n arrayOfLines.forEach((row) => {\n if (row.startsWith('--')) {\n addToResponse(tempItem)\n } else if (row.startsWith('Ping')) {\n tempItem.Ping = +row.split(' ')[1]\n } else if (row.startsWith('Download')) {\n tempItem.Download = +row.split(' ')[1]\n } else if (row.startsWith('Upload')) {\n tempItem.Upload = +row.split(' ')[1]\n } else {\n tempItem.DataOra = moment(row, 'ddd D MMM YYYY, HH.mm.ss, Z')\n }\n })\n addToResponse(tempItem)\n\n return response.sort(\n (a, b) => +(b.DataOra ?? moment()).format('YYYYMMDDHHmm') - +(a.DataOra ?? moment()).format('YYYYMMDDHHmm')\n )\n}\n","import React from 'react'\n\nimport { average } from 'lib/utils'\nimport { StatRow } from 'interfaces/StatRow'\n\nconst RenderData: React.VFC<{ data: StatRow[] }> = ({ data }) => {\n return (\n <>\n
\n

{data?.length} total count

\n
\n\n \n \n \n \n \n \n \n \n \n \n {data?.map((item, i) => {\n return (\n \n \n \n \n \n \n )\n })}\n \n \n \n \n \n \n \n \n \n
TimePingDownloadUpload
{item.DataOra?.format('DD/MM/YY HH:mm')}{item.Ping} ms{item.Download} Mbit/s{item.Upload} Mbit/s
Avg.{data && average(data.map((item) => item.Ping ?? 0)).toFixed(2)} ms{data && average(data.map((item) => item.Download ?? 0)).toFixed(2)} Mbit/s{data && average(data.map((item) => item.Upload ?? 0)).toFixed(2)} Mbit/s
\n \n )\n}\n\nexport default RenderData\n","import React, { useEffect, useState } from 'react'\nimport axios from 'axios'\n\nimport { processRows } from 'lib/utils'\nimport RenderData from 'components/RenderData'\nimport { StatRow } from 'interfaces/StatRow'\n\nfunction App() {\n const [data, setData] = useState()\n useEffect(() => {\n axios.get(process.env.REACT_APP_REMOTE_URL ?? '#').then((res) => {\n setData(processRows(res.data))\n })\n }, [])\n\n return (\n
\n
\n {data ? : 'Loading...'}\n
\n
\n )\n}\n\nexport default App\n","import React from 'react'\nimport ReactDOM from 'react-dom'\nimport 'bootstrap/dist/css/bootstrap.min.css'\n\nimport App from 'App'\n\nReactDOM.render(\n \n \n ,\n document.getElementById('root')\n)\n"],"sourceRoot":""}