Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
X
xanadu
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Analytics
Analytics
Repository
Value Stream
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Commits
Open sidebar
SYNERG
xanadu
Commits
99bb6f85
Commit
99bb6f85
authored
Mar 09, 2020
by
Naman Dixit
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' of
https://git.cse.iitb.ac.in/synerg/xanadu
parents
0ec3406c
901024e7
Changes
21
Hide whitespace changes
Inline
Side-by-side
Showing
21 changed files
with
1317 additions
and
200 deletions
+1317
-200
dispatch_system/.gitignore
dispatch_system/.gitignore
+3
-1
dispatch_system/constants.json
dispatch_system/constants.json
+13
-1
dispatch_system/dispatch_daemon/execute.js
dispatch_system/dispatch_daemon/execute.js
+3
-3
dispatch_system/dispatch_daemon/lib.js
dispatch_system/dispatch_daemon/lib.js
+1
-1
dispatch_system/dispatch_daemon/package.json
dispatch_system/dispatch_daemon/package.json
+1
-0
dispatch_system/dispatch_manager/index.js
dispatch_system/dispatch_manager/index.js
+161
-119
dispatch_system/dispatch_manager/lib.js
dispatch_system/dispatch_manager/lib.js
+137
-13
dispatch_system/dispatch_manager/package.json
dispatch_system/dispatch_manager/package.json
+2
-0
dispatch_system/dispatch_manager/repository/worker_env/env.js
...atch_system/dispatch_manager/repository/worker_env/env.js
+29
-8
dispatch_system/dispatch_manager/repository/worker_env/node_modules/express/package.json
...r/repository/worker_env/node_modules/express/package.json
+7
-7
dispatch_system/dispatch_manager/repository/worker_env/node_modules/ipaddr.js/README.md
...er/repository/worker_env/node_modules/ipaddr.js/README.md
+1
-1
dispatch_system/dispatch_manager/repository/worker_env/node_modules/ipaddr.js/lib/ipaddr.js.d.ts
...tory/worker_env/node_modules/ipaddr.js/lib/ipaddr.js.d.ts
+6
-9
dispatch_system/dispatch_manager/repository/worker_env/node_modules/ipaddr.js/package.json
...repository/worker_env/node_modules/ipaddr.js/package.json
+13
-12
dispatch_system/dispatch_manager/repository/worker_env/node_modules/proxy-addr/HISTORY.md
.../repository/worker_env/node_modules/proxy-addr/HISTORY.md
+5
-0
dispatch_system/dispatch_manager/repository/worker_env/node_modules/proxy-addr/index.js
...er/repository/worker_env/node_modules/proxy-addr/index.js
+1
-1
dispatch_system/dispatch_manager/repository/worker_env/node_modules/proxy-addr/package.json
...epository/worker_env/node_modules/proxy-addr/package.json
+16
-16
dispatch_system/dispatch_manager/repository/worker_env/package-lock.json
.../dispatch_manager/repository/worker_env/package-lock.json
+909
-7
dispatch_system/dispatch_manager/repository/worker_env/package.json
...ystem/dispatch_manager/repository/worker_env/package.json
+3
-1
dispatch_system/dispatch_manager/swagger.json
dispatch_system/dispatch_manager/swagger.json
+4
-0
resource_manager/src/common/cJSON
resource_manager/src/common/cJSON
+1
-0
resource_manager/src/common/nlib
resource_manager/src/common/nlib
+1
-0
No files found.
dispatch_system/.gitignore
View file @
99bb6f85
...
@@ -3,4 +3,6 @@ node_modules
...
@@ -3,4 +3,6 @@ node_modules
package-lock.json
package-lock.json
firecracker*
firecracker*
secrets.json
secrets.json
grunt
grunt
\ No newline at end of file
.clinic
rm_dummy.js
\ No newline at end of file
dispatch_system/constants.json
View file @
99bb6f85
...
@@ -6,5 +6,17 @@
...
@@ -6,5 +6,17 @@
"grunt_host"
:
"https://www.namandixit.net/lovecraftian_nightmares/grunt"
,
"grunt_host"
:
"https://www.namandixit.net/lovecraftian_nightmares/grunt"
,
"log_channel"
:
"LOG_COMMON"
,
"log_channel"
:
"LOG_COMMON"
,
"couchdb_host"
:
"10.129.6.5:5984"
,
"couchdb_host"
:
"10.129.6.5:5984"
,
"couchdb_db_name"
:
"serverless"
"couchdb_db_name"
:
"serverless"
,
"topics"
:
{
"request_dm_2_rm"
:
"request"
,
"heartbeat"
:
"heartbeat"
,
"deployed"
:
"deployed"
,
"remove_worker"
:
"removeWorker"
,
"response_rm_2_dm"
:
"RESPONSE_RM_2_DM_DUMMY"
,
"hscale"
:
"hscale"
},
"autoscalar_metrics"
:
{
"open_request_threshold"
:
100
},
"speculative_deployment"
:
true
}
}
\ No newline at end of file
dispatch_system/dispatch_daemon/execute.js
View file @
99bb6f85
...
@@ -57,7 +57,7 @@ function runProcess(local_repository, metadata) {
...
@@ -57,7 +57,7 @@ function runProcess(local_repository, metadata) {
});
});
process
.
on
(
'
close
'
,
(
code
)
=>
{
process
.
on
(
'
close
'
,
(
code
)
=>
{
resolve
(
code
);
resolve
(
process
.
pid
);
logger
.
info
(
`Process Environment with resource_id
${
resource_id
}
blown`
);
logger
.
info
(
`Process Environment with resource_id
${
resource_id
}
blown`
);
});
});
})
})
...
@@ -100,7 +100,7 @@ function runContainer(metadata) {
...
@@ -100,7 +100,7 @@ function runContainer(metadata) {
let
timeDifference
=
Math
.
ceil
((
Date
.
now
()
-
timeStart
))
let
timeDifference
=
Math
.
ceil
((
Date
.
now
()
-
timeStart
))
logger
.
info
(
"
container run time taken:
"
,
timeDifference
);
logger
.
info
(
"
container run time taken:
"
,
timeDifference
);
result
+=
data
;
result
+=
data
;
resolve
(
res
ult
);
resolve
(
res
ource_id
);
});
});
process
.
stderr
.
on
(
'
data
'
,
(
data
)
=>
{
process
.
stderr
.
on
(
'
data
'
,
(
data
)
=>
{
...
@@ -126,7 +126,7 @@ function runContainer(metadata) {
...
@@ -126,7 +126,7 @@ function runContainer(metadata) {
logger
.
info
(
`stdout:
${
data
}
`
);
logger
.
info
(
`stdout:
${
data
}
`
);
let
timeDifference
=
Math
.
ceil
((
Date
.
now
()
-
timeStart
))
let
timeDifference
=
Math
.
ceil
((
Date
.
now
()
-
timeStart
))
logger
.
info
(
"
container run time taken:
"
,
timeDifference
);
logger
.
info
(
"
container run time taken:
"
,
timeDifference
);
resolve
(
res
ult
);
resolve
(
res
ource_id
);
});
});
process
.
stderr
.
on
(
'
data
'
,
(
data
)
=>
{
process
.
stderr
.
on
(
'
data
'
,
(
data
)
=>
{
...
...
dispatch_system/dispatch_daemon/lib.js
View file @
99bb6f85
...
@@ -55,7 +55,7 @@ var download = function (url, dest, cb) {
...
@@ -55,7 +55,7 @@ var download = function (url, dest, cb) {
console
.
log
(
url
);
console
.
log
(
url
);
if
(
!
fs
.
existsSync
(
dest
))
{
if
(
!
fs
.
existsSync
(
dest
))
{
var
file
=
fs
.
createWriteStream
(
dest
);
var
file
=
fs
.
createWriteStream
(
dest
);
var
request
=
http
.
get
(
url
,
function
(
response
)
{
var
request
=
http
s
.
get
(
url
,
function
(
response
)
{
response
.
pipe
(
file
);
response
.
pipe
(
file
);
file
.
on
(
'
finish
'
,
function
()
{
file
.
on
(
'
finish
'
,
function
()
{
file
.
close
(
cb
);
// close() is async, call cb after close completes.
file
.
close
(
cb
);
// close() is async, call cb after close completes.
...
...
dispatch_system/dispatch_daemon/package.json
View file @
99bb6f85
...
@@ -17,6 +17,7 @@
...
@@ -17,6 +17,7 @@
"morgan"
:
"^1.9.1"
,
"morgan"
:
"^1.9.1"
,
"mqtt"
:
"^3.0.0"
,
"mqtt"
:
"^3.0.0"
,
"redis"
:
"^2.8.0"
,
"redis"
:
"^2.8.0"
,
"request"
:
"^2.88.2"
,
"winston"
:
"^3.2.1"
"winston"
:
"^3.2.1"
}
}
}
}
dispatch_system/dispatch_manager/index.js
View file @
99bb6f85
...
@@ -10,6 +10,8 @@ const { spawn } = require('child_process');
...
@@ -10,6 +10,8 @@ const { spawn } = require('child_process');
const
morgan
=
require
(
'
morgan
'
)
const
morgan
=
require
(
'
morgan
'
)
const
heap
=
require
(
'
heap
'
)
const
heap
=
require
(
'
heap
'
)
const
fetch
=
require
(
'
node-fetch
'
);
const
fetch
=
require
(
'
node-fetch
'
);
const
swStats
=
require
(
'
swagger-stats
'
);
const
apiSpec
=
require
(
'
./swagger.json
'
);
let
metadataDB
=
`http://
${
secrets
.
couchdb_username
}
:
${
secrets
.
couchdb_password
}
@
${
constants
.
couchdb_host
}
`
let
metadataDB
=
`http://
${
secrets
.
couchdb_username
}
:
${
secrets
.
couchdb_password
}
@
${
constants
.
couchdb_host
}
`
metadataDB
=
metadataDB
+
"
/
"
+
constants
.
couchdb_db_name
+
"
/
"
metadataDB
=
metadataDB
+
"
/
"
+
constants
.
couchdb_db_name
+
"
/
"
...
@@ -21,11 +23,12 @@ let date = new Date();
...
@@ -21,11 +23,12 @@ let date = new Date();
let
log_channel
=
constants
.
log_channel
let
log_channel
=
constants
.
log_channel
let
usedPort
=
new
Map
(),
// TODO: remove after integration with RM
let
usedPort
=
new
Map
(),
// TODO: remove after integration with RM
rmQueue
=
new
Map
(),
// queue holding requests for which DM is waiting for RM allocation
db
=
new
Map
(),
// queue holding request to be dispatched
db
=
new
Map
(),
// queue holding request to be dispatched
resourceMap
=
new
Map
(),
// map between resource_id and resource details like node_id, port, associated function etc
resourceMap
=
new
Map
(),
// map between resource_id and resource details like node_id, port, associated function etc
functionToResource
=
new
Map
()
// a function to resource map. Each map contains a minheap of
functionToResource
=
new
Map
()
,
// a function to resource map. Each map contains a minheap of
// resources associated with the function
// resources associated with the function
workerNodes
=
new
Map
(),
// list of worker nodes currently known to the DM
functionBranchTree
=
new
Map
()
// a tree to store function branch predictions
let
kafka
=
require
(
'
kafka-node
'
),
let
kafka
=
require
(
'
kafka-node
'
),
Producer
=
kafka
.
Producer
,
Producer
=
kafka
.
Producer
,
...
@@ -37,26 +40,28 @@ let kafka = require('kafka-node'),
...
@@ -37,26 +40,28 @@ let kafka = require('kafka-node'),
Consumer
=
kafka
.
Consumer
,
Consumer
=
kafka
.
Consumer
,
consumer
=
new
Consumer
(
client
,
consumer
=
new
Consumer
(
client
,
[
[
{
topic
:
'
heartbeat
'
},
// receives heartbeat messages from workers, also acts as worker join message
{
topic
:
constants
.
topics
.
heartbeat
},
// receives heartbeat messages from workers, also acts as worker join message
{
topic
:
"
deployed
"
},
// receives deployment confirmation from workers
{
topic
:
constants
.
topics
.
deployed
},
// receives deployment confirmation from workers
{
topic
:
"
removeWorker
"
},
// received when a executor environment is blown at the worker
{
topic
:
constants
.
topics
.
remove_worker
},
// received when a executor environment is blown at the worker
{
topic
:
"
RESPONSE_RM_2_DM
"
},
// receives deployment details from RM
{
topic
:
constants
.
topics
.
response_rm_2_dm
},
// receives deployment details from RM
{
topic
:
"
hscale
"
}
// receives signals for horizontal scaling
{
topic
:
constants
.
topics
.
hscale
}
// receives signals for horizontal scaling
],
],
[
[
{
autoCommit
:
true
}
{
autoCommit
:
true
}
])
])
app
.
use
(
morgan
(
'
combined
'
))
app
.
use
(
morgan
(
'
combined
'
,
{
skip
:
function
(
req
,
res
)
{
return
res
.
statusCode
<
400
}
}))
app
.
use
(
bodyParser
.
urlencoded
({
extended
:
true
}))
app
.
use
(
bodyParser
.
urlencoded
({
extended
:
true
}))
app
.
use
(
bodyParser
.
json
())
app
.
use
(
bodyParser
.
json
())
const
file_path
=
__dirname
+
"
/repository/
"
const
file_path
=
__dirname
+
"
/repository/
"
app
.
use
(
'
/repository
'
,
express
.
static
(
file_path
));
app
.
use
(
'
/repository
'
,
express
.
static
(
file_path
));
app
.
use
(
fileUpload
())
app
.
use
(
fileUpload
())
app
.
use
(
swStats
.
getMiddleware
({
swaggerSpec
:
apiSpec
}));
let
requestQueue
=
[]
let
requestQueue
=
[]
let
workerNodes
=
[]
const
WINDOW_SIZE
=
10
const
WINDOW_SIZE
=
10
const
port
=
constants
.
master_port
const
port
=
constants
.
master_port
...
@@ -145,9 +150,9 @@ function deployContainer(path, imageName) {
...
@@ -145,9 +150,9 @@ function deployContainer(path, imageName) {
fs
.
writeFile
(
'
./repository/Dockerfile
'
,
fs
.
writeFile
(
'
./repository/Dockerfile
'
,
`FROM node:latest
`FROM node:latest
WORKDIR /app
WORKDIR /app
COPY package.json /app
COPY
./worker_env/
package.json /app
RUN npm install
ADD ./worker_env/node_modules /app/node_modules
COPY
.
/app
COPY
${
imageName
}
.js
/app
ENTRYPOINT ["node", "
${
imageName
}
.js"]`
ENTRYPOINT ["node", "
${
imageName
}
.js"]`
,
function
(
err
)
{
,
function
(
err
)
{
if
(
err
)
{
if
(
err
)
{
...
@@ -199,10 +204,12 @@ function deployContainer(path, imageName) {
...
@@ -199,10 +204,12 @@ function deployContainer(path, imageName) {
* REST API to receive execute requests
* REST API to receive execute requests
*/
*/
app
.
post
(
'
/serverless/execute/:id
'
,
(
req
,
res
)
=>
{
app
.
post
(
'
/serverless/execute/:id
'
,
(
req
,
res
)
=>
{
let
runtime
=
req
.
body
.
runtime
let
runtime
=
req
.
body
.
runtime
let
id
=
req
.
params
.
id
+
runtime
let
id
=
req
.
params
.
id
+
runtime
if
(
functionToResource
.
has
(
id
))
{
if
(
functionToResource
.
has
(
id
))
{
libSupport
.
reverseProxy
(
req
,
res
,
functionToResource
,
resourceMap
)
libSupport
.
reverseProxy
(
req
,
res
,
functionToResource
,
resourceMap
,
functionBranchTree
)
}
else
{
}
else
{
/**
/**
* Requests are queued up before being dispatched. To prevent requests coming in for the
* Requests are queued up before being dispatched. To prevent requests coming in for the
...
@@ -239,20 +246,7 @@ function dispatch() {
...
@@ -239,20 +246,7 @@ function dispatch() {
db
.
get
(
functionHash
+
runtime
).
push
({
req
,
res
})
db
.
get
(
functionHash
+
runtime
).
push
({
req
,
res
})
let
resource_id
=
libSupport
.
makeid
(
20
)
// each function resource request is associated with an unique ID
let
resource_id
=
libSupport
.
makeid
(
20
)
// each function resource request is associated with an unique ID
logger
.
info
(
`Generated new resource ID:
${
resource_id
}
for runtime:
${
runtime
}
`
);
logger
.
info
(
`Generated new resource ID:
${
resource_id
}
for runtime:
${
runtime
}
`
);
let
node_id
=
getAddress
()
// Requests the RM for address and other metadata for function placement
let
port
=
libSupport
.
getPort
(
usedPort
)
// TODO: will be provided by the RM
let
payload
=
[{
topic
:
node_id
,
messages
:
JSON
.
stringify
({
"
type
"
:
"
execute
"
,
// Request sent to Dispatch Daemon via Kafka for actual deployment at the Worker
resource_id
,
runtime
,
functionHash
,
port
}),
partition
:
0
}]
logger
.
info
(
"
Requesting RM
"
+
JSON
.
stringify
({
logger
.
info
(
"
Requesting RM
"
+
JSON
.
stringify
({
resource_id
,
resource_id
,
"
memory
"
:
332
,
"
memory
"
:
332
,
...
@@ -261,40 +255,65 @@ function dispatch() {
...
@@ -261,40 +255,65 @@ function dispatch() {
/** uncomment when RM is unavailable */
/** uncomment when RM is unavailable */
resourceMap
.
set
(
resource_id
,
{
resourceMap
.
set
(
resource_id
,
{
runtime
,
functionHash
,
port
,
node_id
runtime
,
functionHash
,
port
:
null
,
node_id
:
null
,
})
deployed
:
false
logger
.
info
(
resourceMap
);
producer
.
send
(
payload
,
()
=>
{
logger
.
info
(
`Resource Deployment request sent to Dispatch Agent`
)
})
})
}
else
{
logger
.
info
(
"
deployment process already started waiting
"
)
db
.
get
(
functionHash
+
runtime
).
push
({
req
,
res
})
}
/** uncomment when RM is available, TODO: also update resourceMap
let
payloadToRM
=
[{
rmQueue.set(resource_id, payload)
topic
:
constants
.
topics
.
request_dm_2_rm
,
// changing from REQUEST_DM_2_RM
let payloadToRM = [{
topic: "REQUEST_DM_2_RM",
messages
:
JSON
.
stringify
({
messages
:
JSON
.
stringify
({
resource_id
,
resource_id
,
"
memory
"
:
332
,
"
memory
"
:
332
,
timestamp
:
Date
.
now
()
}),
}),
partition
:
0
partition
:
0
}]
}]
producer.send(payloadToRM, () => {
producer
.
send
(
payloadToRM
,
()
=>
{
db.set(functionHash + runtime, { req, res })
// db.set(functionHash + runtime, { req, res })
})
console
.
log
(
"
sent rm
"
);
*/
})
/**
* Speculative deployment:
* If function MLE path is present then deploy those parts of the path which are
* not already running
*/
if
(
constants
.
speculative_deployment
&&
req
.
headers
[
'
x-resource-id
'
]
===
undefined
)
{
console
.
log
(
functionBranchTree
,
req
.
params
.
id
);
if
(
functionBranchTree
.
has
(
req
.
params
.
id
))
{
let
branchInfo
=
functionBranchTree
.
get
(
req
.
params
.
id
)
console
.
log
(
"
mle_path
"
,
branchInfo
.
mle_path
);
if
(
branchInfo
.
mle_path
&&
branchInfo
.
mle_path
.
length
>
1
)
{
for
(
let
node
of
branchInfo
.
mle_path
)
{
// console.log(functionToResource);
if
(
!
functionToResource
.
has
(
node
.
node
+
runtime
)
&&
!
db
.
has
(
node
.
node
+
runtime
))
{
console
.
log
(
"
Deploying according to MLE path:
"
,
node
.
node
);
let
payload
=
[{
topic
:
constants
.
topics
.
hscale
,
messages
:
JSON
.
stringify
({
"
runtime
"
:
"
container
"
,
"
functionHash
"
:
node
.
node
})
}]
producer
.
send
(
payload
,
function
()
{
})
db
.
set
(
node
.
node
+
runtime
,
[])
}
}
}
}
}
}
else
{
logger
.
info
(
"
deployment process already started waiting
"
)
db
.
get
(
functionHash
+
runtime
).
push
({
req
,
res
})
}
}
}
}
}
function
getAddress
()
{
return
workerNodes
[
Math
.
floor
(
Math
.
random
()
*
workerNodes
.
length
)];
}
function
postDeploy
(
message
)
{
function
postDeploy
(
message
)
{
logger
.
info
(
"
Deployed Resource:
"
+
JSON
.
stringify
(
message
));
logger
.
info
(
"
Deployed Resource:
"
+
JSON
.
stringify
(
message
));
...
@@ -314,7 +333,7 @@ function postDeploy(message) {
...
@@ -314,7 +333,7 @@ function postDeploy(message) {
let
resourceHeap
=
functionToResource
.
get
(
message
.
functionHash
+
message
.
runtime
)
let
resourceHeap
=
functionToResource
.
get
(
message
.
functionHash
+
message
.
runtime
)
heap
.
push
(
resourceHeap
,
{
heap
.
push
(
resourceHeap
,
{
resource_id
:
message
.
resource_id
,
resource_id
:
message
.
resource_id
,
metric
:
0
open_request_count
:
0
},
libSupport
.
compare
)
},
libSupport
.
compare
)
logger
.
warn
(
"
Horizontally scaling up:
"
+
logger
.
warn
(
"
Horizontally scaling up:
"
+
JSON
.
stringify
(
functionToResource
.
get
(
message
.
functionHash
+
message
.
runtime
)));
JSON
.
stringify
(
functionToResource
.
get
(
message
.
functionHash
+
message
.
runtime
)));
...
@@ -328,42 +347,50 @@ function postDeploy(message) {
...
@@ -328,42 +347,50 @@ function postDeploy(message) {
let
resourceHeap
=
[]
let
resourceHeap
=
[]
heap
.
push
(
resourceHeap
,
{
heap
.
push
(
resourceHeap
,
{
resource_id
:
message
.
resource_id
,
resource_id
:
message
.
resource_id
,
metric
:
0
open_request_count
:
0
},
libSupport
.
compare
)
},
libSupport
.
compare
)
functionToResource
.
set
(
message
.
functionHash
+
message
.
runtime
,
resourceHeap
)
functionToResource
.
set
(
message
.
functionHash
+
message
.
runtime
,
resourceHeap
)
logger
.
warn
(
"
Creating new resource pool
"
logger
.
warn
(
"
Creating new resource pool
"
+
JSON
.
stringify
(
functionToResource
.
get
(
message
.
functionHash
+
message
.
runtime
)));
+
JSON
.
stringify
(
functionToResource
.
get
(
message
.
functionHash
+
message
.
runtime
)));
}
}
let
resource
=
resourceMap
.
get
(
message
.
resource_id
)
let
confirmRM
=
[{
try
{
topic
:
log_channel
,
let
resource
=
resourceMap
.
get
(
message
.
resource_id
)
messages
:
JSON
.
stringify
({
resource
.
deployed
=
true
resource_id
:
message
.
resource_id
,
let
confirmRM
=
[{
node_id
:
resource
.
node_id
,
topic
:
log_channel
,
runtime
:
resource
.
runtime
,
messages
:
JSON
.
stringify
({
function_id
:
resource
.
functionHash
,
resource_id
:
message
.
resource_id
,
"
reason
"
:
"
deployment
"
,
// type: "deployment_launch",
"
status
"
:
true
,
node_id
:
resource
.
node_id
,
"
timestamp
"
:
date
.
toISOString
()
runtime
:
resource
.
runtime
,
}),
function_id
:
resource
.
functionHash
,
partition
:
0
entity_id
:
message
.
entity_id
,
}]
"
reason
"
:
"
deployment
"
,
producer
.
send
(
confirmRM
,
()
=>
{
"
status
"
:
true
,
logger
.
info
(
`Confirmed RM for successful deployment resource_id:
${
message
.
resource_id
}
deployment`
)
"
timestamp
"
:
Date
.
now
()
})
}),
partition
:
0
if
(
db
.
has
(
message
.
functionHash
+
message
.
runtime
))
{
}]
let
sendQueue
=
db
.
get
(
message
.
functionHash
+
message
.
runtime
)
producer
.
send
(
confirmRM
,
()
=>
{
logger
.
info
(
"
forwarding request via reverse proxy to:
"
+
JSON
.
stringify
(
resource
));
logger
.
info
(
`Confirmed RM for successful deployment resource_id:
${
message
.
resource_id
}
deployment`
)
while
(
sendQueue
&&
sendQueue
.
length
!=
0
)
{
})
let
{
req
,
res
}
=
sendQueue
.
shift
()
libSupport
.
reverseProxy
(
req
,
res
,
functionToResource
,
resourceMap
)
if
(
db
.
has
(
message
.
functionHash
+
message
.
runtime
))
{
.
then
(()
=>
{
let
sendQueue
=
db
.
get
(
message
.
functionHash
+
message
.
runtime
)
logger
.
info
(
"
forwarding request via reverse proxy to:
"
+
JSON
.
stringify
(
resource
));
while
(
sendQueue
&&
sendQueue
.
length
!=
0
)
{
let
{
req
,
res
}
=
sendQueue
.
shift
()
libSupport
.
reverseProxy
(
req
,
res
,
functionToResource
,
resourceMap
,
functionBranchTree
)
.
then
(()
=>
{
})
})
}
db
.
delete
(
message
.
functionHash
+
message
.
runtime
)
}
}
db
.
delete
(
message
.
functionHash
+
message
.
runtime
)
}
catch
(
e
)
{
logger
.
error
(
e
.
message
)
}
}
}
}
...
@@ -372,18 +399,20 @@ consumer.on('message', function (message) {
...
@@ -372,18 +399,20 @@ consumer.on('message', function (message) {
let
topic
=
message
.
topic
let
topic
=
message
.
topic
message
=
message
.
value
message
=
message
.
value
// console.log(topic, message)
if
(
topic
===
"
response
"
)
{
if
(
topic
===
"
response
"
)
{
logger
.
info
(
"
response
"
+
message
);
logger
.
info
(
"
response
"
+
message
);
}
else
if
(
topic
===
"
heartbeat
"
)
{
}
else
if
(
topic
===
constants
.
topics
.
heartbeat
)
{
message
=
JSON
.
parse
(
message
)
message
=
JSON
.
parse
(
message
)
if
(
Date
.
now
()
-
message
.
timestamp
<
1000
)
if
(
Date
.
now
()
-
message
.
timestamp
<
1000
)
if
(
workerNodes
.
indexOf
(
message
.
address
)
===
-
1
)
{
if
(
!
workerNodes
.
has
(
message
.
address
))
{
workerNodes
.
push
(
message
.
address
)
workerNodes
.
set
(
message
.
address
,
message
.
timestamp
)
logger
.
warn
(
"
New worker discovered. Worker List:
"
+
workerNodes
)
logger
.
warn
(
"
New worker discovered. Worker List:
"
)
logger
.
warn
(
workerNodes
)
}
}
}
else
if
(
topic
==
"
deployed
"
)
{
}
else
if
(
topic
==
constants
.
topics
.
deployed
)
{
try
{
try
{
message
=
JSON
.
parse
(
message
)
message
=
JSON
.
parse
(
message
)
}
catch
(
e
)
{
}
catch
(
e
)
{
...
@@ -391,7 +420,7 @@ consumer.on('message', function (message) {
...
@@ -391,7 +420,7 @@ consumer.on('message', function (message) {
}
}
postDeploy
(
message
)
postDeploy
(
message
)
}
else
if
(
topic
==
"
removeWorker
"
)
{
}
else
if
(
topic
==
constants
.
topics
.
remove_worker
)
{
logger
.
warn
(
"
Worker blown: Removing Metadata
"
+
message
);
logger
.
warn
(
"
Worker blown: Removing Metadata
"
+
message
);
try
{
try
{
message
=
JSON
.
parse
(
message
)
message
=
JSON
.
parse
(
message
)
...
@@ -416,24 +445,13 @@ consumer.on('message', function (message) {
...
@@ -416,24 +445,13 @@ consumer.on('message', function (message) {
}
}
}
else
if
(
topic
==
"
hscale
"
)
{
}
else
if
(
topic
==
constants
.
topics
.
hscale
)
{
message
=
JSON
.
parse
(
message
)
message
=
JSON
.
parse
(
message
)
let
resource_id
=
libSupport
.
makeid
(
20
),
// each function resource request is associated with an unique ID
let
resource_id
=
libSupport
.
makeid
(
20
),
// each function resource request is associated with an unique ID
node_id
=
getAddress
(),
// Requests the RM for address and other metadata for function placement
port
=
libSupport
.
getPort
(
usedPort
),
// TODO: will be provided by the RM
runtime
=
message
.
runtime
,
runtime
=
message
.
runtime
,
functionHash
=
message
.
functionHash
functionHash
=
message
.
functionHash
console
.
log
(
"
Resource Status:
"
,
functionToResource
);
let
payload
=
[{
topic
:
node_id
,
messages
:
JSON
.
stringify
({
"
type
"
:
"
execute
"
,
// Request sent to Dispatch Daemon via Kafka for actual deployment at the Worker
resource_id
,
runtime
,
functionHash
,
port
}),
partition
:
0
}]
logger
.
info
(
"
Requesting RM
"
+
JSON
.
stringify
({
logger
.
info
(
"
Requesting RM
"
+
JSON
.
stringify
({
resource_id
,
resource_id
,
"
memory
"
:
332
,
"
memory
"
:
332
,
...
@@ -442,31 +460,55 @@ consumer.on('message', function (message) {
...
@@ -442,31 +460,55 @@ consumer.on('message', function (message) {
/** uncomment when RM is unavailable */
/** uncomment when RM is unavailable */
resourceMap
.
set
(
resource_id
,
{
resourceMap
.
set
(
resource_id
,
{
runtime
,
functionHash
,
port
,
node_id
runtime
,
functionHash
,
port
:
null
,
node_id
:
null
,
deployed
:
false
})
})
logger
.
info
(
resourceMap
);
producer
.
send
(
payload
,
()
=>
{
logger
.
info
(
`Resource Deployment request sent to Dispatch Agent`
)
let
payloadToRM
=
[{
topic
:
constants
.
topics
.
request_dm_2_rm
,
// changing from REQUEST_DM_2_RM
messages
:
JSON
.
stringify
({
resource_id
,
"
memory
"
:
332
,
}),
partition
:
0
}]
producer
.
send
(
payloadToRM
,
()
=>
{
// db.set(functionHash + runtime, { req, res })
console
.
log
(
"
sent rm
"
);
})
})
}
else
if
(
topic
==
"
RESPONSE_RM_2_DM
"
)
{
}
else
if
(
topic
==
constants
.
topics
.
response_rm_2_dm
)
{
logger
.
info
(
"
Response from RM:
"
+
message
);
logger
.
info
(
"
Response from RM:
"
+
message
);
message
=
JSON
.
parse
(
message
)
message
=
JSON
.
parse
(
message
)
let
resourceChoice
=
message
.
nodes
[
0
]
let
payload
=
rmQueue
.
get
(
message
.
id
)
if
(
resourceMap
.
has
(
message
.
resource_id
))
{
if
(
payload
!=
null
)
{
let
resource
=
resourceMap
.
get
(
message
.
resource_id
)
payload
[
0
].
topic
=
message
.
nodes
[
0
]
if
(
typeof
resourceChoice
===
'
string
'
)
{
logger
.
info
(
payload
);
resource
.
port
=
libSupport
.
getPort
(
usedPort
)
/** get port and other resources */
resource
.
node_id
=
resourceChoice
let
resource
=
resourceMap
.
get
(
message
.
id
)
}
else
{
resource
.
node_id
=
message
.
nodes
[
0
]
// TODO: update this to message.nodes[0].node_id
resource
.
port
=
(
resourceChoice
.
port
)
?
resourceChoice
.
port
:
libSupport
.
getPort
(
usedPort
)
// resource.port = message.nodes[0].port TODO: update after RM supports port allocation
resource
.
node_id
=
resourceChoice
.
node_id
resourceMap
.
set
(
message
.
id
,
resource
)
}
let
payload
=
[{
topic
:
resource
.
node_id
,
messages
:
JSON
.
stringify
({
"
type
"
:
"
execute
"
,
// Request sent to Dispatch Daemon via Kafka for actual deployment at the Worker
resource_id
:
message
.
resource_id
,
runtime
:
resource
.
runtime
,
functionHash
:
resource
.
functionHash
,
port
:
resource
.
port
}),
partition
:
0
}]
logger
.
info
(
resourceMap
);
logger
.
info
(
resourceMap
);
producer
.
send
(
payload
,
()
=>
{
})
producer
.
send
(
payload
,
()
=>
{
logger
.
info
(
`Resource Deployment request sent to Dispatch Agent`
)
})
}
else
{
}
else
{
logger
.
error
(
"
something went wrong
"
);
logger
.
error
(
"
something went wrong, resource not found in resourceMap
"
)
}
}
}
}
...
@@ -474,13 +516,13 @@ consumer.on('message', function (message) {
...
@@ -474,13 +516,13 @@ consumer.on('message', function (message) {
function
autoscalar
()
{
function
autoscalar
()
{
functionToResource
.
forEach
((
resourceList
,
functionKey
,
map
)
=>
{
functionToResource
.
forEach
((
resourceList
,
functionKey
,
map
)
=>
{
console
.
log
(
resourceList
);
if
(
resourceList
.
length
>
0
&&
resourceList
[
resourceList
.
length
-
1
].
metric
>
100
)
{
if
(
resourceList
.
length
>
0
&&
resourceList
[
resourceList
.
length
-
1
].
open_request_count
>
constants
.
autoscalar_metrics
.
open_request_threshold
)
{
let
resource
=
resourceMap
.
get
(
resourceList
[
resourceList
.
length
-
1
].
resource_id
)
let
resource
=
resourceMap
.
get
(
resourceList
[
resourceList
.
length
-
1
].
resource_id
)
logger
.
warn
(
`resource
${
resourceList
[
resourceList
.
length
-
1
]}
exceeded autoscalar threshold. Scaling up!`
)
logger
.
warn
(
`resource
${
resourceList
[
resourceList
.
length
-
1
]}
exceeded autoscalar threshold. Scaling up!`
)
let
payload
=
[{
let
payload
=
[{
topic
:
"
hscale
"
,
topic
:
constants
.
topics
.
hscale
,
messages
:
JSON
.
stringify
({
"
runtime
"
:
resource
.
runtime
,
"
functionHash
"
:
resource
.
functionHash
})
messages
:
JSON
.
stringify
({
"
runtime
"
:
resource
.
runtime
,
"
functionHash
"
:
resource
.
functionHash
})
}]
}]
producer
.
send
(
payload
,
function
()
{
})
producer
.
send
(
payload
,
function
()
{
})
...
@@ -489,7 +531,7 @@ function autoscalar() {
...
@@ -489,7 +531,7 @@ function autoscalar() {
}
}
setInterval
(
libSupport
.
viterbi
,
1000
,
functionBranchTree
)
setInterval
(
autoscalar
,
1000
);
setInterval
(
autoscalar
,
1000
);
setInterval
(
dispatch
,
1000
);
setInterval
(
dispatch
,
1000
);
app
.
listen
(
port
,
()
=>
logger
.
info
(
`Server listening on port
${
port
}
!`
))
app
.
listen
(
port
,
()
=>
logger
.
info
(
`Server listening on port
${
port
}
!`
))
\ No newline at end of file
dispatch_system/dispatch_manager/lib.js
View file @
99bb6f85
...
@@ -3,6 +3,8 @@ const fs = require('fs')
...
@@ -3,6 +3,8 @@ const fs = require('fs')
const
rp
=
require
(
'
request-promise
'
);
const
rp
=
require
(
'
request-promise
'
);
const
fetch
=
require
(
'
node-fetch
'
);
const
fetch
=
require
(
'
node-fetch
'
);
const
winston
=
require
(
'
winston
'
)
const
winston
=
require
(
'
winston
'
)
const
constants
=
require
(
'
.././constants.json
'
)
const
{
createLogger
,
format
,
transports
}
=
winston
;
const
{
createLogger
,
format
,
transports
}
=
winston
;
const
heap
=
require
(
'
heap
'
)
const
heap
=
require
(
'
heap
'
)
...
@@ -43,8 +45,8 @@ function generateExecutor(functionPath, functionHash) {
...
@@ -43,8 +45,8 @@ function generateExecutor(functionPath, functionHash) {
return
hash
return
hash
}
}
function
reverseProxy
(
req
,
res
,
functionToResource
,
resourceMap
)
{
function
reverseProxy
(
req
,
res
,
functionToResource
,
resourceMap
,
functionBranchTree
)
{
branchChainPredictor
(
req
,
resourceMap
,
functionToResource
,
functionBranchTree
)
return
new
Promise
((
resolve
,
reject
)
=>
{
return
new
Promise
((
resolve
,
reject
)
=>
{
let
runtime
=
req
.
body
.
runtime
let
runtime
=
req
.
body
.
runtime
let
id
=
req
.
params
.
id
+
runtime
let
id
=
req
.
params
.
id
+
runtime
...
@@ -54,14 +56,14 @@ function reverseProxy(req, res, functionToResource, resourceMap) {
...
@@ -54,14 +56,14 @@ function reverseProxy(req, res, functionToResource, resourceMap) {
let
functionHeap
=
functionToResource
.
get
(
id
)
let
functionHeap
=
functionToResource
.
get
(
id
)
let
forwardTo
=
functionHeap
[
0
]
let
forwardTo
=
functionHeap
[
0
]
let
resource
=
resourceMap
.
get
(
forwardTo
.
resource_id
)
let
resource
=
resourceMap
.
get
(
forwardTo
.
resource_id
)
logger
.
info
(
`Choosing resource
${
JSON
.
stringify
(
forwardTo
.
resource_id
)}
`
+
//
logger.info(`Choosing resource ${JSON.stringify(forwardTo.resource_id)}` +
"
\n
forwarding via reverse proxy to:
"
+
JSON
.
stringify
(
resource
));
//
"\n forwarding via reverse proxy to: " + JSON.stringify(resource));
let
url
=
`http://
${
resource
.
node_id
}
:
${
resource
.
port
}
/serverless/function/execute`
let
url
=
`http://
${
resource
.
node_id
}
:
${
resource
.
port
}
/serverless/function/execute`
logger
.
info
(
"
Request received at reverseproxy. Forwarding to:
"
+
url
);
//
logger.info("Request received at reverseproxy. Forwarding to: " + url);
forwardTo
.
metric
+=
1
forwardTo
.
open_request_count
+=
1
heap
.
heapify
(
functionHeap
,
compare
)
heap
.
heapify
(
functionHeap
,
compare
)
logger
.
info
(
functionHeap
);
//
logger.info(functionHeap);
var
options
=
{
var
options
=
{
method
:
'
POST
'
,
method
:
'
POST
'
,
...
@@ -77,15 +79,13 @@ function reverseProxy(req, res, functionToResource, resourceMap) {
...
@@ -77,15 +79,13 @@ function reverseProxy(req, res, functionToResource, resourceMap) {
.
then
(
function
(
parsedBody
)
{
.
then
(
function
(
parsedBody
)
{
res
.
json
(
parsedBody
)
res
.
json
(
parsedBody
)
forwardTo
.
metric
-=
1
forwardTo
.
open_request_count
-=
1
heap
.
heapify
(
functionHeap
,
compare
)
heap
.
heapify
(
functionHeap
,
compare
)
console
.
log
(
functionHeap
);
resolve
()
resolve
()
})
})
.
catch
(
function
(
err
)
{
.
catch
(
function
(
err
)
{
forwardTo
.
metric
-=
1
forwardTo
.
open_request_count
-=
1
heap
.
heapify
(
functionHeap
,
compare
)
heap
.
heapify
(
functionHeap
,
compare
)
console
.
log
(
functionHeap
);
logger
.
error
(
"
error
"
+
err
.
error
.
errno
);
logger
.
error
(
"
error
"
+
err
.
error
.
errno
);
res
.
json
(
err
.
message
).
status
(
err
.
statusCode
)
res
.
json
(
err
.
message
).
status
(
err
.
statusCode
)
resolve
()
resolve
()
...
@@ -136,9 +136,133 @@ const logger = winston.createLogger({
...
@@ -136,9 +136,133 @@ const logger = winston.createLogger({
});
});
function
compare
(
a
,
b
)
{
function
compare
(
a
,
b
)
{
return
a
.
metric
-
b
.
metric
return
a
.
open_request_count
-
b
.
open_request_count
}
function
branchChainPredictor
(
req
,
resourceMap
,
functionToResource
,
functionBranchTree
)
{
// console.log(req.headers['x-resource-id']);
if
(
req
.
headers
[
'
x-resource-id
'
]
===
undefined
)
{
let
functionHash
=
req
.
params
.
id
if
(
functionBranchTree
.
has
(
functionHash
))
{
let
branchInfo
=
functionBranchTree
.
get
(
functionHash
)
branchInfo
.
req_count
++
}
else
{
let
data
=
{
req_count
:
1
,
parent
:
true
,
branches
:
new
Map
()
}
functionBranchTree
.
set
(
functionHash
,
data
)
}
}
else
{
let
resource_id
=
req
.
headers
[
'
x-resource-id
'
]
let
resource
=
resourceMap
.
get
(
resource_id
)
let
forwardBranch
=
req
.
params
.
id
if
(
!
functionBranchTree
.
has
(
resource
.
functionHash
))
{
let
data
=
{
req_count
:
1
,
parent
:
false
,
branches
:
new
Map
()
}
data
.
branches
.
set
(
forwardBranch
,
1
)
functionBranchTree
.
set
(
resource
.
functionHash
,
data
)
}
else
{
let
branchInfo
=
functionBranchTree
.
get
(
resource
.
functionHash
)
if
(
!
branchInfo
.
parent
)
branchInfo
.
req_count
++
if
(
branchInfo
.
branches
.
has
(
forwardBranch
))
{
let
branchProb
=
branchInfo
.
branches
.
get
(
forwardBranch
)
branchProb
=
(
branchProb
*
(
branchInfo
.
req_count
-
1
)
+
1.0
)
branchInfo
.
branches
.
set
(
forwardBranch
,
branchProb
)
}
else
{
branchInfo
.
branches
.
set
(
forwardBranch
,
1.0
)
}
for
(
let
[
branch
,
prob
]
of
branchInfo
.
branches
.
entries
())
{
if
(
branch
!==
forwardBranch
)
prob
*=
(
branchInfo
.
req_count
-
1
)
prob
/=
branchInfo
.
req_count
branchInfo
.
branches
.
set
(
branch
,
prob
)
}
}
}
// console.log("branch tree", functionBranchTree);
}
function
viterbi
(
functionBranchTree
)
{
functionBranchTree
.
forEach
((
metadata
,
node
)
=>
{
if
(
metadata
.
parent
&&
metadata
.
req_count
%
5
==
0
)
{
let
path
=
[]
let
parents
=
[[
node
,
{
prob
:
1
,
metadata
}]]
path
.
push
({
node
,
probability
:
1
})
let
siblings
=
new
Map
()
while
(
parents
.
length
>
0
)
{
// console.log("parent_group", parents);
for
(
const
parent
of
parents
)
{
// console.log("=========begin==========\n",parent, "\n=============end============");
// console.log(parent[1].metadata);
if
(
parent
[
1
].
metadata
===
undefined
)
continue
let
forwardBranches
=
parent
[
1
].
metadata
.
branches
// console.log(forwardBranches);
let
parentProbability
=
parent
[
1
].
prob
forwardBranches
.
forEach
((
branchProb
,
subNode
)
=>
{
let
probability
=
0
if
(
siblings
.
has
(
subNode
))
probability
=
siblings
.
get
(
subNode
)
probability
+=
branchProb
*
parentProbability
// console.log("prob", probability);
siblings
.
set
(
subNode
,
probability
)
})
// console.log("siblings", siblings);
}
parents
=
[]
let
maxSibling
,
maxProb
=
0
siblings
.
forEach
((
prob
,
sibling
)
=>
{
if
(
prob
>
maxProb
)
{
maxSibling
=
sibling
maxProb
=
prob
}
})
parentIDs
=
Array
.
from
(
siblings
.
keys
()
);
for
(
const
id
of
parentIDs
)
{
let
metadata
=
functionBranchTree
.
get
(
id
)
parents
.
push
([
id
,
{
prob
:
siblings
.
get
(
id
),
metadata
}
])
}
if
(
maxSibling
!==
undefined
)
path
.
push
({
node
:
maxSibling
,
probability
:
maxProb
})
siblings
=
new
Map
()
}
if
(
path
.
length
>
0
)
console
.
log
(
"
path
"
,
path
);
metadata
.
mle_path
=
path
}
});
}
}
module
.
exports
=
{
module
.
exports
=
{
makeid
,
generateExecutor
,
reverseProxy
,
getPort
,
logger
,
compare
makeid
,
generateExecutor
,
reverseProxy
,
getPort
,
logger
,
compare
,
viterbi
}
}
\ No newline at end of file
dispatch_system/dispatch_manager/package.json
View file @
99bb6f85
...
@@ -15,6 +15,7 @@
...
@@ -15,6 +15,7 @@
"express-fileupload"
:
"^1.1.6"
,
"express-fileupload"
:
"^1.1.6"
,
"heap"
:
"^0.2.6"
,
"heap"
:
"^0.2.6"
,
"isolated-vm"
:
"^3.0.0"
,
"isolated-vm"
:
"^3.0.0"
,
"kafka-logger"
:
"^7.1.0"
,
"kafka-node"
:
"^5.0.0"
,
"kafka-node"
:
"^5.0.0"
,
"morgan"
:
"^1.9.1"
,
"morgan"
:
"^1.9.1"
,
"mqtt"
:
"^3.0.0"
,
"mqtt"
:
"^3.0.0"
,
...
@@ -23,6 +24,7 @@
...
@@ -23,6 +24,7 @@
"request"
:
"^2.88.0"
,
"request"
:
"^2.88.0"
,
"request-promise"
:
"^4.2.5"
,
"request-promise"
:
"^4.2.5"
,
"save"
:
"^2.4.0"
,
"save"
:
"^2.4.0"
,
"swagger-stats"
:
"^0.95.16"
,
"winston"
:
"^3.2.1"
"winston"
:
"^3.2.1"
}
}
}
}
dispatch_system/dispatch_manager/repository/worker_env/env.js
View file @
99bb6f85
'
use strict
'
;
'
use strict
'
;
const
express
=
require
(
'
express
'
)
const
express
=
require
(
'
express
'
)
const
bodyParser
=
require
(
'
body-parser
'
)
const
bodyParser
=
require
(
'
body-parser
'
)
let
request
=
require
(
'
request
'
)
const
process
=
require
(
'
process
'
)
const
app
=
express
()
const
app
=
express
()
let
port
=
5000
,
resource_id
,
functionHash
,
runtime
let
port
=
5000
,
resource_id
,
functionHash
,
runtime
,
idleTime
=
30
resource_id
=
process
.
argv
[
2
]
resource_id
=
process
.
argv
[
2
]
functionHash
=
process
.
argv
[
3
]
functionHash
=
process
.
argv
[
3
]
port
=
process
.
argv
[
4
]
port
=
process
.
argv
[
4
]
runtime
=
process
.
argv
[
5
]
runtime
=
process
.
argv
[
5
]
request
=
request
.
defaults
({
headers
:
{
'
x-resource-id
'
:
resource_id
}
});
let
kafka
=
require
(
'
kafka-node
'
),
let
kafka
=
require
(
'
kafka-node
'
),
Producer
=
kafka
.
Producer
,
Producer
=
kafka
.
Producer
,
...
@@ -19,17 +25,26 @@ let kafka = require('kafka-node'),
...
@@ -19,17 +25,26 @@ let kafka = require('kafka-node'),
app
.
use
(
bodyParser
.
urlencoded
({
extended
:
true
}))
app
.
use
(
bodyParser
.
urlencoded
({
extended
:
true
}))
app
.
use
(
bodyParser
.
json
())
app
.
use
(
bodyParser
.
json
())
let
lastRequest
=
Date
.
now
()
let
lastRequest
=
Date
.
now
(),
totalRequest
=
0
app
.
post
(
'
/serverless/function/execute/
'
,
(
req
,
res
)
=>
{
app
.
post
(
'
/serverless/function/execute/
'
,
(
req
,
res
)
=>
{
let
payload
=
req
.
body
let
payload
=
req
.
body
lastRequest
=
Date
.
now
()
lastRequest
=
Date
.
now
()
totalRequest
++
executor
(
payload
).
then
((
result
)
=>
{
executor
(
payload
).
then
((
result
)
=>
{
res
.
json
(
result
)
res
.
json
(
result
)
})
})
})
})
app
.
post
(
'
/serverless/worker/timeout
'
,
(
req
,
res
)
=>
{
idleTime
=
req
.
body
.
timeout
console
.
log
(
"
Idle time set to:
"
,
idleTime
);
})
function
executor
(
payload
)
{
function
executor
(
payload
)
{
return
new
Promise
((
resolve
,
reject
)
=>
{
return
new
Promise
((
resolve
,
reject
)
=>
{
})
})
}
}
...
@@ -38,20 +53,26 @@ app.listen(port, () => {
...
@@ -38,20 +53,26 @@ app.listen(port, () => {
producer
.
send
(
producer
.
send
(
[{
[{
topic
:
"
deployed
"
,
topic
:
"
deployed
"
,
messages
:
JSON
.
stringify
({
functionHash
,
portExternal
:
port
,
runtime
,
resource_id
}),
messages
:
JSON
.
stringify
({
functionHash
,
portExternal
:
port
,
runtime
,
resource_id
,
entity_id
:
process
.
pid
}),
"
status
"
:
true
"
status
"
:
true
}],
()
=>
{
})
}],
()
=>
{
})
})
})
function
shouldDie
()
{
function
shouldDie
()
{
if
(
Date
.
now
()
-
lastRequest
>
30
*
1000
)
{
if
(
Date
.
now
()
-
lastRequest
>
idleTime
*
1000
)
{
let
message
=
JSON
.
stringify
({
functionHash
,
portExternal
:
port
,
runtime
,
resource_id
,
entity_id
:
process
.
pid
,
total_request
:
totalRequest
})
console
.
log
(
"
Idle for too long. Exiting
"
);
console
.
log
(
"
Idle for too long. Exiting
"
);
producer
.
send
(
producer
.
send
(
[{
[
topic
:
"
removeWorker
"
,
{
topic
:
"
removeWorker
"
,
messages
:
message
}
messages
:
JSON
.
stringify
({
functionHash
,
portExternal
:
port
,
runtime
,
resource_id
})
],
()
=>
{
}],
()
=>
{
console
.
log
(
"
Ending worker for function
"
,
functionHash
,
"
resource_id
"
,
resource_id
);
console
.
log
(
"
Ending worker for function
"
,
functionHash
,
"
resource_id
"
,
resource_id
);
process
.
exit
(
0
)
process
.
exit
(
0
)
})
})
...
...
dispatch_system/dispatch_manager/repository/worker_env/node_modules/express/package.json
View file @
99bb6f85
{
{
"_from"
:
"express"
,
"_from"
:
"express
@^4.17.1
"
,
"_id"
:
"express@4.17.1"
,
"_id"
:
"express@4.17.1"
,
"_inBundle"
:
false
,
"_inBundle"
:
false
,
"_integrity"
:
"sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g=="
,
"_integrity"
:
"sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g=="
,
"_location"
:
"/express"
,
"_location"
:
"/express"
,
"_phantomChildren"
:
{},
"_phantomChildren"
:
{},
"_requested"
:
{
"_requested"
:
{
"type"
:
"
tag
"
,
"type"
:
"
range
"
,
"registry"
:
true
,
"registry"
:
true
,
"raw"
:
"express"
,
"raw"
:
"express
@^4.17.1
"
,
"name"
:
"express"
,
"name"
:
"express"
,
"escapedName"
:
"express"
,
"escapedName"
:
"express"
,
"rawSpec"
:
""
,
"rawSpec"
:
"
^4.17.1
"
,
"saveSpec"
:
null
,
"saveSpec"
:
null
,
"fetchSpec"
:
"
latest
"
"fetchSpec"
:
"
^4.17.1
"
},
},
"_requiredBy"
:
[
"_requiredBy"
:
[
"#USER"
,
"#USER"
,
...
@@ -21,8 +21,8 @@
...
@@ -21,8 +21,8 @@
],
],
"_resolved"
:
"https://registry.npmjs.org/express/-/express-4.17.1.tgz"
,
"_resolved"
:
"https://registry.npmjs.org/express/-/express-4.17.1.tgz"
,
"_shasum"
:
"4491fc38605cf51f8629d39c2b5d026f98a4c134"
,
"_shasum"
:
"4491fc38605cf51f8629d39c2b5d026f98a4c134"
,
"_spec"
:
"express"
,
"_spec"
:
"express
@^4.17.1
"
,
"_where"
:
"/home/nilanjan/Desktop/serverless/hybrid/dispatch_
module/dispatch
er/repository/worker_env"
,
"_where"
:
"/home/nilanjan/Desktop/serverless/hybrid/dispatch_
system/dispatch_manag
er/repository/worker_env"
,
"author"
:
{
"author"
:
{
"name"
:
"TJ Holowaychuk"
,
"name"
:
"TJ Holowaychuk"
,
"email"
:
"tj@vision-media.ca"
"email"
:
"tj@vision-media.ca"
...
...
dispatch_system/dispatch_manager/repository/worker_env/node_modules/ipaddr.js/README.md
View file @
99bb6f85
...
@@ -173,7 +173,7 @@ addr.octets // => [192, 168, 1, 1]
...
@@ -173,7 +173,7 @@ addr.octets // => [192, 168, 1, 1]
```
```
`prefixLengthFromSubnetMask()`
will return a CIDR prefix length for a valid IPv4 netmask or
`prefixLengthFromSubnetMask()`
will return a CIDR prefix length for a valid IPv4 netmask or
false
if the netmask is not valid.
null
if the netmask is not valid.
```
js
```
js
ipaddr
.
IPv4
.
parse
(
'
255.255.255.240
'
).
prefixLengthFromSubnetMask
()
==
28
ipaddr
.
IPv4
.
parse
(
'
255.255.255.240
'
).
prefixLengthFromSubnetMask
()
==
28
...
...
dispatch_system/dispatch_manager/repository/worker_env/node_modules/ipaddr.js/lib/ipaddr.js.d.ts
View file @
99bb6f85
declare
module
"
ipaddr.js
"
{
declare
module
"
ipaddr.js
"
{
type
IPv4Range
=
'
unicast
'
|
'
unspecified
'
|
'
broadcast
'
|
'
multicast
'
|
'
linkLocal
'
|
'
loopback
'
|
'
carrierGradeNat
'
|
'
private
'
|
'
reserved
'
;
type
IPv4Range
=
'
unicast
'
|
'
unspecified
'
|
'
broadcast
'
|
'
multicast
'
|
'
linkLocal
'
|
'
loopback
'
|
'
carrierGradeNat
'
|
'
private
'
|
'
reserved
'
;
type
IPv6Range
=
'
unicast
'
|
'
unspecified
'
|
'
linkLocal
'
|
'
multicast
'
|
'
loopback
'
|
'
uniqueLocal
'
|
'
ipv4Mapped
'
|
'
rfc6145
'
|
'
rfc6052
'
|
'
6to4
'
|
'
teredo
'
|
'
reserved
'
;
type
IPv6Range
=
'
unicast
'
|
'
unspecified
'
|
'
linkLocal
'
|
'
multicast
'
|
'
loopback
'
|
'
uniqueLocal
'
|
'
ipv4Mapped
'
|
'
rfc6145
'
|
'
rfc6052
'
|
'
6to4
'
|
'
teredo
'
|
'
reserved
'
;
...
@@ -9,23 +6,20 @@ declare module "ipaddr.js" {
...
@@ -9,23 +6,20 @@ declare module "ipaddr.js" {
[
name
:
string
]:
[
T
,
number
]
|
[
T
,
number
][];
[
name
:
string
]:
[
T
,
number
]
|
[
T
,
number
][];
}
}
// Common methods/properties for IPv4 and IPv6 classes.
// Common methods/properties for IPv4 and IPv6 classes.
class
IP
{
class
IP
{
prefixLengthFromSubnetMask
():
number
|
null
;
prefixLengthFromSubnetMask
():
number
|
false
;
toByteArray
():
number
[];
toByteArray
():
number
[];
toNormalizedString
():
string
;
toNormalizedString
():
string
;
toString
():
string
;
toString
():
string
;
}
}
namespace
Address
{
namespace
Address
{
export
function
isValid
(
addr
:
string
):
boolean
;
export
function
isValid
(
addr
:
string
):
boolean
;
export
function
fromByteArray
(
bytes
:
number
[]):
IPv4
|
IPv6
;
export
function
fromByteArray
(
bytes
:
number
[]):
IPv4
|
IPv6
;
export
function
parse
(
addr
:
string
):
IPv4
|
IPv6
;
export
function
parse
(
addr
:
string
):
IPv4
|
IPv6
;
export
function
parseCIDR
(
mask
:
string
):
[
IPv4
|
IPv6
,
number
];
export
function
parseCIDR
(
mask
:
string
):
[
IPv4
|
IPv6
,
number
];
export
function
process
(
addr
ess
:
string
):
IPv4
|
IPv6
;
export
function
process
(
addr
:
string
):
IPv4
|
IPv6
;
export
function
subnetMatch
(
addr
:
IPv4
,
rangeList
:
RangeList
<
IPv4
>
,
defaultName
?:
string
):
string
;
export
function
subnetMatch
(
addr
:
IPv4
,
rangeList
:
RangeList
<
IPv4
>
,
defaultName
?:
string
):
string
;
export
function
subnetMatch
(
addr
:
IPv6
,
rangeList
:
RangeList
<
IPv6
>
,
defaultName
?:
string
):
string
;
export
function
subnetMatch
(
addr
:
IPv6
,
rangeList
:
RangeList
<
IPv6
>
,
defaultName
?:
string
):
string
;
...
@@ -39,6 +33,7 @@ declare module "ipaddr.js" {
...
@@ -39,6 +33,7 @@ declare module "ipaddr.js" {
static
parseCIDR
(
addr
:
string
):
[
IPv4
,
number
];
static
parseCIDR
(
addr
:
string
):
[
IPv4
,
number
];
static
subnetMaskFromPrefixLength
(
prefix
:
number
):
IPv4
;
static
subnetMaskFromPrefixLength
(
prefix
:
number
):
IPv4
;
constructor
(
octets
:
number
[]);
constructor
(
octets
:
number
[]);
octets
:
number
[]
kind
():
'
ipv4
'
;
kind
():
'
ipv4
'
;
match
(
addr
:
IPv4
,
bits
:
number
):
boolean
;
match
(
addr
:
IPv4
,
bits
:
number
):
boolean
;
...
@@ -55,7 +50,9 @@ declare module "ipaddr.js" {
...
@@ -55,7 +50,9 @@ declare module "ipaddr.js" {
static
parse
(
addr
:
string
):
IPv6
;
static
parse
(
addr
:
string
):
IPv6
;
static
parseCIDR
(
addr
:
string
):
[
IPv6
,
number
];
static
parseCIDR
(
addr
:
string
):
[
IPv6
,
number
];
static
subnetMaskFromPrefixLength
(
prefix
:
number
):
IPv6
;
static
subnetMaskFromPrefixLength
(
prefix
:
number
):
IPv6
;
constructor
(
octets
:
number
[]);
constructor
(
parts
:
number
[]);
parts
:
number
[]
zoneId
?:
string
isIPv4MappedAddress
():
boolean
;
isIPv4MappedAddress
():
boolean
;
kind
():
'
ipv6
'
;
kind
():
'
ipv6
'
;
...
...
dispatch_system/dispatch_manager/repository/worker_env/node_modules/ipaddr.js/package.json
View file @
99bb6f85
{
{
"_from"
:
"ipaddr.js@1.9.
0
"
,
"_from"
:
"ipaddr.js@1.9.
1
"
,
"_id"
:
"ipaddr.js@1.9.
0
"
,
"_id"
:
"ipaddr.js@1.9.
1
"
,
"_inBundle"
:
false
,
"_inBundle"
:
false
,
"_integrity"
:
"sha512-
M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA
=="
,
"_integrity"
:
"sha512-
0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g
=="
,
"_location"
:
"/ipaddr.js"
,
"_location"
:
"/ipaddr.js"
,
"_phantomChildren"
:
{},
"_phantomChildren"
:
{},
"_requested"
:
{
"_requested"
:
{
"type"
:
"version"
,
"type"
:
"version"
,
"registry"
:
true
,
"registry"
:
true
,
"raw"
:
"ipaddr.js@1.9.
0
"
,
"raw"
:
"ipaddr.js@1.9.
1
"
,
"name"
:
"ipaddr.js"
,
"name"
:
"ipaddr.js"
,
"escapedName"
:
"ipaddr.js"
,
"escapedName"
:
"ipaddr.js"
,
"rawSpec"
:
"1.9.
0
"
,
"rawSpec"
:
"1.9.
1
"
,
"saveSpec"
:
null
,
"saveSpec"
:
null
,
"fetchSpec"
:
"1.9.
0
"
"fetchSpec"
:
"1.9.
1
"
},
},
"_requiredBy"
:
[
"_requiredBy"
:
[
"/proxy-addr"
"/proxy-addr"
],
],
"_resolved"
:
"https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.
0
.tgz"
,
"_resolved"
:
"https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.
1
.tgz"
,
"_shasum"
:
"
37df74e430a0e47550fe54a2defe30d8acd95f65
"
,
"_shasum"
:
"
bff38543eeb8984825079ff3a2a8e6cbd46781b3
"
,
"_spec"
:
"ipaddr.js@1.9.
0
"
,
"_spec"
:
"ipaddr.js@1.9.
1
"
,
"_where"
:
"/home/nilanjan/Desktop/serverless/hybrid/dispatch_
module/dispatch
er/repository/worker_env/node_modules/proxy-addr"
,
"_where"
:
"/home/nilanjan/Desktop/serverless/hybrid/dispatch_
system/dispatch_manag
er/repository/worker_env/node_modules/proxy-addr"
,
"author"
:
{
"author"
:
{
"name"
:
"whitequark"
,
"name"
:
"whitequark"
,
"email"
:
"whitequark@whitequark.org"
"email"
:
"whitequark@whitequark.org"
...
@@ -35,7 +35,7 @@
...
@@ -35,7 +35,7 @@
"description"
:
"A library for manipulating IPv4 and IPv6 addresses in JavaScript."
,
"description"
:
"A library for manipulating IPv4 and IPv6 addresses in JavaScript."
,
"devDependencies"
:
{
"devDependencies"
:
{
"coffee-script"
:
"~1.12.6"
,
"coffee-script"
:
"~1.12.6"
,
"nodeunit"
:
"
>=0.8.2 <0.8.7
"
,
"nodeunit"
:
"
^0.11.3
"
,
"uglify-js"
:
"~3.0.19"
"uglify-js"
:
"~3.0.19"
},
},
"directories"
:
{
"directories"
:
{
...
@@ -46,6 +46,7 @@
...
@@ -46,6 +46,7 @@
},
},
"files"
:
[
"files"
:
[
"lib/"
,
"lib/"
,
"LICENSE"
,
"ipaddr.min.js"
"ipaddr.min.js"
],
],
"homepage"
:
"https://github.com/whitequark/ipaddr.js#readme"
,
"homepage"
:
"https://github.com/whitequark/ipaddr.js#readme"
,
...
@@ -65,5 +66,5 @@
...
@@ -65,5 +66,5 @@
"test"
:
"cake build test"
"test"
:
"cake build test"
},
},
"types"
:
"./lib/ipaddr.js.d.ts"
,
"types"
:
"./lib/ipaddr.js.d.ts"
,
"version"
:
"1.9.
0
"
"version"
:
"1.9.
1
"
}
}
dispatch_system/dispatch_manager/repository/worker_env/node_modules/proxy-addr/HISTORY.md
View file @
99bb6f85
2.0.6 / 2020-02-24
==================
*
deps: ipaddr.js@1.9.1
2.
0.5 / 2019-04-16
2.
0.5 / 2019-04-16
==================
==================
...
...
dispatch_system/dispatch_manager/repository/worker_env/node_modules/proxy-addr/index.js
View file @
99bb6f85
...
@@ -99,7 +99,7 @@ function compile (val) {
...
@@ -99,7 +99,7 @@ function compile (val) {
for
(
var
i
=
0
;
i
<
trust
.
length
;
i
++
)
{
for
(
var
i
=
0
;
i
<
trust
.
length
;
i
++
)
{
val
=
trust
[
i
]
val
=
trust
[
i
]
if
(
!
IP_RANGES
.
hasOwnProperty
(
val
))
{
if
(
!
Object
.
prototype
.
hasOwnProperty
.
call
(
IP_RANGES
,
val
))
{
continue
continue
}
}
...
...
dispatch_system/dispatch_manager/repository/worker_env/node_modules/proxy-addr/package.json
View file @
99bb6f85
{
{
"_from"
:
"proxy-addr@~2.0.5"
,
"_from"
:
"proxy-addr@~2.0.5"
,
"_id"
:
"proxy-addr@2.0.
5
"
,
"_id"
:
"proxy-addr@2.0.
6
"
,
"_inBundle"
:
false
,
"_inBundle"
:
false
,
"_integrity"
:
"sha512-
t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ
=="
,
"_integrity"
:
"sha512-
dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw
=="
,
"_location"
:
"/proxy-addr"
,
"_location"
:
"/proxy-addr"
,
"_phantomChildren"
:
{},
"_phantomChildren"
:
{},
"_requested"
:
{
"_requested"
:
{
...
@@ -18,10 +18,10 @@
...
@@ -18,10 +18,10 @@
"_requiredBy"
:
[
"_requiredBy"
:
[
"/express"
"/express"
],
],
"_resolved"
:
"https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.
5
.tgz"
,
"_resolved"
:
"https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.
6
.tgz"
,
"_shasum"
:
"
34cbd64a2d81f4b1fd21e76f9f06c8a45299ee34
"
,
"_shasum"
:
"
fdc2336505447d3f2f2c638ed272caf614bbb2bf
"
,
"_spec"
:
"proxy-addr@~2.0.5"
,
"_spec"
:
"proxy-addr@~2.0.5"
,
"_where"
:
"/home/nilanjan/Desktop/serverless/hybrid/dispatch_
module/dispatch
er/repository/worker_env/node_modules/express"
,
"_where"
:
"/home/nilanjan/Desktop/serverless/hybrid/dispatch_
system/dispatch_manag
er/repository/worker_env/node_modules/express"
,
"author"
:
{
"author"
:
{
"name"
:
"Douglas Christopher Wilson"
,
"name"
:
"Douglas Christopher Wilson"
,
"email"
:
"doug@somethingdoug.com"
"email"
:
"doug@somethingdoug.com"
...
@@ -32,7 +32,7 @@
...
@@ -32,7 +32,7 @@
"bundleDependencies"
:
false
,
"bundleDependencies"
:
false
,
"dependencies"
:
{
"dependencies"
:
{
"forwarded"
:
"~0.1.2"
,
"forwarded"
:
"~0.1.2"
,
"ipaddr.js"
:
"1.9.
0
"
"ipaddr.js"
:
"1.9.
1
"
},
},
"deprecated"
:
false
,
"deprecated"
:
false
,
"description"
:
"Determine address of proxied request"
,
"description"
:
"Determine address of proxied request"
,
...
@@ -40,15 +40,15 @@
...
@@ -40,15 +40,15 @@
"beautify-benchmark"
:
"0.2.4"
,
"beautify-benchmark"
:
"0.2.4"
,
"benchmark"
:
"2.1.4"
,
"benchmark"
:
"2.1.4"
,
"deep-equal"
:
"1.0.1"
,
"deep-equal"
:
"1.0.1"
,
"eslint"
:
"
5.16
.0"
,
"eslint"
:
"
6.8
.0"
,
"eslint-config-standard"
:
"1
2.0
.0"
,
"eslint-config-standard"
:
"1
4.1
.0"
,
"eslint-plugin-import"
:
"2.
17
.1"
,
"eslint-plugin-import"
:
"2.
20
.1"
,
"eslint-plugin-markdown"
:
"1.0.
0
"
,
"eslint-plugin-markdown"
:
"1.0.
1
"
,
"eslint-plugin-node"
:
"
8.0.1
"
,
"eslint-plugin-node"
:
"
11.0.0
"
,
"eslint-plugin-promise"
:
"4.
1
.1"
,
"eslint-plugin-promise"
:
"4.
2
.1"
,
"eslint-plugin-standard"
:
"4.0.
0
"
,
"eslint-plugin-standard"
:
"4.0.
1
"
,
"mocha"
:
"
6.1.3
"
,
"mocha"
:
"
7.0.1
"
,
"nyc"
:
"1
3.3
.0"
"nyc"
:
"1
5.0
.0"
},
},
"engines"
:
{
"engines"
:
{
"node"
:
">= 0.10"
"node"
:
">= 0.10"
...
@@ -78,5 +78,5 @@
...
@@ -78,5 +78,5 @@
"test-cov"
:
"nyc --reporter=text npm test"
,
"test-cov"
:
"nyc --reporter=text npm test"
,
"test-travis"
:
"nyc --reporter=html --reporter=text npm test"
"test-travis"
:
"nyc --reporter=html --reporter=text npm test"
},
},
"version"
:
"2.0.
5
"
"version"
:
"2.0.
6
"
}
}
dispatch_system/dispatch_manager/repository/worker_env/package-lock.json
View file @
99bb6f85
...
@@ -13,11 +13,85 @@
...
@@ -13,11 +13,85 @@
"negotiator"
:
"0.6.2"
"negotiator"
:
"0.6.2"
}
}
},
},
"ajv"
:
{
"version"
:
"6.12.0"
,
"resolved"
:
"https://registry.npmjs.org/ajv/-/ajv-6.12.0.tgz"
,
"integrity"
:
"sha512-D6gFiFA0RRLyUbvijN74DWAjXSFxWKaWP7mldxkVhyhAV3+SWA9HEJPHQ2c9soIeTFJqcSdFDGFgdqs1iUU2Hw=="
,
"requires"
:
{
"fast-deep-equal"
:
"^3.1.1"
,
"fast-json-stable-stringify"
:
"^2.0.0"
,
"json-schema-traverse"
:
"^0.4.1"
,
"uri-js"
:
"^4.2.2"
}
},
"ansi-regex"
:
{
"version"
:
"2.1.1"
,
"resolved"
:
"https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz"
,
"integrity"
:
"sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
,
"optional"
:
true
},
"aproba"
:
{
"version"
:
"1.2.0"
,
"resolved"
:
"https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz"
,
"integrity"
:
"sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw=="
,
"optional"
:
true
},
"are-we-there-yet"
:
{
"version"
:
"1.1.5"
,
"resolved"
:
"https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz"
,
"integrity"
:
"sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w=="
,
"optional"
:
true
,
"requires"
:
{
"delegates"
:
"^1.0.0"
,
"readable-stream"
:
"^2.0.6"
}
},
"array-flatten"
:
{
"array-flatten"
:
{
"version"
:
"1.1.1"
,
"version"
:
"1.1.1"
,
"resolved"
:
"https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz"
,
"resolved"
:
"https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz"
,
"integrity"
:
"sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
"integrity"
:
"sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
},
},
"asn1"
:
{
"version"
:
"0.2.4"
,
"resolved"
:
"https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz"
,
"integrity"
:
"sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg=="
,
"requires"
:
{
"safer-buffer"
:
"~2.1.0"
}
},
"assert-plus"
:
{
"version"
:
"1.0.0"
,
"resolved"
:
"https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz"
,
"integrity"
:
"sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
},
"async"
:
{
"version"
:
"2.6.3"
,
"resolved"
:
"https://registry.npmjs.org/async/-/async-2.6.3.tgz"
,
"integrity"
:
"sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg=="
,
"requires"
:
{
"lodash"
:
"^4.17.14"
}
},
"asynckit"
:
{
"version"
:
"0.4.0"
,
"resolved"
:
"https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz"
,
"integrity"
:
"sha1-x57Zf380y48robyXkLzDZkdLS3k="
},
"aws-sign2"
:
{
"version"
:
"0.7.0"
,
"resolved"
:
"https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz"
,
"integrity"
:
"sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg="
},
"aws4"
:
{
"version"
:
"1.9.1"
,
"resolved"
:
"https://registry.npmjs.org/aws4/-/aws4-1.9.1.tgz"
,
"integrity"
:
"sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug=="
},
"balanced-match"
:
{
"version"
:
"1.0.0"
,
"resolved"
:
"https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz"
,
"integrity"
:
"sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
},
"basic-auth"
:
{
"basic-auth"
:
{
"version"
:
"2.0.1"
,
"version"
:
"2.0.1"
,
"resolved"
:
"https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz"
,
"resolved"
:
"https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz"
,
...
@@ -26,6 +100,41 @@
...
@@ -26,6 +100,41 @@
"safe-buffer"
:
"5.1.2"
"safe-buffer"
:
"5.1.2"
}
}
},
},
"bcrypt-pbkdf"
:
{
"version"
:
"1.0.2"
,
"resolved"
:
"https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz"
,
"integrity"
:
"sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4="
,
"requires"
:
{
"tweetnacl"
:
"^0.14.3"
}
},
"binary"
:
{
"version"
:
"0.3.0"
,
"resolved"
:
"https://registry.npmjs.org/binary/-/binary-0.3.0.tgz"
,
"integrity"
:
"sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk="
,
"requires"
:
{
"buffers"
:
"~0.1.1"
,
"chainsaw"
:
"~0.1.0"
}
},
"bindings"
:
{
"version"
:
"1.5.0"
,
"resolved"
:
"https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz"
,
"integrity"
:
"sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ=="
,
"optional"
:
true
,
"requires"
:
{
"file-uri-to-path"
:
"1.0.0"
}
},
"bl"
:
{
"version"
:
"2.2.0"
,
"resolved"
:
"https://registry.npmjs.org/bl/-/bl-2.2.0.tgz"
,
"integrity"
:
"sha512-wbgvOpqopSr7uq6fJrLH8EsvYMJf9gzfo2jCsL2eTy75qXPukA4pCgHamOQkZtY5vmfVtjB+P3LNlMHW5CEZXA=="
,
"requires"
:
{
"readable-stream"
:
"^2.3.5"
,
"safe-buffer"
:
"^5.1.1"
}
},
"body-parser"
:
{
"body-parser"
:
{
"version"
:
"1.19.0"
,
"version"
:
"1.19.0"
,
"resolved"
:
"https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz"
,
"resolved"
:
"https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz"
,
...
@@ -43,11 +152,82 @@
...
@@ -43,11 +152,82 @@
"type-is"
:
"~1.6.17"
"type-is"
:
"~1.6.17"
}
}
},
},
"brace-expansion"
:
{
"version"
:
"1.1.11"
,
"resolved"
:
"https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz"
,
"integrity"
:
"sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA=="
,
"requires"
:
{
"balanced-match"
:
"^1.0.0"
,
"concat-map"
:
"0.0.1"
}
},
"buffer-crc32"
:
{
"version"
:
"0.2.13"
,
"resolved"
:
"https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz"
,
"integrity"
:
"sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI="
},
"buffermaker"
:
{
"version"
:
"1.2.1"
,
"resolved"
:
"https://registry.npmjs.org/buffermaker/-/buffermaker-1.2.1.tgz"
,
"integrity"
:
"sha512-IdnyU2jDHU65U63JuVQNTHiWjPRH0CS3aYd/WPaEwyX84rFdukhOduAVb1jwUScmb5X0JWPw8NZOrhoLMiyAHQ=="
,
"requires"
:
{
"long"
:
"1.1.2"
}
},
"buffers"
:
{
"version"
:
"0.1.1"
,
"resolved"
:
"https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz"
,
"integrity"
:
"sha1-skV5w77U1tOWru5tmorn9Ugqt7s="
},
"bytes"
:
{
"bytes"
:
{
"version"
:
"3.1.0"
,
"version"
:
"3.1.0"
,
"resolved"
:
"https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz"
,
"resolved"
:
"https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz"
,
"integrity"
:
"sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="
"integrity"
:
"sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="
},
},
"caseless"
:
{
"version"
:
"0.12.0"
,
"resolved"
:
"https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz"
,
"integrity"
:
"sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
},
"chainsaw"
:
{
"version"
:
"0.1.0"
,
"resolved"
:
"https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz"
,
"integrity"
:
"sha1-XqtQsor+WAdNDVgpE4iCi15fvJg="
,
"requires"
:
{
"traverse"
:
">=0.3.0 <0.4"
}
},
"chownr"
:
{
"version"
:
"1.1.4"
,
"resolved"
:
"https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz"
,
"integrity"
:
"sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg=="
,
"optional"
:
true
},
"code-point-at"
:
{
"version"
:
"1.1.0"
,
"resolved"
:
"https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz"
,
"integrity"
:
"sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c="
,
"optional"
:
true
},
"combined-stream"
:
{
"version"
:
"1.0.8"
,
"resolved"
:
"https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz"
,
"integrity"
:
"sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg=="
,
"requires"
:
{
"delayed-stream"
:
"~1.0.0"
}
},
"concat-map"
:
{
"version"
:
"0.0.1"
,
"resolved"
:
"https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz"
,
"integrity"
:
"sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
},
"console-control-strings"
:
{
"version"
:
"1.1.0"
,
"resolved"
:
"https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz"
,
"integrity"
:
"sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4="
,
"optional"
:
true
},
"content-disposition"
:
{
"content-disposition"
:
{
"version"
:
"0.5.3"
,
"version"
:
"0.5.3"
,
"resolved"
:
"https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz"
,
"resolved"
:
"https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz"
,
...
@@ -71,6 +251,19 @@
...
@@ -71,6 +251,19 @@
"resolved"
:
"https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz"
,
"resolved"
:
"https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz"
,
"integrity"
:
"sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
"integrity"
:
"sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
},
},
"core-util-is"
:
{
"version"
:
"1.0.2"
,
"resolved"
:
"https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz"
,
"integrity"
:
"sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
},
"dashdash"
:
{
"version"
:
"1.14.1"
,
"resolved"
:
"https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz"
,
"integrity"
:
"sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA="
,
"requires"
:
{
"assert-plus"
:
"^1.0.0"
}
},
"debug"
:
{
"debug"
:
{
"version"
:
"2.6.9"
,
"version"
:
"2.6.9"
,
"resolved"
:
"https://registry.npmjs.org/debug/-/debug-2.6.9.tgz"
,
"resolved"
:
"https://registry.npmjs.org/debug/-/debug-2.6.9.tgz"
,
...
@@ -79,6 +272,37 @@
...
@@ -79,6 +272,37 @@
"ms"
:
"2.0.0"
"ms"
:
"2.0.0"
}
}
},
},
"decompress-response"
:
{
"version"
:
"4.2.1"
,
"resolved"
:
"https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz"
,
"integrity"
:
"sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw=="
,
"optional"
:
true
,
"requires"
:
{
"mimic-response"
:
"^2.0.0"
}
},
"deep-extend"
:
{
"version"
:
"0.6.0"
,
"resolved"
:
"https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz"
,
"integrity"
:
"sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA=="
,
"optional"
:
true
},
"delayed-stream"
:
{
"version"
:
"1.0.0"
,
"resolved"
:
"https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz"
,
"integrity"
:
"sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
},
"delegates"
:
{
"version"
:
"1.0.0"
,
"resolved"
:
"https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz"
,
"integrity"
:
"sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o="
,
"optional"
:
true
},
"denque"
:
{
"version"
:
"1.4.1"
,
"resolved"
:
"https://registry.npmjs.org/denque/-/denque-1.4.1.tgz"
,
"integrity"
:
"sha512-OfzPuSZKGcgr96rf1oODnfjqBFmr1DVoc/TrItj3Ohe0Ah1C5WX5Baquw/9U9KovnQ88EqmJbD66rKYUQYN1tQ=="
},
"depd"
:
{
"depd"
:
{
"version"
:
"1.1.2"
,
"version"
:
"1.1.2"
,
"resolved"
:
"https://registry.npmjs.org/depd/-/depd-1.1.2.tgz"
,
"resolved"
:
"https://registry.npmjs.org/depd/-/depd-1.1.2.tgz"
,
...
@@ -89,6 +313,21 @@
...
@@ -89,6 +313,21 @@
"resolved"
:
"https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz"
,
"resolved"
:
"https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz"
,
"integrity"
:
"sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
"integrity"
:
"sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
},
},
"detect-libc"
:
{
"version"
:
"1.0.3"
,
"resolved"
:
"https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz"
,
"integrity"
:
"sha1-+hN8S9aY7fVc1c0CrFWfkaTEups="
,
"optional"
:
true
},
"ecc-jsbn"
:
{
"version"
:
"0.1.2"
,
"resolved"
:
"https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz"
,
"integrity"
:
"sha1-OoOpBOVDUyh4dMVkt1SThoSamMk="
,
"requires"
:
{
"jsbn"
:
"~0.1.0"
,
"safer-buffer"
:
"^2.1.0"
}
},
"ee-first"
:
{
"ee-first"
:
{
"version"
:
"1.1.1"
,
"version"
:
"1.1.1"
,
"resolved"
:
"https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz"
,
"resolved"
:
"https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz"
,
...
@@ -99,6 +338,15 @@
...
@@ -99,6 +338,15 @@
"resolved"
:
"https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz"
,
"resolved"
:
"https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz"
,
"integrity"
:
"sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
"integrity"
:
"sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
},
},
"end-of-stream"
:
{
"version"
:
"1.4.4"
,
"resolved"
:
"https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz"
,
"integrity"
:
"sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q=="
,
"optional"
:
true
,
"requires"
:
{
"once"
:
"^1.4.0"
}
},
"escape-html"
:
{
"escape-html"
:
{
"version"
:
"1.0.3"
,
"version"
:
"1.0.3"
,
"resolved"
:
"https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz"
,
"resolved"
:
"https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz"
,
...
@@ -109,6 +357,12 @@
...
@@ -109,6 +357,12 @@
"resolved"
:
"https://registry.npmjs.org/etag/-/etag-1.8.1.tgz"
,
"resolved"
:
"https://registry.npmjs.org/etag/-/etag-1.8.1.tgz"
,
"integrity"
:
"sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
"integrity"
:
"sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
},
},
"expand-template"
:
{
"version"
:
"2.0.3"
,
"resolved"
:
"https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz"
,
"integrity"
:
"sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg=="
,
"optional"
:
true
},
"express"
:
{
"express"
:
{
"version"
:
"4.17.1"
,
"version"
:
"4.17.1"
,
"resolved"
:
"https://registry.npmjs.org/express/-/express-4.17.1.tgz"
,
"resolved"
:
"https://registry.npmjs.org/express/-/express-4.17.1.tgz"
,
...
@@ -146,6 +400,32 @@
...
@@ -146,6 +400,32 @@
"vary"
:
"~1.1.2"
"vary"
:
"~1.1.2"
}
}
},
},
"extend"
:
{
"version"
:
"3.0.2"
,
"resolved"
:
"https://registry.npmjs.org/extend/-/extend-3.0.2.tgz"
,
"integrity"
:
"sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
},
"extsprintf"
:
{
"version"
:
"1.3.0"
,
"resolved"
:
"https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz"
,
"integrity"
:
"sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="
},
"fast-deep-equal"
:
{
"version"
:
"3.1.1"
,
"resolved"
:
"https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz"
,
"integrity"
:
"sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA=="
},
"fast-json-stable-stringify"
:
{
"version"
:
"2.1.0"
,
"resolved"
:
"https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz"
,
"integrity"
:
"sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
},
"file-uri-to-path"
:
{
"version"
:
"1.0.0"
,
"resolved"
:
"https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz"
,
"integrity"
:
"sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw=="
,
"optional"
:
true
},
"finalhandler"
:
{
"finalhandler"
:
{
"version"
:
"1.1.2"
,
"version"
:
"1.1.2"
,
"resolved"
:
"https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz"
,
"resolved"
:
"https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz"
,
...
@@ -160,6 +440,21 @@
...
@@ -160,6 +440,21 @@
"unpipe"
:
"~1.0.0"
"unpipe"
:
"~1.0.0"
}
}
},
},
"forever-agent"
:
{
"version"
:
"0.6.1"
,
"resolved"
:
"https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz"
,
"integrity"
:
"sha1-+8cfDEGt6zf5bFd60e1C2P2sypE="
},
"form-data"
:
{
"version"
:
"2.3.3"
,
"resolved"
:
"https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz"
,
"integrity"
:
"sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ=="
,
"requires"
:
{
"asynckit"
:
"^0.4.0"
,
"combined-stream"
:
"^1.0.6"
,
"mime-types"
:
"^2.1.12"
}
},
"forwarded"
:
{
"forwarded"
:
{
"version"
:
"0.1.2"
,
"version"
:
"0.1.2"
,
"resolved"
:
"https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz"
,
"resolved"
:
"https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz"
,
...
@@ -170,6 +465,62 @@
...
@@ -170,6 +465,62 @@
"resolved"
:
"https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz"
,
"resolved"
:
"https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz"
,
"integrity"
:
"sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
"integrity"
:
"sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
},
},
"fs-constants"
:
{
"version"
:
"1.0.0"
,
"resolved"
:
"https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz"
,
"integrity"
:
"sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow=="
,
"optional"
:
true
},
"gauge"
:
{
"version"
:
"2.7.4"
,
"resolved"
:
"https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz"
,
"integrity"
:
"sha1-LANAXHU4w51+s3sxcCLjJfsBi/c="
,
"optional"
:
true
,
"requires"
:
{
"aproba"
:
"^1.0.3"
,
"console-control-strings"
:
"^1.0.0"
,
"has-unicode"
:
"^2.0.0"
,
"object-assign"
:
"^4.1.0"
,
"signal-exit"
:
"^3.0.0"
,
"string-width"
:
"^1.0.1"
,
"strip-ansi"
:
"^3.0.1"
,
"wide-align"
:
"^1.1.0"
}
},
"getpass"
:
{
"version"
:
"0.1.7"
,
"resolved"
:
"https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz"
,
"integrity"
:
"sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo="
,
"requires"
:
{
"assert-plus"
:
"^1.0.0"
}
},
"github-from-package"
:
{
"version"
:
"0.0.0"
,
"resolved"
:
"https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz"
,
"integrity"
:
"sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4="
,
"optional"
:
true
},
"har-schema"
:
{
"version"
:
"2.0.0"
,
"resolved"
:
"https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz"
,
"integrity"
:
"sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI="
},
"har-validator"
:
{
"version"
:
"5.1.3"
,
"resolved"
:
"https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz"
,
"integrity"
:
"sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g=="
,
"requires"
:
{
"ajv"
:
"^6.5.5"
,
"har-schema"
:
"^2.0.0"
}
},
"has-unicode"
:
{
"version"
:
"2.0.1"
,
"resolved"
:
"https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz"
,
"integrity"
:
"sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk="
,
"optional"
:
true
},
"http-errors"
:
{
"http-errors"
:
{
"version"
:
"1.7.2"
,
"version"
:
"1.7.2"
,
"resolved"
:
"https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz"
,
"resolved"
:
"https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz"
,
...
@@ -182,6 +533,16 @@
...
@@ -182,6 +533,16 @@
"toidentifier"
:
"1.0.0"
"toidentifier"
:
"1.0.0"
}
}
},
},
"http-signature"
:
{
"version"
:
"1.2.0"
,
"resolved"
:
"https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz"
,
"integrity"
:
"sha1-muzZJRFHcvPZW2WmCruPfBj7rOE="
,
"requires"
:
{
"assert-plus"
:
"^1.0.0"
,
"jsprim"
:
"^1.2.2"
,
"sshpk"
:
"^1.7.0"
}
},
"iconv-lite"
:
{
"iconv-lite"
:
{
"version"
:
"0.4.24"
,
"version"
:
"0.4.24"
,
"resolved"
:
"https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz"
,
"resolved"
:
"https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz"
,
...
@@ -195,10 +556,102 @@
...
@@ -195,10 +556,102 @@
"resolved"
:
"https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz"
,
"resolved"
:
"https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz"
,
"integrity"
:
"sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
"integrity"
:
"sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
},
},
"ini"
:
{
"version"
:
"1.3.5"
,
"resolved"
:
"https://registry.npmjs.org/ini/-/ini-1.3.5.tgz"
,
"integrity"
:
"sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw=="
,
"optional"
:
true
},
"ipaddr.js"
:
{
"ipaddr.js"
:
{
"version"
:
"1.9.0"
,
"version"
:
"1.9.1"
,
"resolved"
:
"https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz"
,
"resolved"
:
"https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz"
,
"integrity"
:
"sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA=="
"integrity"
:
"sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="
},
"is-fullwidth-code-point"
:
{
"version"
:
"1.0.0"
,
"resolved"
:
"https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz"
,
"integrity"
:
"sha1-754xOG8DGn8NZDr4L95QxFfvAMs="
,
"optional"
:
true
,
"requires"
:
{
"number-is-nan"
:
"^1.0.0"
}
},
"is-typedarray"
:
{
"version"
:
"1.0.0"
,
"resolved"
:
"https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz"
,
"integrity"
:
"sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
},
"isarray"
:
{
"version"
:
"1.0.0"
,
"resolved"
:
"https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz"
,
"integrity"
:
"sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
},
"isstream"
:
{
"version"
:
"0.1.2"
,
"resolved"
:
"https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz"
,
"integrity"
:
"sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
},
"jsbn"
:
{
"version"
:
"0.1.1"
,
"resolved"
:
"https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz"
,
"integrity"
:
"sha1-peZUwuWi3rXyAdls77yoDA7y9RM="
},
"json-schema"
:
{
"version"
:
"0.2.3"
,
"resolved"
:
"https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz"
,
"integrity"
:
"sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM="
},
"json-schema-traverse"
:
{
"version"
:
"0.4.1"
,
"resolved"
:
"https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz"
,
"integrity"
:
"sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
},
"json-stringify-safe"
:
{
"version"
:
"5.0.1"
,
"resolved"
:
"https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz"
,
"integrity"
:
"sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
},
"jsprim"
:
{
"version"
:
"1.4.1"
,
"resolved"
:
"https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz"
,
"integrity"
:
"sha1-MT5mvB5cwG5Di8G3SZwuXFastqI="
,
"requires"
:
{
"assert-plus"
:
"1.0.0"
,
"extsprintf"
:
"1.3.0"
,
"json-schema"
:
"0.2.3"
,
"verror"
:
"1.10.0"
}
},
"kafka-node"
:
{
"version"
:
"5.0.0"
,
"resolved"
:
"https://registry.npmjs.org/kafka-node/-/kafka-node-5.0.0.tgz"
,
"integrity"
:
"sha512-dD2ga5gLcQhsq1yNoQdy1MU4x4z7YnXM5bcG9SdQuiNr5KKuAmXixH1Mggwdah5o7EfholFbcNDPSVA6BIfaug=="
,
"requires"
:
{
"async"
:
"^2.6.2"
,
"binary"
:
"~0.3.0"
,
"bl"
:
"^2.2.0"
,
"buffer-crc32"
:
"~0.2.5"
,
"buffermaker"
:
"~1.2.0"
,
"debug"
:
"^2.1.3"
,
"denque"
:
"^1.3.0"
,
"lodash"
:
"^4.17.4"
,
"minimatch"
:
"^3.0.2"
,
"nested-error-stacks"
:
"^2.0.0"
,
"optional"
:
"^0.1.3"
,
"retry"
:
"^0.10.1"
,
"snappy"
:
"^6.0.1"
,
"uuid"
:
"^3.0.0"
}
},
"lodash"
:
{
"version"
:
"4.17.15"
,
"resolved"
:
"https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz"
,
"integrity"
:
"sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A=="
},
"long"
:
{
"version"
:
"1.1.2"
,
"resolved"
:
"https://registry.npmjs.org/long/-/long-1.1.2.tgz"
,
"integrity"
:
"sha1-6u9ZUcp1UdlpJrgtokLbnWso+1M="
},
},
"media-typer"
:
{
"media-typer"
:
{
"version"
:
"0.3.0"
,
"version"
:
"0.3.0"
,
...
@@ -233,6 +686,43 @@
...
@@ -233,6 +686,43 @@
"mime-db"
:
"1.43.0"
"mime-db"
:
"1.43.0"
}
}
},
},
"mimic-response"
:
{
"version"
:
"2.1.0"
,
"resolved"
:
"https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz"
,
"integrity"
:
"sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA=="
,
"optional"
:
true
},
"minimatch"
:
{
"version"
:
"3.0.4"
,
"resolved"
:
"https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz"
,
"integrity"
:
"sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA=="
,
"requires"
:
{
"brace-expansion"
:
"^1.1.7"
}
},
"minimist"
:
{
"version"
:
"1.2.0"
,
"resolved"
:
"https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz"
,
"integrity"
:
"sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
,
"optional"
:
true
},
"mkdirp"
:
{
"version"
:
"0.5.1"
,
"resolved"
:
"https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz"
,
"integrity"
:
"sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM="
,
"optional"
:
true
,
"requires"
:
{
"minimist"
:
"0.0.8"
},
"dependencies"
:
{
"minimist"
:
{
"version"
:
"0.0.8"
,
"resolved"
:
"https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz"
,
"integrity"
:
"sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
,
"optional"
:
true
}
}
},
"morgan"
:
{
"morgan"
:
{
"version"
:
"1.9.1"
,
"version"
:
"1.9.1"
,
"resolved"
:
"https://registry.npmjs.org/morgan/-/morgan-1.9.1.tgz"
,
"resolved"
:
"https://registry.npmjs.org/morgan/-/morgan-1.9.1.tgz"
,
...
@@ -250,11 +740,72 @@
...
@@ -250,11 +740,72 @@
"resolved"
:
"https://registry.npmjs.org/ms/-/ms-2.0.0.tgz"
,
"resolved"
:
"https://registry.npmjs.org/ms/-/ms-2.0.0.tgz"
,
"integrity"
:
"sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
"integrity"
:
"sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
},
},
"nan"
:
{
"version"
:
"2.14.0"
,
"resolved"
:
"https://registry.npmjs.org/nan/-/nan-2.14.0.tgz"
,
"integrity"
:
"sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg=="
,
"optional"
:
true
},
"napi-build-utils"
:
{
"version"
:
"1.0.1"
,
"resolved"
:
"https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.1.tgz"
,
"integrity"
:
"sha512-boQj1WFgQH3v4clhu3mTNfP+vOBxorDlE8EKiMjUlLG3C4qAESnn9AxIOkFgTR2c9LtzNjPrjS60cT27ZKBhaA=="
,
"optional"
:
true
},
"negotiator"
:
{
"negotiator"
:
{
"version"
:
"0.6.2"
,
"version"
:
"0.6.2"
,
"resolved"
:
"https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz"
,
"resolved"
:
"https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz"
,
"integrity"
:
"sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw=="
"integrity"
:
"sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw=="
},
},
"nested-error-stacks"
:
{
"version"
:
"2.1.0"
,
"resolved"
:
"https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.1.0.tgz"
,
"integrity"
:
"sha512-AO81vsIO1k1sM4Zrd6Hu7regmJN1NSiAja10gc4bX3F0wd+9rQmcuHQaHVQCYIEC8iFXnE+mavh23GOt7wBgug=="
},
"node-abi"
:
{
"version"
:
"2.15.0"
,
"resolved"
:
"https://registry.npmjs.org/node-abi/-/node-abi-2.15.0.tgz"
,
"integrity"
:
"sha512-FeLpTS0F39U7hHZU1srAK4Vx+5AHNVOTP+hxBNQknR/54laTHSFIJkDWDqiquY1LeLUgTfPN7sLPhMubx0PLAg=="
,
"optional"
:
true
,
"requires"
:
{
"semver"
:
"^5.4.1"
}
},
"noop-logger"
:
{
"version"
:
"0.1.1"
,
"resolved"
:
"https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz"
,
"integrity"
:
"sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI="
,
"optional"
:
true
},
"npmlog"
:
{
"version"
:
"4.1.2"
,
"resolved"
:
"https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz"
,
"integrity"
:
"sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg=="
,
"optional"
:
true
,
"requires"
:
{
"are-we-there-yet"
:
"~1.1.2"
,
"console-control-strings"
:
"~1.1.0"
,
"gauge"
:
"~2.7.3"
,
"set-blocking"
:
"~2.0.0"
}
},
"number-is-nan"
:
{
"version"
:
"1.0.1"
,
"resolved"
:
"https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz"
,
"integrity"
:
"sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0="
,
"optional"
:
true
},
"oauth-sign"
:
{
"version"
:
"0.9.0"
,
"resolved"
:
"https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz"
,
"integrity"
:
"sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="
},
"object-assign"
:
{
"version"
:
"4.1.1"
,
"resolved"
:
"https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz"
,
"integrity"
:
"sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
,
"optional"
:
true
},
"on-finished"
:
{
"on-finished"
:
{
"version"
:
"2.3.0"
,
"version"
:
"2.3.0"
,
"resolved"
:
"https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz"
,
"resolved"
:
"https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz"
,
...
@@ -268,6 +819,20 @@
...
@@ -268,6 +819,20 @@
"resolved"
:
"https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz"
,
"resolved"
:
"https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz"
,
"integrity"
:
"sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA=="
"integrity"
:
"sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA=="
},
},
"once"
:
{
"version"
:
"1.4.0"
,
"resolved"
:
"https://registry.npmjs.org/once/-/once-1.4.0.tgz"
,
"integrity"
:
"sha1-WDsap3WWHUsROsF9nFC6753Xa9E="
,
"optional"
:
true
,
"requires"
:
{
"wrappy"
:
"1"
}
},
"optional"
:
{
"version"
:
"0.1.4"
,
"resolved"
:
"https://registry.npmjs.org/optional/-/optional-0.1.4.tgz"
,
"integrity"
:
"sha512-gtvrrCfkE08wKcgXaVwQVgwEQ8vel2dc5DDBn9RLQZ3YtmtkBss6A2HY6BnJH4N/4Ku97Ri/SF8sNWE2225WJw=="
},
"parseurl"
:
{
"parseurl"
:
{
"version"
:
"1.3.3"
,
"version"
:
"1.3.3"
,
"resolved"
:
"https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz"
,
"resolved"
:
"https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz"
,
...
@@ -278,15 +843,68 @@
...
@@ -278,15 +843,68 @@
"resolved"
:
"https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz"
,
"resolved"
:
"https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz"
,
"integrity"
:
"sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
"integrity"
:
"sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
},
},
"performance-now"
:
{
"version"
:
"2.1.0"
,
"resolved"
:
"https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz"
,
"integrity"
:
"sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
},
"prebuild-install"
:
{
"version"
:
"5.3.3"
,
"resolved"
:
"https://registry.npmjs.org/prebuild-install/-/prebuild-install-5.3.3.tgz"
,
"integrity"
:
"sha512-GV+nsUXuPW2p8Zy7SarF/2W/oiK8bFQgJcncoJ0d7kRpekEA0ftChjfEaF9/Y+QJEc/wFR7RAEa8lYByuUIe2g=="
,
"optional"
:
true
,
"requires"
:
{
"detect-libc"
:
"^1.0.3"
,
"expand-template"
:
"^2.0.3"
,
"github-from-package"
:
"0.0.0"
,
"minimist"
:
"^1.2.0"
,
"mkdirp"
:
"^0.5.1"
,
"napi-build-utils"
:
"^1.0.1"
,
"node-abi"
:
"^2.7.0"
,
"noop-logger"
:
"^0.1.1"
,
"npmlog"
:
"^4.0.1"
,
"pump"
:
"^3.0.0"
,
"rc"
:
"^1.2.7"
,
"simple-get"
:
"^3.0.3"
,
"tar-fs"
:
"^2.0.0"
,
"tunnel-agent"
:
"^0.6.0"
,
"which-pm-runs"
:
"^1.0.0"
}
},
"process-nextick-args"
:
{
"version"
:
"2.0.1"
,
"resolved"
:
"https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz"
,
"integrity"
:
"sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
},
"proxy-addr"
:
{
"proxy-addr"
:
{
"version"
:
"2.0.
5
"
,
"version"
:
"2.0.
6
"
,
"resolved"
:
"https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.
5
.tgz"
,
"resolved"
:
"https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.
6
.tgz"
,
"integrity"
:
"sha512-
t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ
=="
,
"integrity"
:
"sha512-
dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw
=="
,
"requires"
:
{
"requires"
:
{
"forwarded"
:
"~0.1.2"
,
"forwarded"
:
"~0.1.2"
,
"ipaddr.js"
:
"1.9.0"
"ipaddr.js"
:
"1.9.1"
}
},
"psl"
:
{
"version"
:
"1.7.0"
,
"resolved"
:
"https://registry.npmjs.org/psl/-/psl-1.7.0.tgz"
,
"integrity"
:
"sha512-5NsSEDv8zY70ScRnOTn7bK7eanl2MvFrOrS/R6x+dBt5g1ghnj9Zv90kO8GwT8gxcu2ANyFprnFYB85IogIJOQ=="
},
"pump"
:
{
"version"
:
"3.0.0"
,
"resolved"
:
"https://registry.npmjs.org/pump/-/pump-3.0.0.tgz"
,
"integrity"
:
"sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww=="
,
"optional"
:
true
,
"requires"
:
{
"end-of-stream"
:
"^1.1.0"
,
"once"
:
"^1.3.1"
}
}
},
},
"punycode"
:
{
"version"
:
"2.1.1"
,
"resolved"
:
"https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz"
,
"integrity"
:
"sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
},
"qs"
:
{
"qs"
:
{
"version"
:
"6.7.0"
,
"version"
:
"6.7.0"
,
"resolved"
:
"https://registry.npmjs.org/qs/-/qs-6.7.0.tgz"
,
"resolved"
:
"https://registry.npmjs.org/qs/-/qs-6.7.0.tgz"
,
...
@@ -308,6 +926,71 @@
...
@@ -308,6 +926,71 @@
"unpipe"
:
"1.0.0"
"unpipe"
:
"1.0.0"
}
}
},
},
"rc"
:
{
"version"
:
"1.2.8"
,
"resolved"
:
"https://registry.npmjs.org/rc/-/rc-1.2.8.tgz"
,
"integrity"
:
"sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw=="
,
"optional"
:
true
,
"requires"
:
{
"deep-extend"
:
"^0.6.0"
,
"ini"
:
"~1.3.0"
,
"minimist"
:
"^1.2.0"
,
"strip-json-comments"
:
"~2.0.1"
}
},
"readable-stream"
:
{
"version"
:
"2.3.7"
,
"resolved"
:
"https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz"
,
"integrity"
:
"sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw=="
,
"requires"
:
{
"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"
}
},
"request"
:
{
"version"
:
"2.88.2"
,
"resolved"
:
"https://registry.npmjs.org/request/-/request-2.88.2.tgz"
,
"integrity"
:
"sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw=="
,
"requires"
:
{
"aws-sign2"
:
"~0.7.0"
,
"aws4"
:
"^1.8.0"
,
"caseless"
:
"~0.12.0"
,
"combined-stream"
:
"~1.0.6"
,
"extend"
:
"~3.0.2"
,
"forever-agent"
:
"~0.6.1"
,
"form-data"
:
"~2.3.2"
,
"har-validator"
:
"~5.1.3"
,
"http-signature"
:
"~1.2.0"
,
"is-typedarray"
:
"~1.0.0"
,
"isstream"
:
"~0.1.2"
,
"json-stringify-safe"
:
"~5.0.1"
,
"mime-types"
:
"~2.1.19"
,
"oauth-sign"
:
"~0.9.0"
,
"performance-now"
:
"^2.1.0"
,
"qs"
:
"~6.5.2"
,
"safe-buffer"
:
"^5.1.2"
,
"tough-cookie"
:
"~2.5.0"
,
"tunnel-agent"
:
"^0.6.0"
,
"uuid"
:
"^3.3.2"
},
"dependencies"
:
{
"qs"
:
{
"version"
:
"6.5.2"
,
"resolved"
:
"https://registry.npmjs.org/qs/-/qs-6.5.2.tgz"
,
"integrity"
:
"sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA=="
}
}
},
"retry"
:
{
"version"
:
"0.10.1"
,
"resolved"
:
"https://registry.npmjs.org/retry/-/retry-0.10.1.tgz"
,
"integrity"
:
"sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q="
},
"safe-buffer"
:
{
"safe-buffer"
:
{
"version"
:
"5.1.2"
,
"version"
:
"5.1.2"
,
"resolved"
:
"https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz"
,
"resolved"
:
"https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz"
,
...
@@ -318,6 +1001,12 @@
...
@@ -318,6 +1001,12 @@
"resolved"
:
"https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz"
,
"resolved"
:
"https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz"
,
"integrity"
:
"sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
"integrity"
:
"sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
},
},
"semver"
:
{
"version"
:
"5.7.1"
,
"resolved"
:
"https://registry.npmjs.org/semver/-/semver-5.7.1.tgz"
,
"integrity"
:
"sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
,
"optional"
:
true
},
"send"
:
{
"send"
:
{
"version"
:
"0.17.1"
,
"version"
:
"0.17.1"
,
"resolved"
:
"https://registry.npmjs.org/send/-/send-0.17.1.tgz"
,
"resolved"
:
"https://registry.npmjs.org/send/-/send-0.17.1.tgz"
,
...
@@ -356,21 +1045,185 @@
...
@@ -356,21 +1045,185 @@
"send"
:
"0.17.1"
"send"
:
"0.17.1"
}
}
},
},
"set-blocking"
:
{
"version"
:
"2.0.0"
,
"resolved"
:
"https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz"
,
"integrity"
:
"sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
,
"optional"
:
true
},
"setprototypeof"
:
{
"setprototypeof"
:
{
"version"
:
"1.1.1"
,
"version"
:
"1.1.1"
,
"resolved"
:
"https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz"
,
"resolved"
:
"https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz"
,
"integrity"
:
"sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
"integrity"
:
"sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
},
},
"signal-exit"
:
{
"version"
:
"3.0.2"
,
"resolved"
:
"https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz"
,
"integrity"
:
"sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0="
,
"optional"
:
true
},
"simple-concat"
:
{
"version"
:
"1.0.0"
,
"resolved"
:
"https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.0.tgz"
,
"integrity"
:
"sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY="
,
"optional"
:
true
},
"simple-get"
:
{
"version"
:
"3.1.0"
,
"resolved"
:
"https://registry.npmjs.org/simple-get/-/simple-get-3.1.0.tgz"
,
"integrity"
:
"sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA=="
,
"optional"
:
true
,
"requires"
:
{
"decompress-response"
:
"^4.2.0"
,
"once"
:
"^1.3.1"
,
"simple-concat"
:
"^1.0.0"
}
},
"snappy"
:
{
"version"
:
"6.2.3"
,
"resolved"
:
"https://registry.npmjs.org/snappy/-/snappy-6.2.3.tgz"
,
"integrity"
:
"sha512-HZpVoIxMfQ4fL3iDuMdI1R5xycw1o9YDCAndTKZCY/EHRoKFvzwplttuBBVGeEg2fd1hYiwAXos/sM24W7N1LA=="
,
"optional"
:
true
,
"requires"
:
{
"bindings"
:
"^1.3.1"
,
"nan"
:
"^2.14.0"
,
"prebuild-install"
:
"^5.2.2"
}
},
"sshpk"
:
{
"version"
:
"1.16.1"
,
"resolved"
:
"https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz"
,
"integrity"
:
"sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg=="
,
"requires"
:
{
"asn1"
:
"~0.2.3"
,
"assert-plus"
:
"^1.0.0"
,
"bcrypt-pbkdf"
:
"^1.0.0"
,
"dashdash"
:
"^1.12.0"
,
"ecc-jsbn"
:
"~0.1.1"
,
"getpass"
:
"^0.1.1"
,
"jsbn"
:
"~0.1.0"
,
"safer-buffer"
:
"^2.0.2"
,
"tweetnacl"
:
"~0.14.0"
}
},
"statuses"
:
{
"statuses"
:
{
"version"
:
"1.5.0"
,
"version"
:
"1.5.0"
,
"resolved"
:
"https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz"
,
"resolved"
:
"https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz"
,
"integrity"
:
"sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
"integrity"
:
"sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
},
},
"string-width"
:
{
"version"
:
"1.0.2"
,
"resolved"
:
"https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz"
,
"integrity"
:
"sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M="
,
"optional"
:
true
,
"requires"
:
{
"code-point-at"
:
"^1.0.0"
,
"is-fullwidth-code-point"
:
"^1.0.0"
,
"strip-ansi"
:
"^3.0.0"
}
},
"string_decoder"
:
{
"version"
:
"1.1.1"
,
"resolved"
:
"https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz"
,
"integrity"
:
"sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg=="
,
"requires"
:
{
"safe-buffer"
:
"~5.1.0"
}
},
"strip-ansi"
:
{
"version"
:
"3.0.1"
,
"resolved"
:
"https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz"
,
"integrity"
:
"sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8="
,
"optional"
:
true
,
"requires"
:
{
"ansi-regex"
:
"^2.0.0"
}
},
"strip-json-comments"
:
{
"version"
:
"2.0.1"
,
"resolved"
:
"https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz"
,
"integrity"
:
"sha1-PFMZQukIwml8DsNEhYwobHygpgo="
,
"optional"
:
true
},
"tar-fs"
:
{
"version"
:
"2.0.0"
,
"resolved"
:
"https://registry.npmjs.org/tar-fs/-/tar-fs-2.0.0.tgz"
,
"integrity"
:
"sha512-vaY0obB6Om/fso8a8vakQBzwholQ7v5+uy+tF3Ozvxv1KNezmVQAiWtcNmMHFSFPqL3dJA8ha6gdtFbfX9mcxA=="
,
"optional"
:
true
,
"requires"
:
{
"chownr"
:
"^1.1.1"
,
"mkdirp"
:
"^0.5.1"
,
"pump"
:
"^3.0.0"
,
"tar-stream"
:
"^2.0.0"
}
},
"tar-stream"
:
{
"version"
:
"2.1.0"
,
"resolved"
:
"https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.0.tgz"
,
"integrity"
:
"sha512-+DAn4Nb4+gz6WZigRzKEZl1QuJVOLtAwwF+WUxy1fJ6X63CaGaUAxJRD2KEn1OMfcbCjySTYpNC6WmfQoIEOdw=="
,
"optional"
:
true
,
"requires"
:
{
"bl"
:
"^3.0.0"
,
"end-of-stream"
:
"^1.4.1"
,
"fs-constants"
:
"^1.0.0"
,
"inherits"
:
"^2.0.3"
,
"readable-stream"
:
"^3.1.1"
},
"dependencies"
:
{
"bl"
:
{
"version"
:
"3.0.0"
,
"resolved"
:
"https://registry.npmjs.org/bl/-/bl-3.0.0.tgz"
,
"integrity"
:
"sha512-EUAyP5UHU5hxF8BPT0LKW8gjYLhq1DQIcneOX/pL/m2Alo+OYDQAJlHq+yseMP50Os2nHXOSic6Ss3vSQeyf4A=="
,
"optional"
:
true
,
"requires"
:
{
"readable-stream"
:
"^3.0.1"
}
},
"readable-stream"
:
{
"version"
:
"3.6.0"
,
"resolved"
:
"https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz"
,
"integrity"
:
"sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA=="
,
"optional"
:
true
,
"requires"
:
{
"inherits"
:
"^2.0.3"
,
"string_decoder"
:
"^1.1.1"
,
"util-deprecate"
:
"^1.0.1"
}
}
}
},
"toidentifier"
:
{
"toidentifier"
:
{
"version"
:
"1.0.0"
,
"version"
:
"1.0.0"
,
"resolved"
:
"https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz"
,
"resolved"
:
"https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz"
,
"integrity"
:
"sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw=="
"integrity"
:
"sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw=="
},
},
"tough-cookie"
:
{
"version"
:
"2.5.0"
,
"resolved"
:
"https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz"
,
"integrity"
:
"sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g=="
,
"requires"
:
{
"psl"
:
"^1.1.28"
,
"punycode"
:
"^2.1.1"
}
},
"traverse"
:
{
"version"
:
"0.3.9"
,
"resolved"
:
"https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz"
,
"integrity"
:
"sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk="
},
"tunnel-agent"
:
{
"version"
:
"0.6.0"
,
"resolved"
:
"https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz"
,
"integrity"
:
"sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0="
,
"requires"
:
{
"safe-buffer"
:
"^5.0.1"
}
},
"tweetnacl"
:
{
"version"
:
"0.14.5"
,
"resolved"
:
"https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz"
,
"integrity"
:
"sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q="
},
"type-is"
:
{
"type-is"
:
{
"version"
:
"1.6.18"
,
"version"
:
"1.6.18"
,
"resolved"
:
"https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz"
,
"resolved"
:
"https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz"
,
...
@@ -385,15 +1238,64 @@
...
@@ -385,15 +1238,64 @@
"resolved"
:
"https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz"
,
"resolved"
:
"https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz"
,
"integrity"
:
"sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
"integrity"
:
"sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
},
},
"uri-js"
:
{
"version"
:
"4.2.2"
,
"resolved"
:
"https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz"
,
"integrity"
:
"sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ=="
,
"requires"
:
{
"punycode"
:
"^2.1.0"
}
},
"util-deprecate"
:
{
"version"
:
"1.0.2"
,
"resolved"
:
"https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz"
,
"integrity"
:
"sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
},
"utils-merge"
:
{
"utils-merge"
:
{
"version"
:
"1.0.1"
,
"version"
:
"1.0.1"
,
"resolved"
:
"https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz"
,
"resolved"
:
"https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz"
,
"integrity"
:
"sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
"integrity"
:
"sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
},
},
"uuid"
:
{
"version"
:
"3.4.0"
,
"resolved"
:
"https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz"
,
"integrity"
:
"sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
},
"vary"
:
{
"vary"
:
{
"version"
:
"1.1.2"
,
"version"
:
"1.1.2"
,
"resolved"
:
"https://registry.npmjs.org/vary/-/vary-1.1.2.tgz"
,
"resolved"
:
"https://registry.npmjs.org/vary/-/vary-1.1.2.tgz"
,
"integrity"
:
"sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
"integrity"
:
"sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
},
"verror"
:
{
"version"
:
"1.10.0"
,
"resolved"
:
"https://registry.npmjs.org/verror/-/verror-1.10.0.tgz"
,
"integrity"
:
"sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA="
,
"requires"
:
{
"assert-plus"
:
"^1.0.0"
,
"core-util-is"
:
"1.0.2"
,
"extsprintf"
:
"^1.2.0"
}
},
"which-pm-runs"
:
{
"version"
:
"1.0.0"
,
"resolved"
:
"https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.0.0.tgz"
,
"integrity"
:
"sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs="
,
"optional"
:
true
},
"wide-align"
:
{
"version"
:
"1.1.3"
,
"resolved"
:
"https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz"
,
"integrity"
:
"sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA=="
,
"optional"
:
true
,
"requires"
:
{
"string-width"
:
"^1.0.2 || 2"
}
},
"wrappy"
:
{
"version"
:
"1.0.2"
,
"resolved"
:
"https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz"
,
"integrity"
:
"sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
,
"optional"
:
true
}
}
}
}
}
}
dispatch_system/dispatch_manager/repository/worker_env/package.json
View file @
99bb6f85
...
@@ -11,6 +11,8 @@
...
@@ -11,6 +11,8 @@
"dependencies"
:
{
"dependencies"
:
{
"body-parser"
:
"^1.19.0"
,
"body-parser"
:
"^1.19.0"
,
"express"
:
"^4.17.1"
,
"express"
:
"^4.17.1"
,
"morgan"
:
"^1.9.1"
"kafka-node"
:
"^5.0.0"
,
"morgan"
:
"^1.9.1"
,
"request"
:
"^2.88.2"
}
}
}
}
dispatch_system/dispatch_manager/swagger.json
0 → 100644
View file @
99bb6f85
{
"name"
:
"xanadu"
,
"uriPath"
:
"/xanadu"
}
\ No newline at end of file
cJSON
@
f790e17b
Subproject commit f790e17b6cecef030c4eda811149d238c2085fcf
nlib
@
75bc1a11
Subproject commit 75bc1a11e2a10cf249f566b40c85d6526c16f123
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment