增加集群概览显示

This commit is contained in:
langhuihui
2020-02-02 16:20:51 +08:00
parent 13c357493f
commit ecb931ccb0
19 changed files with 674 additions and 146 deletions

View File

@@ -1 +1 @@
#app,body,html{height:100%}#app{font-family:Avenir,Helvetica,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-align:center;color:#184c18;position:relative}#app>div:first-child{position:absolute;top:10px;left:30px;font-size:x-large}.content{padding-top:60px}.feature-title[data-v-54efad41]{color:#eb5e46;font-weight:700;font-size:larger}p[data-v-54efad41]{margin:30px;font-size:20px}img[data-v-54efad41]{margin:20px}.root[data-v-e34eab40]{background:#d3d3d3}.root>img[data-v-e34eab40]{width:300px;margin:30px}.records[data-v-4eee1624]{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0 15px}.records>[data-v-4eee1624]{width:200px}.log-container{overflow-y:auto;max-height:500px}@-webkit-keyframes recording-data-v-7f7c92c8{0%{opacity:.2}50%{opacity:1}to{opacity:.2}}@keyframes recording-data-v-7f7c92c8{0%{opacity:.2}50%{opacity:1}to{opacity:.2}}.recording[data-v-7f7c92c8]{-webkit-animation:recording-data-v-7f7c92c8 1s infinite;animation:recording-data-v-7f7c92c8 1s infinite}.layout[data-v-7f7c92c8]{padding-bottom:30px;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.room[data-v-7f7c92c8]{width:250px;margin:10px;text-align:left}.empty[data-v-7f7c92c8]{color:#eb5e46;width:100%;min-height:500px;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.empty[data-v-7f7c92c8],.status[data-v-7f7c92c8]{display:-webkit-box;display:-ms-flexbox;display:flex}.status[data-v-7f7c92c8]{position:fixed;left:5px;bottom:10px}.status>div[data-v-7f7c92c8]{margin:0 5px} #app,body,html{height:100%}#app{font-family:Avenir,Helvetica,Arial,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-align:center;color:#184c18;position:relative}#app>div:first-child{position:absolute;top:10px;left:30px;font-size:x-large}.content{padding-top:60px}.feature-title[data-v-54efad41]{color:#eb5e46;font-weight:700;font-size:larger}p[data-v-54efad41]{margin:30px;font-size:20px}img[data-v-54efad41]{margin:20px}.root[data-v-e34eab40]{background:#d3d3d3}.root>img[data-v-e34eab40]{width:300px;margin:30px}.records[data-v-4eee1624]{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0 15px}.records>[data-v-4eee1624]{width:200px}.log-container{overflow-y:auto;max-height:500px}@-webkit-keyframes recording-data-v-f6113870{0%{opacity:.2}50%{opacity:1}to{opacity:.2}}@keyframes recording-data-v-f6113870{0%{opacity:.2}50%{opacity:1}to{opacity:.2}}.recording[data-v-f6113870]{-webkit-animation:recording-data-v-f6113870 1s infinite;animation:recording-data-v-f6113870 1s infinite}.layout[data-v-f6113870]{padding-bottom:30px;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.room[data-v-f6113870]{width:250px;margin:10px;text-align:left}.empty[data-v-f6113870]{color:#eb5e46;width:100%;min-height:500px;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.empty[data-v-f6113870],.status[data-v-f6113870]{display:-webkit-box;display:-ms-flexbox;display:flex}.status[data-v-f6113870]{position:fixed;left:5px;bottom:10px}.status>div[data-v-f6113870]{margin:0 5px}

View File

@@ -1 +1 @@
<!DOCTYPE html><html lang=en><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><link rel=icon href=/favicon.ico><title>Monibuca</title><script src=jessibuca/ajax.js></script><script src=jessibuca/renderer.js></script><link href=/css/app.d549056a.css rel=preload as=style><link href=/css/chunk-vendors.22ebf426.css rel=preload as=style><link href=/js/app.d6cffcca.js rel=preload as=script><link href=/js/chunk-vendors.ae8ac63d.js rel=preload as=script><link href=/css/chunk-vendors.22ebf426.css rel=stylesheet><link href=/css/app.d549056a.css rel=stylesheet></head><body><noscript><strong>We're sorry but dashboard doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id=app></div><script src=/js/chunk-vendors.ae8ac63d.js></script><script src=/js/app.d6cffcca.js></script></body></html> <!DOCTYPE html><html lang=en><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><link rel=icon href=/favicon.ico><title>Monibuca</title><script src=jessibuca/ajax.js></script><script src=jessibuca/renderer.js></script><link href=/css/app.ea4656d8.css rel=preload as=style><link href=/css/chunk-vendors.22ebf426.css rel=preload as=style><link href=/js/app.af5e5ef3.js rel=preload as=script><link href=/js/chunk-vendors.ebc28a73.js rel=preload as=script><link href=/css/chunk-vendors.22ebf426.css rel=stylesheet><link href=/css/app.ea4656d8.css rel=stylesheet></head><body><noscript><strong>We're sorry but dashboard doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id=app></div><script src=/js/chunk-vendors.ebc28a73.js></script><script src=/js/app.af5e5ef3.js></script></body></html>

2
dashboard/dist/js/app.af5e5ef3.js vendored Normal file

File diff suppressed because one or more lines are too long

