mirror of
https://github.com/KevinMidboe/ISPDowntimeMonitor.git
synced 2025-10-29 01:30:13 +00:00
Resolved merge conflict
This commit is contained in:
@@ -8,6 +8,7 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"express": "^4.17.1",
|
||||
"mongoose": "^5.9.17",
|
||||
"nodemailer": "^6.4.6",
|
||||
"puppeteer": "^3.0.4"
|
||||
}
|
||||
|
||||
33
src/db.js
Normal file
33
src/db.js
Normal file
@@ -0,0 +1,33 @@
|
||||
const mongoose = require('mongoose');
|
||||
mongoose.connect("mongodb://localhost:27017/ispmonitor", {
|
||||
useNewUrlParser: true
|
||||
});
|
||||
|
||||
const Event = require('./schemas/Event');
|
||||
|
||||
const commitServiceEventToDatabase = async (serviceMessages, pdfFilename) => {
|
||||
try {
|
||||
// we only care about the second message
|
||||
const message = serviceMessages[1]
|
||||
const event = new Event({
|
||||
date: new Date(),
|
||||
isOk: message.isOk,
|
||||
message: message.statusText,
|
||||
pdfFilename
|
||||
})
|
||||
|
||||
await event.save();
|
||||
return serviceMessages
|
||||
} catch (err) {
|
||||
console.error('error from mongoose:')
|
||||
console.error(err)
|
||||
return serviceMessages
|
||||
}
|
||||
}
|
||||
|
||||
const getAllEvents = () => Event.find().exec()
|
||||
|
||||
module.exports = {
|
||||
commitServiceEventToDatabase,
|
||||
getAllEvents
|
||||
}
|
||||
15
src/index.js
15
src/index.js
@@ -6,13 +6,17 @@ const config = require('../config')
|
||||
const Mail = require( './mail.js');
|
||||
const mail = new Mail();
|
||||
|
||||
const { commitServiceEventToDatabase, getAllEvents } = require('./db.js');
|
||||
|
||||
let browser = undefined;
|
||||
if (config.debug == false)
|
||||
console.log = () => {}
|
||||
|
||||
const pdfFilename = config['pdfFilename'] || 'telenor-downtime.pdf';
|
||||
|
||||
const savePageToPDF = page => {
|
||||
const pdfOptions = {
|
||||
path: `telenor-downtime.pdf`,
|
||||
path: pdfFilename,
|
||||
format: "A4",
|
||||
printBackground: true,
|
||||
displayHeaderFooter: true,
|
||||
@@ -51,8 +55,7 @@ const exitWithError = (err, message=undefined) => {
|
||||
if (config.debug === true)
|
||||
console.error(err)
|
||||
|
||||
closeBrowser();
|
||||
process.exit(1);
|
||||
closeBrowserAndExit(1);
|
||||
}
|
||||
|
||||
const dismissCookiePrompt = page => {
|
||||
@@ -110,8 +113,9 @@ const webscraper = async pageURL => {
|
||||
.catch(err => exitWithError(err, `Unable to reach url: ${pageURL}`))
|
||||
}
|
||||
|
||||
function closeBrowser() {
|
||||
function closeBrowserAndExit(status=0) {
|
||||
browser.close();
|
||||
process.exit(status);
|
||||
}
|
||||
|
||||
|
||||
@@ -120,8 +124,9 @@ function run() {
|
||||
.then(page => dismissCookiePrompt(page))
|
||||
.then(page => savePageToPDF(page))
|
||||
.then(page => getServiceMessages(page))
|
||||
.then(serviceMessages => commitServiceEventToDatabase(serviceMessages, pdfFilename))
|
||||
.then(serviceMessages => notifyIfDown(serviceMessages))
|
||||
.then(closeBrowser)
|
||||
.then(closeBrowserAndExit)
|
||||
}
|
||||
|
||||
run();
|
||||
|
||||
11
src/schemas/Event.js
Normal file
11
src/schemas/Event.js
Normal file
@@ -0,0 +1,11 @@
|
||||
const mongoose = require('mongoose');
|
||||
const Schema = mongoose.Schema;
|
||||
|
||||
const Event = new Schema({
|
||||
date: Date,
|
||||
isOk: Boolean,
|
||||
message: String,
|
||||
pdfFilename: String
|
||||
})
|
||||
|
||||
module.exports = mongoose.model('Event', Event);
|
||||
BIN
src/site/SF-Pro-Rounded-Light.otf
Executable file
BIN
src/site/SF-Pro-Rounded-Light.otf
Executable file
Binary file not shown.
52
src/site/fetchLogsAndGenerateTable.js
Normal file
52
src/site/fetchLogsAndGenerateTable.js
Normal file
@@ -0,0 +1,52 @@
|
||||
|
||||
let indicentLogs = [
|
||||
{
|
||||
id: 1,
|
||||
date: new Date('2020/05/30 01:20:38').toISOString(),
|
||||
message: 'Vi har en feil i mobilnettet på denne adressen. Vi jobber med å løse problemet.',
|
||||
duration: '6d 4t 32min'
|
||||
}, {
|
||||
id: 2,
|
||||
date: new Date('2020/04/22 13:47:25').toISOString(),
|
||||
message: 'Vi har en feil i internett på denne adressen. Vi jobber med å løse problemet.',
|
||||
duration: '1d 2t 54min'
|
||||
}
|
||||
]
|
||||
indicentLogs = indicentLogs.reverse()
|
||||
|
||||
const newDiv = () => document.createElement('div');
|
||||
|
||||
const closePopover = () => document.getElementById('popover').remove();
|
||||
|
||||
const tableRowFromLog = (log, table) => {
|
||||
const row = table.insertRow(0);
|
||||
row.setAttribute('incident-id', log.id)
|
||||
row.onclick = clickRowPopupIncident;
|
||||
row.insertCell(0).innerHTML = log.date;
|
||||
row.insertCell(1).innerHTML = log.message;
|
||||
row.insertCell(2).innerHTML = log.duration;
|
||||
}
|
||||
|
||||
const clickRowPopupIncident = (event) => {
|
||||
const cell = event.toElement;
|
||||
const row = cell.parentElement;
|
||||
const indicentId = row.getAttribute('incident-id');
|
||||
|
||||
const popover = newDiv()
|
||||
const container = newDiv()
|
||||
popover.id = 'popover'
|
||||
popover.onclick = closePopover;
|
||||
container.className = 'container'
|
||||
container.innerText = Object.values(indicentLogs[indicentId]).join('\n')
|
||||
popover.appendChild(container)
|
||||
document.body.appendChild(popover);
|
||||
}
|
||||
|
||||
function fetchLogsAndGenerateTable() {
|
||||
const table = document.getElementById('log-table');
|
||||
const tableBody = table.tBodies[0];
|
||||
|
||||
indicentLogs.map(log => tableRowFromLog(log, tableBody))
|
||||
}
|
||||
|
||||
fetchLogsAndGenerateTable()
|
||||
28
src/site/fetchUptimeAndGenerateBarGraph.js
Normal file
28
src/site/fetchUptimeAndGenerateBarGraph.js
Normal file
@@ -0,0 +1,28 @@
|
||||
|
||||
const createEvent = () => {
|
||||
const event = document.createElement('div')
|
||||
event.className = 'event';
|
||||
const tooltip = document.createElement('span');
|
||||
tooltip.className = 'tooltip';
|
||||
const tooltipContent = new Date().toLocaleString()
|
||||
tooltip.innerText = tooltipContent;
|
||||
|
||||
event.appendChild(tooltip);
|
||||
return event;
|
||||
}
|
||||
|
||||
function fetchUptimeAndGenerateBarGraph(instances=10) {
|
||||
const graph = document.getElementById('bar-graph');
|
||||
|
||||
const event = createEvent()
|
||||
|
||||
for (var i = instances; i >= 0; i--) {
|
||||
const clone = event.cloneNode(true)
|
||||
Math.random() > 0.95 ? clone.className += ' error' : null;
|
||||
graph.appendChild(clone)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// fetchUptimeAndGenerateBarGraph(20)
|
||||
fetchUptimeAndGenerateBarGraph(60)
|
||||
57
src/site/index.html
Normal file
57
src/site/index.html
Normal file
@@ -0,0 +1,57 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>ISP downtime monitor</title>
|
||||
<meta charset="UTF-8">
|
||||
<link href="style.css" type="text/css" rel="stylesheet">
|
||||
</head>
|
||||
<body>
|
||||
<h1>Nedetid rapport</h1>
|
||||
<div class="page-container">
|
||||
<h2>Oppetid</h2>
|
||||
<div class="container" id="bar-graph">
|
||||
<!-- BAR GRAPH -->
|
||||
</div>
|
||||
|
||||
<div class="color-indicators">
|
||||
<label class="color-indicator-box green"></label>
|
||||
<span>Uptime</span>
|
||||
|
||||
<label class="color-indicator-box red"></label>
|
||||
<span>Downtime</span>
|
||||
</div>
|
||||
<hr />
|
||||
|
||||
<h2>Indicent log</h2>
|
||||
<div class="container" id="indicent-logs">
|
||||
<table id="log-table">
|
||||
<thead><tr>
|
||||
<th>Date</th>
|
||||
<th>Incident message</th>
|
||||
<th>Duration</th>
|
||||
</tr></thead>
|
||||
|
||||
<tbody><tr>
|
||||
<td>31 Mai 2020 22:34</td>
|
||||
<td>OK</td>
|
||||
<td>6d 4t 32min</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>31 Mai 2020 22:34</td>
|
||||
<td>OK</td>
|
||||
<td>6d 4t 32min</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>31 Mai 2020 22:34</td>
|
||||
<td>OK</td>
|
||||
<td>6d 4t 32min</td>
|
||||
</tr></tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
|
||||
<script src="fetchLogsAndGenerateTable.js" type="text/javascript"></script>
|
||||
<script src="fetchUptimeAndGenerateBarGraph.js" type="text/javascript"></script>
|
||||
</html>
|
||||
216
src/site/style.css
Normal file
216
src/site/style.css
Normal file
@@ -0,0 +1,216 @@
|
||||
/**/
|
||||
:root {
|
||||
color-scheme: light;
|
||||
--text-color: black;
|
||||
--background-color: white;
|
||||
--page-background-color: #ebeceb;
|
||||
--page-background-color-40: rgba(247,249,249,0.4);
|
||||
--page-background-color-80: rgba(247,249,249,0.8);
|
||||
--green: #7bed9f;
|
||||
--red: #ff4757;
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: dark) {
|
||||
:root {
|
||||
color-scheme: light dark;
|
||||
--text-color: white;
|
||||
--background-color: #1c1d1e;
|
||||
--page-background-color: black;
|
||||
--page-background-color-40: rgba(0,0,0,0.4);
|
||||
--page-background-color-80: rgba(0,0,0,0.8);
|
||||
}
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: AppleSF;
|
||||
src: url(SF-Pro-Rounded-Light.otf);
|
||||
}
|
||||
|
||||
body {
|
||||
font-family: AppleSF;
|
||||
background-color: var(--page-background-color);
|
||||
padding: 0 1rem;
|
||||
margin: 1rem;
|
||||
}
|
||||
|
||||
.page-container {
|
||||
background-color: var(--background-color);
|
||||
border-radius: 0.5rem;
|
||||
min-height: 60vh;
|
||||
height: 100%;
|
||||
padding: .1px 2rem 1.5rem 2rem;
|
||||
}
|
||||
|
||||
h1,h2,h3,h4 {
|
||||
margin: 1.5rem 0;
|
||||
padding: 0;
|
||||
}
|
||||
h1 {
|
||||
font-size: 3rem;
|
||||
}
|
||||
h2 {
|
||||
font-size: 2rem;
|
||||
}
|
||||
|
||||
.container {
|
||||
border-radius: 0.5rem;
|
||||
}
|
||||
|
||||
hr {
|
||||
margin: 2.5rem 1rem;
|
||||
height: 1px;
|
||||
background-color: var(--text-color);
|
||||
border: none
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
#bar-graph {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
height: 55px;
|
||||
display: flex;
|
||||
flex-direction: row-reverse;
|
||||
border-radius: 0.4rem;
|
||||
/*overflow: hidden;*/
|
||||
/*margin: 2rem 0;*/
|
||||
background-color: var(--page-background-color-40);
|
||||
}
|
||||
|
||||
.event.error {
|
||||
/* position: absolute;
|
||||
height: 100%;
|
||||
width: 0.5rem;*/
|
||||
background-color: var(--red);
|
||||
}
|
||||
|
||||
.event {
|
||||
height: 100%;
|
||||
width: 1rem;
|
||||
background-color: var(--green);
|
||||
position: relative;
|
||||
transition: transform 0.1s ease;
|
||||
}
|
||||
.event:not(:last-of-type) {
|
||||
margin-left: 1px;
|
||||
}
|
||||
|
||||
.event .tooltip {
|
||||
visibility: hidden;
|
||||
background-color: var(--page-background-color-80);
|
||||
text-align: center;
|
||||
padding: 0.4rem;
|
||||
border-radius: 0.2rem;
|
||||
position: absolute;
|
||||
width: max-content;
|
||||
top: calc(100% + 1rem);
|
||||
left: 50%;
|
||||
margin-left: -5rem;
|
||||
}
|
||||
.event:hover {
|
||||
transform: scale(1.2);
|
||||
z-index: 1;
|
||||
box-shadow: -2px -2px 4px rgba(0,0,0,0.4),
|
||||
2px 2px 4px rgba(0,0,0,0.4);
|
||||
}
|
||||
.event:hover .tooltip {
|
||||
visibility: visible;
|
||||
}
|
||||
|
||||
/*.error:nth-of-type(1) {
|
||||
left: 2rem;
|
||||
}
|
||||
.error:nth-of-type(2) {
|
||||
left: 22rem;
|
||||
}
|
||||
.error:nth-of-type(3) {
|
||||
right: 12rem;
|
||||
}*/
|
||||
|
||||
.color-indicators {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
margin: 1rem 0;
|
||||
}
|
||||
|
||||
.color-indicator-box {
|
||||
display: block;
|
||||
width: 1.1rem;
|
||||
height: 1.1rem;
|
||||
border-radius: 0.2rem;
|
||||
margin-right: 0.5rem;
|
||||
}
|
||||
|
||||
.color-indicators .color-indicator-box:not(:first-of-type) {
|
||||
margin-left: 1.5rem;
|
||||
}
|
||||
.color-indicators span {
|
||||
font-size: 1.1rem;
|
||||
font-weight: 500;
|
||||
letter-spacing: 1.5px;
|
||||
}
|
||||
/*.color-indicator-box:first-child) {
|
||||
background-color: red;
|
||||
}*/
|
||||
|
||||
.green {
|
||||
background-color: var(--green);
|
||||
}
|
||||
.red {
|
||||
background-color: var(--red);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
#log-table {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
th {
|
||||
text-align: left;
|
||||
padding: 0.2rem 0.4rem;
|
||||
}
|
||||
|
||||
tr {
|
||||
font-size: 1.2rem;
|
||||
margin: 0.3rem 0;
|
||||
transition: transform 0.3s ease;
|
||||
}
|
||||
|
||||
td {
|
||||
padding: 0.6rem 0.4rem;
|
||||
}
|
||||
|
||||
tr td:first-child {
|
||||
border-radius: 0.3rem 0 0 0.3rem;
|
||||
}
|
||||
tr td:last-child {
|
||||
border-radius: 0 0.3rem 0.3rem 0;
|
||||
}
|
||||
tbody tr:hover {
|
||||
background-color: var(--page-background-color);
|
||||
transform: scale(1.01);
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
|
||||
|
||||
#popover {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
background-color: var(--page-background-color-40);
|
||||
}
|
||||
#popover .container {
|
||||
width: 70%;
|
||||
height: 80%;
|
||||
background-color: var(--background-color);
|
||||
border-radius: 0.75rem;
|
||||
}
|
||||
194
yarn.lock
194
yarn.lock
@@ -29,6 +29,14 @@ base64-js@^1.0.2:
|
||||
resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1"
|
||||
integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==
|
||||
|
||||
bl@^2.2.0:
|
||||
version "2.2.0"
|
||||
resolved "https://registry.yarnpkg.com/bl/-/bl-2.2.0.tgz#e1a574cdf528e4053019bb800b041c0ac88da493"
|
||||
integrity sha512-wbgvOpqopSr7uq6fJrLH8EsvYMJf9gzfo2jCsL2eTy75qXPukA4pCgHamOQkZtY5vmfVtjB+P3LNlMHW5CEZXA==
|
||||
dependencies:
|
||||
readable-stream "^2.3.5"
|
||||
safe-buffer "^5.1.1"
|
||||
|
||||
bl@^4.0.1:
|
||||
version "4.0.2"
|
||||
resolved "https://registry.yarnpkg.com/bl/-/bl-4.0.2.tgz#52b71e9088515d0606d9dd9cc7aa48dc1f98e73a"
|
||||
@@ -38,6 +46,11 @@ bl@^4.0.1:
|
||||
inherits "^2.0.4"
|
||||
readable-stream "^3.4.0"
|
||||
|
||||
bluebird@3.5.1:
|
||||
version "3.5.1"
|
||||
resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.1.tgz#d9551f9de98f1fcda1e683d17ee91a0602ee2eb9"
|
||||
integrity sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==
|
||||
|
||||
brace-expansion@^1.1.7:
|
||||
version "1.1.11"
|
||||
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
|
||||
@@ -46,6 +59,11 @@ brace-expansion@^1.1.7:
|
||||
balanced-match "^1.0.0"
|
||||
concat-map "0.0.1"
|
||||
|
||||
bson@^1.1.4:
|
||||
version "1.1.4"
|
||||
resolved "https://registry.yarnpkg.com/bson/-/bson-1.1.4.tgz#f76870d799f15b854dffb7ee32f0a874797f7e89"
|
||||
integrity sha512-S/yKGU1syOMzO86+dGpg2qGoDL0zvzcb262G+gqEy6TgP6rt6z6qxSFX/8X6vLC91P7G7C3nLs0+bvDzmvBA3Q==
|
||||
|
||||
buffer-crc32@~0.2.3:
|
||||
version "0.2.13"
|
||||
resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242"
|
||||
@@ -69,6 +87,18 @@ concat-map@0.0.1:
|
||||
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
|
||||
integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
|
||||
|
||||
core-util-is@~1.0.0:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
|
||||
integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
|
||||
|
||||
debug@3.1.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261"
|
||||
integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==
|
||||
dependencies:
|
||||
ms "2.0.0"
|
||||
|
||||
debug@4, debug@^4.1.0, debug@^4.1.1:
|
||||
version "4.1.1"
|
||||
resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791"
|
||||
@@ -76,6 +106,11 @@ debug@4, debug@^4.1.0, debug@^4.1.1:
|
||||
dependencies:
|
||||
ms "^2.1.1"
|
||||
|
||||
denque@^1.4.1:
|
||||
version "1.4.1"
|
||||
resolved "https://registry.yarnpkg.com/denque/-/denque-1.4.1.tgz#6744ff7641c148c3f8a69c307e51235c1f4a37cf"
|
||||
integrity sha512-OfzPuSZKGcgr96rf1oODnfjqBFmr1DVoc/TrItj3Ohe0Ah1C5WX5Baquw/9U9KovnQ88EqmJbD66rKYUQYN1tQ==
|
||||
|
||||
end-of-stream@^1.1.0, end-of-stream@^1.4.1:
|
||||
version "1.4.4"
|
||||
resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
|
||||
@@ -151,11 +186,26 @@ inflight@^1.0.4:
|
||||
once "^1.3.0"
|
||||
wrappy "1"
|
||||
|
||||
inherits@2, inherits@^2.0.3, inherits@^2.0.4:
|
||||
inherits@2, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3:
|
||||
version "2.0.4"
|
||||
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
|
||||
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
|
||||
|
||||
isarray@~1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
|
||||
integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
|
||||
|
||||
kareem@2.3.1:
|
||||
version "2.3.1"
|
||||
resolved "https://registry.yarnpkg.com/kareem/-/kareem-2.3.1.tgz#def12d9c941017fabfb00f873af95e9c99e1be87"
|
||||
integrity sha512-l3hLhffs9zqoDe8zjmb/mAN4B8VT3L56EUvKNqLFVs9YlFA+zx7ke1DO8STAdDyYNkeSo1nKmjuvQeI12So8Xw==
|
||||
|
||||
memory-pager@^1.0.2:
|
||||
version "1.5.0"
|
||||
resolved "https://registry.yarnpkg.com/memory-pager/-/memory-pager-1.5.0.tgz#d8751655d22d384682741c972f2c3d6dfa3e66b5"
|
||||
integrity sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==
|
||||
|
||||
mime@^2.0.3:
|
||||
version "2.4.5"
|
||||
resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.5.tgz#d8de2ecb92982dedbb6541c9b6841d7f218ea009"
|
||||
@@ -173,7 +223,63 @@ mkdirp-classic@^0.5.2:
|
||||
resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113"
|
||||
integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==
|
||||
|
||||
ms@^2.1.1:
|
||||
mongodb@3.5.8:
|
||||
version "3.5.8"
|
||||
resolved "https://registry.yarnpkg.com/mongodb/-/mongodb-3.5.8.tgz#34550856449b745d145873734bf922c12d6b9caa"
|
||||
integrity sha512-jz7mR58z66JKL8Px4ZY+FXbgB7d0a0hEGCT7kw8iye46/gsqPrOEpZOswwJ2BQlfzsrCLKdsF9UcaUfGVN2HrQ==
|
||||
dependencies:
|
||||
bl "^2.2.0"
|
||||
bson "^1.1.4"
|
||||
denque "^1.4.1"
|
||||
require_optional "^1.0.1"
|
||||
safe-buffer "^5.1.2"
|
||||
optionalDependencies:
|
||||
saslprep "^1.0.0"
|
||||
|
||||
mongoose-legacy-pluralize@1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz#3ba9f91fa507b5186d399fb40854bff18fb563e4"
|
||||
integrity sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ==
|
||||
|
||||
mongoose@^5.9.17:
|
||||
version "5.9.17"
|
||||
resolved "https://registry.yarnpkg.com/mongoose/-/mongoose-5.9.17.tgz#9b74659481807cd9ff5b9c120cdb5087cbbd92bd"
|
||||
integrity sha512-9EDmTiKrOu/41twlPWUA1aOsdxSN6PRIdFwTpLu4MjyNcJ/vuBE+VewKrN1jsD4oXO5rB8bMYtYxVmJQ02SrPg==
|
||||
dependencies:
|
||||
bson "^1.1.4"
|
||||
kareem "2.3.1"
|
||||
mongodb "3.5.8"
|
||||
mongoose-legacy-pluralize "1.0.2"
|
||||
mpath "0.7.0"
|
||||
mquery "3.2.2"
|
||||
ms "2.1.2"
|
||||
regexp-clone "1.0.0"
|
||||
safe-buffer "5.1.2"
|
||||
sift "7.0.1"
|
||||
sliced "1.0.1"
|
||||
|
||||
mpath@0.7.0:
|
||||
version "0.7.0"
|
||||
resolved "https://registry.yarnpkg.com/mpath/-/mpath-0.7.0.tgz#20e8102e276b71709d6e07e9f8d4d0f641afbfb8"
|
||||
integrity sha512-Aiq04hILxhz1L+f7sjGyn7IxYzWm1zLNNXcfhDtx04kZ2Gk7uvFdgZ8ts1cWa/6d0TQmag2yR8zSGZUmp0tFNg==
|
||||
|
||||
mquery@3.2.2:
|
||||
version "3.2.2"
|
||||
resolved "https://registry.yarnpkg.com/mquery/-/mquery-3.2.2.tgz#e1383a3951852ce23e37f619a9b350f1fb3664e7"
|
||||
integrity sha512-XB52992COp0KP230I3qloVUbkLUxJIu328HBP2t2EsxSFtf4W1HPSOBWOXf1bqxK4Xbb66lfMJ+Bpfd9/yZE1Q==
|
||||
dependencies:
|
||||
bluebird "3.5.1"
|
||||
debug "3.1.0"
|
||||
regexp-clone "^1.0.0"
|
||||
safe-buffer "5.1.2"
|
||||
sliced "1.0.1"
|
||||
|
||||
ms@2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
|
||||
integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
|
||||
|
||||
ms@2.1.2, ms@^2.1.1:
|
||||
version "2.1.2"
|
||||
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
|
||||
integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
|
||||
@@ -200,6 +306,11 @@ pend@~1.2.0:
|
||||
resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50"
|
||||
integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA=
|
||||
|
||||
process-nextick-args@~2.0.0:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
|
||||
integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
|
||||
|
||||
progress@^2.0.1:
|
||||
version "2.0.3"
|
||||
resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
|
||||
@@ -234,6 +345,19 @@ puppeteer@^3.0.4:
|
||||
unbzip2-stream "^1.3.3"
|
||||
ws "^7.2.3"
|
||||
|
||||
readable-stream@^2.3.5:
|
||||
version "2.3.7"
|
||||
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57"
|
||||
integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==
|
||||
dependencies:
|
||||
core-util-is "~1.0.0"
|
||||
inherits "~2.0.3"
|
||||
isarray "~1.0.0"
|
||||
process-nextick-args "~2.0.0"
|
||||
safe-buffer "~5.1.1"
|
||||
string_decoder "~1.1.1"
|
||||
util-deprecate "~1.0.1"
|
||||
|
||||
readable-stream@^3.1.1, readable-stream@^3.4.0:
|
||||
version "3.6.0"
|
||||
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198"
|
||||
@@ -243,6 +367,24 @@ readable-stream@^3.1.1, readable-stream@^3.4.0:
|
||||
string_decoder "^1.1.1"
|
||||
util-deprecate "^1.0.1"
|
||||
|
||||
regexp-clone@1.0.0, regexp-clone@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/regexp-clone/-/regexp-clone-1.0.0.tgz#222db967623277056260b992626354a04ce9bf63"
|
||||
integrity sha512-TuAasHQNamyyJ2hb97IuBEif4qBHGjPHBS64sZwytpLEqtBQ1gPJTnOaQ6qmpET16cK14kkjbazl6+p0RRv0yw==
|
||||
|
||||
require_optional@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/require_optional/-/require_optional-1.0.1.tgz#4cf35a4247f64ca3df8c2ef208cc494b1ca8fc2e"
|
||||
integrity sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==
|
||||
dependencies:
|
||||
resolve-from "^2.0.0"
|
||||
semver "^5.1.0"
|
||||
|
||||
resolve-from@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-2.0.0.tgz#9480ab20e94ffa1d9e80a804c7ea147611966b57"
|
||||
integrity sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=
|
||||
|
||||
rimraf@^3.0.2:
|
||||
version "3.0.2"
|
||||
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
|
||||
@@ -250,11 +392,50 @@ rimraf@^3.0.2:
|
||||
dependencies:
|
||||
glob "^7.1.3"
|
||||
|
||||
safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
|
||||
version "5.1.2"
|
||||
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
|
||||
integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
|
||||
|
||||
safe-buffer@^5.1.1, safe-buffer@^5.1.2:
|
||||
version "5.2.1"
|
||||
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
|
||||
integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
|
||||
|
||||
safe-buffer@~5.2.0:
|
||||
version "5.2.0"
|
||||
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519"
|
||||
integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==
|
||||
|
||||
saslprep@^1.0.0:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.yarnpkg.com/saslprep/-/saslprep-1.0.3.tgz#4c02f946b56cf54297e347ba1093e7acac4cf226"
|
||||
integrity sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==
|
||||
dependencies:
|
||||
sparse-bitfield "^3.0.3"
|
||||
|
||||
semver@^5.1.0:
|
||||
version "5.7.1"
|
||||
resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
|
||||
integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
|
||||
|
||||
sift@7.0.1:
|
||||
version "7.0.1"
|
||||
resolved "https://registry.yarnpkg.com/sift/-/sift-7.0.1.tgz#47d62c50b159d316f1372f8b53f9c10cd21a4b08"
|
||||
integrity sha512-oqD7PMJ+uO6jV9EQCl0LrRw1OwsiPsiFQR5AR30heR+4Dl7jBBbDLnNvWiak20tzZlSE1H7RB30SX/1j/YYT7g==
|
||||
|
||||
sliced@1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/sliced/-/sliced-1.0.1.tgz#0b3a662b5d04c3177b1926bea82b03f837a2ef41"
|
||||
integrity sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E=
|
||||
|
||||
sparse-bitfield@^3.0.3:
|
||||
version "3.0.3"
|
||||
resolved "https://registry.yarnpkg.com/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz#ff4ae6e68656056ba4b3e792ab3334d38273ca11"
|
||||
integrity sha1-/0rm5oZWBWuks+eSqzM004JzyhE=
|
||||
dependencies:
|
||||
memory-pager "^1.0.2"
|
||||
|
||||
string_decoder@^1.1.1:
|
||||
version "1.3.0"
|
||||
resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
|
||||
@@ -262,6 +443,13 @@ string_decoder@^1.1.1:
|
||||
dependencies:
|
||||
safe-buffer "~5.2.0"
|
||||
|
||||
string_decoder@~1.1.1:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
|
||||
integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
|
||||
dependencies:
|
||||
safe-buffer "~5.1.0"
|
||||
|
||||
tar-fs@^2.0.0:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.0.1.tgz#e44086c1c60d31a4f0cf893b1c4e155dabfae9e2"
|
||||
@@ -296,7 +484,7 @@ unbzip2-stream@^1.3.3:
|
||||
buffer "^5.2.1"
|
||||
through "^2.3.8"
|
||||
|
||||
util-deprecate@^1.0.1:
|
||||
util-deprecate@^1.0.1, util-deprecate@~1.0.1:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
|
||||
integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
|
||||
|
||||
Reference in New Issue
Block a user