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
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Mahendra Patel
xanadu
Commits
23b21377
Commit
23b21377
authored
Mar 02, 2021
by
Shah Rinku
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
added partial support for routing at nic
parent
bc8d9766
Changes
20
Show whitespace changes
Inline
Side-by-side
Showing
20 changed files
with
2194 additions
and
449 deletions
+2194
-449
dispatch_system/dispatch_manager/lib.js
dispatch_system/dispatch_manager/lib.js
+56
-5
dispatch_system/dispatch_manager/nic/build_offload.sh
dispatch_system/dispatch_manager/nic/build_offload.sh
+25
-8
dispatch_system/dispatch_manager/nic/p4src/echo.bmv2.json
dispatch_system/dispatch_manager/nic/p4src/echo.bmv2.json
+100
-288
dispatch_system/dispatch_manager/nic/p4src/echo.p4
dispatch_system/dispatch_manager/nic/p4src/echo.p4
+17
-25
dispatch_system/dispatch_manager/nic/p4src/echo.p4info.json
dispatch_system/dispatch_manager/nic/p4src/echo.p4info.json
+11
-8
dispatch_system/dispatch_manager/nic/p4src/echo.yml
dispatch_system/dispatch_manager/nic/p4src/echo.yml
+28
-67
dispatch_system/dispatch_manager/nic/p4src/includes/defines.p4
...tch_system/dispatch_manager/nic/p4src/includes/defines.p4
+1
-1
dispatch_system/dispatch_manager/nic/p4src/includes/headers.p4
...tch_system/dispatch_manager/nic/p4src/includes/headers.p4
+1
-1
dispatch_system/dispatch_manager/nic/p4src/includes/parsers.p4
...tch_system/dispatch_manager/nic/p4src/includes/parsers.p4
+1
-1
dispatch_system/dispatch_manager/nic/receive_reply.py
dispatch_system/dispatch_manager/nic/receive_reply.py
+40
-0
dispatch_system/dispatch_manager/nic/send.py
dispatch_system/dispatch_manager/nic/send.py
+181
-0
dispatch_system/dispatch_manager/nic/send.sh
dispatch_system/dispatch_manager/nic/send.sh
+1
-0
dispatch_system/dispatch_manager/nic/send_docker.sh
dispatch_system/dispatch_manager/nic/send_docker.sh
+28
-0
dispatch_system/dispatch_manager/nic/smartnic_dispatch_monitor.py
..._system/dispatch_manager/nic/smartnic_dispatch_monitor.py
+42
-3
dispatch_system/dispatch_manager/nic/workspace.code-workspace
...atch_system/dispatch_manager/nic/workspace.code-workspace
+0
-3
dispatch_system/dispatch_manager/pack.js
dispatch_system/dispatch_manager/pack.js
+15
-25
dispatch_system/dispatch_manager/package.json
dispatch_system/dispatch_manager/package.json
+1
-0
dispatch_system/dispatch_manager/repository/worker_env/env_udp.js
..._system/dispatch_manager/repository/worker_env/env_udp.js
+52
-5
dispatch_system/dispatch_manager/repository/worker_env/package-lock.json
.../dispatch_manager/repository/worker_env/package-lock.json
+1593
-9
dispatch_system/dispatch_manager/repository/worker_env/package.json
...ystem/dispatch_manager/repository/worker_env/package.json
+1
-0
No files found.
dispatch_system/dispatch_manager/lib.js
View file @
23b21377
...
...
@@ -13,6 +13,8 @@ const { createLogger, format, transports } = winston;
const
heap
=
require
(
'
heap
'
)
const
dgram
=
require
(
'
dgram
'
);
const
udpProxy
=
dgram
.
createSocket
(
'
udp4
'
);
let
struct
=
require
(
'
jspack
'
)
struct
=
struct
.
jspack
let
db
=
sharedMeta
.
db
,
// queue holding request to be dispatched
...
...
@@ -144,14 +146,21 @@ async function reverseProxy(req, res) {
logger
.
error
(
"
error
"
+
err
)
}
}
else
if
(
req
.
body
.
type
===
"
udp
"
)
{
let
request_id
=
makeid
(
4
)
let
request_id
=
Math
.
floor
(
Math
.
random
()
*
1000
)
req
.
body
.
request_id
=
request_id
// res.request_id = request_id
requestFlightQueue
.
set
(
request_id
,
res
)
let
payload
=
req
.
body
payload
.
request_id
=
request_id
payload
=
JSON
.
stringify
(
payload
)
udpProxy
.
send
(
payload
,
0
,
payload
.
length
,
resource
.
port
,
resource
.
node_id
,
function
(
err
,
bytes
)
{
let
data
=
payload
.
data
let
packet
=
packPacket
({
chain_id
:
0
,
exec_id
:
request_id
,
function_id
:
0
,
data
,
function_count
:
1
})
udpProxy
.
send
(
packet
,
0
,
packet
.
length
,
resource
.
port
,
resource
.
node_id
,
function
(
err
,
bytes
)
{
// logger.info(`forwarded request via UDP, IP 192.168.2.5 Port ${resource.port}`)
})
}
...
...
@@ -403,8 +412,8 @@ udpProxy.on('error', (err) => {
});
udpProxy
.
on
(
'
message
'
,
(
msg
,
rinfo
)
=>
{
let
result
=
JSON
.
parse
(
msg
)
let
res
=
requestFlightQueue
.
get
(
result
.
request
_id
)
let
result
=
unpackPacket
(
msg
)
let
res
=
requestFlightQueue
.
get
(
result
.
exec
_id
)
res
.
json
(
result
)
});
...
...
@@ -422,6 +431,48 @@ async function fetchData(url, data = null) {
return
await
res
.
json
()
}
function
unpackPacket
(
packet
)
{
// let buffer = new Array(1024)
let
chain_id
=
null
,
exec_id
=
null
,
function_count
=
null
,
function_id
=
null
,
data
=
null
let
base
=
0
chain_id
=
struct
.
Unpack
(
"
>I
"
,
packet
,
base
)
base
+=
4
exec_id
=
struct
.
Unpack
(
"
>I
"
,
packet
,
base
)
base
+=
4
function_id
=
struct
.
Unpack
(
"
>I
"
,
packet
,
base
)
base
+=
1
data
=
struct
.
Unpack
(
"
>I
"
,
packet
,
base
)
base
+=
4
function_count
=
struct
.
Unpack
(
"
B
"
,
packet
,
base
)
return
{
chain_id
:
chain_id
[
0
],
exec_id
:
exec_id
[
0
],
data
:
data
[
0
],
function_count
:
function_count
[
0
],
function_id
:
function_id
[
0
]
}
}
function
packPacket
(
dataPacket
)
{
let
message
=
new
Array
(
1024
)
let
base
=
0
,
chain_id
,
exec_id
,
function_id
,
data
,
function_count
chain_id
=
struct
.
PackTo
(
"
>I
"
,
message
,
base
,
[
dataPacket
.
chain_id
])
base
+=
4
exec_id
=
struct
.
PackTo
(
"
>I
"
,
message
,
base
,
[
dataPacket
.
exec_id
])
base
+=
4
function_id
=
struct
.
PackTo
(
"
>I
"
,
message
,
base
,
[
dataPacket
.
function_id
])
base
+=
1
data
=
struct
.
PackTo
(
"
>I
"
,
message
,
base
,
[
dataPacket
.
data
])
base
+=
4
function_count
=
struct
.
PackTo
(
"
B
"
,
message
,
base
,
[
dataPacket
.
function_count
])
message
=
Buffer
.
from
(
message
)
return
message
}
udpProxy
.
bind
(
constants
.
master_port
);
// starting UDP server for offloaded endpoints
module
.
exports
=
{
...
...
dispatch_system/dispatch_manager/nic/build_offload.sh
View file @
23b21377
#! /bin/bash -x
#! /bin/bash -
e
x
compile_flag
=
0
offload_flag
=
0
assign_ip_flag
=
0
location
=
$(
pwd
)
while
getopts
'c'
flag
;
do
while
getopts
'c
oi
'
flag
;
do
case
"
${
flag
}
"
in
c
)
compile_flag
=
1
;;
o
)
offload_flag
=
1
;;
i
)
assign_ip_flag
=
1
;;
esac
done
...
...
@@ -13,11 +17,24 @@ then
# compile the nfp code
sudo
/opt/netronome/p4/bin/nfp4build
-o
./p4src/echo.nffw
-p
./p4src/out
-4
./p4src/echo.p4
-l
lithium
--nfp4c_p4_version
16
--nfp4c_p4_compiler
p4c-nfp
-c
./p4src/prime.c
fi
# move to p4 bin
cd
/opt/netronome/p4/bin/
# #offload
sudo
./rtecli design-load
-f
$location
/p4src/echo.nffw
-c
$location
/p4src/echo.p4cfg
-p
$location
/p4src/out/pif_design.json
if
[[
$offload_flag
-eq
1
]]
then
# move to p4 bin
cd
/opt/netronome/p4/bin/
# offload
sudo
./rtecli design-load
-f
$location
/p4src/echo.nffw
-c
$location
/p4src/echo.p4cfg
-p
$location
/p4src/out/pif_design.json
# returning back to base
cd
$location
fi
if
[[
$assign_ip_flag
-eq
1
]]
then
#killing all running containers
docker stop
$(
docker ps
-a
-q
)
||
true
#assigning IPs to network interfaces
sudo
./assign_ip.sh
fi
# returning back to base
cd
$location
\ No newline at end of file
dispatch_system/dispatch_manager/nic/p4src/echo.bmv2.json
View file @
23b21377
...
...
@@ -8,10 +8,7 @@
{
"name"
:
"scalars_0"
,
"id"
:
0
,
"fields"
:
[
[
"temp"
,
32
,
false
],
[
"tempEth"
,
48
,
false
]
]
"fields"
:
[]
},
{
"name"
:
"ethernet_t"
,
...
...
@@ -56,7 +53,7 @@
"fields"
:
[
[
"chain_id"
,
32
,
false
],
[
"exec_id"
,
32
,
false
],
[
"function_id"
,
8
,
false
],
[
"function_id"
,
32
,
false
],
[
"data"
,
32
,
false
],
[
"function_count"
,
8
,
false
],
[
"f0"
,
8
,
false
],
...
...
@@ -257,7 +254,7 @@
],
"transitions"
:
[
{
"value"
:
"0x
22b9
"
,
"value"
:
"0x
1f40
"
,
"mask"
:
null
,
"next_state"
:
"parse_map_hdr"
},
...
...
@@ -362,7 +359,7 @@
"id"
:
0
,
"source_info"
:
{
"filename"
:
"p4src/echo.p4"
,
"line"
:
97
,
"line"
:
89
,
"column"
:
8
,
"source_fragment"
:
"DeparserImpl"
},
...
...
@@ -403,7 +400,7 @@
"id"
:
0
,
"source_info"
:
{
"filename"
:
"p4src/echo.p4"
,
"line"
:
10
8
,
"line"
:
10
0
,
"column"
:
8
,
"source_fragment"
:
"verify_checksum( ..."
},
...
...
@@ -461,7 +458,7 @@
"id"
:
1
,
"source_info"
:
{
"filename"
:
"p4src/echo.p4"
,
"line"
:
12
8
,
"line"
:
12
0
,
"column"
:
8
,
"source_fragment"
:
"update_checksum( ..."
},
...
...
@@ -542,126 +539,81 @@
}
},
{
"name"
:
"
set_egress
"
,
"name"
:
"
fwd_act
"
,
"id"
:
2
,
"runtime_data"
:
[],
"primitives"
:
[
{
"op"
:
"prime"
,
"parameters"
:
[]
},
{
"op"
:
"assign"
,
"parameters"
:
[
{
"type"
:
"field"
,
"value"
:
[
"scalars"
,
"temp"
]
},
"runtime_data"
:
[
{
"type"
:
"field
"
,
"value"
:
[
"ipv4"
,
"dstAddr"
]
"name"
:
"port
"
,
"bitwidth"
:
16
}
],
"source_info"
:
{
"filename"
:
"p4src/echo.p4"
,
"line"
:
16
,
"column"
:
8
,
"source_fragment"
:
"bit<32> temp = hdr.ipv4.dstAddr;"
}
},
"primitives"
:
[
{
"op"
:
"assign"
,
"parameters"
:
[
{
"type"
:
"field"
,
"value"
:
[
"
ipv4"
,
"dstAddr
"
]
"value"
:
[
"
standard_metadata"
,
"egress_spec
"
]
},
{
"type"
:
"
field
"
,
"value"
:
[
"ipv4"
,
"srcAddr"
]
"type"
:
"
runtime_data
"
,
"value"
:
0
}
],
"source_info"
:
{
"filename"
:
"p4src/echo.p4"
,
"line"
:
1
7
,
"line"
:
1
3
,
"column"
:
8
,
"source_fragment"
:
"
hdr.ipv4.dstAddr = hdr.ipv4.srcAddr
"
"source_fragment"
:
"
standard_metadata.egress_spec = port
"
}
},
{
"op"
:
"assign"
,
"parameters"
:
[
{
"type"
:
"field"
,
"value"
:
[
"ipv4"
,
"srcAddr"
]
},
{
"type"
:
"field"
,
"value"
:
[
"scalars"
,
"temp"
]
}
],
"source_info"
:
{
"filename"
:
"p4src/echo.p4"
,
"line"
:
18
,
"column"
:
8
,
"source_fragment"
:
"hdr.ipv4.srcAddr = temp
"
"line"
:
12
,
"column"
:
29
,
"source_fragment"
:
"fwd_act
"
}
},
{
"op"
:
"assign"
,
"parameters"
:
[
"name"
:
"dispatch_act"
,
"id"
:
3
,
"runtime_data"
:
[
{
"type"
:
"field
"
,
"value"
:
[
"udp"
,
"dstPort"
]
"name"
:
"dstAddr
"
,
"bitwidth"
:
32
},
{
"type"
:
"hexstr"
,
"value"
:
"0x2328"
}
],
"source_info"
:
{
"filename"
:
"p4src/echo.p4"
,
"line"
:
19
,
"column"
:
8
,
"source_fragment"
:
"hdr.udp.dstPort = 9000"
}
"name"
:
"dstPort"
,
"bitwidth"
:
16
},
{
"op"
:
"assign"
,
"parameters"
:
[
{
"type"
:
"field"
,
"value"
:
[
"scalars"
,
"tempEth"
]
"name"
:
"ethernetAddr"
,
"bitwidth"
:
48
},
{
"type"
:
"field
"
,
"value"
:
[
"ethernet"
,
"dstAddr"
]
"name"
:
"egress_port
"
,
"bitwidth"
:
16
}
],
"source_info"
:
{
"filename"
:
"p4src/echo.p4"
,
"line"
:
20
,
"column"
:
8
,
"source_fragment"
:
"bit<48> tempEth = hdr.ethernet.dstAddr;"
}
},
"primitives"
:
[
{
"op"
:
"assign"
,
"parameters"
:
[
{
"type"
:
"field"
,
"value"
:
[
"
ethernet
"
,
"dstAddr"
]
"value"
:
[
"
ipv4
"
,
"dstAddr"
]
},
{
"type"
:
"
field
"
,
"value"
:
[
"ethernet"
,
"srcAddr"
]
"type"
:
"
runtime_data
"
,
"value"
:
0
}
],
"source_info"
:
{
"filename"
:
"p4src/echo.p4"
,
"line"
:
2
1
,
"line"
:
2
6
,
"column"
:
8
,
"source_fragment"
:
"hdr.
ethernet.dstAddr = hdr.ethernet.src
Addr"
"source_fragment"
:
"hdr.
ipv4.dstAddr = dst
Addr"
}
},
{
...
...
@@ -669,18 +621,18 @@
"parameters"
:
[
{
"type"
:
"field"
,
"value"
:
[
"
ethernet"
,
"srcAddr
"
]
"value"
:
[
"
udp"
,
"dstPort
"
]
},
{
"type"
:
"
field
"
,
"value"
:
[
"scalars"
,
"tempEth"
]
"type"
:
"
runtime_data
"
,
"value"
:
1
}
],
"source_info"
:
{
"filename"
:
"p4src/echo.p4"
,
"line"
:
2
2
,
"line"
:
2
7
,
"column"
:
8
,
"source_fragment"
:
"hdr.
ethernet.srcAddr = tempEth
"
"source_fragment"
:
"hdr.
udp.dstPort = dstPort
"
}
},
{
...
...
@@ -688,18 +640,18 @@
"parameters"
:
[
{
"type"
:
"field"
,
"value"
:
[
"
standard_metadata"
,
"egress_spec
"
]
"value"
:
[
"
map_hdr"
,
"data
"
]
},
{
"type"
:
"
field
"
,
"value"
:
[
"standard_metadata"
,
"ingress_port"
]
"type"
:
"
hexstr
"
,
"value"
:
"0x00000063"
}
],
"source_info"
:
{
"filename"
:
"p4src/echo.p4"
,
"line"
:
2
3
,
"line"
:
2
8
,
"column"
:
8
,
"source_fragment"
:
"
standard_metadata.egress_spec = standard_metadata.ingress_port
"
"source_fragment"
:
"
hdr.map_hdr.data = 99
"
}
},
{
...
...
@@ -707,61 +659,20 @@
"parameters"
:
[
{
"type"
:
"field"
,
"value"
:
[
"
ipv4"
,
"ttl
"
]
"value"
:
[
"
ethernet"
,
"dstAddr
"
]
},
{
"type"
:
"expression"
,
"value"
:
{
"type"
:
"expression"
,
"value"
:
{
"op"
:
"&"
,
"left"
:
{
"type"
:
"expression"
,
"value"
:
{
"op"
:
"+"
,
"left"
:
{
"type"
:
"field"
,
"value"
:
[
"ipv4"
,
"ttl"
]
},
"right"
:
{
"type"
:
"hexstr"
,
"value"
:
"0xff"
}
}
},
"right"
:
{
"type"
:
"hexstr"
,
"value"
:
"0xff"
}
}
}
"type"
:
"runtime_data"
,
"value"
:
2
}
],
"source_info"
:
{
"filename"
:
"p4src/echo.p4"
,
"line"
:
2
4
,
"line"
:
2
9
,
"column"
:
8
,
"source_fragment"
:
"hdr.ipv4.ttl = hdr.ipv4.ttl - 8w1"
}
}
],
"source_info"
:
{
"filename"
:
"p4src/echo.p4"
,
"line"
:
12
,
"column"
:
32
,
"source_fragment"
:
"set_egress"
"source_fragment"
:
"hdr.ethernet.dstAddr = ethernetAddr"
}
},
{
"name"
:
"fwd_act"
,
"id"
:
3
,
"runtime_data"
:
[
{
"name"
:
"port"
,
"bitwidth"
:
16
}
],
"primitives"
:
[
{
"op"
:
"assign"
,
"parameters"
:
[
...
...
@@ -770,84 +681,50 @@
"value"
:
[
"standard_metadata"
,
"egress_spec"
]
},
{
"type"
:
"
runtime_data
"
,
"value"
:
0
"type"
:
"
field
"
,
"value"
:
[
"standard_metadata"
,
"ingress_port"
]
}
],
"source_info"
:
{
"filename"
:
"p4src/echo.p4"
,
"line"
:
28
,
"line"
:
35
,
"column"
:
8
,
"source_fragment"
:
"standard_metadata.egress_spec = port"
"source_fragment"
:
"standard_metadata.egress_spec =
standard_metadata.ingress_
port"
}
}
],
"source_info"
:
{
"filename"
:
"p4src/echo.p4"
,
"line"
:
2
7
,
"column"
:
29
,
"source_fragment"
:
"
fwd
_act"
"line"
:
2
5
,
"column"
:
34
,
"source_fragment"
:
"
dispatch
_act"
}
},
{
"name"
:
"
dispatch_
act"
,
"name"
:
"act"
,
"id"
:
4
,
"runtime_data"
:
[
{
"name"
:
"dstAddr"
,
"bitwidth"
:
32
},
{
"name"
:
"dstPort"
,
"bitwidth"
:
16
}
],
"runtime_data"
:
[],
"primitives"
:
[
{
"op"
:
"assign"
,
"parameters"
:
[
{
"type"
:
"field"
,
"value"
:
[
"
ipv4"
,
"dstAddr
"
]
"value"
:
[
"
map_hdr"
,
"data
"
]
},
{
"type"
:
"runtime_data"
,
"value"
:
0
}
],
"source_info"
:
{
"filename"
:
"p4src/echo.p4"
,
"line"
:
41
,
"column"
:
8
,
"source_fragment"
:
"hdr.ipv4.dstAddr = dstAddr"
}
},
{
"op"
:
"assign"
,
"parameters"
:
[
{
"type"
:
"field"
,
"value"
:
[
"udp"
,
"dstPort"
]
},
{
"type"
:
"runtime_data"
,
"value"
:
1
"type"
:
"hexstr"
,
"value"
:
"0x00000064"
}
],
"source_info"
:
{
"filename"
:
"p4src/echo.p4"
,
"line"
:
42
,
"column"
:
8
,
"source_fragment"
:
"hdr.udp.dstPort = dstPort"
}
"line"
:
52
,
"column"
:
9
,
"source_fragment"
:
"hdr.map_hdr.data = 32w100"
}
],
"source_info"
:
{
"filename"
:
"p4src/echo.p4"
,
"line"
:
40
,
"column"
:
34
,
"source_fragment"
:
"dispatch_act"
}
]
},
{
"name"
:
"fix_checksum"
,
...
...
@@ -868,7 +745,7 @@
],
"source_info"
:
{
"filename"
:
"p4src/echo.p4"
,
"line"
:
85
,
"line"
:
77
,
"column"
:
8
,
"source_fragment"
:
"hdr.udp.checksum = 16w0"
}
...
...
@@ -876,7 +753,7 @@
],
"source_info"
:
{
"filename"
:
"p4src/echo.p4"
,
"line"
:
84
,
"line"
:
76
,
"column"
:
33
,
"source_fragment"
:
"fix_checksum"
}
...
...
@@ -895,7 +772,7 @@
"init_table"
:
"node_2"
,
"tables"
:
[
{
"name"
:
"tbl_
set_egress
"
,
"name"
:
"tbl_
act
"
,
"id"
:
0
,
"key"
:
[],
"match_type"
:
"exact"
,
...
...
@@ -904,14 +781,14 @@
"with_counters"
:
false
,
"support_timeout"
:
false
,
"direct_meters"
:
null
,
"action_ids"
:
[
2
],
"actions"
:
[
"
set_egress
"
],
"base_default_next"
:
null
,
"action_ids"
:
[
4
],
"actions"
:
[
"
act
"
],
"base_default_next"
:
"dispatch"
,
"next_tables"
:
{
"
set_egress"
:
null
"
act"
:
"dispatch"
},
"default_entry"
:
{
"action_id"
:
2
,
"action_id"
:
4
,
"action_const"
:
true
,
"action_data"
:
[],
"action_entry_const"
:
true
...
...
@@ -922,14 +799,14 @@
"id"
:
1
,
"source_info"
:
{
"filename"
:
"p4src/echo.p4"
,
"line"
:
4
5
,
"line"
:
4
1
,
"column"
:
29
,
"source_fragment"
:
"dispatch"
},
"key"
:
[
{
"match_type"
:
"exact"
,
"target"
:
[
"map_hdr"
,
"
chai
n_id"
],
"target"
:
[
"map_hdr"
,
"
functio
n_id"
],
"mask"
:
null
}
],
...
...
@@ -939,12 +816,12 @@
"with_counters"
:
false
,
"support_timeout"
:
false
,
"direct_meters"
:
null
,
"action_ids"
:
[
4
,
1
],
"action_ids"
:
[
3
,
1
],
"actions"
:
[
"dispatch_act"
,
"NoAction"
],
"base_default_next"
:
"fwd"
,
"base_default_next"
:
null
,
"next_tables"
:
{
"dispatch_act"
:
"fwd"
,
"NoAction"
:
"fwd"
"dispatch_act"
:
null
,
"NoAction"
:
null
},
"default_entry"
:
{
"action_id"
:
1
,
...
...
@@ -958,7 +835,7 @@
"id"
:
2
,
"source_info"
:
{
"filename"
:
"p4src/echo.p4"
,
"line"
:
31
,
"line"
:
16
,
"column"
:
24
,
"source_fragment"
:
"fwd"
},
...
...
@@ -975,7 +852,7 @@
"with_counters"
:
false
,
"support_timeout"
:
false
,
"direct_meters"
:
null
,
"action_ids"
:
[
3
,
0
],
"action_ids"
:
[
2
,
0
],
"actions"
:
[
"fwd_act"
,
"NoAction"
],
"base_default_next"
:
null
,
"next_tables"
:
{
...
...
@@ -997,52 +874,9 @@
"id"
:
0
,
"source_info"
:
{
"filename"
:
"p4src/echo.p4"
,
"line"
:
5
5
,
"line"
:
5
1
,
"column"
:
12
,
"source_fragment"
:
"hdr.ipv4.isValid() && hdr.udp.dstPort == 8889"
},
"expression"
:
{
"type"
:
"expression"
,
"value"
:
{
"op"
:
"and"
,
"left"
:
{
"type"
:
"expression"
,
"value"
:
{
"op"
:
"d2b"
,
"left"
:
null
,
"right"
:
{
"type"
:
"field"
,
"value"
:
[
"ipv4"
,
"$valid$"
]
}
}
},
"right"
:
{
"type"
:
"expression"
,
"value"
:
{
"op"
:
"=="
,
"left"
:
{
"type"
:
"field"
,
"value"
:
[
"udp"
,
"dstPort"
]
},
"right"
:
{
"type"
:
"hexstr"
,
"value"
:
"0x22b9"
}
}
}
}
},
"true_next"
:
"tbl_set_egress"
,
"false_next"
:
"node_4"
},
{
"name"
:
"node_4"
,
"id"
:
1
,
"source_info"
:
{
"filename"
:
"p4src/echo.p4"
,
"line"
:
60
,
"column"
:
16
,
"source_fragment"
:
"hdr.ipv4.isValid() && hdr.udp.dstPort == 8080"
"source_fragment"
:
"hdr.ipv4.isValid() && hdr.udp.dstPort == 8000"
},
"expression"
:
{
"type"
:
"expression"
,
...
...
@@ -1069,13 +903,13 @@
},
"right"
:
{
"type"
:
"hexstr"
,
"value"
:
"0x1f
9
0"
"value"
:
"0x1f
4
0"
}
}
}
}
},
"true_next"
:
"
dispatch
"
,
"true_next"
:
"
tbl_act
"
,
"false_next"
:
"fwd"
}
]
...
...
@@ -1085,7 +919,7 @@
"id"
:
1
,
"source_info"
:
{
"filename"
:
"p4src/echo.p4"
,
"line"
:
6
9
,
"line"
:
6
1
,
"column"
:
8
,
"source_fragment"
:
"egress"
},
...
...
@@ -1161,29 +995,7 @@
],
"force_arith"
:
[],
"extern_instances"
:
[],
"extern_function_instances"
:
[
{
"name"
:
"prime"
,
"id"
:
0
,
"source_info"
:
{
"filename"
:
"p4src/echo.p4"
,
"line"
:
8
,
"column"
:
12
,
"source_fragment"
:
"prime"
}
}
],
"extern_function_instances"
:
[],
"field_aliases"
:
[],
"flow_variables"
:
[
{
"flow"
:
"ingress"
,
"header"
:
"scalars"
,
"field"
:
"temp"
},
{
"flow"
:
"ingress"
,
"header"
:
"scalars"
,
"field"
:
"tempEth"
}
]
"flow_variables"
:
[]
}
\ No newline at end of file
dispatch_system/dispatch_manager/nic/p4src/echo.p4
View file @
23b21377
...
...
@@ -9,21 +9,6 @@ extern void prime();
control ingress(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) {
@name(".set_egress") action set_egress() {
prime();
bit<32> temp = hdr.ipv4.dstAddr;
hdr.ipv4.dstAddr = hdr.ipv4.srcAddr;
hdr.ipv4.srcAddr = temp;
hdr.udp.dstPort = 9000;
bit<48> tempEth = hdr.ethernet.dstAddr;
hdr.ethernet.dstAddr = hdr.ethernet.srcAddr;
hdr.ethernet.srcAddr = tempEth;
standard_metadata.egress_spec = standard_metadata.ingress_port;
hdr.ipv4.ttl = hdr.ipv4.ttl - 8w1;
}
@name(".fwd_act") action fwd_act(bit<16> port) {
standard_metadata.egress_spec = port;
}
...
...
@@ -37,9 +22,20 @@ control ingress(inout headers hdr, inout metadata meta, inout standard_metadata_
}
}
@name(".dispatch_act") action dispatch_act(bit<32> dstAddr, bit<16> dstPort) {
@name(".dispatch_act") action dispatch_act(bit<32> dstAddr, bit<16> dstPort
, bit<48> ethernetAddr , bit<16> egress_port
) {
hdr.ipv4.dstAddr = dstAddr;
hdr.udp.dstPort = dstPort;
hdr.map_hdr.data = 99;
hdr.ethernet.dstAddr = ethernetAddr;
// standard_metadata.egress_port = egress_port;
// bit<48> tempEth = hdr.ethernet.dstAddr;
// hdr.ethernet.dstAddr = hdr.ethernet.srcAddr;
// hdr.ethernet.srcAddr = tempEth;
standard_metadata.egress_spec = standard_metadata.ingress_port;
// hdr.ipv4.ttl = hdr.ipv4.ttl - 8w1;
}
@name(".dispatch") table dispatch {
...
...
@@ -47,22 +43,18 @@ control ingress(inout headers hdr, inout metadata meta, inout standard_metadata_
dispatch_act;
}
key = {
hdr.map_hdr.
chai
n_id : exact;
hdr.map_hdr.
functio
n_id : exact;
}
}
apply {
if (hdr.ipv4.isValid() && hdr.udp.dstPort == MDS_PORT) {
// hdr.map_hdr.data = 32w100;
set_egress();
} else {
if (hdr.ipv4.isValid() && hdr.udp.dstPort == 8080) {
if (hdr.ipv4.isValid() && hdr.udp.dstPort == DISPATCHER_PORT) {
hdr.map_hdr.data = 32w100;
dispatch.apply();
}
// fwd.apply();
} else {
fwd.apply();
}
//fwd.apply();
}
}
...
...
dispatch_system/dispatch_manager/nic/p4src/echo.p4info.json
View file @
23b21377
...
...
@@ -36,7 +36,7 @@
"matchFields"
:
[
{
"id"
:
1
,
"name"
:
"map_hdr.
chai
n_id"
,
"name"
:
"map_hdr.
functio
n_id"
,
"bitwidth"
:
32
,
"matchType"
:
"EXACT"
}
...
...
@@ -63,13 +63,6 @@
"alias"
:
"NoAction"
}
},
{
"preamble"
:
{
"id"
:
16816129
,
"name"
:
"set_egress"
,
"alias"
:
"set_egress"
}
},
{
"preamble"
:
{
"id"
:
16805069
,
...
...
@@ -100,6 +93,16 @@
"id"
:
2
,
"name"
:
"dstPort"
,
"bitwidth"
:
16
},
{
"id"
:
3
,
"name"
:
"ethernetAddr"
,
"bitwidth"
:
48
},
{
"id"
:
4
,
"name"
:
"egress_port"
,
"bitwidth"
:
16
}
]
},
...
...
dispatch_system/dispatch_manager/nic/p4src/echo.yml
View file @
23b21377
...
...
@@ -33,12 +33,6 @@ ing_metadata:
-
_padding
:
2
type
:
metadata
ingress::set_egress::scalars:
fields
:
-
temp
:
32
-
tempEth
:
48
type
:
metadata
ipv4
:
calculated_fields
:
-
condition
:
valid(ipv4)
...
...
@@ -68,7 +62,7 @@ map_hdr:
fields
:
-
chain_id
:
32
-
exec_id
:
32
-
function_id
:
8
-
function_id
:
32
-
data
:
32
-
function_count
:
8
-
f0
:
8
...
...
@@ -214,7 +208,7 @@ parser:
start -> exit [value="default", mask="none", order="1"]
parse_ipv4 -> parse_udp [value="0x00000511", mask="0x00000fff", order="0"]
parse_ipv4 -> exit [value="default", mask="none", order="1"]
parse_udp -> parse_map_hdr [value="0x
22b9
", mask="none", order="0"]
parse_udp -> parse_map_hdr [value="0x
1f40
", mask="none", order="0"]
parse_udp -> parse_map_hdr [value="0x2328", mask="none", order="1"]
parse_udp -> exit [value="default", mask="none", order="2"]
parse_map_hdr -> exit [value="default", mask="none", order="0"]
...
...
@@ -223,25 +217,6 @@ parser:
type
:
parser
##########################################
# External functions #
##########################################
prime__0
:
name
:
prime
type
:
external_action
##########################################
# Action Expressions #
##########################################
_expression_set_egress_0
:
expression
:
((((ipv4.ttl) + (0xff))) & (0xff))
format
:
bracketed_expr
type
:
expression
##########################################
# Action sets #
##########################################
...
...
@@ -249,18 +224,29 @@ _expression_set_egress_0:
egress::fix_checksum:
implementation
:
modify_field(udp.checksum, 0x0000);
src_filename
:
p4src/echo.p4
src_lineno
:
84
src_lineno
:
76
type
:
action
ingress::act:
implementation
:
modify_field(map_hdr.data, 0x00000064);
src_filename
:
'
'
src_lineno
:
1
type
:
action
ingress::dispatch_act:
implementation
:
|-
modify_field(ipv4.dstAddr, dstAddr);
modify_field(udp.dstPort, dstPort);
modify_field(map_hdr.data, 0x00000063);
modify_field(ethernet.dstAddr, ethernetAddr);
modify_field(standard_metadata.egress_spec, standard_metadata.ingress_port);
parameter_list
:
-
dstAddr
:
32
-
dstPort
:
16
-
ethernetAddr
:
48
-
egress_port
:
16
src_filename
:
p4src/echo.p4
src_lineno
:
40
src_lineno
:
25
type
:
action
ingress::fwd_act:
...
...
@@ -268,22 +254,6 @@ ingress::fwd_act:
parameter_list
:
-
port
:
16
src_filename
:
p4src/echo.p4
src_lineno
:
27
type
:
action
ingress::set_egress:
implementation
:
|-
prime();
modify_field(ingress::set_egress::scalars.temp, ipv4.dstAddr);
modify_field(ipv4.dstAddr, ipv4.srcAddr);
modify_field(ipv4.srcAddr, ingress::set_egress::scalars.temp);
modify_field(udp.dstPort, 0x2328);
modify_field(ingress::set_egress::scalars.tempEth, ethernet.dstAddr);
modify_field(ethernet.dstAddr, ethernet.srcAddr);
modify_field(ethernet.srcAddr, ingress::set_egress::scalars.tempEth);
modify_field(standard_metadata.egress_spec, standard_metadata.ingress_port);
modify_field(ipv4.ttl, _expression_set_egress_0);
src_filename
:
p4src/echo.p4
src_lineno
:
12
type
:
action
...
...
@@ -307,10 +277,10 @@ ingress::dispatch:
allowed_actions
:
-
ingress::dispatch_act
match_on
:
map_hdr.
chai
n_id
:
exact
map_hdr.
functio
n_id
:
exact
max_entries
:
1025
src_filename
:
p4src/echo.p4
src_lineno
:
4
5
src_lineno
:
4
1
type
:
table
ingress::fwd:
...
...
@@ -320,14 +290,14 @@ ingress::fwd:
standard_metadata.ingress_port
:
exact
max_entries
:
1025
src_filename
:
p4src/echo.p4
src_lineno
:
31
src_lineno
:
16
type
:
table
ingress::tbl_
set_egress
:
ingress::tbl_
act
:
allowed_actions
:
-
ingress::
set_egress
-
ingress::
act
default_entry
:
action
:
ingress::
set_egress
action
:
ingress::
act
const
:
true
max_entries
:
1025
src_filename
:
'
'
...
...
@@ -340,17 +310,10 @@ ingress::tbl_set_egress:
##########################################
_condition_0
:
condition
:
(((valid(ipv4))) and (((udp.dstPort) == (8889))))
format
:
bracketed_expr
src_filename
:
p4src/echo.p4
src_lineno
:
55
type
:
conditional
_condition_1
:
condition
:
(((valid(ipv4))) and (((udp.dstPort) == (8080))))
condition
:
(((valid(ipv4))) and (((udp.dstPort) == (8000))))
format
:
bracketed_expr
src_filename
:
p4src/echo.p4
src_lineno
:
60
src_lineno
:
51
type
:
conditional
...
...
@@ -363,13 +326,11 @@ ingress_flow:
format
:
dot
implementation
:
|-
digraph {
"_condition_0" -> "_condition_1" [condition = false]
"_condition_0" -> "ingress::tbl_set_egress" [condition = true]
"_condition_1" -> "ingress::fwd" [condition = false]
"_condition_1" -> "ingress::dispatch" [condition = true]
"_condition_0" -> "ingress::fwd" [condition = false]
"_condition_0" -> "ingress::tbl_act" [condition = true]
"ingress::fwd" -> "exit_control_flow" [action = always]
"ingress::
dispatch" -> "ingress::fwd
" [action = always]
"ingress::
tbl_set_egress
" -> "exit_control_flow" [action = always]
"ingress::
tbl_act" -> "ingress::dispatch
" [action = always]
"ingress::
dispatch
" -> "exit_control_flow" [action = always]
}
start_state
:
_condition_0
type
:
control_flow
...
...
@@ -421,7 +382,7 @@ layout:
##########################################
source_info
:
date
:
2021/0
2/22 11:12:59
date
:
2021/0
3/01 20:59:20
output_file
:
p4src/echo.yml
p4_version
:
'
16'
source_files
:
...
...
dispatch_system/dispatch_manager/nic/p4src/includes/defines.p4
View file @
23b21377
#define REPLY_PORT 9000
#define
MDS_PORT 8889
#define
DISPATCHER_PORT 8000
#define NUM_CACHE 128
#define CLUSTER_COUNT 2
#define DEAD_EGRESS_PORT 9
...
...
dispatch_system/dispatch_manager/nic/p4src/includes/headers.p4
View file @
23b21377
...
...
@@ -43,7 +43,7 @@ header udp_t {
header map_hdr_t {
bit<32> chain_id;
bit<32> exec_id;
bit<
8
> function_id;
bit<
32
> function_id;
bit<32> data;
bit<8> function_count;
bit<8> f0;
...
...
dispatch_system/dispatch_manager/nic/p4src/includes/parsers.p4
View file @
23b21377
...
...
@@ -11,7 +11,7 @@ parser ParserImpl(packet_in packet, out headers hdr, inout metadata meta, inout
@name(".parse_udp") state parse_udp {
packet.extract<udp_t>(hdr.udp);
transition select(hdr.udp.dstPort) {
MDS
_PORT: parse_map_hdr;
DISPATCHER
_PORT: parse_map_hdr;
REPLY_PORT: parse_map_hdr;
default: accept;
}
...
...
dispatch_system/dispatch_manager/nic/receive_reply.py
0 → 100644
View file @
23b21377
import
socket
import
struct
import
time
import
thread
import
argparse
NC_PORT
=
8000
parser
=
argparse
.
ArgumentParser
(
description
=
'Mininet demo'
)
parser
.
add_argument
(
'--client-ip'
,
help
=
'IP of client'
,
type
=
str
,
action
=
"store"
,
required
=
True
)
args
=
parser
.
parse_args
()
CLIENT_IP
=
args
.
client_ip
# CLIENT_IP = "192.168.0.105"
len_key
=
16
counter
=
0
s
=
socket
.
socket
(
socket
.
AF_INET
,
socket
.
SOCK_DGRAM
)
s
.
bind
((
CLIENT_IP
,
NC_PORT
))
while
True
:
packet
,
addr
=
s
.
recvfrom
(
1024
)
# print packet
counter
=
counter
+
1
base
=
0
chain_id
=
struct
.
unpack
(
">I"
,
packet
[
base
:
base
+
4
])[
0
]
base
+=
4
exec_id
=
struct
.
unpack
(
">I"
,
packet
[
base
:
base
+
4
])[
0
]
base
+=
4
function_id
=
struct
.
unpack
(
">I"
,
packet
[
base
:
base
+
4
])[
0
]
base
+=
1
data
=
struct
.
unpack
(
">I"
,
packet
[
base
:
base
+
4
])[
0
]
base
+=
4
function_count
=
struct
.
unpack
(
"B"
,
packet
[
base
])[
0
]
print
chain_id
,
exec_id
,
data
,
"function_id"
,
function_id
,
function_count
data
=
[]
for
i
in
range
(
1
,
6
):
data
.
append
(
int
(
struct
.
unpack
(
"B"
,
packet
[
i
+
base
])[
0
]))
print
data
\ No newline at end of file
dispatch_system/dispatch_manager/nic/send.py
0 → 100644
View file @
23b21377
import
socket
import
struct
import
time
import
threading
import
random
import
time
import
argparse
parser
=
argparse
.
ArgumentParser
(
description
=
'Mininet demo'
)
parser
.
add_argument
(
'--client-port'
,
help
=
'Port of client'
,
type
=
int
,
action
=
"store"
,
required
=
True
)
parser
.
add_argument
(
'--send-data'
,
help
=
'Data to send'
,
type
=
int
,
action
=
"store"
,
required
=
False
)
parser
.
add_argument
(
'--fid'
,
help
=
'Funtion id'
,
type
=
int
,
action
=
"store"
,
required
=
False
)
parser
.
add_argument
(
'--closed'
,
help
=
'Closed loop'
,
type
=
int
,
action
=
"store"
,
required
=
True
)
group
=
parser
.
add_mutually_exclusive_group
(
required
=
True
)
# group.add_argument('--bandwidth', help='Bandwidth',
# type=int, action="store")
group
.
add_argument
(
'--rps'
,
help
=
'Requests per second'
,
type
=
int
,
action
=
"store"
)
group
.
add_argument
(
'--req-count'
,
help
=
'Number of requests to send'
,
type
=
int
,
action
=
"store"
)
parser
.
add_argument
(
'--offload'
,
help
=
'offload a portion of workloads'
,
type
=
float
,
action
=
"store"
)
args
=
parser
.
parse_args
()
print
args
.
send_data
PORT
=
args
.
client_port
dataInt
=
args
.
send_data
fid
=
args
.
fid
SERVER_IP
=
"192.168.2.2"
egress_time
=
[]
ingress_time
=
[]
stop_thread
=
False
def
receive
():
global
egress_time
,
stop_thread
CLIENT_IP
=
"0.0.0.0"
s
=
socket
.
socket
(
socket
.
AF_INET
,
socket
.
SOCK_DGRAM
)
s
.
bind
((
CLIENT_IP
,
7070
))
print
"listening to {} at port {}"
.
format
(
CLIENT_IP
,
9000
)
run_status
=
{}
while
True
:
if
stop_thread
:
break
packet
,
addr
=
s
.
recvfrom
(
1024
)
# print packet
base
=
0
chain_id
=
struct
.
unpack
(
">I"
,
packet
[
base
:
base
+
4
])[
0
]
base
+=
4
exec_id
=
struct
.
unpack
(
">I"
,
packet
[
base
:
base
+
4
])[
0
]
base
+=
4
function_id
=
struct
.
unpack
(
">I"
,
packet
[
base
:
base
+
4
])[
0
]
base
+=
1
data
=
struct
.
unpack
(
">I"
,
packet
[
base
:
base
+
4
])[
0
]
base
+=
4
function_count
=
struct
.
unpack
(
"B"
,
packet
[
base
])[
0
]
print
"rec"
,
chain_id
,
exec_id
,
data
,
function_id
,
function_count
def
genPacket
():
global
fid
packet
=
None
exec_id
=
random
.
randint
(
0
,
16384
)
chain_id
=
1
# data = 100
function_count
=
5
function_id
=
fid
if
(
fid
)
else
0
f0
=
0
f1
=
0
f2
=
2
f3
=
6
f4
=
2
print
chain_id
,
exec_id
,
"function_id"
,
function_id
,
function_count
,
\
f0
,
f1
,
f2
,
f3
,
f4
offload_status
=
False
chain_id
=
struct
.
pack
(
">I"
,
chain_id
)
# chain id
exec_id
=
struct
.
pack
(
">I"
,
exec_id
)
# execution id
if
args
.
offload
is
not
None
:
max_workload
=
100
dataInt
=
random
.
randint
(
1
,
max_workload
)
cutoff
=
max_workload
*
args
.
offload
if
dataInt
<=
cutoff
:
data
=
struct
.
pack
(
">I"
,
dataInt
*
256
)
# data
offload_status
=
True
else
:
data
=
struct
.
pack
(
">I"
,
dataInt
)
# data
else
:
data
=
struct
.
pack
(
">I"
,
dataInt
)
# data
# print "{0:b}".format(data)
function_count
=
struct
.
pack
(
"B"
,
function_count
)
# function count
function_id
=
struct
.
pack
(
">I"
,
function_id
)
# function count
f0
=
struct
.
pack
(
"B"
,
f0
)
# f0
f1
=
struct
.
pack
(
"B"
,
f1
)
# f1
f2
=
struct
.
pack
(
"B"
,
f2
)
# f2 -> f0
f3
=
struct
.
pack
(
"B"
,
f3
)
# f3 -> f1 f2
f4
=
struct
.
pack
(
"B"
,
f4
)
# f4 -> f3
packet
=
chain_id
+
exec_id
+
function_id
+
data
+
function_count
+
\
f0
+
f1
+
f2
+
f3
+
f4
# print dataInt, offload_status
return
packet
,
offload_status
def
sendThread
(
start_time
,
runtime
,
sleep_time
,
s
):
global
ingress_time
while
True
:
packet
,
offload_status
=
genPacket
()
if
time
.
time
()
-
start_time
>
runtime
:
break
s
.
sendto
(
packet
,
(
SERVER_IP
,
PORT
))
ingress_time
.
append
(
time
.
time
())
time
.
sleep
(
sleep_time
)
def
send
():
global
egress_time
,
ingress_time
s
=
socket
.
socket
(
socket
.
AF_INET
,
socket
.
SOCK_DGRAM
)
print
"Sending packet to
%
s at port
%
s"
%
(
SERVER_IP
,
PORT
)
print
"chain id, exec id, data, function count, functions dependencies..."
# op = struct.unpack("B", packet[0])
packet
,
_
=
genPacket
()
if
args
.
req_count
is
not
None
:
for
i
in
range
(
args
.
req_count
):
s
.
sendto
(
packet
,
(
SERVER_IP
,
PORT
))
ingress_time
.
append
(
time
.
time
())
# print "%.20f" % time.time()
# time.sleep(2)
# break
elif
args
.
offload
is
None
and
args
.
rps
is
not
None
:
runtime
=
10
start_time
=
time
.
time
()
sleep_time
=
1
/
float
(
args
.
rps
)
print
"calculated inter-arrival time"
,
sleep_time
while
True
:
if
time
.
time
()
-
start_time
>
runtime
:
break
s
.
sendto
(
packet
,
(
SERVER_IP
,
PORT
))
ingress_time
.
append
(
time
.
time
())
time
.
sleep
(
sleep_time
)
elif
args
.
offload
is
not
None
:
runtime
=
10
thread_count
=
8
start_time
=
time
.
time
()
sleep_time
=
1
/
float
(
args
.
rps
)
*
thread_count
print
"calculated inter-arrival time, offload mode"
,
sleep_time
for
i
in
range
(
thread_count
):
t
=
threading
.
Thread
(
target
=
sendThread
,
args
=
[
start_time
,
runtime
,
sleep_time
,
s
])
t
.
daemon
=
True
t
.
start
()
time
.
sleep
(
runtime
)
stop_thread
=
True
# s.sendto(packet, (SERVER_IP, PORT))
# r.join()
# r.join()
if
args
.
closed
==
1
:
r
=
threading
.
Thread
(
name
=
"receive"
,
target
=
receive
)
r
.
daemon
=
True
r
.
start
()
time
.
sleep
(
1
)
send
()
dispatch_system/dispatch_manager/nic/send.sh
0 → 100755
View file @
23b21377
python2 send.py
--client-port
8000
--closed
1
--offload
0
--rps
1
--send-data
0
--closed
1
--fid
1
\ No newline at end of file
dispatch_system/dispatch_manager/nic/send_docker.sh
0 → 100755
View file @
23b21377
#! /bin/bash -ex
start_docker
=
0
copy_send
=
0
location
=
$(
pwd
)
while
getopts
'sc'
flag
;
do
case
"
${
flag
}
"
in
s
)
start_docker
=
1
;;
c
)
copy_send
=
1
;;
i
)
assign_ip_flag
=
1
;;
esac
done
if
[[
$start_docker
-eq
1
]]
then
# start python docker container
docker run
--rm
-dit
--net
pub_net
--name
send python
fi
if
[[
$copy_send
-eq
1
]]
then
# start python docker container
docker
cp
send.py send:/
docker
cp
send.sh send:/
fi
docker
exec
-it
send /bin/bash
\ No newline at end of file
dispatch_system/dispatch_manager/nic/smartnic_dispatch_monitor.py
View file @
23b21377
...
...
@@ -15,6 +15,24 @@ actions = '''{ "type" : "ingress::dispatch_act",
"dstPort" : { "value" : "
%
d" } } }'''
%
(
"192.168.2.2"
,
8080
)
print
actions
# RTEInterface.Tables.AddRule(tableId, rule_name, default_rule, actions)
default_rule
=
False
ip
=
"192.168.2.4"
port
=
7070
actions
=
'''{
"type" : "ingress::dispatch_act",
"data" : {
"dstAddr" : { "value" : "
%
s" },
"dstPort" : { "value" : "
%
d" } ,
"egress_port": { "value": "v0.1" },
"ethernetAddr": { "value": "02:42:c0:a8:02:04" }
}
}'''
%
(
ip
,
\
int
(
port
))
print
actions
# % (data.param3)
match
=
'{ "map_hdr.function_id" : { "value" :
%
d} } '
%
(
1
)
print
match
RTEInterface
.
Tables
.
AddRule
(
tableId
,
rule_name
,
default_rule
,
match
,
actions
)
ruleList
=
RTEInterface
.
Tables
.
ListRules
(
tableId
)
print
ruleList
...
...
@@ -28,7 +46,9 @@ for msg in consumer:
print
worker
,
worker
[
u'node_id'
]
print
str
(
worker
[
u'node_id'
])
.
strip
()
print
int
(
worker
[
u'portExternal'
])
functionHash
=
worker
[
u'functionHash'
]
functionHash
=
int
(
functionHash
[
0
:
5
],
16
)
print
functionHash
default_rule
=
False
actions
=
'''{ "type" : "ingress::dispatch_act",
"data" : { "dstAddr" : { "value" : "
%
s" },
...
...
@@ -36,10 +56,29 @@ for msg in consumer:
int
(
worker
[
u'portExternal'
]))
print
actions
# % (data.param3)
match
=
'{ "map_hdr.chain_id" : { "value" : "0"} } '
match
=
'{ "map_hdr.function_id" : { "value" :
%
d} } '
%
(
0
)
print
match
RTEInterface
.
Tables
.
AddRule
(
tableId
,
rule_name
,
default_rule
,
match
,
actions
)
ruleList
=
RTEInterface
.
Tables
.
ListRules
(
tableId
)
print
ruleList
elif
msg
.
topic
==
"removeWorker"
:
# msg = msg.value.decode('utf-8')
# # worker = str(msg.value)
# # worker = ast.literal_eval(json.dumps(worker))
# worker = json.loads(msg)
# print worker, worker[u'node_id']
# print str(worker[u'node_id']).strip()
# print int(worker[u'portExternal'])
# default_rule = False
# actions = '''{ "type" : "ingress::dispatch_act",
# "data" : { "dstAddr" : { "value" : "%s" },
# "dstPort" : { "value" : "%d" } } }''' % (str(worker[u'node_id']).strip(), \
# int(worker[u'portExternal']))
# print actions
# # % (data.param3)
# match = '{ "map_hdr.chain_id" : { "value" : "0"} } '
# RTEInterface.Tables.AddRule(tableId, rule_name, default_rule, match, actions)
# ruleList = RTEInterface.Tables.ListRules(tableId)
print
ruleList
dispatch_system/dispatch_manager/nic/workspace.code-workspace
View file @
23b21377
...
...
@@ -2,9 +2,6 @@
"folders": [
{
"path": "../.."
},
{
"path": "../../../../test/offload"
}
],
"settings": {}
...
...
dispatch_system/dispatch_manager/pack.js
View file @
23b21377
const
struct
=
require
(
'
./jspack/jspack
'
)
f0
=
0
;
f1
=
0
;
f2
=
2
;
f3
=
6
;
f4
=
2
a
=
[]
chain_id
=
struct
.
PackTo
(
"
>I
"
,
chain_id
)
exec_id
=
struct
.
PackTo
(
"
>I
"
,
exec_id
)
function
unpackPacket
(
packet
)
{
// let buffer = new Array(1024)
let
chain_id
=
null
;
exec_id
=
null
,
function_count
=
null
,
function_id
=
null
let
base
=
0
chain_id
=
struct
.
Unpack
(
"
>I
"
,
packet
,
base
)
base
+=
4
exec_id
=
struct
.
Unpack
(
"
>I
"
,
packet
,
base
)
base
+=
4
function_id
=
struct
.
Unpack
(
"
B
"
,
packet
,
base
)
base
+=
1
data
=
struct
.
Unpack
(
"
>I
"
,
packet
,
base
)
base
+=
4
function_count
=
struct
.
Unpack
(
"
B
"
,
packet
,
base
)
dataInt
=
random
.
randint
(
1
,
1000
)
data
=
struct
.
PackTo
(
"
>I
"
,
dataInt
)
function_count
=
struct
.
PackTo
(
"
B
"
,
function_count
)
function_id
=
struct
.
PackTo
(
"
B
"
,
function_id
)
f0
=
struct
.
PackTo
(
"
B
"
,
f0
)
f1
=
struct
.
PackTo
(
"
B
"
,
f1
)
f2
=
struct
.
PackTo
(
"
B
"
,
f2
)
f3
=
struct
.
PackTo
(
"
B
"
,
f3
)
f4
=
struct
.
PackTo
(
"
B
"
,
f4
)
base
=
0
// chain_id = struct.unpack(">I", )
// base += 4
// exec_id = struct.unpack(">I", packet[base: base + 4])[0]
// base += 4
// function_id = struct.unpack("B", packet[base])[0]
// base += 1
// data = struct.unpack(">I", packet[base: base + 4])[0]
base
+=
4
\ No newline at end of file
console
.
log
(
"
chain_id
"
,
chain_id
,
"
exec_id
"
,
exec_id
,
"
data
"
,
data
,
"
function_count
"
,
function_count
,
"
function_id
"
,
function_id
)
}
\ No newline at end of file
dispatch_system/dispatch_manager/package.json
View file @
23b21377
...
...
@@ -15,6 +15,7 @@
"express-fileupload"
:
"^1.1.6"
,
"heap"
:
"^0.2.6"
,
"isolated-vm"
:
"^3.0.0"
,
"jspack"
:
"^0.0.4"
,
"kafka-logger"
:
"^7.1.0"
,
"kafka-node"
:
"^5.0.0"
,
"morgan"
:
"^1.9.1"
,
...
...
dispatch_system/dispatch_manager/repository/worker_env/env_udp.js
View file @
23b21377
...
...
@@ -9,6 +9,9 @@ const { spawnSync, execSync } = require('child_process');
// const { logger } = require('../../lib');
const
server
=
dgram
.
createSocket
(
'
udp4
'
);
const
udpProxy
=
dgram
.
createSocket
(
'
udp4
'
);
let
struct
=
require
(
'
jspack
'
)
struct
=
struct
.
jspack
const
app
=
express
()
let
port
=
5000
,
resource_id
,
functionHash
,
runtime
,
idleTime
=
600
,
flagFirstRequest
=
true
...
...
@@ -125,14 +128,14 @@ server.on('error', (err) => {
});
server
.
on
(
'
message
'
,
(
msg
,
rinfo
)
=>
{
console
.
log
(
"
message
"
,
msg
)
let
payload
=
{}
//
console.log(payload, typeof payload);
//
console.log("message", msg)
let
payload
=
unpackPacket
(
msg
)
console
.
log
(
payload
,
typeof
payload
);
lastRequest
=
Date
.
now
()
totalRequest
++
executor
(
payload
).
then
(
result
=>
{
result
=
""
result
=
packPacket
(
payload
)
console
.
log
(
result
)
try
{
udpProxy
.
send
(
result
,
0
,
result
.
length
,
"
8080
"
,
"
192.168.2.2
"
,
function
(
err
,
bytes
)
{
if
(
err
)
...
...
@@ -146,6 +149,50 @@ server.on('message', (msg, rinfo) => {
})
});
function
unpackPacket
(
packet
)
{
// let buffer = new Array(1024)
let
chain_id
=
null
,
exec_id
=
null
,
function_count
=
null
,
function_id
=
null
,
data
=
null
let
base
=
0
chain_id
=
struct
.
Unpack
(
"
>I
"
,
packet
,
base
)
base
+=
4
exec_id
=
struct
.
Unpack
(
"
>I
"
,
packet
,
base
)
base
+=
4
function_id
=
struct
.
Unpack
(
"
>I
"
,
packet
,
base
)
base
+=
1
data
=
struct
.
Unpack
(
"
>I
"
,
packet
,
base
)
base
+=
4
function_count
=
struct
.
Unpack
(
"
B
"
,
packet
,
base
)
console
.
log
(
"
chain_id
"
,
chain_id
,
"
exec_id
"
,
exec_id
,
"
data
"
,
data
,
"
function_count
"
,
function_count
,
"
function_id
"
,
function_id
)
return
{
chain_id
:
chain_id
[
0
],
exec_id
:
exec_id
[
0
],
data
:
data
[
0
],
function_count
:
function_count
[
0
],
function_id
:
function_id
[
0
]
}
}
function
packPacket
(
dataPacket
)
{
let
message
=
new
Array
(
1024
)
let
base
=
0
,
chain_id
,
exec_id
,
function_id
,
data
,
function_count
chain_id
=
struct
.
PackTo
(
"
>I
"
,
message
,
base
,
[
dataPacket
.
chain_id
])
base
+=
4
exec_id
=
struct
.
PackTo
(
"
>I
"
,
message
,
base
,
[
dataPacket
.
exec_id
])
base
+=
4
function_id
=
struct
.
PackTo
(
"
>I
"
,
message
,
base
,
[
dataPacket
.
function_id
])
base
+=
1
data
=
struct
.
PackTo
(
"
>I
"
,
message
,
base
,
[
dataPacket
.
data
])
base
+=
4
function_count
=
struct
.
PackTo
(
"
B
"
,
message
,
base
,
[
dataPacket
.
function_count
])
message
=
Buffer
.
from
(
message
)
return
message
}
server
.
on
(
'
listening
'
,
()
=>
{
const
address
=
server
.
address
();
console
.
log
(
`server listening
${
address
.
address
}
:
${
address
.
port
}
`
);
...
...
dispatch_system/dispatch_manager/repository/worker_env/package-lock.json
View file @
23b21377
{
"name"
:
"worker_env"
,
"version"
:
"1.0.0"
,
"lockfileVersion"
:
1
,
"lockfileVersion"
:
2
,
"requires"
:
true
,
"packages"
:
{
""
:
{
"version"
:
"1.0.0"
,
"license"
:
"ISC"
,
"dependencies"
:
{
"body-parser"
:
"^1.19.0"
,
"express"
:
"^4.17.1"
,
"jspack"
:
"^0.0.4"
,
"kafka-node"
:
"^5.0.0"
,
"morgan"
:
"^1.9.1"
,
"request"
:
"^2.88.2"
}
},
"node_modules/accepts"
:
{
"version"
:
"1.3.7"
,
"resolved"
:
"https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz"
,
"integrity"
:
"sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA=="
,
"dependencies"
:
{
"mime-types"
:
"~2.1.24"
,
"negotiator"
:
"0.6.2"
},
"engines"
:
{
"node"
:
">= 0.6"
}
},
"node_modules/ajv"
:
{
"version"
:
"6.12.0"
,
"resolved"
:
"https://registry.npmjs.org/ajv/-/ajv-6.12.0.tgz"
,
"integrity"
:
"sha512-D6gFiFA0RRLyUbvijN74DWAjXSFxWKaWP7mldxkVhyhAV3+SWA9HEJPHQ2c9soIeTFJqcSdFDGFgdqs1iUU2Hw=="
,
"dependencies"
:
{
"fast-deep-equal"
:
"^3.1.1"
,
"fast-json-stable-stringify"
:
"^2.0.0"
,
"json-schema-traverse"
:
"^0.4.1"
,
"uri-js"
:
"^4.2.2"
}
},
"node_modules/ansi-regex"
:
{
"version"
:
"2.1.1"
,
"resolved"
:
"https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz"
,
"integrity"
:
"sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
,
"optional"
:
true
,
"engines"
:
{
"node"
:
">=0.10.0"
}
},
"node_modules/aproba"
:
{
"version"
:
"1.2.0"
,
"resolved"
:
"https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz"
,
"integrity"
:
"sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw=="
,
"optional"
:
true
},
"node_modules/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
,
"dependencies"
:
{
"delegates"
:
"^1.0.0"
,
"readable-stream"
:
"^2.0.6"
}
},
"node_modules/array-flatten"
:
{
"version"
:
"1.1.1"
,
"resolved"
:
"https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz"
,
"integrity"
:
"sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
},
"node_modules/asn1"
:
{
"version"
:
"0.2.4"
,
"resolved"
:
"https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz"
,
"integrity"
:
"sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg=="
,
"dependencies"
:
{
"safer-buffer"
:
"~2.1.0"
}
},
"node_modules/assert-plus"
:
{
"version"
:
"1.0.0"
,
"resolved"
:
"https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz"
,
"integrity"
:
"sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
,
"engines"
:
{
"node"
:
">=0.8"
}
},
"node_modules/async"
:
{
"version"
:
"2.6.3"
,
"resolved"
:
"https://registry.npmjs.org/async/-/async-2.6.3.tgz"
,
"integrity"
:
"sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg=="
,
"dependencies"
:
{
"lodash"
:
"^4.17.14"
}
},
"node_modules/asynckit"
:
{
"version"
:
"0.4.0"
,
"resolved"
:
"https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz"
,
"integrity"
:
"sha1-x57Zf380y48robyXkLzDZkdLS3k="
},
"node_modules/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="
,
"engines"
:
{
"node"
:
"*"
}
},
"node_modules/aws4"
:
{
"version"
:
"1.9.1"
,
"resolved"
:
"https://registry.npmjs.org/aws4/-/aws4-1.9.1.tgz"
,
"integrity"
:
"sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug=="
},
"node_modules/balanced-match"
:
{
"version"
:
"1.0.0"
,
"resolved"
:
"https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz"
,
"integrity"
:
"sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
},
"node_modules/basic-auth"
:
{
"version"
:
"2.0.1"
,
"resolved"
:
"https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz"
,
"integrity"
:
"sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg=="
,
"dependencies"
:
{
"safe-buffer"
:
"5.1.2"
},
"engines"
:
{
"node"
:
">= 0.8"
}
},
"node_modules/bcrypt-pbkdf"
:
{
"version"
:
"1.0.2"
,
"resolved"
:
"https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz"
,
"integrity"
:
"sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4="
,
"dependencies"
:
{
"tweetnacl"
:
"^0.14.3"
}
},
"node_modules/binary"
:
{
"version"
:
"0.3.0"
,
"resolved"
:
"https://registry.npmjs.org/binary/-/binary-0.3.0.tgz"
,
"integrity"
:
"sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk="
,
"dependencies"
:
{
"buffers"
:
"~0.1.1"
,
"chainsaw"
:
"~0.1.0"
}
},
"node_modules/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
,
"dependencies"
:
{
"file-uri-to-path"
:
"1.0.0"
}
},
"node_modules/bl"
:
{
"version"
:
"2.2.0"
,
"resolved"
:
"https://registry.npmjs.org/bl/-/bl-2.2.0.tgz"
,
"integrity"
:
"sha512-wbgvOpqopSr7uq6fJrLH8EsvYMJf9gzfo2jCsL2eTy75qXPukA4pCgHamOQkZtY5vmfVtjB+P3LNlMHW5CEZXA=="
,
"dependencies"
:
{
"readable-stream"
:
"^2.3.5"
,
"safe-buffer"
:
"^5.1.1"
}
},
"node_modules/body-parser"
:
{
"version"
:
"1.19.0"
,
"resolved"
:
"https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz"
,
"integrity"
:
"sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw=="
,
"dependencies"
:
{
"bytes"
:
"3.1.0"
,
"content-type"
:
"~1.0.4"
,
"debug"
:
"2.6.9"
,
"depd"
:
"~1.1.2"
,
"http-errors"
:
"1.7.2"
,
"iconv-lite"
:
"0.4.24"
,
"on-finished"
:
"~2.3.0"
,
"qs"
:
"6.7.0"
,
"raw-body"
:
"2.4.0"
,
"type-is"
:
"~1.6.17"
},
"engines"
:
{
"node"
:
">= 0.8"
}
},
"node_modules/brace-expansion"
:
{
"version"
:
"1.1.11"
,
"resolved"
:
"https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz"
,
"integrity"
:
"sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA=="
,
"dependencies"
:
{
"balanced-match"
:
"^1.0.0"
,
"concat-map"
:
"0.0.1"
}
},
"node_modules/buffer-crc32"
:
{
"version"
:
"0.2.13"
,
"resolved"
:
"https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz"
,
"integrity"
:
"sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI="
,
"engines"
:
{
"node"
:
"*"
}
},
"node_modules/buffermaker"
:
{
"version"
:
"1.2.1"
,
"resolved"
:
"https://registry.npmjs.org/buffermaker/-/buffermaker-1.2.1.tgz"
,
"integrity"
:
"sha512-IdnyU2jDHU65U63JuVQNTHiWjPRH0CS3aYd/WPaEwyX84rFdukhOduAVb1jwUScmb5X0JWPw8NZOrhoLMiyAHQ=="
,
"dependencies"
:
{
"long"
:
"1.1.2"
}
},
"node_modules/buffers"
:
{
"version"
:
"0.1.1"
,
"resolved"
:
"https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz"
,
"integrity"
:
"sha1-skV5w77U1tOWru5tmorn9Ugqt7s="
,
"engines"
:
{
"node"
:
">=0.2.0"
}
},
"node_modules/bytes"
:
{
"version"
:
"3.1.0"
,
"resolved"
:
"https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz"
,
"integrity"
:
"sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="
,
"engines"
:
{
"node"
:
">= 0.8"
}
},
"node_modules/caseless"
:
{
"version"
:
"0.12.0"
,
"resolved"
:
"https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz"
,
"integrity"
:
"sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
},
"node_modules/chainsaw"
:
{
"version"
:
"0.1.0"
,
"resolved"
:
"https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz"
,
"integrity"
:
"sha1-XqtQsor+WAdNDVgpE4iCi15fvJg="
,
"dependencies"
:
{
"traverse"
:
">=0.3.0 <0.4"
}
},
"node_modules/chownr"
:
{
"version"
:
"1.1.4"
,
"resolved"
:
"https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz"
,
"integrity"
:
"sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg=="
,
"optional"
:
true
},
"node_modules/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
,
"engines"
:
{
"node"
:
">=0.10.0"
}
},
"node_modules/combined-stream"
:
{
"version"
:
"1.0.8"
,
"resolved"
:
"https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz"
,
"integrity"
:
"sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg=="
,
"dependencies"
:
{
"delayed-stream"
:
"~1.0.0"
},
"engines"
:
{
"node"
:
">= 0.8"
}
},
"node_modules/concat-map"
:
{
"version"
:
"0.0.1"
,
"resolved"
:
"https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz"
,
"integrity"
:
"sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
},
"node_modules/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
},
"node_modules/content-disposition"
:
{
"version"
:
"0.5.3"
,
"resolved"
:
"https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz"
,
"integrity"
:
"sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g=="
,
"dependencies"
:
{
"safe-buffer"
:
"5.1.2"
},
"engines"
:
{
"node"
:
">= 0.6"
}
},
"node_modules/content-type"
:
{
"version"
:
"1.0.4"
,
"resolved"
:
"https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz"
,
"integrity"
:
"sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
,
"engines"
:
{
"node"
:
">= 0.6"
}
},
"node_modules/cookie"
:
{
"version"
:
"0.4.0"
,
"resolved"
:
"https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz"
,
"integrity"
:
"sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg=="
,
"engines"
:
{
"node"
:
">= 0.6"
}
},
"node_modules/cookie-signature"
:
{
"version"
:
"1.0.6"
,
"resolved"
:
"https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz"
,
"integrity"
:
"sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
},
"node_modules/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="
},
"node_modules/dashdash"
:
{
"version"
:
"1.14.1"
,
"resolved"
:
"https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz"
,
"integrity"
:
"sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA="
,
"dependencies"
:
{
"assert-plus"
:
"^1.0.0"
},
"engines"
:
{
"node"
:
">=0.10"
}
},
"node_modules/debug"
:
{
"version"
:
"2.6.9"
,
"resolved"
:
"https://registry.npmjs.org/debug/-/debug-2.6.9.tgz"
,
"integrity"
:
"sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="
,
"dependencies"
:
{
"ms"
:
"2.0.0"
}
},
"node_modules/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
,
"dependencies"
:
{
"mimic-response"
:
"^2.0.0"
},
"engines"
:
{
"node"
:
">=8"
}
},
"node_modules/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
,
"engines"
:
{
"node"
:
">=4.0.0"
}
},
"node_modules/delayed-stream"
:
{
"version"
:
"1.0.0"
,
"resolved"
:
"https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz"
,
"integrity"
:
"sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
,
"engines"
:
{
"node"
:
">=0.4.0"
}
},
"node_modules/delegates"
:
{
"version"
:
"1.0.0"
,
"resolved"
:
"https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz"
,
"integrity"
:
"sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o="
,
"optional"
:
true
},
"node_modules/denque"
:
{
"version"
:
"1.4.1"
,
"resolved"
:
"https://registry.npmjs.org/denque/-/denque-1.4.1.tgz"
,
"integrity"
:
"sha512-OfzPuSZKGcgr96rf1oODnfjqBFmr1DVoc/TrItj3Ohe0Ah1C5WX5Baquw/9U9KovnQ88EqmJbD66rKYUQYN1tQ=="
,
"engines"
:
{
"node"
:
">=0.10"
}
},
"node_modules/depd"
:
{
"version"
:
"1.1.2"
,
"resolved"
:
"https://registry.npmjs.org/depd/-/depd-1.1.2.tgz"
,
"integrity"
:
"sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
,
"engines"
:
{
"node"
:
">= 0.6"
}
},
"node_modules/destroy"
:
{
"version"
:
"1.0.4"
,
"resolved"
:
"https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz"
,
"integrity"
:
"sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
},
"node_modules/detect-libc"
:
{
"version"
:
"1.0.3"
,
"resolved"
:
"https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz"
,
"integrity"
:
"sha1-+hN8S9aY7fVc1c0CrFWfkaTEups="
,
"optional"
:
true
,
"bin"
:
{
"detect-libc"
:
"bin/detect-libc.js"
},
"engines"
:
{
"node"
:
">=0.10"
}
},
"node_modules/ecc-jsbn"
:
{
"version"
:
"0.1.2"
,
"resolved"
:
"https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz"
,
"integrity"
:
"sha1-OoOpBOVDUyh4dMVkt1SThoSamMk="
,
"dependencies"
:
{
"jsbn"
:
"~0.1.0"
,
"safer-buffer"
:
"^2.1.0"
}
},
"node_modules/ee-first"
:
{
"version"
:
"1.1.1"
,
"resolved"
:
"https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz"
,
"integrity"
:
"sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
},
"node_modules/encodeurl"
:
{
"version"
:
"1.0.2"
,
"resolved"
:
"https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz"
,
"integrity"
:
"sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
,
"engines"
:
{
"node"
:
">= 0.8"
}
},
"node_modules/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
,
"dependencies"
:
{
"once"
:
"^1.4.0"
}
},
"node_modules/escape-html"
:
{
"version"
:
"1.0.3"
,
"resolved"
:
"https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz"
,
"integrity"
:
"sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
},
"node_modules/etag"
:
{
"version"
:
"1.8.1"
,
"resolved"
:
"https://registry.npmjs.org/etag/-/etag-1.8.1.tgz"
,
"integrity"
:
"sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
,
"engines"
:
{
"node"
:
">= 0.6"
}
},
"node_modules/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
,
"engines"
:
{
"node"
:
">=6"
}
},
"node_modules/express"
:
{
"version"
:
"4.17.1"
,
"resolved"
:
"https://registry.npmjs.org/express/-/express-4.17.1.tgz"
,
"integrity"
:
"sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g=="
,
"dependencies"
:
{
"accepts"
:
"~1.3.7"
,
"array-flatten"
:
"1.1.1"
,
"body-parser"
:
"1.19.0"
,
"content-disposition"
:
"0.5.3"
,
"content-type"
:
"~1.0.4"
,
"cookie"
:
"0.4.0"
,
"cookie-signature"
:
"1.0.6"
,
"debug"
:
"2.6.9"
,
"depd"
:
"~1.1.2"
,
"encodeurl"
:
"~1.0.2"
,
"escape-html"
:
"~1.0.3"
,
"etag"
:
"~1.8.1"
,
"finalhandler"
:
"~1.1.2"
,
"fresh"
:
"0.5.2"
,
"merge-descriptors"
:
"1.0.1"
,
"methods"
:
"~1.1.2"
,
"on-finished"
:
"~2.3.0"
,
"parseurl"
:
"~1.3.3"
,
"path-to-regexp"
:
"0.1.7"
,
"proxy-addr"
:
"~2.0.5"
,
"qs"
:
"6.7.0"
,
"range-parser"
:
"~1.2.1"
,
"safe-buffer"
:
"5.1.2"
,
"send"
:
"0.17.1"
,
"serve-static"
:
"1.14.1"
,
"setprototypeof"
:
"1.1.1"
,
"statuses"
:
"~1.5.0"
,
"type-is"
:
"~1.6.18"
,
"utils-merge"
:
"1.0.1"
,
"vary"
:
"~1.1.2"
},
"engines"
:
{
"node"
:
">= 0.10.0"
}
},
"node_modules/extend"
:
{
"version"
:
"3.0.2"
,
"resolved"
:
"https://registry.npmjs.org/extend/-/extend-3.0.2.tgz"
,
"integrity"
:
"sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
},
"node_modules/extsprintf"
:
{
"version"
:
"1.3.0"
,
"resolved"
:
"https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz"
,
"integrity"
:
"sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="
,
"engines"
:
[
"node >=0.6.0"
]
},
"node_modules/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=="
},
"node_modules/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=="
},
"node_modules/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
},
"node_modules/finalhandler"
:
{
"version"
:
"1.1.2"
,
"resolved"
:
"https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz"
,
"integrity"
:
"sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA=="
,
"dependencies"
:
{
"debug"
:
"2.6.9"
,
"encodeurl"
:
"~1.0.2"
,
"escape-html"
:
"~1.0.3"
,
"on-finished"
:
"~2.3.0"
,
"parseurl"
:
"~1.3.3"
,
"statuses"
:
"~1.5.0"
,
"unpipe"
:
"~1.0.0"
},
"engines"
:
{
"node"
:
">= 0.8"
}
},
"node_modules/forever-agent"
:
{
"version"
:
"0.6.1"
,
"resolved"
:
"https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz"
,
"integrity"
:
"sha1-+8cfDEGt6zf5bFd60e1C2P2sypE="
,
"engines"
:
{
"node"
:
"*"
}
},
"node_modules/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=="
,
"dependencies"
:
{
"asynckit"
:
"^0.4.0"
,
"combined-stream"
:
"^1.0.6"
,
"mime-types"
:
"^2.1.12"
},
"engines"
:
{
"node"
:
">= 0.12"
}
},
"node_modules/forwarded"
:
{
"version"
:
"0.1.2"
,
"resolved"
:
"https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz"
,
"integrity"
:
"sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ="
,
"engines"
:
{
"node"
:
">= 0.6"
}
},
"node_modules/fresh"
:
{
"version"
:
"0.5.2"
,
"resolved"
:
"https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz"
,
"integrity"
:
"sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
,
"engines"
:
{
"node"
:
">= 0.6"
}
},
"node_modules/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
},
"node_modules/gauge"
:
{
"version"
:
"2.7.4"
,
"resolved"
:
"https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz"
,
"integrity"
:
"sha1-LANAXHU4w51+s3sxcCLjJfsBi/c="
,
"optional"
:
true
,
"dependencies"
:
{
"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"
}
},
"node_modules/getpass"
:
{
"version"
:
"0.1.7"
,
"resolved"
:
"https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz"
,
"integrity"
:
"sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo="
,
"dependencies"
:
{
"assert-plus"
:
"^1.0.0"
}
},
"node_modules/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
},
"node_modules/har-schema"
:
{
"version"
:
"2.0.0"
,
"resolved"
:
"https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz"
,
"integrity"
:
"sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI="
,
"engines"
:
{
"node"
:
">=4"
}
},
"node_modules/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=="
,
"dependencies"
:
{
"ajv"
:
"^6.5.5"
,
"har-schema"
:
"^2.0.0"
},
"engines"
:
{
"node"
:
">=6"
}
},
"node_modules/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
},
"node_modules/http-errors"
:
{
"version"
:
"1.7.2"
,
"resolved"
:
"https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz"
,
"integrity"
:
"sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg=="
,
"dependencies"
:
{
"depd"
:
"~1.1.2"
,
"inherits"
:
"2.0.3"
,
"setprototypeof"
:
"1.1.1"
,
"statuses"
:
">= 1.5.0 < 2"
,
"toidentifier"
:
"1.0.0"
},
"engines"
:
{
"node"
:
">= 0.6"
}
},
"node_modules/http-signature"
:
{
"version"
:
"1.2.0"
,
"resolved"
:
"https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz"
,
"integrity"
:
"sha1-muzZJRFHcvPZW2WmCruPfBj7rOE="
,
"dependencies"
:
{
"assert-plus"
:
"^1.0.0"
,
"jsprim"
:
"^1.2.2"
,
"sshpk"
:
"^1.7.0"
},
"engines"
:
{
"node"
:
">=0.8"
,
"npm"
:
">=1.3.7"
}
},
"node_modules/iconv-lite"
:
{
"version"
:
"0.4.24"
,
"resolved"
:
"https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz"
,
"integrity"
:
"sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA=="
,
"dependencies"
:
{
"safer-buffer"
:
">= 2.1.2 < 3"
},
"engines"
:
{
"node"
:
">=0.10.0"
}
},
"node_modules/inherits"
:
{
"version"
:
"2.0.3"
,
"resolved"
:
"https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz"
,
"integrity"
:
"sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
},
"node_modules/ini"
:
{
"version"
:
"1.3.5"
,
"resolved"
:
"https://registry.npmjs.org/ini/-/ini-1.3.5.tgz"
,
"integrity"
:
"sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw=="
,
"optional"
:
true
,
"engines"
:
{
"node"
:
"*"
}
},
"node_modules/ipaddr.js"
:
{
"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=="
,
"engines"
:
{
"node"
:
">= 0.10"
}
},
"node_modules/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
,
"dependencies"
:
{
"number-is-nan"
:
"^1.0.0"
},
"engines"
:
{
"node"
:
">=0.10.0"
}
},
"node_modules/is-typedarray"
:
{
"version"
:
"1.0.0"
,
"resolved"
:
"https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz"
,
"integrity"
:
"sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
},
"node_modules/isarray"
:
{
"version"
:
"1.0.0"
,
"resolved"
:
"https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz"
,
"integrity"
:
"sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
},
"node_modules/isstream"
:
{
"version"
:
"0.1.2"
,
"resolved"
:
"https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz"
,
"integrity"
:
"sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
},
"node_modules/jsbn"
:
{
"version"
:
"0.1.1"
,
"resolved"
:
"https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz"
,
"integrity"
:
"sha1-peZUwuWi3rXyAdls77yoDA7y9RM="
},
"node_modules/json-schema"
:
{
"version"
:
"0.2.3"
,
"resolved"
:
"https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz"
,
"integrity"
:
"sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM="
},
"node_modules/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=="
},
"node_modules/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="
},
"node_modules/jspack"
:
{
"version"
:
"0.0.4"
,
"resolved"
:
"https://registry.npmjs.org/jspack/-/jspack-0.0.4.tgz"
,
"integrity"
:
"sha1-Mt01x/3LPjRWwY+7fvntC8YjgXc="
},
"node_modules/jsprim"
:
{
"version"
:
"1.4.1"
,
"resolved"
:
"https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz"
,
"integrity"
:
"sha1-MT5mvB5cwG5Di8G3SZwuXFastqI="
,
"engines"
:
[
"node >=0.6.0"
],
"dependencies"
:
{
"assert-plus"
:
"1.0.0"
,
"extsprintf"
:
"1.3.0"
,
"json-schema"
:
"0.2.3"
,
"verror"
:
"1.10.0"
}
},
"node_modules/kafka-node"
:
{
"version"
:
"5.0.0"
,
"resolved"
:
"https://registry.npmjs.org/kafka-node/-/kafka-node-5.0.0.tgz"
,
"integrity"
:
"sha512-dD2ga5gLcQhsq1yNoQdy1MU4x4z7YnXM5bcG9SdQuiNr5KKuAmXixH1Mggwdah5o7EfholFbcNDPSVA6BIfaug=="
,
"dependencies"
:
{
"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"
,
"uuid"
:
"^3.0.0"
},
"engines"
:
{
"node"
:
">=8.5.1"
},
"optionalDependencies"
:
{
"snappy"
:
"^6.0.1"
}
},
"node_modules/lodash"
:
{
"version"
:
"4.17.15"
,
"resolved"
:
"https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz"
,
"integrity"
:
"sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A=="
},
"node_modules/long"
:
{
"version"
:
"1.1.2"
,
"resolved"
:
"https://registry.npmjs.org/long/-/long-1.1.2.tgz"
,
"integrity"
:
"sha1-6u9ZUcp1UdlpJrgtokLbnWso+1M="
,
"engines"
:
{
"node"
:
">=0.6"
}
},
"node_modules/media-typer"
:
{
"version"
:
"0.3.0"
,
"resolved"
:
"https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz"
,
"integrity"
:
"sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
,
"engines"
:
{
"node"
:
">= 0.6"
}
},
"node_modules/merge-descriptors"
:
{
"version"
:
"1.0.1"
,
"resolved"
:
"https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz"
,
"integrity"
:
"sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
},
"node_modules/methods"
:
{
"version"
:
"1.1.2"
,
"resolved"
:
"https://registry.npmjs.org/methods/-/methods-1.1.2.tgz"
,
"integrity"
:
"sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
,
"engines"
:
{
"node"
:
">= 0.6"
}
},
"node_modules/mime"
:
{
"version"
:
"1.6.0"
,
"resolved"
:
"https://registry.npmjs.org/mime/-/mime-1.6.0.tgz"
,
"integrity"
:
"sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
,
"bin"
:
{
"mime"
:
"cli.js"
},
"engines"
:
{
"node"
:
">=4"
}
},
"node_modules/mime-db"
:
{
"version"
:
"1.43.0"
,
"resolved"
:
"https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz"
,
"integrity"
:
"sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ=="
,
"engines"
:
{
"node"
:
">= 0.6"
}
},
"node_modules/mime-types"
:
{
"version"
:
"2.1.26"
,
"resolved"
:
"https://registry.npmjs.org/mime-types/-/mime-types-2.1.26.tgz"
,
"integrity"
:
"sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ=="
,
"dependencies"
:
{
"mime-db"
:
"1.43.0"
},
"engines"
:
{
"node"
:
">= 0.6"
}
},
"node_modules/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
,
"engines"
:
{
"node"
:
">=8"
}
},
"node_modules/minimatch"
:
{
"version"
:
"3.0.4"
,
"resolved"
:
"https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz"
,
"integrity"
:
"sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA=="
,
"dependencies"
:
{
"brace-expansion"
:
"^1.1.7"
},
"engines"
:
{
"node"
:
"*"
}
},
"node_modules/minimist"
:
{
"version"
:
"1.2.0"
,
"resolved"
:
"https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz"
,
"integrity"
:
"sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
,
"optional"
:
true
},
"node_modules/mkdirp"
:
{
"version"
:
"0.5.1"
,
"resolved"
:
"https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz"
,
"integrity"
:
"sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM="
,
"optional"
:
true
,
"dependencies"
:
{
"minimist"
:
"0.0.8"
},
"bin"
:
{
"mkdirp"
:
"bin/cmd.js"
}
},
"node_modules/mkdirp/node_modules/minimist"
:
{
"version"
:
"0.0.8"
,
"resolved"
:
"https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz"
,
"integrity"
:
"sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
,
"optional"
:
true
},
"node_modules/morgan"
:
{
"version"
:
"1.9.1"
,
"resolved"
:
"https://registry.npmjs.org/morgan/-/morgan-1.9.1.tgz"
,
"integrity"
:
"sha512-HQStPIV4y3afTiCYVxirakhlCfGkI161c76kKFca7Fk1JusM//Qeo1ej2XaMniiNeaZklMVrh3vTtIzpzwbpmA=="
,
"dependencies"
:
{
"basic-auth"
:
"~2.0.0"
,
"debug"
:
"2.6.9"
,
"depd"
:
"~1.1.2"
,
"on-finished"
:
"~2.3.0"
,
"on-headers"
:
"~1.0.1"
},
"engines"
:
{
"node"
:
">= 0.8.0"
}
},
"node_modules/ms"
:
{
"version"
:
"2.0.0"
,
"resolved"
:
"https://registry.npmjs.org/ms/-/ms-2.0.0.tgz"
,
"integrity"
:
"sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
},
"node_modules/nan"
:
{
"version"
:
"2.14.0"
,
"resolved"
:
"https://registry.npmjs.org/nan/-/nan-2.14.0.tgz"
,
"integrity"
:
"sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg=="
,
"optional"
:
true
},
"node_modules/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
},
"node_modules/negotiator"
:
{
"version"
:
"0.6.2"
,
"resolved"
:
"https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz"
,
"integrity"
:
"sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw=="
,
"engines"
:
{
"node"
:
">= 0.6"
}
},
"node_modules/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_modules/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
,
"dependencies"
:
{
"semver"
:
"^5.4.1"
}
},
"node_modules/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
},
"node_modules/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
,
"dependencies"
:
{
"are-we-there-yet"
:
"~1.1.2"
,
"console-control-strings"
:
"~1.1.0"
,
"gauge"
:
"~2.7.3"
,
"set-blocking"
:
"~2.0.0"
}
},
"node_modules/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
,
"engines"
:
{
"node"
:
">=0.10.0"
}
},
"node_modules/oauth-sign"
:
{
"version"
:
"0.9.0"
,
"resolved"
:
"https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz"
,
"integrity"
:
"sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="
,
"engines"
:
{
"node"
:
"*"
}
},
"node_modules/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
,
"engines"
:
{
"node"
:
">=0.10.0"
}
},
"node_modules/on-finished"
:
{
"version"
:
"2.3.0"
,
"resolved"
:
"https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz"
,
"integrity"
:
"sha1-IPEzZIGwg811M3mSoWlxqi2QaUc="
,
"dependencies"
:
{
"ee-first"
:
"1.1.1"
},
"engines"
:
{
"node"
:
">= 0.8"
}
},
"node_modules/on-headers"
:
{
"version"
:
"1.0.2"
,
"resolved"
:
"https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz"
,
"integrity"
:
"sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA=="
,
"engines"
:
{
"node"
:
">= 0.8"
}
},
"node_modules/once"
:
{
"version"
:
"1.4.0"
,
"resolved"
:
"https://registry.npmjs.org/once/-/once-1.4.0.tgz"
,
"integrity"
:
"sha1-WDsap3WWHUsROsF9nFC6753Xa9E="
,
"optional"
:
true
,
"dependencies"
:
{
"wrappy"
:
"1"
}
},
"node_modules/optional"
:
{
"version"
:
"0.1.4"
,
"resolved"
:
"https://registry.npmjs.org/optional/-/optional-0.1.4.tgz"
,
"integrity"
:
"sha512-gtvrrCfkE08wKcgXaVwQVgwEQ8vel2dc5DDBn9RLQZ3YtmtkBss6A2HY6BnJH4N/4Ku97Ri/SF8sNWE2225WJw=="
},
"node_modules/parseurl"
:
{
"version"
:
"1.3.3"
,
"resolved"
:
"https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz"
,
"integrity"
:
"sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
,
"engines"
:
{
"node"
:
">= 0.8"
}
},
"node_modules/path-to-regexp"
:
{
"version"
:
"0.1.7"
,
"resolved"
:
"https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz"
,
"integrity"
:
"sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
},
"node_modules/performance-now"
:
{
"version"
:
"2.1.0"
,
"resolved"
:
"https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz"
,
"integrity"
:
"sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
},
"node_modules/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
,
"dependencies"
:
{
"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"
},
"bin"
:
{
"prebuild-install"
:
"bin.js"
},
"engines"
:
{
"node"
:
">=6"
}
},
"node_modules/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=="
},
"node_modules/proxy-addr"
:
{
"version"
:
"2.0.6"
,
"resolved"
:
"https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz"
,
"integrity"
:
"sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw=="
,
"dependencies"
:
{
"forwarded"
:
"~0.1.2"
,
"ipaddr.js"
:
"1.9.1"
},
"engines"
:
{
"node"
:
">= 0.10"
}
},
"node_modules/psl"
:
{
"version"
:
"1.7.0"
,
"resolved"
:
"https://registry.npmjs.org/psl/-/psl-1.7.0.tgz"
,
"integrity"
:
"sha512-5NsSEDv8zY70ScRnOTn7bK7eanl2MvFrOrS/R6x+dBt5g1ghnj9Zv90kO8GwT8gxcu2ANyFprnFYB85IogIJOQ=="
},
"node_modules/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
,
"dependencies"
:
{
"end-of-stream"
:
"^1.1.0"
,
"once"
:
"^1.3.1"
}
},
"node_modules/punycode"
:
{
"version"
:
"2.1.1"
,
"resolved"
:
"https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz"
,
"integrity"
:
"sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
,
"engines"
:
{
"node"
:
">=6"
}
},
"node_modules/qs"
:
{
"version"
:
"6.7.0"
,
"resolved"
:
"https://registry.npmjs.org/qs/-/qs-6.7.0.tgz"
,
"integrity"
:
"sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ=="
,
"engines"
:
{
"node"
:
">=0.6"
}
},
"node_modules/range-parser"
:
{
"version"
:
"1.2.1"
,
"resolved"
:
"https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz"
,
"integrity"
:
"sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
,
"engines"
:
{
"node"
:
">= 0.6"
}
},
"node_modules/raw-body"
:
{
"version"
:
"2.4.0"
,
"resolved"
:
"https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz"
,
"integrity"
:
"sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q=="
,
"dependencies"
:
{
"bytes"
:
"3.1.0"
,
"http-errors"
:
"1.7.2"
,
"iconv-lite"
:
"0.4.24"
,
"unpipe"
:
"1.0.0"
},
"engines"
:
{
"node"
:
">= 0.8"
}
},
"node_modules/rc"
:
{
"version"
:
"1.2.8"
,
"resolved"
:
"https://registry.npmjs.org/rc/-/rc-1.2.8.tgz"
,
"integrity"
:
"sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw=="
,
"optional"
:
true
,
"dependencies"
:
{
"deep-extend"
:
"^0.6.0"
,
"ini"
:
"~1.3.0"
,
"minimist"
:
"^1.2.0"
,
"strip-json-comments"
:
"~2.0.1"
},
"bin"
:
{
"rc"
:
"cli.js"
}
},
"node_modules/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=="
,
"dependencies"
:
{
"core-util-is"
:
"~1.0.0"
,
"inherits"
:
"~2.0.3"
,
"isarray"
:
"~1.0.0"
,
"process-nextick-args"
:
"~2.0.0"
,
"safe-buffer"
:
"~5.1.1"
,
"string_decoder"
:
"~1.1.1"
,
"util-deprecate"
:
"~1.0.1"
}
},
"node_modules/request"
:
{
"version"
:
"2.88.2"
,
"resolved"
:
"https://registry.npmjs.org/request/-/request-2.88.2.tgz"
,
"integrity"
:
"sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw=="
,
"dependencies"
:
{
"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"
},
"engines"
:
{
"node"
:
">= 6"
}
},
"node_modules/request/node_modules/qs"
:
{
"version"
:
"6.5.2"
,
"resolved"
:
"https://registry.npmjs.org/qs/-/qs-6.5.2.tgz"
,
"integrity"
:
"sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA=="
,
"engines"
:
{
"node"
:
">=0.6"
}
},
"node_modules/retry"
:
{
"version"
:
"0.10.1"
,
"resolved"
:
"https://registry.npmjs.org/retry/-/retry-0.10.1.tgz"
,
"integrity"
:
"sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q="
,
"engines"
:
{
"node"
:
"*"
}
},
"node_modules/safe-buffer"
:
{
"version"
:
"5.1.2"
,
"resolved"
:
"https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz"
,
"integrity"
:
"sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
},
"node_modules/safer-buffer"
:
{
"version"
:
"2.1.2"
,
"resolved"
:
"https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz"
,
"integrity"
:
"sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
},
"node_modules/semver"
:
{
"version"
:
"5.7.1"
,
"resolved"
:
"https://registry.npmjs.org/semver/-/semver-5.7.1.tgz"
,
"integrity"
:
"sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
,
"optional"
:
true
,
"bin"
:
{
"semver"
:
"bin/semver"
}
},
"node_modules/send"
:
{
"version"
:
"0.17.1"
,
"resolved"
:
"https://registry.npmjs.org/send/-/send-0.17.1.tgz"
,
"integrity"
:
"sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg=="
,
"dependencies"
:
{
"debug"
:
"2.6.9"
,
"depd"
:
"~1.1.2"
,
"destroy"
:
"~1.0.4"
,
"encodeurl"
:
"~1.0.2"
,
"escape-html"
:
"~1.0.3"
,
"etag"
:
"~1.8.1"
,
"fresh"
:
"0.5.2"
,
"http-errors"
:
"~1.7.2"
,
"mime"
:
"1.6.0"
,
"ms"
:
"2.1.1"
,
"on-finished"
:
"~2.3.0"
,
"range-parser"
:
"~1.2.1"
,
"statuses"
:
"~1.5.0"
},
"engines"
:
{
"node"
:
">= 0.8.0"
}
},
"node_modules/send/node_modules/ms"
:
{
"version"
:
"2.1.1"
,
"resolved"
:
"https://registry.npmjs.org/ms/-/ms-2.1.1.tgz"
,
"integrity"
:
"sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
},
"node_modules/serve-static"
:
{
"version"
:
"1.14.1"
,
"resolved"
:
"https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz"
,
"integrity"
:
"sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg=="
,
"dependencies"
:
{
"encodeurl"
:
"~1.0.2"
,
"escape-html"
:
"~1.0.3"
,
"parseurl"
:
"~1.3.3"
,
"send"
:
"0.17.1"
},
"engines"
:
{
"node"
:
">= 0.8.0"
}
},
"node_modules/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
},
"node_modules/setprototypeof"
:
{
"version"
:
"1.1.1"
,
"resolved"
:
"https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz"
,
"integrity"
:
"sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
},
"node_modules/signal-exit"
:
{
"version"
:
"3.0.2"
,
"resolved"
:
"https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz"
,
"integrity"
:
"sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0="
,
"optional"
:
true
},
"node_modules/simple-concat"
:
{
"version"
:
"1.0.0"
,
"resolved"
:
"https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.0.tgz"
,
"integrity"
:
"sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY="
,
"optional"
:
true
},
"node_modules/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
,
"dependencies"
:
{
"decompress-response"
:
"^4.2.0"
,
"once"
:
"^1.3.1"
,
"simple-concat"
:
"^1.0.0"
}
},
"node_modules/snappy"
:
{
"version"
:
"6.2.3"
,
"resolved"
:
"https://registry.npmjs.org/snappy/-/snappy-6.2.3.tgz"
,
"integrity"
:
"sha512-HZpVoIxMfQ4fL3iDuMdI1R5xycw1o9YDCAndTKZCY/EHRoKFvzwplttuBBVGeEg2fd1hYiwAXos/sM24W7N1LA=="
,
"optional"
:
true
,
"dependencies"
:
{
"bindings"
:
"^1.3.1"
,
"nan"
:
"^2.14.0"
,
"prebuild-install"
:
"^5.2.2"
}
},
"node_modules/sshpk"
:
{
"version"
:
"1.16.1"
,
"resolved"
:
"https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz"
,
"integrity"
:
"sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg=="
,
"dependencies"
:
{
"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"
},
"bin"
:
{
"sshpk-conv"
:
"bin/sshpk-conv"
,
"sshpk-sign"
:
"bin/sshpk-sign"
,
"sshpk-verify"
:
"bin/sshpk-verify"
},
"engines"
:
{
"node"
:
">=0.10.0"
}
},
"node_modules/statuses"
:
{
"version"
:
"1.5.0"
,
"resolved"
:
"https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz"
,
"integrity"
:
"sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
,
"engines"
:
{
"node"
:
">= 0.6"
}
},
"node_modules/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=="
,
"dependencies"
:
{
"safe-buffer"
:
"~5.1.0"
}
},
"node_modules/string-width"
:
{
"version"
:
"1.0.2"
,
"resolved"
:
"https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz"
,
"integrity"
:
"sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M="
,
"optional"
:
true
,
"dependencies"
:
{
"code-point-at"
:
"^1.0.0"
,
"is-fullwidth-code-point"
:
"^1.0.0"
,
"strip-ansi"
:
"^3.0.0"
},
"engines"
:
{
"node"
:
">=0.10.0"
}
},
"node_modules/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
,
"dependencies"
:
{
"ansi-regex"
:
"^2.0.0"
},
"engines"
:
{
"node"
:
">=0.10.0"
}
},
"node_modules/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
,
"engines"
:
{
"node"
:
">=0.10.0"
}
},
"node_modules/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
,
"dependencies"
:
{
"chownr"
:
"^1.1.1"
,
"mkdirp"
:
"^0.5.1"
,
"pump"
:
"^3.0.0"
,
"tar-stream"
:
"^2.0.0"
}
},
"node_modules/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
,
"dependencies"
:
{
"bl"
:
"^3.0.0"
,
"end-of-stream"
:
"^1.4.1"
,
"fs-constants"
:
"^1.0.0"
,
"inherits"
:
"^2.0.3"
,
"readable-stream"
:
"^3.1.1"
}
},
"node_modules/tar-stream/node_modules/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
,
"dependencies"
:
{
"readable-stream"
:
"^3.0.1"
}
},
"node_modules/tar-stream/node_modules/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
,
"dependencies"
:
{
"inherits"
:
"^2.0.3"
,
"string_decoder"
:
"^1.1.1"
,
"util-deprecate"
:
"^1.0.1"
},
"engines"
:
{
"node"
:
">= 6"
}
},
"node_modules/toidentifier"
:
{
"version"
:
"1.0.0"
,
"resolved"
:
"https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz"
,
"integrity"
:
"sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw=="
,
"engines"
:
{
"node"
:
">=0.6"
}
},
"node_modules/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=="
,
"dependencies"
:
{
"psl"
:
"^1.1.28"
,
"punycode"
:
"^2.1.1"
},
"engines"
:
{
"node"
:
">=0.8"
}
},
"node_modules/traverse"
:
{
"version"
:
"0.3.9"
,
"resolved"
:
"https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz"
,
"integrity"
:
"sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk="
},
"node_modules/tunnel-agent"
:
{
"version"
:
"0.6.0"
,
"resolved"
:
"https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz"
,
"integrity"
:
"sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0="
,
"dependencies"
:
{
"safe-buffer"
:
"^5.0.1"
},
"engines"
:
{
"node"
:
"*"
}
},
"node_modules/tweetnacl"
:
{
"version"
:
"0.14.5"
,
"resolved"
:
"https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz"
,
"integrity"
:
"sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q="
},
"node_modules/type-is"
:
{
"version"
:
"1.6.18"
,
"resolved"
:
"https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz"
,
"integrity"
:
"sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g=="
,
"dependencies"
:
{
"media-typer"
:
"0.3.0"
,
"mime-types"
:
"~2.1.24"
},
"engines"
:
{
"node"
:
">= 0.6"
}
},
"node_modules/unpipe"
:
{
"version"
:
"1.0.0"
,
"resolved"
:
"https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz"
,
"integrity"
:
"sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
,
"engines"
:
{
"node"
:
">= 0.8"
}
},
"node_modules/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=="
,
"dependencies"
:
{
"punycode"
:
"^2.1.0"
}
},
"node_modules/util-deprecate"
:
{
"version"
:
"1.0.2"
,
"resolved"
:
"https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz"
,
"integrity"
:
"sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
},
"node_modules/utils-merge"
:
{
"version"
:
"1.0.1"
,
"resolved"
:
"https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz"
,
"integrity"
:
"sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
,
"engines"
:
{
"node"
:
">= 0.4.0"
}
},
"node_modules/uuid"
:
{
"version"
:
"3.4.0"
,
"resolved"
:
"https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz"
,
"integrity"
:
"sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
,
"bin"
:
{
"uuid"
:
"bin/uuid"
}
},
"node_modules/vary"
:
{
"version"
:
"1.1.2"
,
"resolved"
:
"https://registry.npmjs.org/vary/-/vary-1.1.2.tgz"
,
"integrity"
:
"sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
,
"engines"
:
{
"node"
:
">= 0.8"
}
},
"node_modules/verror"
:
{
"version"
:
"1.10.0"
,
"resolved"
:
"https://registry.npmjs.org/verror/-/verror-1.10.0.tgz"
,
"integrity"
:
"sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA="
,
"engines"
:
[
"node >=0.6.0"
],
"dependencies"
:
{
"assert-plus"
:
"^1.0.0"
,
"core-util-is"
:
"1.0.2"
,
"extsprintf"
:
"^1.2.0"
}
},
"node_modules/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
},
"node_modules/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
,
"dependencies"
:
{
"string-width"
:
"^1.0.2 || 2"
}
},
"node_modules/wrappy"
:
{
"version"
:
"1.0.2"
,
"resolved"
:
"https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz"
,
"integrity"
:
"sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
,
"optional"
:
true
}
},
"dependencies"
:
{
"accepts"
:
{
"version"
:
"1.3.7"
,
...
...
@@ -611,6 +2190,11 @@
"resolved"
:
"https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz"
,
"integrity"
:
"sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
},
"jspack"
:
{
"version"
:
"0.0.4"
,
"resolved"
:
"https://registry.npmjs.org/jspack/-/jspack-0.0.4.tgz"
,
"integrity"
:
"sha1-Mt01x/3LPjRWwY+7fvntC8YjgXc="
},
"jsprim"
:
{
"version"
:
"1.4.1"
,
"resolved"
:
"https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz"
,
...
...
@@ -1111,6 +2695,14 @@
"resolved"
:
"https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz"
,
"integrity"
:
"sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
},
"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"
}
},
"string-width"
:
{
"version"
:
"1.0.2"
,
"resolved"
:
"https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz"
,
...
...
@@ -1122,14 +2714,6 @@
"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"
,
...
...
dispatch_system/dispatch_manager/repository/worker_env/package.json
View file @
23b21377
...
...
@@ -11,6 +11,7 @@
"dependencies"
:
{
"body-parser"
:
"^1.19.0"
,
"express"
:
"^4.17.1"
,
"jspack"
:
"^0.0.4"
,
"kafka-node"
:
"^5.0.0"
,
"morgan"
:
"^1.9.1"
,
"request"
:
"^2.88.2"
...
...
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