1
dashboard/dist/js/app.af5e5ef3.js.map vendored Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -123,6 +123,44 @@
"tslib": "1.10.0" "tslib": "1.10.0"
} }
}, },
"@antv/g6": {
"version": "3.2.9",
"resolved": "https://registry.npm.taobao.org/@antv/g6/download/@antv/g6-3.2.9.tgz",
"integrity": "sha1-V4k4YKrE3iZUTz1dSoG4jWXVK9k=",
"requires": {
"@antv/g": "3.4.7",
"@antv/hierarchy": "0.6.1",
"@antv/util": "1.3.1",
"d3": "5.15.0",
"d3-force": "2.0.1",
"d3-sankey": "0.12.3",
"dagre": "0.8.5",
"numeric": "1.2.6",
"numericjs": "1.2.6"
},
"dependencies": {
"@antv/g": {
"version": "3.4.7",
"resolved": "https://registry.npm.taobao.org/@antv/g/download/@antv/g-3.4.7.tgz",
"integrity": "sha1-1CCM07f4XVEvp19l0YXIoFoYHuU=",
"requires": {
"@antv/gl-matrix": "2.7.1",
"@antv/util": "1.3.1",
"d3-ease": "1.0.6",
"d3-interpolate": "1.1.6",
"d3-timer": "1.0.10"
}
},
"@antv/util": {
"version": "1.3.1",
"resolved": "https://registry.npm.taobao.org/@antv/util/download/@antv/util-1.3.1.tgz?cache=0&sync_timestamp=1572438102677&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40antv%2Futil%2Fdownload%2F%40antv%2Futil-1.3.1.tgz",
"integrity": "sha1-MKNLIB/5Em7A1YxyyBZqnD5kTM0=",
"requires": {
"@antv/gl-matrix": "2.7.1"
}
}
}
},
"@antv/gl-matrix": { "@antv/gl-matrix": {
"version": "2.7.1", "version": "2.7.1",
"resolved": "https://registry.npm.taobao.org/@antv/gl-matrix/download/@antv/gl-matrix-2.7.1.tgz", "resolved": "https://registry.npm.taobao.org/@antv/gl-matrix/download/@antv/gl-matrix-2.7.1.tgz",
@@ -141,6 +179,24 @@
"tslib": "1.10.0" "tslib": "1.10.0"
} }
}, },
"@antv/hierarchy": {
"version": "0.6.1",
"resolved": "https://registry.npm.taobao.org/@antv/hierarchy/download/@antv/hierarchy-0.6.1.tgz",
"integrity": "sha1-2oH6FUTNTj/17D+WAfv4FC9h7yw=",
"requires": {
"@antv/util": "1.3.1"
},
"dependencies": {
"@antv/util": {
"version": "1.3.1",
"resolved": "https://registry.npm.taobao.org/@antv/util/download/@antv/util-1.3.1.tgz?cache=0&sync_timestamp=1572438102677&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40antv%2Futil%2Fdownload%2F%40antv%2Futil-1.3.1.tgz",
"integrity": "sha1-MKNLIB/5Em7A1YxyyBZqnD5kTM0=",
"requires": {
"@antv/gl-matrix": "2.7.1"
}
}
}
},
"@antv/matrix-util": { "@antv/matrix-util": {
"version": "2.0.4", "version": "2.0.4",
"resolved": "https://registry.npm.taobao.org/@antv/matrix-util/download/@antv/matrix-util-2.0.4.tgz", "resolved": "https://registry.npm.taobao.org/@antv/matrix-util/download/@antv/matrix-util-2.0.4.tgz",
@@ -4409,8 +4465,7 @@
"commander": { "commander": {
"version": "2.20.3", "version": "2.20.3",
"resolved": "https://registry.npm.taobao.org/commander/download/commander-2.20.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcommander%2Fdownload%2Fcommander-2.20.3.tgz", "resolved": "https://registry.npm.taobao.org/commander/download/commander-2.20.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcommander%2Fdownload%2Fcommander-2.20.3.tgz",
"integrity": "sha1-/UhehMA+tIgcIHIrpIA16FMa6zM=", "integrity": "sha1-/UhehMA+tIgcIHIrpIA16FMa6zM="
"dev": true
}, },
"common-tags": { "common-tags": {
"version": "1.8.0", "version": "1.8.0",
@@ -5130,16 +5185,171 @@
"type": "1.2.0" "type": "1.2.0"
} }
}, },
"d3": {
"version": "5.15.0",
"resolved": "https://registry.npm.taobao.org/d3/download/d3-5.15.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fd3%2Fdownload%2Fd3-5.15.0.tgz",
"integrity": "sha1-/9RJWOajy4pZqEQpxFQpuLylZ3o=",
"requires": {
"d3-array": "1.2.4",
"d3-axis": "1.0.12",
"d3-brush": "1.1.5",
"d3-chord": "1.0.6",
"d3-collection": "1.0.7",
"d3-color": "1.4.0",
"d3-contour": "1.3.2",
"d3-dispatch": "1.0.6",
"d3-drag": "1.2.5",
"d3-dsv": "1.2.0",
"d3-ease": "1.0.6",
"d3-fetch": "1.1.2",
"d3-force": "1.2.1",
"d3-format": "1.4.3",
"d3-geo": "1.11.9",
"d3-hierarchy": "1.1.9",
"d3-interpolate": "1.1.6",
"d3-path": "1.0.9",
"d3-polygon": "1.0.6",
"d3-quadtree": "1.0.7",
"d3-random": "1.1.2",
"d3-scale": "2.2.2",
"d3-scale-chromatic": "1.5.0",
"d3-selection": "1.4.1",
"d3-shape": "1.3.7",
"d3-time": "1.1.0",
"d3-time-format": "2.2.3",
"d3-timer": "1.0.10",
"d3-transition": "1.3.2",
"d3-voronoi": "1.1.4",
"d3-zoom": "1.8.3"
},
"dependencies": {
"d3-force": {
"version": "1.2.1",
"resolved": "https://registry.npm.taobao.org/d3-force/download/d3-force-1.2.1.tgz",
"integrity": "sha1-/Sml0f8YHJ5/BmnkvXK9sOkU7As=",
"requires": {
"d3-collection": "1.0.7",
"d3-dispatch": "1.0.6",
"d3-quadtree": "1.0.7",
"d3-timer": "1.0.10"
}
}
}
},
"d3-array": {
"version": "1.2.4",
"resolved": "https://registry.npm.taobao.org/d3-array/download/d3-array-1.2.4.tgz",
"integrity": "sha1-Y1zk1e6nWfb2BYY9vPww7cc39x8="
},
"d3-axis": {
"version": "1.0.12",
"resolved": "https://registry.npm.taobao.org/d3-axis/download/d3-axis-1.0.12.tgz",
"integrity": "sha1-zfILohDPu0N5WvM3Vohvs2ONqsk="
},
"d3-brush": {
"version": "1.1.5",
"resolved": "https://registry.npm.taobao.org/d3-brush/download/d3-brush-1.1.5.tgz",
"integrity": "sha1-BmuOhNF7GSmGAwRGyXwPun4brNw=",
"requires": {
"d3-dispatch": "1.0.6",
"d3-drag": "1.2.5",
"d3-interpolate": "1.1.6",
"d3-selection": "1.4.1",
"d3-transition": "1.3.2"
}
},
"d3-chord": {
"version": "1.0.6",
"resolved": "https://registry.npm.taobao.org/d3-chord/download/d3-chord-1.0.6.tgz?cache=0&sync_timestamp=1575418695102&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fd3-chord%2Fdownload%2Fd3-chord-1.0.6.tgz",
"integrity": "sha1-MJFX4/LbLHUvAoD+3TXyBnzLsV8=",
"requires": {
"d3-array": "1.2.4",
"d3-path": "1.0.9"
}
},
"d3-collection": {
"version": "1.0.7",
"resolved": "https://registry.npm.taobao.org/d3-collection/download/d3-collection-1.0.7.tgz",
"integrity": "sha1-NJvSqpl32wcQkcExRNXk8WtbMQ4="
},
"d3-color": { "d3-color": {
"version": "1.4.0", "version": "1.4.0",
"resolved": "https://registry.npm.taobao.org/d3-color/download/d3-color-1.4.0.tgz", "resolved": "https://registry.npm.taobao.org/d3-color/download/d3-color-1.4.0.tgz",
"integrity": "sha1-icRamV7Xc7EzFPBkYN8m1gug7K8=" "integrity": "sha1-icRamV7Xc7EzFPBkYN8m1gug7K8="
}, },
"d3-contour": {
"version": "1.3.2",
"resolved": "https://registry.npm.taobao.org/d3-contour/download/d3-contour-1.3.2.tgz",
"integrity": "sha1-ZSqs1QDSJkyzQjzuENtp9vWb6tM=",
"requires": {
"d3-array": "1.2.4"
}
},
"d3-dispatch": {
"version": "1.0.6",
"resolved": "https://registry.npm.taobao.org/d3-dispatch/download/d3-dispatch-1.0.6.tgz",
"integrity": "sha1-ANN7zuTdjNl3Kd2JOgrCnKq6XVg="
},
"d3-drag": {
"version": "1.2.5",
"resolved": "https://registry.npm.taobao.org/d3-drag/download/d3-drag-1.2.5.tgz",
"integrity": "sha1-JTf0UazTnTFAZne33HfIL32Yj3A=",
"requires": {
"d3-dispatch": "1.0.6",
"d3-selection": "1.4.1"
}
},
"d3-dsv": {
"version": "1.2.0",
"resolved": "https://registry.npm.taobao.org/d3-dsv/download/d3-dsv-1.2.0.tgz?cache=0&sync_timestamp=1573934576301&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fd3-dsv%2Fdownload%2Fd3-dsv-1.2.0.tgz",
"integrity": "sha1-nV91w6X4q9YR900/WEew1DOLiFw=",
"requires": {
"commander": "2.20.3",
"iconv-lite": "0.4.24",
"rw": "1.3.3"
}
},
"d3-ease": { "d3-ease": {
"version": "1.0.6", "version": "1.0.6",
"resolved": "https://registry.npm.taobao.org/d3-ease/download/d3-ease-1.0.6.tgz", "resolved": "https://registry.npm.taobao.org/d3-ease/download/d3-ease-1.0.6.tgz",
"integrity": "sha1-69ttoi36wKIiIvLU2gb2bEFqDsA=" "integrity": "sha1-69ttoi36wKIiIvLU2gb2bEFqDsA="
}, },
"d3-fetch": {
"version": "1.1.2",
"resolved": "https://registry.npm.taobao.org/d3-fetch/download/d3-fetch-1.1.2.tgz",
"integrity": "sha1-lXyPvG1EgFmboZGxslGL+Gs+G+I=",
"requires": {
"d3-dsv": "1.2.0"
}
},
"d3-force": {
"version": "2.0.1",
"resolved": "https://registry.npm.taobao.org/d3-force/download/d3-force-2.0.1.tgz",
"integrity": "sha1-MXUO7oxDU1MB1XEZW/loO+2lNOI=",
"requires": {
"d3-dispatch": "1.0.6",
"d3-quadtree": "1.0.7",
"d3-timer": "1.0.10"
}
},
"d3-format": {
"version": "1.4.3",
"resolved": "https://registry.npm.taobao.org/d3-format/download/d3-format-1.4.3.tgz",
"integrity": "sha1-To603/P9y4kahInsbmmGAcQblvE="
},
"d3-geo": {
"version": "1.11.9",
"resolved": "https://registry.npm.taobao.org/d3-geo/download/d3-geo-1.11.9.tgz",
"integrity": "sha1-d+rtFLpi/CwK71XNKUOEnIZveuY=",
"requires": {
"d3-array": "1.2.4"
}
},
"d3-hierarchy": {
"version": "1.1.9",
"resolved": "https://registry.npm.taobao.org/d3-hierarchy/download/d3-hierarchy-1.1.9.tgz?cache=0&sync_timestamp=1574108571076&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fd3-hierarchy%2Fdownload%2Fd3-hierarchy-1.1.9.tgz",
"integrity": "sha1-L2vuJMqupD+Nw3VF+gFihVlkeoM="
},
"d3-interpolate": { "d3-interpolate": {
"version": "1.1.6", "version": "1.1.6",
"resolved": "https://registry.npm.taobao.org/d3-interpolate/download/d3-interpolate-1.1.6.tgz", "resolved": "https://registry.npm.taobao.org/d3-interpolate/download/d3-interpolate-1.1.6.tgz",
@@ -5148,16 +5358,132 @@
"d3-color": "1.4.0" "d3-color": "1.4.0"
} }
}, },
"d3-path": {
"version": "1.0.9",
"resolved": "https://registry.npm.taobao.org/d3-path/download/d3-path-1.0.9.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fd3-path%2Fdownload%2Fd3-path-1.0.9.tgz",
"integrity": "sha1-SMBQux/owmJJOoyvVSTj6VkXAc8="
},
"d3-polygon": {
"version": "1.0.6",
"resolved": "https://registry.npm.taobao.org/d3-polygon/download/d3-polygon-1.0.6.tgz",
"integrity": "sha1-C/jLgYCm3BB/UY3feXXhKrv7044="
},
"d3-quadtree": {
"version": "1.0.7",
"resolved": "https://registry.npm.taobao.org/d3-quadtree/download/d3-quadtree-1.0.7.tgz",
"integrity": "sha1-youE33u1N2P+PC8kvUNRN/TlMTU="
},
"d3-random": {
"version": "1.1.2",
"resolved": "https://registry.npm.taobao.org/d3-random/download/d3-random-1.1.2.tgz",
"integrity": "sha1-KDO+fBJDYL+eLT/U8zhHz+bKspE="
},
"d3-regression": { "d3-regression": {
"version": "1.3.4", "version": "1.3.4",
"resolved": "https://registry.npm.taobao.org/d3-regression/download/d3-regression-1.3.4.tgz", "resolved": "https://registry.npm.taobao.org/d3-regression/download/d3-regression-1.3.4.tgz",
"integrity": "sha1-o0FLGr5aINRqII2V5WWkGL6aDiM=" "integrity": "sha1-o0FLGr5aINRqII2V5WWkGL6aDiM="
}, },
"d3-sankey": {
"version": "0.12.3",
"resolved": "https://registry.npm.taobao.org/d3-sankey/download/d3-sankey-0.12.3.tgz",
"integrity": "sha1-s8JoYnvXLl2AM26N5qy/7J0V0B0=",
"requires": {
"d3-array": "1.2.4",
"d3-shape": "1.3.7"
}
},
"d3-scale": {
"version": "2.2.2",
"resolved": "https://registry.npm.taobao.org/d3-scale/download/d3-scale-2.2.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fd3-scale%2Fdownload%2Fd3-scale-2.2.2.tgz",
"integrity": "sha1-TogOCydFrKrd0+3iap6Qip4XuB8=",
"requires": {
"d3-array": "1.2.4",
"d3-collection": "1.0.7",
"d3-format": "1.4.3",
"d3-interpolate": "1.1.6",
"d3-time": "1.1.0",
"d3-time-format": "2.2.3"
}
},
"d3-scale-chromatic": {
"version": "1.5.0",
"resolved": "https://registry.npm.taobao.org/d3-scale-chromatic/download/d3-scale-chromatic-1.5.0.tgz",
"integrity": "sha1-VOMz/HghL0ObFGQftVgB3YETWpg=",
"requires": {
"d3-color": "1.4.0",
"d3-interpolate": "1.1.6"
}
},
"d3-selection": {
"version": "1.4.1",
"resolved": "https://registry.npm.taobao.org/d3-selection/download/d3-selection-1.4.1.tgz",
"integrity": "sha1-mO7bvghfvaW6+i+ePzovTX1iKpg="
},
"d3-shape": {
"version": "1.3.7",
"resolved": "https://registry.npm.taobao.org/d3-shape/download/d3-shape-1.3.7.tgz",
"integrity": "sha1-32OAG+B7yYa8VPY3ibT+UCmStdc=",
"requires": {
"d3-path": "1.0.9"
}
},
"d3-time": {
"version": "1.1.0",
"resolved": "https://registry.npm.taobao.org/d3-time/download/d3-time-1.1.0.tgz",
"integrity": "sha1-seGdMH2unJALflsl/8XcwkmooPE="
},
"d3-time-format": {
"version": "2.2.3",
"resolved": "https://registry.npm.taobao.org/d3-time-format/download/d3-time-format-2.2.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fd3-time-format%2Fdownload%2Fd3-time-format-2.2.3.tgz",
"integrity": "sha1-DJoS7ig0KyA35eoc8LnrTddfKcs=",
"requires": {
"d3-time": "1.1.0"
}
},
"d3-timer": { "d3-timer": {
"version": "1.0.10", "version": "1.0.10",
"resolved": "https://registry.npm.taobao.org/d3-timer/download/d3-timer-1.0.10.tgz?cache=0&sync_timestamp=1573934576216&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fd3-timer%2Fdownload%2Fd3-timer-1.0.10.tgz", "resolved": "https://registry.npm.taobao.org/d3-timer/download/d3-timer-1.0.10.tgz?cache=0&sync_timestamp=1573934576216&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fd3-timer%2Fdownload%2Fd3-timer-1.0.10.tgz",
"integrity": "sha1-3+dripF0iDGxO22ceT/71QjdneU=" "integrity": "sha1-3+dripF0iDGxO22ceT/71QjdneU="
}, },
"d3-transition": {
"version": "1.3.2",
"resolved": "https://registry.npm.taobao.org/d3-transition/download/d3-transition-1.3.2.tgz",
"integrity": "sha1-qY7yFRvo2GAFQ0NMHKgBQK4js5g=",
"requires": {
"d3-color": "1.4.0",
"d3-dispatch": "1.0.6",
"d3-ease": "1.0.6",
"d3-interpolate": "1.1.6",
"d3-selection": "1.4.1",
"d3-timer": "1.0.10"
}
},
"d3-voronoi": {
"version": "1.1.4",
"resolved": "https://registry.npm.taobao.org/d3-voronoi/download/d3-voronoi-1.1.4.tgz",
"integrity": "sha1-3Tx412U9K7NZKErkeGRdlZRMgpc="
},
"d3-zoom": {
"version": "1.8.3",
"resolved": "https://registry.npm.taobao.org/d3-zoom/download/d3-zoom-1.8.3.tgz",
"integrity": "sha1-tqPb5zjHdjEhzQW4p3lf/hf0/Ao=",
"requires": {
"d3-dispatch": "1.0.6",
"d3-drag": "1.2.5",
"d3-interpolate": "1.1.6",
"d3-selection": "1.4.1",
"d3-transition": "1.3.2"
}
},
"dagre": {
"version": "0.8.5",
"resolved": "https://registry.npm.taobao.org/dagre/download/dagre-0.8.5.tgz",
"integrity": "sha1-ujCwBV2sErbB/MJHgXRCd30Gr+4=",
"requires": {
"graphlib": "2.1.8",
"lodash": "4.17.15"
}
},
"dashdash": { "dashdash": {
"version": "1.14.1", "version": "1.14.1",
"resolved": "https://registry.npm.taobao.org/dashdash/download/dashdash-1.14.1.tgz", "resolved": "https://registry.npm.taobao.org/dashdash/download/dashdash-1.14.1.tgz",
@@ -7568,6 +7894,14 @@
"integrity": "sha1-ShL/G2A3bvCYYsIJPt2Qgyi+hCM=", "integrity": "sha1-ShL/G2A3bvCYYsIJPt2Qgyi+hCM=",
"dev": true "dev": true
}, },
"graphlib": {
"version": "2.1.8",
"resolved": "https://registry.npm.taobao.org/graphlib/download/graphlib-2.1.8.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fgraphlib%2Fdownload%2Fgraphlib-2.1.8.tgz",
"integrity": "sha1-V2HUFHN4cAhMkux7XbywWSydNdo=",
"requires": {
"lodash": "4.17.15"
}
},
"gray-matter": { "gray-matter": {
"version": "4.0.2", "version": "4.0.2",
"resolved": "https://registry.npm.taobao.org/gray-matter/download/gray-matter-4.0.2.tgz", "resolved": "https://registry.npm.taobao.org/gray-matter/download/gray-matter-4.0.2.tgz",
@@ -8023,7 +8357,6 @@
"version": "0.4.24", "version": "0.4.24",
"resolved": "https://registry.npm.taobao.org/iconv-lite/download/iconv-lite-0.4.24.tgz?cache=0&sync_timestamp=1579333981154&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ficonv-lite%2Fdownload%2Ficonv-lite-0.4.24.tgz", "resolved": "https://registry.npm.taobao.org/iconv-lite/download/iconv-lite-0.4.24.tgz?cache=0&sync_timestamp=1579333981154&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ficonv-lite%2Fdownload%2Ficonv-lite-0.4.24.tgz",
"integrity": "sha1-ICK0sl+93CHS9SSXSkdKr+czkIs=", "integrity": "sha1-ICK0sl+93CHS9SSXSkdKr+czkIs=",
"dev": true,
"requires": { "requires": {
"safer-buffer": "2.1.2" "safer-buffer": "2.1.2"
} }
@@ -9306,8 +9639,7 @@
"lodash": { "lodash": {
"version": "4.17.15", "version": "4.17.15",
"resolved": "https://registry.npm.taobao.org/lodash/download/lodash-4.17.15.tgz?cache=0&sync_timestamp=1563508077056&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flodash%2Fdownload%2Flodash-4.17.15.tgz", "resolved": "https://registry.npm.taobao.org/lodash/download/lodash-4.17.15.tgz?cache=0&sync_timestamp=1563508077056&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flodash%2Fdownload%2Flodash-4.17.15.tgz",
"integrity": "sha1-tEf2ZwoEVbv+7dETku/zMOoJdUg=", "integrity": "sha1-tEf2ZwoEVbv+7dETku/zMOoJdUg="
"dev": true
}, },
"lodash._reinterpolate": { "lodash._reinterpolate": {
"version": "3.0.0", "version": "3.0.0",
@@ -10296,6 +10628,16 @@
"integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
"dev": true "dev": true
}, },
"numeric": {
"version": "1.2.6",
"resolved": "https://registry.npm.taobao.org/numeric/download/numeric-1.2.6.tgz",
"integrity": "sha1-dlsCvvl5iPz4gNTrPza4D6MTNao="
},
"numericjs": {
"version": "1.2.6",
"resolved": "https://registry.npm.taobao.org/numericjs/download/numericjs-1.2.6.tgz",
"integrity": "sha1-wNryXEvLIuBDv4NEP5856LM2eYs="
},
"oauth-sign": { "oauth-sign": {
"version": "0.9.0", "version": "0.9.0",
"resolved": "https://registry.npm.taobao.org/oauth-sign/download/oauth-sign-0.9.0.tgz", "resolved": "https://registry.npm.taobao.org/oauth-sign/download/oauth-sign-0.9.0.tgz",
@@ -13155,6 +13497,11 @@
"aproba": "1.2.0" "aproba": "1.2.0"
} }
}, },
"rw": {
"version": "1.3.3",
"resolved": "https://registry.npm.taobao.org/rw/download/rw-1.3.3.tgz",
"integrity": "sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q="
},
"rxjs": { "rxjs": {
"version": "6.5.4", "version": "6.5.4",
"resolved": "https://registry.npm.taobao.org/rxjs/download/rxjs-6.5.4.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frxjs%2Fdownload%2Frxjs-6.5.4.tgz", "resolved": "https://registry.npm.taobao.org/rxjs/download/rxjs-6.5.4.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frxjs%2Fdownload%2Frxjs-6.5.4.tgz",
@@ -13182,8 +13529,7 @@
"safer-buffer": { "safer-buffer": {
"version": "2.1.2", "version": "2.1.2",
"resolved": "https://registry.npm.taobao.org/safer-buffer/download/safer-buffer-2.1.2.tgz", "resolved": "https://registry.npm.taobao.org/safer-buffer/download/safer-buffer-2.1.2.tgz",
"integrity": "sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo=", "integrity": "sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo="
"dev": true
}, },
"sax": { "sax": {
"version": "1.2.4", "version": "1.2.4",

View File

@@ -11,6 +11,7 @@
}, },
"dependencies": { "dependencies": {
"@antv/g2plot": "^0.11.22", "@antv/g2plot": "^0.11.22",
"@antv/g6": "^3.2.9",
"core-js": "^3.4.4", "core-js": "^3.4.4",
"view-design": "^4.0.0", "view-design": "^4.0.0",
"vue": "^2.6.10", "vue": "^2.6.10",

View File

@@ -1,80 +1,71 @@
<template> <template>
<div id="app"> <div id="app">
<div>Monibuca</div> <div>Monibuca</div>
<Menu mode="horizontal" :active-name="selectedMenu" style="position: absolute;top: 0;right: 0;"> <Menu mode="horizontal" :active-name="selectedMenu" style="position: absolute;top: 0;right: 0;">
<MenuItem name="home" to="/">首页</MenuItem> <MenuItem name="home" to="/">首页</MenuItem>
<MenuItem name="docs" to="/docs" target="_blank"> <MenuItem name="docs" to="/docs" target="_blank">文档</MenuItem>
文档 <MenuItem name="console" to="console">控制台</MenuItem>
</MenuItem> <Submenu name="plugins">
<MenuItem name="console" to="console"> <template slot="title">内置插件</template>
控制台 <MenuGroup title="发布者/订阅者">
</MenuItem> <MenuItem name="cluster" target="_blank" to="/docs/plugins.html#cluster插件">集群</MenuItem>
<Submenu name="plugins"> <MenuItem name="rtmp" target="_blank" to="/docs/plugins.html#rtmp插件">RTMP</MenuItem>
<template slot="title"> </MenuGroup>
内置插件 <MenuGroup title="订阅者">
</template> <MenuItem name="jessica" target="_blank" to="/docs/plugins.html#jessica插件">Jessica</MenuItem>
<MenuGroup title="发布者/订阅者"> <MenuItem name="HDL" target="_blank" to="/docs/plugins.html#http-flv插件">Http-Flv</MenuItem>
<MenuItem name="cluster" to="/docs/plugins.html#cluster插件">集群</MenuItem> <MenuItem name="record" target="_blank" to="/docs/plugins.html#recordflv插件">录制Flv</MenuItem>
<MenuItem name="rtmp" to="/docs/plugins.html#rtmp插件">RTMP</MenuItem> </MenuGroup>
</MenuGroup> <MenuGroup title="发布者">
<MenuGroup title="订阅者"> <MenuItem name="HLS" target="_blank" to="/docs/plugins.html#hls插件">HLS</MenuItem>
<MenuItem name="jessica" to="/docs/plugins.html#jessica插件">Jessica</MenuItem> <MenuItem name="TS" target="_blank" to="/docs/plugins.html#hls插件">TS</MenuItem>
<MenuItem name="HDL" to="/docs/plugins.html#http-flv插件">Http-Flv</MenuItem> </MenuGroup>
<MenuItem name="record" to="/docs/plugins.html#recordflv插件">录制Flv</MenuItem> <MenuGroup title="钩子">
</MenuGroup> <MenuItem name="Auth" target="_blank" to="/docs/plugins.html#校验插件">验证</MenuItem>
<MenuGroup title="发布者"> <MenuItem name="QoS">QoS</MenuItem>
<MenuItem name="HLS" to="/docs/plugins.html#hls插件">HLS</MenuItem> <MenuItem name="gateway" target="_blank" to="/docs/plugins.html#网关插件">网关</MenuItem>
<MenuItem name="TS" to="/docs/plugins.html#hls插件">TS</MenuItem> </MenuGroup>
</MenuGroup> </Submenu>
<MenuGroup title="钩子"> <MenuItem name="4" to="about">支持</MenuItem>
<MenuItem name="Auth" to="/docs/plugins.html#校验插件">验证</MenuItem> </Menu>
<MenuItem name="QoS">QoS</MenuItem> <router-view class="content"></router-view>
<MenuItem name="gateway" to="/docs/plugins.html#网关插件">网关</MenuItem> <div>Copyright © 2019-2020 dexter 苏ICP备20001212号</div>
</MenuGroup> </div>
</Submenu>
<MenuItem name="4" to="about">
支持
</MenuItem>
</Menu>
<router-view class="content"></router-view>
<div>Copyright © 2019-2020 dexter 苏ICP备20001212号</div>
</div>
</template> </template>
<script> <script>
export default {
export default { name: "app",
name: 'app', data() {
data(){ return {
return { selectedMenu: "home"
selectedMenu:"home" };
} }
} };
}
</script> </script>
<style> <style>
body,html{ body,
height: 100%; html {
} height: 100%;
#app { }
font-family: 'Avenir', Helvetica, Arial, sans-serif; #app {
-webkit-font-smoothing: antialiased; font-family: "Avenir", Helvetica, Arial, sans-serif;
-moz-osx-font-smoothing: grayscale; -webkit-font-smoothing: antialiased;
text-align: center; -moz-osx-font-smoothing: grayscale;
color: #184c18; text-align: center;
position: relative; color: #184c18;
height: 100%; position: relative;
} height: 100%;
}
#app > div:first-child {
#app > div:first-child { position: absolute;
position: absolute; top: 10px;
top: 10px; left: 30px;
left: 30px; font-size: x-large;
font-size: x-large; }
} .content {
.content{ padding-top: 60px;
padding-top: 60px; }
}
</style> </style>

View File

@@ -0,0 +1,97 @@
<template>
<div id="mountNode"></div>
</template>
<script>
import { mapState } from "vuex";
import G6 from "@antv/g6";
var graph = null;
export default {
computed: {
...mapState({
data(state) {
let summary = state.summary;
// 点集
let nodes = [];
// 边集
let edges = [];
this.addServer(summary, nodes, edges);
return {
nodes,
edges
};
}
})
},
methods: {
addServer(node, nodes, edges) {
let result = {
id: node.Address,
label: node.Address,
description: `cpu:${node.CPUUsage >> 0}% mem:${node.Memory.Usage >>
0}%`,
shape: "modelRect",
logoIcon: {
show: false
}
};
nodes.push(result);
if (node.Rooms) {
for (let i = 0; i < node.Rooms.length; i++) {
let room = node.Rooms[i];
let roomId = result.id + room.StreamPath;
nodes.push({
id: roomId,
label: room.StreamPath,
shape: "rect"
});
edges.push({ source: result.id, target: roomId });
if (room.SubscriberInfo) {
for (let j = 0; j < room.SubscriberInfo.length; j++) {
let subId = roomId + room.SubscriberInfo[j].ID;
nodes.push({
id: subId,
label: room.SubscriberInfo[j].ID
});
edges.push({ source: roomId, target: subId });
}
}
}
}
if (node.Children && node.Children.length > 0) {
for (let i = 0; i < node.Children.length; i++) {
let child = this.addServer(node.Children[i], nodes, edges);
edges.push({
source: result.id,
target: child.id
});
}
}
return result;
}
},
watch: {
data(v) {
if (graph) {
graph.read(v); // 加载数据
}
}
},
mounted() {
graph = new G6.Graph({
renderer: "svg",
container: "mountNode", // 指定挂载容器
width: 800, // 图的宽度
height: 500, // 图的高度
layout: {
type: "radial"
},
defaultNode: {}
});
graph.read(this.data); // 加载数据
}
};
</script>
<style>
</style>

View File

@@ -0,0 +1,62 @@
<template>
<Modal v-bind="$attrs" draggable v-on="$listeners" title="查看订阅者">
<Table :columns="subtableColumns" :data="data"></Table>
</Modal>
</template>
<script>
export default {
props: {
data: Array
},
data() {
return {
subtableColumns: [
{
title: "类型",
key: "Type"
},
{
title: "Name",
key: "ID"
},
{
title: "订阅时间",
render(h, { row }) {
return h("StartTime", {
props: {
value: row.SubscribeTime
}
});
}
},
{
title: "丢帧",
render(h, { row }) {
return h(
"span",
row.TotalPacket ? row.TotalDrop + "/" + row.TotalPacket : ""
);
}
},
{
title: "Buffer",
render(h, { row }) {
return h("Progress", {
props: {
percent: Math.floor((row.BufferLength * 99) / 1024),
"text-inside": true,
"stroke-width": 20,
"stroke-color": ["#87d068", "#ff0000"]
}
});
}
}
]
};
}
};
</script>
<style>
</style>

View File

@@ -38,6 +38,7 @@ export default new Vuex.Store({
summaryES.onmessage = evt => { summaryES.onmessage = evt => {
if (!evt.data) return if (!evt.data) return
let summary = JSON.parse(evt.data) let summary = JSON.parse(evt.data)
summary.Address = location.hostname
commit("update", { summary }) commit("update", { summary })
} }
}, },

View File

@@ -15,10 +15,7 @@
{{item.VideoInfo.SPSInfo.Width}}x{{item.VideoInfo.SPSInfo.Height}} {{item.VideoInfo.SPSInfo.Width}}x{{item.VideoInfo.SPSInfo.Height}}
</p> </p>
<ButtonGroup size="small"> <ButtonGroup size="small">
<Button <Button @click="onShowDetail(item)" icon="ios-people">{{getSubscriberCount(item)}}</Button>
@click="onShowDetail(item)"
icon="ios-people"
>{{item.SubscriberInfo?item.SubscriberInfo.length:0}}</Button>
<Button v-if="item.Type" @click="preview(item)" icon="md-eye"></Button> <Button v-if="item.Type" @click="preview(item)" icon="md-eye"></Button>
<Button <Button
@click="stopRecord(item)" @click="stopRecord(item)"
@@ -34,7 +31,9 @@
</div> </div>
</div> </div>
</TabPane> </TabPane>
<TabPane label="集群总览" icon="ios-cloud"></TabPane> <TabPane label="集群总览" icon="ios-cloud">
<Cluster />
</TabPane>
<TabPane label="录制的视频" icon="ios-folder" name="recordsPanel"> <TabPane label="录制的视频" icon="ios-folder" name="recordsPanel">
<Records ref="recordsPanel" /> <Records ref="recordsPanel" />
</TabPane> </TabPane>
@@ -56,6 +55,7 @@
>磁盘使用{{networkFormat(HardDisk.Used,"M")}} 占比{{HardDisk.Usage.toFixed(2)}}%</Alert> >磁盘使用{{networkFormat(HardDisk.Used,"M")}} 占比{{HardDisk.Usage.toFixed(2)}}%</Alert>
</div> </div>
<Jessibuca ref="jessibuca" v-model="showPreview"></Jessibuca> <Jessibuca ref="jessibuca" v-model="showPreview"></Jessibuca>
<Subscribers :data="currentStream && currentStream.SubscriberInfo" v-model="showSubscribers" />
</div> </div>
</template> </template>
@@ -66,7 +66,8 @@ import StartTime from "../components/StartTime";
import Records from "../components/Records"; import Records from "../components/Records";
import Logs from "../components/Logs"; import Logs from "../components/Logs";
import Config from "../components/Config"; import Config from "../components/Config";
import Subscribers from "../components/Subscribers";
import Cluster from "../components/Cluster";
const uintInc = { const uintInc = {
"": "K", "": "K",
K: "M", K: "M",
@@ -106,12 +107,16 @@ export default {
StartTime, StartTime,
Records, Records,
Logs, Logs,
Config Subscribers,
Config,
Cluster
}, },
data() { data() {
return { return {
showPreview: false, showPreview: false,
showSubscribers: false,
currentTab: "", currentTab: "",
currentStream: [],
typeMap: { typeMap: {
FlvFile: "🎥", FlvFile: "🎥",
TS: "🎬", TS: "🎬",
@@ -143,14 +148,21 @@ export default {
totalInNetSpeed(state) { totalInNetSpeed(state) {
return ( return (
this.networkFormat( this.networkFormat(
state.summary.NetWork.reduce((aac, c) => aac + c.ReceiveSpeed, 0) state.summary.NetWork
? state.summary.NetWork.reduce(
(aac, c) => aac + c.ReceiveSpeed,
0
)
: 0
) + "/S" ) + "/S"
); );
}, },
totalOutNetSpeed(state) { totalOutNetSpeed(state) {
return ( return (
this.networkFormat( this.networkFormat(
state.summary.NetWork.reduce((aac, c) => aac + c.SentSpeed, 0) state.summary.NetWork
? state.summary.NetWork.reduce((aac, c) => aac + c.SentSpeed, 0)
: 0
) + "/S" ) + "/S"
); );
} }
@@ -158,15 +170,24 @@ export default {
}, },
methods: { methods: {
...mapActions(["fetchSummary", "stopFetchSummary"]), ...mapActions(["fetchSummary", "stopFetchSummary"]),
getSubscriberCount(item) {
if (
this.currentStream &&
this.currentStream.StreamPath == item.StreamPath
) {
this.currentStream = item;
}
return item.SubscriberInfo ? item.SubscriberInfo.length : 0;
},
preview(item) { preview(item) {
this.$refs.jessibuca.play( this.$refs.jessibuca.play(
"ws://" + location.hostname + ":8080/" + item.StreamPath "ws://" + location.hostname + ":8080/" + item.StreamPath
); );
this.showPreview = true; this.showPreview = true;
}, },
onShowDetail() { onShowDetail(item) {
// this.showDetail = true this.showSubscribers = true;
// this.currentSub = item this.currentStream = item;
}, },
networkFormat(value, unit = "") { networkFormat(value, unit = "") {
if (value > 1024 && uintInc[unit]) { if (value > 1024 && uintInc[unit]) {

View File

@@ -118,7 +118,7 @@ func (s *ServerSummary) collect() {
s.NetWork[i].Name = n.Name s.NetWork[i].Name = n.Name
s.NetWork[i].Receive = n.BytesRecv s.NetWork[i].Receive = n.BytesRecv
s.NetWork[i].Sent = n.BytesSent s.NetWork[i].Sent = n.BytesSent
if s.lastNetWork != nil { if s.lastNetWork != nil && len(s.lastNetWork) > i {
s.NetWork[i].ReceiveSpeed = n.BytesRecv - s.lastNetWork[i].Receive s.NetWork[i].ReceiveSpeed = n.BytesRecv - s.lastNetWork[i].Receive
s.NetWork[i].SentSpeed = n.BytesSent - s.lastNetWork[i].Sent s.NetWork[i].SentSpeed = n.BytesSent - s.lastNetWork[i].Sent
} }

View File

@@ -4,14 +4,15 @@ import (
"bytes" "bytes"
"compress/gzip" "compress/gzip"
"context" "context"
. "github.com/langhuihui/monibuca/monica"
"github.com/quangngotan95/go-m3u8/m3u8"
"io" "io"
"io/ioutil" "io/ioutil"
"log" "log"
"net/http" "net/http"
"path/filepath" "path/filepath"
"time" "time"
. "github.com/langhuihui/monibuca/monica"
"github.com/quangngotan95/go-m3u8/m3u8"
) )
type HLS struct { type HLS struct {
@@ -94,8 +95,8 @@ func (p *HLS) run(info *M3u8Info) {
if len(tsItems) > 3 { if len(tsItems) > 3 {
tsItems = tsItems[len(tsItems)-3:] tsItems = tsItems[len(tsItems)-3:]
} }
info.M3u8Info = make([]TSCost, len(tsItems)) info.M3u8Info = nil
for i, v := range tsItems { for _, v := range tsItems {
tsCost := TSCost{} tsCost := TSCost{}
tsUrl, _ := info.Req.URL.Parse(v.Segment) tsUrl, _ := info.Req.URL.Parse(v.Segment)
tsReq, _ := http.NewRequest("GET", tsUrl.String(), nil) tsReq, _ := http.NewRequest("GET", tsUrl.String(), nil)
@@ -122,7 +123,7 @@ func (p *HLS) run(info *M3u8Info) {
} else if err != nil { } else if err != nil {
log.Printf("%s reqTs:%v", p.StreamPath, err) log.Printf("%s reqTs:%v", p.StreamPath, err)
} }
info.M3u8Info[i] = tsCost info.M3u8Info = append(info.M3u8Info, tsCost)
} }
time.Sleep(time.Second * time.Duration(playlist.Target) * 2) time.Sleep(time.Second * time.Duration(playlist.Target) * 2)