From 17e41b25931c533e6480e4492c1ef8015c6f3b77 Mon Sep 17 00:00:00 2001 From: S Anand Date: Tue, 15 Oct 2024 13:54:00 +0800 Subject: [PATCH] ENH: Initial deployment without LLMs --- CNAME | 1 + LICENSE | 20 ++++ img/vapt-deployment.webp | Bin 0 -> 7870 bytes img/vapt-straive-logo.webp | Bin 0 -> 24448 bytes index.html | 96 +++++++++++++++ script.js | 238 +++++++++++++++++++++++++++++++++++++ vapt.xlsx | Bin 0 -> 18812 bytes 7 files changed, 355 insertions(+) create mode 100644 CNAME create mode 100644 LICENSE create mode 100644 img/vapt-deployment.webp create mode 100644 img/vapt-straive-logo.webp create mode 100644 index.html create mode 100644 script.js create mode 100644 vapt.xlsx diff --git a/CNAME b/CNAME new file mode 100644 index 0000000..6726541 --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +reportgen.straive.app diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..8c14fc2 --- /dev/null +++ b/LICENSE @@ -0,0 +1,20 @@ +Copyright 2024 Anand S + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/img/vapt-deployment.webp b/img/vapt-deployment.webp new file mode 100644 index 0000000000000000000000000000000000000000..ab26589033a1db6d8c33b07bcaa4d4382362787b GIT binary patch literal 7870 zcmYM3Wl$Wz(yn)L3GNo$CAhn5(BST}xI2UZ!3h%F-6goYI|NzWT^HAzbMC47x~l7a zW~QsVe@@k_CMPZ3^ceuqk`hV|0ssIA|1t&$Km-E*-H^4A000dUfGi+GED#9@ z04Ty;S`}UK=hn*>Y_)}{#T8v6OljhaU=I|rO{P4dvrGTq2-s~04w zALz_9dKk(y$(1U&h2?yjIWE0vf_=-^ieY|ifESz}bVH54E~?Cr-ff7jo~#-V1dhdR z6IHiIoyJ28w~z4Qh;07+aovCZnwnW(FFT_|hR=M2iLwC?d%UQToYeBi>fS{p0pHkU z(`yW!pnC7^d0}EW#0&9wQ}2rEO6rl?CnpmRsa4m&q>sE!BwD-PM#JBS{>ia)HPQr1 z+IvbG7nY9dZwZLx0IsxrUwb8{I#P34C~K{-d%647wtDc>6Q<4n)OcH0P-%RLfhPcg zvno11g1$Jer4LbQ>SK_U*KMolP*jFGoXg0rq?3k(fi>Jmn{)?`g+bt$Oe3V43iVWS z4eKa0%@_-Nbip7=+qxhvnz@V(l<3fs^R*62EA8l)RqedfeOYAv7Zv#gzi|X_OV-rH-fE7 z?)Ad5hr_*`BgFLU488@>$j#c6Z;eeiLWj81h)~Hgu6f}$T8X!=kgul$u^gSsBC?uH zG5tgK&rJ+!lTwAJtVwn3W)x89$}+h*3Z^O@T^V00(unY2$MqrMUrwn%;LGU%^f$l% zz?_t15?u7&3Ku1!-li$D&@Bu`V<|yQ>FyY}k-cST#$&i6QU{gLeg{!!zvEe&IuOh2 z8MjPgrt317JmSvubLl_!*epm5|NccIvlEG+^^j1rs?fAhNgyaZR}c|f070xP{(bL= zLQrF!! z>@Pz;?HBi!^4o+MtDy<@SNHL*Y1=8H!Tf_%(MpZO$-_>0=7$4Nz3NM=8GWew$(v9n zAGNNecKCi<#3IQmZSj`^{$ewXV$kbvgx*}(0=;40;R86xoE!`9cJJy^?Ho=%2ZPuG ziWM=UG95zWh(cxSLjjmRbm^zWRGuQ}nbWB)R{w9K=1D&N-*gWeXpW8f=!PZBoQTD; z9Jx+XkKy(8c@r&oj`vod&Xl#Z1@?epKMmgFjkhDJhUbHW_FsYnpUwiQYh?!AiQvBI z8fU*fHqR zVRw6p`_(!&#M7Ol?wXxn2jAfo{oc9186-@G!ybh%JB;t$l*)D;(93r4eSStwLH1fL z7M_XYLW7tpj~gmkGQdA4E6U`)YvxZxA36u^aA*}n&r_xG*ZAZvX46k%Y)`H3ssg*= zZzyiRr#3->m*ED-cr-BrH|6&?56Tw^g|zwyV5P4(T7$tv_iZ>J&!MWQA1zPdfs(z zbAhb}KR(+ic~-(C-r%B#2d$+%i;WB*=>u@#J&4`P*ETVOud0VQhGsB?sEZUX_ zT65uCIO8)7BeQ2Y$E?m#*$iP;Y|glae&8U2x0ht;iVe3^A-@Q16WPCbZkq_X>>Anf z*YvTeUvPZT5%8#0>$BW)J*O~d7<})J0et*bnavix=KdGM62>k)4D9jS4Li(U5_5@2Tlg+n5Qr zSsaSiyv3d~b`BH0)Yd#x!L#CnK@aG!Z9_*#->?pgbj0CR$>A+W`bm(OKr@gB+_;Y#&av-^EfeXmgGMZ3Or zDpiqFe{xzVb(Iqo<480^neKm-?g{O(jGzLSG4!M9`F{j?17Y-iXp?2rsczl^ZS#PEs4Yx-%ebKsp zNqrXmFmBeK+azV|cG@VubsU!~L2?mB3=y{xk3=qnll-Zm_$At5IK!p#aD-t2IxVsS zMNw1mnPEQZ9_A#MwAjvNae)#$52oN3qG;_v@1saCxeBJKJfUUsQI1b1iJj7W5h5aw z4`+}Ln{sfb#o&4zrU>p>(jjW3&pV7pAsNv)9%^y0V0 zzPABEaxcb_72<4vN3oH zL2s@j**`mJiJ+*(2SUae?y`blqn1B+eOthvCU|Q@teyzA9c=h_*uapk6RjWGSy|=6 z>IRx8xs?-qIw8%!00y~w2BY+}Fx~etQZgg&Z@*^Y=3;kugMuoD=sPD#u5pQw_Gd=A zlX|!W;H*1huXK^kCef{}vL_j(Z06?m5WINPtiF%9YX^)($(mM6?_!RpKIy`TJ z+%~IlFW4KBx!U9-TtOeGn_mW|j|(>ms-u1Mw76`P@639DhL}QimH?YjVmL|L@ht{C z&0W;+)!R-TMf}T&Rv}w?UdmmIV4ko*`voA8fd~$T;nf0 zYUo!sE=i2hHZWAv%}F#=t4DZceft#lV`r*_gKyjqhDfQ$6}2P^M@#2ZFU33BFt=fg zCX=*fyX`RPAu-X@3Rj=b4SEEGN`zQkyD4L2ff`9|y|)A$Sr41Lro6I@Q%b?C{jx|x ztFS&cJ+66?Q7%wrbo0j#0~ohityu$8gSqnjBt`u6teeKLUhk~qaRX#Z0x&MF@dl5^ zHB1J3j1MEqIN|i7qhe?V^^om2~zg}z!2 z@y$TcnMeN&V_l!*eX+i9*G4=6SJeHhS9%T}w@3<$jxt^akOHISA4_U1$!#vi zfgnR}uXFQHJaB1fZux&3B?-Tn-6-e~@rN+LR4^u*Wi%6NtYk$2!>2y-cqBg07$zm< z(}x-T%7@U}pjSXo-gJL586#&}GxhxRPt&~?8jcndE2war`*ecsCE;|mkM z`6f%NT8Xog)vBvjS+wTO(fq8NF$;x59*v0=3m=4ugJ+eF!7+k{p}~ZZ9@WDfQxNb= z<~^7VgVc98+om%N8NMF+>p8#4az=0ZN>25BX_V?u2`k1|ioxU>dc=ETwS&KVbFvajiX?pKwdq88kL@B(R#Xwhw#^xesLv(%+HVG}TNHit zScC3Pz(pfpFL1pa?GVK$$WKbgd4a}(cVnuQ$q;=xLc!LVxJJ@G2jvB8rMOsWcCr+g zGnP1>&Mm|w6in~NfBz{oY`r?Ot{3w-R14{fR^@7e3ELvZ2EQjU_w6*z@|( zY%Z^ry~N<`5WlDoq=F??57snDuO&E>VSPvsJM{ojDCs#1<>?Kz4vA2OJwBO0z(Cj|0 zPhktFhXeEZbzmgJy%Osl668}+JyU{DZna{d&~*^I@fuh8f@~XI|4pyM$VuR}9`cY%yZvPWMZY6mtB^VFSJnlmJ-sZjH4ChEl*K2}|CqM(%DV}V(^_&tRUvgly zCC7<>3^dZVS^6ERB{`ZcC|Q~nT6l9e)d3a~08TgOMNN1m*U!xTCEcY#XuAp7I2ArT z*}3r&I=||=+k}eMp$_>9W3VG-hq++6M6f-$qGFXVhJu@KTNj?fxe^FXB32rjL#XAN z9{Yn`Ao<(#A@-#Q@1A$fpiV7?mGRI#PI$T1dsb>*1nr5|a4W58zoh2Y_n^V<;-A+N zv`!SI!{}y2Le0yo>Cc{YPv>$jDOuK2I(|4dSTyNe~iop-=gn{$vh(3(IsA#18RSFD}!BwpO5nxyfJ43g9 zCT@?eJ!0UgAaZW98`h2l`_AzJj1zHlbLcmZ+}7b;)80xM*y55FTc@>oA#4)tQ>~kr z69;5nR+HmWUCA*c+H9*W*Z`Ln<6lw75#04|A$*+Ck@{r|BmUyumtVx*S@UQ4^$0g) z!z|PhgL9$j3xO~B)HTOA7vE)lR-y^8;=5(*JW3%8+@aTn3jKoxWI9>CsPsMZit(BQ z2<_Ggv@Cxzp-Bv!mZL(gU4LrTF~|*zXN=-ZVjGN~2Xst+e~(Rz9&{gzhUn-z7M_HR0 z`4oe0QIxUQ%oHJRyY{+C9twt#;7sriSBIHoi8{VY6vg6V(pl>7;^we@b7m1{1ZnFK z(WKC6CPRmSp^Ym5`bIF*#dsIc+h>R8-8fzB^h#HTC?%(bqH5Ls2iFmw)pL`L>Ao?1 z!bp*pr$b|3{*=n?PsEJXhVBb>lyV+;ezn1f_MFgMu^ zD|-dWzuqyw=l!-|QsmT3-uK7~r2%^YXUHx5q)&6}TgNnCiFH6nCo^&^q zMXe9b$AARU#|zi6ZJgs%ekbes+ZPXbZ3Yz@hFlY0ij{#7Vj(GGD^avc8a! zlLLd0blTcwlkKh9j=V^$Nw@=aAZ21yqi}YU8h~FkKrA{gLuKv&40&RoM^vMPA7qL_ z_#%`fS_v9ogIb3_(zG$+sP^EI#y`Z`ELn(!bV=12_f1M6=VH|u&! zQ?=e=n9KOta%%Zul!!Q#Z7QY-8gAy-mgi2?H*+siHQ?b#?&tfVqB{QY{i@kK^c|Y9 zXc3NdC&-4z!{3V6nEdk|GSiCEnHq6MbV$F>eNlkL>Db%sBK6;xX)3FdK~H7^KQ%6M z2v!Vy{_=VUUoQpP+p;eX-ICC7|@*vn%coo13M8^Hi^M;;On#tBA+#QPe$GN|j*;Gp-jlXai5vX==KRX+uU2YR z*Pjr?xGDT)GGsZ14|ieu&}il3G-x;eRl%`WxjK{ueR1?!f_<{5q@tx~^q*Nk!bg*Y zKcoqUD3N|Tn$!OUZ-%^H5FB54*gUqpHeqyqU=(Ra_}t^uOTCMdEI}p0pIv@QWkGVr zF_NC?I-t6D-_P)AG;hQAAi7&lXyf$ssFKjY9%(sVeV2<+OYsM8yY?Lm?7T`L6E7V_ zAZYEcbD0;6l{*EX`ASXkHV5+_s#zU`sR6ri3(^$YFN0HX^waASW`b@NXi}k)e|Udy zq%}5&I+0hz$em%u9~q!SA%6P{Sv({+07vUhDYri;9?MLm_ZpxRGjEI3FdTk?0Eyj6 z&_$%_@pJw8^WMUqK_`$Wj)l=Pa)Py61@}cU!#ssCXV!!XUwd*2jl2Zam*{i?(t>l? zmTKd=`EDjol1bsSmn&+X^5UX5NYcP|DOb?qm4CT?-FQ7L?VtWunc=vuG)@Bn)Xu@0 z#a!?=mI>`-m7~FdpwMmWyq1^+u+&4Dpxe@%I|f7EElTk&DYnNf{nBES&}5nWAU;~- zLrDRcV#+qSrBee|vSWLGKq?8#rcIw$_iKNO%VPuYkqju1u7>qAW+WQ{a#LEy|Wgdj4iC`Ys|aH#J-ahWveR+0XCxHgeqwj``+% z5eo-pHRLck=1tg_1x@RX=b83+ByasD1zaMg>rpT;&NHNgEPltL1JIUe)XGI4zl}k? z%^;tgDBn6=X)#xy|2*d)FkNYIugu%G+pf{$`RYSS1pZ!mPVThjX`p}<5ay@qU->=? z*35IcWdUIzunJ~e%g2QDH!hi}4Hg}T;OBWEs6mySM%UbTvzfe%cwE3pvdHZ>xv0Xt zX;(7sm(w83+L8&OAm}~wqXRIn|Jb)0DRb9eY9G1+bhvw_STvItm5P{ay-+BdmB0@f zi+^+Qm}Do&jcHn3>3KT+?sj0m~VH+Fp zz{Hrk5=?-(LnF2O=I#-;Q{T1g_}qSXS27KB$Eyg_R|r0iIz^;{g9Tp8C=?z3J)xwj zk=4$(wDc3|nmxy9wJ=6=`LH15V<{gueb*Olk7|BY$1_rW$o;-{3%mX`3C}08qoa>x z0Mz8b0LyYI+ncnO=2+9N=!i4N#HPjB)6KF7wm~1=C677q{NeHRF){b~({EthGKa*h zUqZ7biGFLq@BlvGR*qIWokZs zi@R%2*Mfw6uzEy42RVzOwYVR35iISJbCD)G*hX)pJezbkyE2I_yNpiR9G7My=Mih| zN{urp@R9meQoJ!4`8&?ULsCWX)))QBWeP-n29@U;8&@w&++m9so5aF)&YzQDcE-E) z`)(R%A}Hl19rfLSs|TLLiyCXEXSxFXk<;`c-8GIUo-6>aDnp_0#DT$Xjs`UjDnS33PhyTwQY zpC;`#RYY$^|GBtQ+H%s%|5Q$n;lHjf8~_st4fto`{x=DMu>V!fe`liqvEe_a`(F*z zKV}0$0Wkil<-fEEhxu>4*FXMG+;{*1N6`PLP9`=EZY&NKZe(06tSoFC001li5DyQ4 z`B%%z&cO=I{lD2zx&Oac?7wB8|HuDvmtp_MZT}hYFQEQSg!*p>H9p>d^uKOwtgQce F{eK*~8S?-D literal 0 HcmV?d00001 diff --git a/img/vapt-straive-logo.webp b/img/vapt-straive-logo.webp new file mode 100644 index 0000000000000000000000000000000000000000..3248f160e3f2ab49c2ed00ae39d25458b5ada11b GIT binary patch literal 24448 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 + + + + + + Report Gen + + + + + + + + + + +
+

Report Gen

+ +
+
+
+
+
VAPT test
+

Generate a VAPT test report.

+ + Download +
+
+
+
+
+
+
+
+ +
+ +
+ +
+ + + + + + + + + + + + diff --git a/script.js b/script.js new file mode 100644 index 0000000..bfb3c6c --- /dev/null +++ b/script.js @@ -0,0 +1,238 @@ +import { html, render } from "https://cdn.jsdelivr.net/npm/lit-html@3/+esm"; +import { read, utils } from "https://cdn.jsdelivr.net/npm/xlsx/+esm"; +import { + Chart, + BarController, + BarElement, + CategoryScale, + LinearScale, + Tooltip, +} from "https://cdn.jsdelivr.net/npm/chart.js@4/+esm"; + +const { token } = await fetch("https://llmfoundry.straive.com/token", { credentials: "include" }).then((r) => r.json()); +if (!token) { + const url = "https://llmfoundry.straive.com/login?" + new URLSearchParams({ next: location.href }); + render(html`Log into LLM Foundry

`, document.querySelector("#login")); +} + +const table = (data) => { + if (!data || data.length === 0) return null; + const columns = Object.keys(data[0]); + return html` + + + + ${columns.map((key) => html``)} + + + + ${data.map( + (row) => html` + + ${columns.map((key) => html``)} + + ` + )} + +
${key}
${row[key]}
+ `; +}; + +const statsTable = (data, keys) => html` + + + ${keys.map( + (key) => html` + + + + + ` + )} + +
${key}${data[key]}
+`; + +const vaptReport = ({ Summary, ...data }) => html` +
+ + + + VAPT - Straive Logo + +

${Summary["Client Name"]}

+

Vulnerability Assessment Report

+

Date: ${Summary["Date"]}

+ +

Submitted by:

+ ${statsTable(Summary, ["Analyst", "Analyst Email ID"])} + +

Vital Statistics

+

+ This document provides the findings of a recent analysis of your infrastructure. The document represents a summary + of these findings and presents a set of recommendations for addressing the detected events. The analysis is based + on data collected using the characteristics below: +

+ +

Company Details

+ ${statsTable(Summary, ["Company Name", "Address", "Industry", "Company Size"])} + +

Test Details

+ ${statsTable(Summary, ["Test Start Date", "Test Objective", "Test Duration"])} + + +

Executive Summary

+ +

Security and Threat Prevention

+ + ${table(data["Security and Threat Prevention"])} + +

+ Last year, over 780 enterprises were breached because of poor internal security practices and latent vendor + content security. The average cost of a corporate security breach is estimated at $3.5 million USD and is rising + at 15% year over year. Intrusions, malware/botnets and malicious applications collectively comprise a massive risk + to your enterprise network. These attack mechanisms can give attackers access to your most sensitive files and + database information. We mitigates these risks by providing award-winning security solutions and is consistently + rated among the best by objective third parties such as NSS Labs, VB 100 and AV Comparatives. +

+ +

Deployment & Methodology

+

+ The internal network was monitored with a XYZ-500D (transparent mode using port pairs). This is a non-invasive way + to intercept traffic as it moves over your network. The diagram below demonstrates the assessment topology used. +

+

+ VAPT - Deployment Methodology +

+

+ During this assessment, traffic was monitored as it moved over the wire and logs were recorded. These logs are + typically categorized by their log type. While traffic logs record much of the session information flowing across + your network, We can also monitor more in-depth security logging, such as IPS, anti-virus, web and application + control. This assessment was created based on telemetry from all log types and is meant to provide a big picture + view of your network's activity. Used in conjunction with ABC, DEF can provide additional functions such as event + management (e.g. alerts when malicious activity is detected), FGH analytics and filtering (e.g. investigating + specific user activity) and advanced reporting (e.g. detailed reports on security, user and even wireless + activity). +

+ + +

Security and Threat Prevention

+ +

High Risk Applications

+

Our research team assigns a risk rating of 1 to 5 to an application based on the application behavioral characteristics. The risk rating can help administrators to identify the high risk applications quickly and make a better decision on the application control policy.

+

High Risk Applications Crossing the Network

+ ${table(data["HighRiskApps"])} + +

Application Vulnerability Exploits

+

An application vulnerability could be exploited to compromise the security of the network. Our research team analyses application traffic patterns and application vulnerabilities and then develops signatures to prevent the vulnerability exploits. Our Intrusion Prevention Service (IPS) provides our customers with the latest defenses against stealthy network-level threats. It uses a customizable database of more than 5,800 known threats to stop attacks that evade traditional firewall systems.

+

Top Application Vulnerability Exploits Detected

+ ${table(data["AppExploits"])} + +

Malware Detected

+

There are numerous channels that cybercriminals use to distribute malware. Most common methods motivate users to open an infected file in an email attachment, download an infected file, or click on a link leading to a malicious site. During the security assessment, We identified a number of Malware-related events which indicate malicious file downloads or connections to malware-infested sites.

+

Top Viruses, Spyware and Adware Detected

+ ${table(data["Malware"])} + +

At-Risk Devices and Hosts

+

Based on the types of activity exhibited by an individual host, we can approximate the trustworthiness of each individual client. This client reputation is based on key factors such as websites browsed, applications used and inbound/outbound destinations utilized. Ultimately, we can create an overall threat score by looking at the aggregated activity used by each individual host.

+

Most At-Risk Devices and Hosts

+ ${table(data["AtRiskDevices"])} + + +

Network Utilization

+ +

Bandwidth and Sessions

+

Bandwidth usage is the primary indicator for throughput and capacity planning. We can analyze bandwidth by application usage or by host. In addition, looking at daily usage trends can assist with peak capacity planning.

+

Average Bandwidth Usage by Hour

+ + +

Session averages on a a daily basis are useful for calculating throughput and proper sizing. It can help when determining peak planning as a typical enterprise will see more sessions being generated in the morning when the network is at its most active.

+

Average Session Usage by Hour

+ + +

Recommended Actions

+
+ +
+`; + +document.querySelector("#demos").addEventListener("click", async (event) => { + const $generate = event.target.closest(".generate"); + if ($generate) { + event.preventDefault(); + let workbook; + try { + workbook = read(await fetch($generate.dataset.src).then((r) => r.arrayBuffer()), { cellDates: true }); + } catch (error) { + return notify(`Error loading or parsing XLSX file: ${error.message}`); + } + renderWorkbook(workbook); + } +}); + +document.querySelector("#file-upload").addEventListener("change", (event) => { + const file = event.target.files[0]; + if (file) { + const reader = new FileReader(); + reader.onload = (event) => { + const workbook = read(event.target.result, { cellDates: true }); + renderWorkbook(workbook); + }; + reader.readAsArrayBuffer(file); + } +}); + +function renderWorkbook(workbook) { + const oldOutput = document.querySelector("#output"); + oldOutput.insertAdjacentHTML('afterend', '
'); + oldOutput.remove(); + + const summarySheet = workbook.SheetNames.includes("Summary") + ? workbook.Sheets["Summary"] + : workbook.Sheets[workbook.SheetNames[0]]; + const Summary = Object.fromEntries(utils.sheet_to_json(summarySheet, { header: 1 })); + + // Get the data from the other sheets as an array of objects, with the first row (header) as keys + const otherSheets = workbook.SheetNames.filter((name) => name !== "Summary"); + const data = Object.fromEntries(otherSheets.map((name) => [name, utils.sheet_to_json(workbook.Sheets[name])])); + + try { + render(vaptReport({ Summary, ...data }), document.querySelector("#output")); + Chart.register(BarController, BarElement, CategoryScale, LinearScale, Tooltip); + + new Chart(document.getElementById("bandwidth-usage"), { + type: "bar", + options: { animation: true, plugins: { tooltip: { enabled: true } } }, + data: { + labels: data.Bandwidth.map((row) => row.Time), + datasets: [{ label: "Bandwidth Utilization", data: data.Bandwidth.map((row) => row["Bandwidth Utilization"]) }], + }, + }); + new Chart(document.getElementById("session-usage"), { + type: "bar", + options: { animation: true, plugins: { tooltip: { enabled: true } } }, + data: { + labels: data.Sessions.map((row) => row.Time), + datasets: [{ label: "Number of Sessions", data: data.Sessions.map((row) => row["Sessions"]) }], + }, + }); + + + } catch (error) { + return notify(`Error rendering report: ${error.message}`); + } +} + +function notify(message) { + render(html`
${message}
`, document.querySelector("#output")); +} diff --git a/vapt.xlsx b/vapt.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..b5e956c46f12d1907ae1b911fa028902cbaa7f89 GIT binary patch literal 18812 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