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
package-lock.json
firecracker*
secrets.json
grunt
\ No newline at end of file
grunt
.clinic
rm_dummy.js
\ No newline at end of file
dispatch_system/constants.json
View file @
99bb6f85
...
...
@@ -6,5 +6,17 @@
"grunt_host"
:
"https://www.namandixit.net/lovecraftian_nightmares/grunt"
,
"log_channel"
:
"LOG_COMMON"
,
"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) {
});
process
.
on
(
'
close
'
,
(
code
)
=>
{
resolve
(
code
);
resolve
(
process
.
pid
);
logger
.
info
(
`Process Environment with resource_id
${
resource_id
}
blown`
);
});
})
...
...
@@ -100,7 +100,7 @@ function runContainer(metadata) {
let
timeDifference
=
Math
.
ceil
((
Date
.
now
()
-
timeStart
))
logger
.
info
(
"
container run time taken:
"
,
timeDifference
);
result
+=
data
;
resolve
(
res
ult
);
resolve
(
res
ource_id
);
});
process
.
stderr
.
on
(
'
data
'
,
(
data
)
=>
{
...
...
@@ -126,7 +126,7 @@ function runContainer(metadata) {
logger
.
info
(
`stdout:
${
data
}
`
);
let
timeDifference
=
Math
.
ceil
((
Date
.
now
()
-
timeStart
))
logger
.
info
(
"
container run time taken:
"
,
timeDifference
);
resolve
(
res
ult
);
resolve
(
res
ource_id
);
});
process
.
stderr
.
on
(
'
data
'
,
(
data
)
=>
{
...
...
dispatch_system/dispatch_daemon/lib.js
View file @
99bb6f85
...
...
@@ -55,7 +55,7 @@ var download = function (url, dest, cb) {
console
.
log
(
url
);
if
(
!
fs
.
existsSync
(
dest
))
{
var
file
=
fs
.
createWriteStream
(
dest
);
var
request
=
http
.
get
(
url
,
function
(
response
)
{
var
request
=
http
s
.
get
(
url
,
function
(
response
)
{
response
.
pipe
(
file
);
file
.
on
(
'
finish
'
,
function
()
{
file
.
close
(
cb
);
// close() is async, call cb after close completes.
...
...
dispatch_system/dispatch_daemon/package.json
View file @
99bb6f85
...
...
@@ -17,6 +17,7 @@
"morgan"
:
"^1.9.1"
,
"mqtt"
:
"^3.0.0"
,
"redis"
:
"^2.8.0"
,
"request"
:
"^2.88.2"
,
"winston"
:
"^3.2.1"
}
}
dispatch_system/dispatch_manager/index.js
View file @
99bb6f85
...
...
@@ -10,6 +10,8 @@ const { spawn } = require('child_process');
const
morgan
=
require
(
'
morgan
'
)
const
heap
=
require
(
'
heap
'
)
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
}
`
metadataDB
=
metadataDB
+
"
/
"
+
constants
.
couchdb_db_name
+
"
/
"
...
...
@@ -21,11 +23,12 @@ let date = new Date();
let
log_channel
=
constants
.
log_channel
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
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
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
'
),
Producer
=
kafka
.
Producer
,
...
...
@@ -37,26 +40,28 @@ let kafka = require('kafka-node'),
Consumer
=
kafka
.
Consumer
,
consumer
=
new
Consumer
(
client
,
[
{
topic
:
'
heartbeat
'
},
// receives heartbeat messages from workers, also acts as worker join message
{
topic
:
"
deployed
"
},
// receives deployment confirmation from workers
{
topic
:
"
removeWorker
"
},
// received when a executor environment is blown at the worker
{
topic
:
"
RESPONSE_RM_2_DM
"
},
// receives deployment details from RM
{
topic
:
"
hscale
"
}
// receives signals for horizontal scaling
{
topic
:
constants
.
topics
.
heartbeat
},
// receives heartbeat messages from workers, also acts as worker join message
{
topic
:
constants
.
topics
.
deployed
},
// receives deployment confirmation from workers
{
topic
:
constants
.
topics
.
remove_worker
},
// received when a executor environment is blown at the worker
{
topic
:
constants
.
topics
.
response_rm_2_dm
},
// receives deployment details from RM
{
topic
:
constants
.
topics
.
hscale
}
// receives signals for horizontal scaling
],
[
{
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
.
json
())
const
file_path
=
__dirname
+
"
/repository/
"
app
.
use
(
'
/repository
'
,
express
.
static
(
file_path
));
app
.
use
(
fileUpload
())
app
.
use
(
swStats
.
getMiddleware
({
swaggerSpec
:
apiSpec
}));
let
requestQueue
=
[]
let
workerNodes
=
[]
const
WINDOW_SIZE
=
10
const
port
=
constants
.
master_port
...
...
@@ -145,9 +150,9 @@ function deployContainer(path, imageName) {
fs
.
writeFile
(
'
./repository/Dockerfile
'
,
`FROM node:latest
WORKDIR /app
COPY package.json /app
RUN npm install
COPY
.
/app
COPY
./worker_env/
package.json /app
ADD ./worker_env/node_modules /app/node_modules
COPY
${
imageName
}
.js
/app
ENTRYPOINT ["node", "
${
imageName
}
.js"]`
,
function
(
err
)
{
if
(
err
)
{
...
...
@@ -199,10 +204,12 @@ function deployContainer(path, imageName) {
* REST API to receive execute requests
*/
app
.
post
(
'
/serverless/execute/:id
'
,
(
req
,
res
)
=>
{
let
runtime
=
req
.
body
.
runtime
let
id
=
req
.
params
.
id
+
runtime
if
(
functionToResource
.
has
(
id
))
{
libSupport
.
reverseProxy
(
req
,
res
,
functionToResource
,
resourceMap
)
libSupport
.
reverseProxy
(
req
,
res
,
functionToResource
,
resourceMap
,
functionBranchTree
)
}
else
{
/**
* Requests are queued up before being dispatched. To prevent requests coming in for the
...
...
@@ -239,20 +246,7 @@ function dispatch() {
db
.
get
(
functionHash
+
runtime
).
push
({
req
,
res
})
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
}
`
);
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
({
resource_id
,
"
memory
"
:
332
,
...
...
@@ -261,40 +255,65 @@ function dispatch() {
/** uncomment when RM is unavailable */
resourceMap
.
set
(
resource_id
,
{
runtime
,
functionHash
,
port
,
node_id
})
logger
.
info
(
resourceMap
);
producer
.
send
(
payload
,
()
=>
{
logger
.
info
(
`Resource Deployment request sent to Dispatch Agent`
)
runtime
,
functionHash
,
port
:
null
,
node_id
:
null
,
deployed
:
false
})
}
else
{
logger
.
info
(
"
deployment process already started waiting
"
)
db
.
get
(
functionHash
+
runtime
).
push
({
req
,
res
})
}
/** uncomment when RM is available, TODO: also update resourceMap
rmQueue.set(resource_id, payload)
let payloadToRM = [{
topic: "REQUEST_DM_2_RM",
let
payloadToRM
=
[{
topic
:
constants
.
topics
.
request_dm_2_rm
,
// changing from REQUEST_DM_2_RM
messages
:
JSON
.
stringify
({
resource_id
,
"
memory
"
:
332
,
timestamp
:
Date
.
now
()
}),
partition
:
0
}]
producer.send(payloadToRM, () => {
db.set(functionHash + runtime, { req, res })
})
*/
producer
.
send
(
payloadToRM
,
()
=>
{
// 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
)
{
logger
.
info
(
"
Deployed Resource:
"
+
JSON
.
stringify
(
message
));
...
...
@@ -314,7 +333,7 @@ function postDeploy(message) {
let
resourceHeap
=
functionToResource
.
get
(
message
.
functionHash
+
message
.
runtime
)
heap
.
push
(
resourceHeap
,
{
resource_id
:
message
.
resource_id
,
metric
:
0
open_request_count
:
0
},
libSupport
.
compare
)
logger
.
warn
(
"
Horizontally scaling up:
"
+
JSON
.
stringify
(
functionToResource
.
get
(
message
.
functionHash
+
message
.
runtime
)));
...
...
@@ -328,42 +347,50 @@ function postDeploy(message) {
let
resourceHeap
=
[]
heap
.
push
(
resourceHeap
,
{
resource_id
:
message
.
resource_id
,
metric
:
0
open_request_count
:
0
},
libSupport
.
compare
)
functionToResource
.
set
(
message
.
functionHash
+
message
.
runtime
,
resourceHeap
)
logger
.
warn
(
"
Creating new resource pool
"
+
JSON
.
stringify
(
functionToResource
.
get
(
message
.
functionHash
+
message
.
runtime
)));
}
let
resource
=
resourceMap
.
get
(
message
.
resource_id
)
let
confirmRM
=
[{
topic
:
log_channel
,
messages
:
JSON
.
stringify
({
resource_id
:
message
.
resource_id
,
node_id
:
resource
.
node_id
,
runtime
:
resource
.
runtime
,
function_id
:
resource
.
functionHash
,
"
reason
"
:
"
deployment
"
,
"
status
"
:
true
,
"
timestamp
"
:
date
.
toISOString
()
}),
partition
:
0
}]
producer
.
send
(
confirmRM
,
()
=>
{
logger
.
info
(
`Confirmed RM for successful deployment resource_id:
${
message
.
resource_id
}
deployment`
)
})
if
(
db
.
has
(
message
.
functionHash
+
message
.
runtime
))
{
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
)
.
then
(()
=>
{
try
{
let
resource
=
resourceMap
.
get
(
message
.
resource_id
)
resource
.
deployed
=
true
let
confirmRM
=
[{
topic
:
log_channel
,
messages
:
JSON
.
stringify
({
resource_id
:
message
.
resource_id
,
// type: "deployment_launch",
node_id
:
resource
.
node_id
,
runtime
:
resource
.
runtime
,
function_id
:
resource
.
functionHash
,
entity_id
:
message
.
entity_id
,
"
reason
"
:
"
deployment
"
,
"
status
"
:
true
,
"
timestamp
"
:
Date
.
now
()
}),
partition
:
0
}]
producer
.
send
(
confirmRM
,
()
=>
{
logger
.
info
(
`Confirmed RM for successful deployment resource_id:
${
message
.
resource_id
}
deployment`
)
})
if
(
db
.
has
(
message
.
functionHash
+
message
.
runtime
))
{
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) {
let
topic
=
message
.
topic
message
=
message
.
value
// console.log(topic, message)
if
(
topic
===
"
response
"
)
{
logger
.
info
(
"
response
"
+
message
);
}
else
if
(
topic
===
"
heartbeat
"
)
{
}
else
if
(
topic
===
constants
.
topics
.
heartbeat
)
{
message
=
JSON
.
parse
(
message
)
if
(
Date
.
now
()
-
message
.
timestamp
<
1000
)
if
(
workerNodes
.
indexOf
(
message
.
address
)
===
-
1
)
{
workerNodes
.
push
(
message
.
address
)
logger
.
warn
(
"
New worker discovered. Worker List:
"
+
workerNodes
)
if
(
!
workerNodes
.
has
(
message
.
address
))
{
workerNodes
.
set
(
message
.
address
,
message
.
timestamp
)
logger
.
warn
(
"
New worker discovered. Worker List:
"
)
logger
.
warn
(
workerNodes
)
}
}
else
if
(
topic
==
"
deployed
"
)
{
}
else
if
(
topic
==
constants
.
topics
.
deployed
)
{
try
{
message
=
JSON
.
parse
(
message
)
}
catch
(
e
)
{
...
...
@@ -391,7 +420,7 @@ consumer.on('message', function (message) {
}
postDeploy
(
message
)
}
else
if
(
topic
==
"
removeWorker
"
)
{
}
else
if
(
topic
==
constants
.
topics
.
remove_worker
)
{
logger
.
warn
(
"
Worker blown: Removing Metadata
"
+
message
);
try
{
message
=
JSON
.
parse
(
message
)
...
...
@@ -416,24 +445,13 @@ consumer.on('message', function (message) {
}
}
else
if
(
topic
==
"
hscale
"
)
{
}
else
if
(
topic
==
constants
.
topics
.
hscale
)
{
message
=
JSON
.
parse
(
message
)
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
,
functionHash
=
message
.
functionHash
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
}]
console
.
log
(
"
Resource Status:
"
,
functionToResource
);
logger
.
info
(
"
Requesting RM
"
+
JSON
.
stringify
({
resource_id
,
"
memory
"
:
332
,
...
...
@@ -442,31 +460,55 @@ consumer.on('message', function (message) {
/** uncomment when RM is unavailable */
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
);
message
=
JSON
.
parse
(
message
)
let
payload
=
rmQueue
.
get
(
message
.
id
)
if
(
payload
!=
null
)
{
payload
[
0
].
topic
=
message
.
nodes
[
0
]
logger
.
info
(
payload
);
/** get port and other resources */
let
resource
=
resourceMap
.
get
(
message
.
id
)
resource
.
node_id
=
message
.
nodes
[
0
]
// TODO: update this to message.nodes[0].node_id
// resource.port = message.nodes[0].port TODO: update after RM supports port allocation
resourceMap
.
set
(
message
.
id
,
resource
)
let
resourceChoice
=
message
.
nodes
[
0
]
if
(
resourceMap
.
has
(
message
.
resource_id
))
{
let
resource
=
resourceMap
.
get
(
message
.
resource_id
)
if
(
typeof
resourceChoice
===
'
string
'
)
{
resource
.
port
=
libSupport
.
getPort
(
usedPort
)
resource
.
node_id
=
resourceChoice
}
else
{
resource
.
port
=
(
resourceChoice
.
port
)
?
resourceChoice
.
port
:
libSupport
.
getPort
(
usedPort
)
resource
.
node_id
=
resourceChoice
.
node_id
}
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
);
producer
.
send
(
payload
,
()
=>
{
})
producer
.
send
(
payload
,
()
=>
{
logger
.
info
(
`Resource Deployment request sent to Dispatch Agent`
)
})
}
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) {
function
autoscalar
()
{
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
)
logger
.
warn
(
`resource
${
resourceList
[
resourceList
.
length
-
1
]}
exceeded autoscalar threshold. Scaling up!`
)
let
payload
=
[{
topic
:
"
hscale
"
,
topic
:
constants
.
topics
.
hscale
,
messages
:
JSON
.
stringify
({
"
runtime
"
:
resource
.
runtime
,
"
functionHash
"
:
resource
.
functionHash
})
}]
producer
.
send
(
payload
,
function
()
{
})
...
...
@@ -489,7 +531,7 @@ function autoscalar() {
}
setInterval
(
libSupport
.
viterbi
,
1000
,
functionBranchTree
)
setInterval
(
autoscalar
,
1000
);
setInterval
(
dispatch
,
1000
);
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')
const
rp
=
require
(
'
request-promise
'
);
const
fetch
=
require
(
'
node-fetch
'
);
const
winston
=
require
(
'
winston
'
)
const
constants
=
require
(
'
.././constants.json
'
)
const
{
createLogger
,
format
,
transports
}
=
winston
;
const
heap
=
require
(
'
heap
'
)
...
...
@@ -43,8 +45,8 @@ function generateExecutor(functionPath, functionHash) {
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
)
=>
{
let
runtime
=
req
.
body
.
runtime
let
id
=
req
.
params
.
id
+
runtime
...
...
@@ -54,14 +56,14 @@ function reverseProxy(req, res, functionToResource, resourceMap) {
let
functionHeap
=
functionToResource
.
get
(
id
)
let
forwardTo
=
functionHeap
[
0
]
let
resource
=
resourceMap
.
get
(
forwardTo
.
resource_id
)
logger
.
info
(
`Choosing resource
${
JSON
.
stringify
(
forwardTo
.
resource_id
)}
`
+
"
\n
forwarding via reverse proxy to:
"
+
JSON
.
stringify
(
resource
));
//
logger.info(`Choosing resource ${JSON.stringify(forwardTo.resource_id)}` +
//
"\n forwarding via reverse proxy to: " + JSON.stringify(resource));
let
url
=
`http://
${
resource
.
node_id
}
:
${
resource
.
port
}
/serverless/function/execute`
logger
.
info
(
"
Request received at reverseproxy. Forwarding to:
"
+
url
);
forwardTo
.
metric
+=
1
//
logger.info("Request received at reverseproxy. Forwarding to: " + url);
forwardTo
.
open_request_count
+=
1
heap
.
heapify
(
functionHeap
,
compare
)
logger
.
info
(
functionHeap
);
//
logger.info(functionHeap);
var
options
=
{
method
:
'
POST
'
,
...
...
@@ -77,15 +79,13 @@ function reverseProxy(req, res, functionToResource, resourceMap) {
.
then
(
function
(
parsedBody
)
{
res
.
json
(
parsedBody
)
forwardTo
.
metric
-=
1
forwardTo
.
open_request_count
-=
1
heap
.
heapify
(
functionHeap
,
compare
)
console
.
log
(
functionHeap
);
resolve
()
})
.
catch
(
function
(
err
)
{
forwardTo
.
metric
-=
1
forwardTo
.
open_request_count
-=
1
heap
.
heapify
(
functionHeap
,
compare
)
console
.
log
(
functionHeap
);
logger
.
error
(
"
error
"
+
err
.
error
.
errno
);
res
.
json
(
err
.
message
).
status
(
err
.
statusCode
)
resolve
()
...
...
@@ -136,9 +136,133 @@ const logger = winston.createLogger({
});
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
=
{
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 @@
"express-fileupload"
:
"^1.1.6"
,
"heap"
:
"^0.2.6"
,
"isolated-vm"
:
"^3.0.0"
,
"kafka-logger"
:
"^7.1.0"
,
"kafka-node"
:
"^5.0.0"
,
"morgan"
:
"^1.9.1"
,
"mqtt"
:
"^3.0.0"
,
...
...
@@ -23,6 +24,7 @@
"request"
:
"^2.88.0"
,
"request-promise"
:
"^4.2.5"
,
"save"
:
"^2.4.0"
,
"swagger-stats"
:
"^0.95.16"
,
"winston"
:
"^3.2.1"
}
}
dispatch_system/dispatch_manager/repository/worker_env/env.js
View file @
99bb6f85
'
use strict
'
;
const
express
=
require
(
'
express
'
)
const
bodyParser
=
require
(
'
body-parser
'
)
let
request
=
require
(
'
request
'
)
const
process
=
require
(
'
process
'
)
const
app
=
express
()
let
port
=
5000
,
resource_id
,
functionHash
,
runtime
let
port
=
5000
,
resource_id
,
functionHash
,
runtime
,
idleTime
=
30
resource_id
=
process
.
argv
[
2
]
functionHash
=
process
.
argv
[
3
]
port
=
process
.
argv
[
4
]
runtime
=
process
.
argv
[
5
]
request
=
request
.
defaults
({
headers
:
{
'
x-resource-id
'
:
resource_id
}
});
let
kafka
=
require
(
'
kafka-node
'
),
Producer
=
kafka
.
Producer
,
...
...
@@ -19,17 +25,26 @@ let kafka = require('kafka-node'),
app
.
use
(
bodyParser
.
urlencoded
({
extended
:
true
}))
app
.
use
(
bodyParser
.
json
())
let
lastRequest
=
Date
.
now
()
let
lastRequest
=
Date
.
now
(),
totalRequest
=
0
app
.
post
(
'
/serverless/function/execute/
'
,
(
req
,
res
)
=>
{
let
payload
=
req
.
body
lastRequest
=
Date
.
now
()
totalRequest
++
executor
(
payload
).
then
((
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
)
{
return
new
Promise
((
resolve
,
reject
)
=>
{
})
}
...
...
@@ -38,20 +53,26 @@ app.listen(port, () => {
producer
.
send
(
[{
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
}],
()
=>
{
})
})
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
"
);
producer
.
send
(
[{
topic
:
"
removeWorker
"
,
messages
:
JSON
.
stringify
({
functionHash
,
portExternal
:
port
,
runtime
,
resource_id
})
}],
()
=>
{
[
{
topic
:
"
removeWorker
"
,
messages
:
message
}
],
()
=>
{
console
.
log
(
"
Ending worker for function
"
,
functionHash
,
"
resource_id
"
,
resource_id
);
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"
,
"_inBundle"
:
false
,
"_integrity"
:
"sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g=="
,
"_location"
:
"/express"
,
"_phantomChildren"
:
{},
"_requested"
:
{
"type"
:
"
tag
"
,
"type"
:
"
range
"
,
"registry"
:
true
,
"raw"
:
"express"
,
"raw"
:
"express
@^4.17.1
"
,
"name"
:
"express"
,
"escapedName"
:
"express"
,
"rawSpec"
:
""
,
"rawSpec"
:
"
^4.17.1
"
,
"saveSpec"
:
null
,
"fetchSpec"
:
"
latest
"
"fetchSpec"
:
"
^4.17.1
"
},
"_requiredBy"
:
[
"#USER"
,
...
...
@@ -21,8 +21,8 @@
],
"_resolved"
:
"https://registry.npmjs.org/express/-/express-4.17.1.tgz"
,
"_shasum"
:
"4491fc38605cf51f8629d39c2b5d026f98a4c134"
,
"_spec"
:
"express"
,
"_where"
:
"/home/nilanjan/Desktop/serverless/hybrid/dispatch_
module/dispatch
er/repository/worker_env"
,
"_spec"
:
"express
@^4.17.1
"
,
"_where"
:
"/home/nilanjan/Desktop/serverless/hybrid/dispatch_
system/dispatch_manag
er/repository/worker_env"
,
"author"
:
{
"name"
:
"TJ Holowaychuk"
,
"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]
```
`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
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
"
{
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
'
;
...
...
@@ -9,23 +6,20 @@ declare module "ipaddr.js" {
[
name
:
string
]:
[
T
,
number
]
|
[
T
,
number
][];
}
// Common methods/properties for IPv4 and IPv6 classes.
class
IP
{
prefixLengthFromSubnetMask
():
number
|
false
;
prefixLengthFromSubnetMask
():
number
|
null
;
toByteArray
():
number
[];
toNormalizedString
():
string
;
toString
():
string
;
}
namespace
Address
{
export
function
isValid
(
addr
:
string
):
boolean
;
export
function
fromByteArray
(
bytes
:
number
[]):
IPv4
|
IPv6
;
export
function
parse
(
addr
:
string
):
IPv4
|
IPv6
;
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
:
IPv6
,
rangeList
:
RangeList
<
IPv6
>
,
defaultName
?:
string
):
string
;
...
...
@@ -39,6 +33,7 @@ declare module "ipaddr.js" {
static
parseCIDR
(
addr
:
string
):
[
IPv4
,
number
];
static
subnetMaskFromPrefixLength
(
prefix
:
number
):
IPv4
;
constructor
(
octets
:
number
[]);
octets
:
number
[]
kind
():
'
ipv4
'
;
match
(
addr
:
IPv4
,
bits
:
number
):
boolean
;
...
...
@@ -55,7 +50,9 @@ declare module "ipaddr.js" {
static
parse
(
addr
:
string
):
IPv6
;
static
parseCIDR
(
addr
:
string
):
[
IPv6
,
number
];
static
subnetMaskFromPrefixLength
(
prefix
:
number
):
IPv6
;
constructor
(
octets
:
number
[]);
constructor
(
parts
:
number
[]);
parts
:
number
[]
zoneId
?:
string
isIPv4MappedAddress
():
boolean
;
kind
():
'
ipv6
'
;
...
...
dispatch_system/dispatch_manager/repository/worker_env/node_modules/ipaddr.js/package.json
View file @
99bb6f85
{
"_from"
:
"ipaddr.js@1.9.
0
"
,
"_id"
:
"ipaddr.js@1.9.
0
"
,
"_from"
:
"ipaddr.js@1.9.
1
"
,
"_id"
:
"ipaddr.js@1.9.
1
"
,
"_inBundle"
:
false
,
"_integrity"
:
"sha512-
M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA
=="
,
"_integrity"
:
"sha512-
0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g
=="
,
"_location"
:
"/ipaddr.js"
,
"_phantomChildren"
:
{},
"_requested"
:
{
"type"
:
"version"
,
"registry"
:
true
,
"raw"
:
"ipaddr.js@1.9.
0
"
,
"raw"
:
"ipaddr.js@1.9.
1
"
,
"name"
:
"ipaddr.js"
,
"escapedName"
:
"ipaddr.js"
,
"rawSpec"
:
"1.9.
0
"
,
"rawSpec"
:
"1.9.
1
"
,
"saveSpec"
:
null
,
"fetchSpec"
:
"1.9.
0
"
"fetchSpec"
:
"1.9.
1
"
},
"_requiredBy"
:
[
"/proxy-addr"
],
"_resolved"
:
"https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.
0
.tgz"
,
"_shasum"
:
"
37df74e430a0e47550fe54a2defe30d8acd95f65
"
,
"_spec"
:
"ipaddr.js@1.9.
0
"
,
"_where"
:
"/home/nilanjan/Desktop/serverless/hybrid/dispatch_
module/dispatch
er/repository/worker_env/node_modules/proxy-addr"
,
"_resolved"
:
"https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.
1
.tgz"
,
"_shasum"
:
"
bff38543eeb8984825079ff3a2a8e6cbd46781b3
"
,
"_spec"
:
"ipaddr.js@1.9.
1
"
,
"_where"
:
"/home/nilanjan/Desktop/serverless/hybrid/dispatch_
system/dispatch_manag
er/repository/worker_env/node_modules/proxy-addr"
,
"author"
:
{
"name"
:
"whitequark"
,
"email"
:
"whitequark@whitequark.org"
...
...
@@ -35,7 +35,7 @@
"description"
:
"A library for manipulating IPv4 and IPv6 addresses in JavaScript."
,
"devDependencies"
:
{
"coffee-script"
:
"~1.12.6"
,
"nodeunit"
:
"
>=0.8.2 <0.8.7
"
,
"nodeunit"
:
"
^0.11.3
"
,
"uglify-js"
:
"~3.0.19"
},
"directories"
:
{
...
...
@@ -46,6 +46,7 @@
},
"files"
:
[
"lib/"
,
"LICENSE"
,
"ipaddr.min.js"
],
"homepage"
:
"https://github.com/whitequark/ipaddr.js#readme"
,
...
...
@@ -65,5 +66,5 @@
"test"
:
"cake build test"
},
"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
==================
...
...
dispatch_system/dispatch_manager/repository/worker_env/node_modules/proxy-addr/index.js
View file @
99bb6f85
...
...
@@ -99,7 +99,7 @@ function compile (val) {
for
(
var
i
=
0
;
i
<
trust
.
length
;
i
++
)
{
val
=
trust
[
i
]
if
(
!
IP_RANGES
.
hasOwnProperty
(
val
))
{
if
(
!
Object
.
prototype
.
hasOwnProperty
.
call
(
IP_RANGES
,
val
))
{
continue
}
...
...
dispatch_system/dispatch_manager/repository/worker_env/node_modules/proxy-addr/package.json
View file @
99bb6f85
{
"_from"
:
"proxy-addr@~2.0.5"
,
"_id"
:
"proxy-addr@2.0.
5
"
,
"_id"
:
"proxy-addr@2.0.
6
"
,
"_inBundle"
:
false
,
"_integrity"
:
"sha512-
t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ
=="
,
"_integrity"
:
"sha512-
dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw
=="
,
"_location"
:
"/proxy-addr"
,
"_phantomChildren"
:
{},
"_requested"
:
{
...
...
@@ -18,10 +18,10 @@
"_requiredBy"
:
[
"/express"
],
"_resolved"
:
"https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.
5
.tgz"
,
"_shasum"
:
"
34cbd64a2d81f4b1fd21e76f9f06c8a45299ee34
"
,
"_resolved"
:
"https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.
6
.tgz"
,
"_shasum"
:
"
fdc2336505447d3f2f2c638ed272caf614bbb2bf
"
,
"_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"
:
{
"name"
:
"Douglas Christopher Wilson"
,
"email"
:
"doug@somethingdoug.com"
...
...
@@ -32,7 +32,7 @@
"bundleDependencies"
:
false
,
"dependencies"
:
{
"forwarded"
:
"~0.1.2"
,
"ipaddr.js"
:
"1.9.
0
"
"ipaddr.js"
:
"1.9.
1
"
},
"deprecated"
:
false
,
"description"
:
"Determine address of proxied request"
,
...
...
@@ -40,15 +40,15 @@
"beautify-benchmark"
:
"0.2.4"
,
"benchmark"
:
"2.1.4"
,
"deep-equal"
:
"1.0.1"
,
"eslint"
:
"
5.16
.0"
,
"eslint-config-standard"
:
"1
2.0
.0"
,
"eslint-plugin-import"
:
"2.
17
.1"
,
"eslint-plugin-markdown"
:
"1.0.
0
"
,
"eslint-plugin-node"
:
"
8.0.1
"
,
"eslint-plugin-promise"
:
"4.
1
.1"
,
"eslint-plugin-standard"
:
"4.0.
0
"
,
"mocha"
:
"
6.1.3
"
,
"nyc"
:
"1
3.3
.0"
"eslint"
:
"
6.8
.0"
,
"eslint-config-standard"
:
"1
4.1
.0"
,
"eslint-plugin-import"
:
"2.
20
.1"
,
"eslint-plugin-markdown"
:
"1.0.
1
"
,
"eslint-plugin-node"
:
"
11.0.0
"
,
"eslint-plugin-promise"
:
"4.
2
.1"
,
"eslint-plugin-standard"
:
"4.0.
1
"
,
"mocha"
:
"
7.0.1
"
,
"nyc"
:
"1
5.0
.0"
},
"engines"
:
{
"node"
:
">= 0.10"
...
...
@@ -78,5 +78,5 @@
"test-cov"
:
"nyc --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 @@
"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"
:
{
"version"
:
"1.1.1"
,
"resolved"
:
"https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz"
,
"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"
:
{
"version"
:
"2.0.1"
,
"resolved"
:
"https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz"
,
...
...
@@ -26,6 +100,41 @@
"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"
:
{
"version"
:
"1.19.0"
,
"resolved"
:
"https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz"
,
...
...
@@ -43,11 +152,82 @@
"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"
:
{
"version"
:
"3.1.0"
,
"resolved"
:
"https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz"
,
"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"
:
{
"version"
:
"0.5.3"
,
"resolved"
:
"https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz"
,
...
...
@@ -71,6 +251,19 @@
"resolved"
:
"https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz"
,
"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"
:
{
"version"
:
"2.6.9"
,
"resolved"
:
"https://registry.npmjs.org/debug/-/debug-2.6.9.tgz"
,
...
...
@@ -79,6 +272,37 @@
"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"
:
{
"version"
:
"1.1.2"
,
"resolved"
:
"https://registry.npmjs.org/depd/-/depd-1.1.2.tgz"
,
...
...
@@ -89,6 +313,21 @@
"resolved"
:
"https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz"
,
"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"
:
{
"version"
:
"1.1.1"
,
"resolved"
:
"https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz"
,
...
...
@@ -99,6 +338,15 @@
"resolved"
:
"https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz"
,
"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"
:
{
"version"
:
"1.0.3"
,
"resolved"
:
"https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz"
,
...
...
@@ -109,6 +357,12 @@
"resolved"
:
"https://registry.npmjs.org/etag/-/etag-1.8.1.tgz"
,
"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"
:
{
"version"
:
"4.17.1"
,
"resolved"
:
"https://registry.npmjs.org/express/-/express-4.17.1.tgz"
,
...
...
@@ -146,6 +400,32 @@
"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"
:
{
"version"
:
"1.1.2"
,
"resolved"
:
"https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz"
,
...
...
@@ -160,6 +440,21 @@
"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"
:
{
"version"
:
"0.1.2"
,
"resolved"
:
"https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz"
,
...
...
@@ -170,6 +465,62 @@
"resolved"
:
"https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz"
,
"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"
:
{
"version"
:
"1.7.2"
,
"resolved"
:
"https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz"
,
...
...
@@ -182,6 +533,16 @@
"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"
:
{
"version"
:
"0.4.24"
,
"resolved"
:
"https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz"
,
...
...
@@ -195,10 +556,102 @@
"resolved"
:
"https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz"
,
"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"
:
{
"version"
:
"1.9.0"
,
"resolved"
:
"https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz"
,
"integrity"
:
"sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA=="
"version"
:
"1.9.1"
,
"resolved"
:
"https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz"
,
"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"
:
{
"version"
:
"0.3.0"
,
...
...
@@ -233,6 +686,43 @@
"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"
:
{
"version"
:
"1.9.1"
,
"resolved"
:
"https://registry.npmjs.org/morgan/-/morgan-1.9.1.tgz"
,
...
...
@@ -250,11 +740,72 @@
"resolved"
:
"https://registry.npmjs.org/ms/-/ms-2.0.0.tgz"
,
"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"
:
{
"version"
:
"0.6.2"
,
"resolved"
:
"https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz"
,
"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"
:
{
"version"
:
"2.3.0"
,
"resolved"
:
"https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz"
,
...
...
@@ -268,6 +819,20 @@
"resolved"
:
"https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz"
,
"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"
:
{
"version"
:
"1.3.3"
,
"resolved"
:
"https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz"
,
...
...
@@ -278,15 +843,68 @@
"resolved"
:
"https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz"
,
"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"
:
{
"version"
:
"2.0.
5
"
,
"resolved"
:
"https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.
5
.tgz"
,
"integrity"
:
"sha512-
t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ
=="
,
"version"
:
"2.0.
6
"
,
"resolved"
:
"https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.
6
.tgz"
,
"integrity"
:
"sha512-
dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw
=="
,
"requires"
:
{
"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"
:
{
"version"
:
"6.7.0"
,
"resolved"
:
"https://registry.npmjs.org/qs/-/qs-6.7.0.tgz"
,
...
...
@@ -308,6 +926,71 @@
"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"
:
{
"version"
:
"5.1.2"
,
"resolved"
:
"https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz"
,
...
...
@@ -318,6 +1001,12 @@
"resolved"
:
"https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz"
,
"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"
:
{
"version"
:
"0.17.1"
,
"resolved"
:
"https://registry.npmjs.org/send/-/send-0.17.1.tgz"
,
...
...
@@ -356,21 +1045,185 @@
"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"
:
{
"version"
:
"1.1.1"
,
"resolved"
:
"https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz"
,
"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"
:
{
"version"
:
"1.5.0"
,
"resolved"
:
"https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz"
,
"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"
:
{
"version"
:
"1.0.0"
,
"resolved"
:
"https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz"
,
"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"
:
{
"version"
:
"1.6.18"
,
"resolved"
:
"https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz"
,
...
...
@@ -385,15 +1238,64 @@
"resolved"
:
"https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz"
,
"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"
:
{
"version"
:
"1.0.1"
,
"resolved"
:
"https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz"
,
"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"
:
{
"version"
:
"1.1.2"
,
"resolved"
:
"https://registry.npmjs.org/vary/-/vary-1.1.2.tgz"
,
"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 @@
"dependencies"
:
{
"body-parser"
:
"^1.19.0"
,
"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