├── .bowerrc
├── .gitignore
├── LICENSE
├── README.md
├── app
├── assets
│ ├── compare.css
│ ├── compare.css.map
│ ├── compare.scss
│ ├── run.css
│ ├── run.css.map
│ ├── run.scss
│ └── tabs.scss
├── compare.html
├── data
│ ├── edison
│ │ └── runs-edison.csv
│ ├── pacvis
│ │ ├── alldata.csv
│ │ └── fix.sh
│ ├── sim
│ │ ├── alldata.csv
│ │ ├── dump_net.py
│ │ ├── fix_comm.sh
│ │ ├── fix_sim.sh
│ │ ├── header
│ │ ├── list_edison.sh
│ │ ├── list_links.sh
│ │ ├── list_runs.sh
│ │ ├── runs-1blue.csv
│ │ ├── runs-2blacks.csv
│ │ ├── runs-4jobs-1.csv
│ │ ├── runs-4jobs-2.csv
│ │ ├── runs-8jobs-1.csv
│ │ ├── runs-8jobs-2.csv
│ │ ├── runs-DAT.csv
│ │ ├── runs-edison.csv
│ │ ├── runs-links.csv
│ │ ├── runs-multi.csv
│ │ ├── runs-single-bak.csv
│ │ ├── runs-single.csv
│ │ ├── runs-state.csv
│ │ └── substitute.sh
│ └── staci_sep_29
│ │ ├── Screen Shot 2016-04-06 at 1.49.37 PM.png
│ │ ├── alldata.csv
│ │ ├── dnd_jobs.21.csv
│ │ ├── dnd_net_counters.21.csv
│ │ └── runs.csv
├── index.html
├── lib-code
│ └── jquery-element-onresize.js
├── run.html
└── src
│ ├── app.js
│ ├── cmap.js
│ ├── compare.js
│ ├── components
│ └── cmap_swath.js
│ ├── config.js
│ ├── counters_view.js
│ ├── data.js
│ ├── graph
│ ├── graph.js
│ └── graph_view.js
│ ├── init.js
│ ├── jobs_view.js
│ ├── matrix
│ ├── adj_matrix.js
│ ├── cluster.js
│ └── matrix_view.js
│ ├── model.js
│ ├── radial
│ ├── bg_view.js
│ ├── black_green.js
│ ├── channel_view.js
│ ├── closeup.js
│ ├── group_view2.js
│ ├── layout.js
│ ├── layout_gb.js
│ ├── radial.js
│ └── radial_view.js
│ ├── run.js
│ ├── svg
│ ├── histogram.js
│ ├── histogram_g.js
│ └── slider.js
│ └── views.js
├── bower.json
├── run
└── server.py
/.bowerrc:
--------------------------------------------------------------------------------
1 | {
2 | "directory": "app/lib",
3 | "json": "bower.json"
4 | }
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules
3 |
4 | app/lib
5 | links
6 | .idea
7 | .sass-cache
8 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Copyright (c) 2015, Yarden, SCI Institution, University of Utah
2 | All rights reserved. LLNL-CODE-678975.
3 |
4 | Redistribution and use in source and binary forms, with or without
5 | modification, are permitted provided that the following conditions are met:
6 |
7 | * Redistributions of source code must retain the above copyright notice, this
8 | list of conditions and the following disclaimer.
9 |
10 | * Redistributions in binary form must reproduce the above copyright notice,
11 | this list of conditions and the following disclaimer in the documentation
12 | and/or other materials provided with the distribution.
13 |
14 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
15 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
17 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
18 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
20 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
21 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
22 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24 |
25 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | DragonView v1.0
2 | ===============
3 |
4 | Dragonview is an interactive visual analytics tool to visualize the nodes and
5 | links of a supercomputer that uses the dragonfly topology for its
6 | interconnection network. It can be used to map different data such as number of
7 | packets or bytes or stalls on the network links and job IDs or other on-node
8 | metrics on the router or node.
9 |
10 | ### Build
11 | * Download and install [nodejs](https://nodejs.org "Title")
12 | * Install bower
13 |
14 | Note: *"-g"* means global installation and on OSX must be run as sudo. You can install bower locally without the *"-g"*
15 | ```
16 | npm install -g bower
17 | ```
18 | * Install the libraries
19 | ```
20 | bower install
21 | ```
22 | ### Run
23 | ```
24 | ./run
25 | ```
26 | Open a browser and point it to localhost:8000
27 |
28 | ### Data
29 | Each run should have two files:
30 |
31 | ##### counters.csv
32 | Header: sg,sr,sg,dg,dr,dc,color,counter1,counter2,..
33 |
34 | Each row describes a link: *src group, src row, src col, dest group, dest row,
35 | dest col, link color, \[counter, ...\]*
36 |
37 | ##### jobs.csv
38 | Header: g,r,c,n,core,jobid
39 |
40 | ##### runs.csv
41 | Header: name,counters,jobs
42 |
43 | One row per run including a name and paths to counters and jobs files
44 |
45 |
--------------------------------------------------------------------------------
/app/assets/compare.css:
--------------------------------------------------------------------------------
1 | .controls {
2 | width: 140px; }
3 | .controls .values {
4 | max-height: 100px;
5 | overflow: auto; }
6 | .controls .value {
7 | margin-top: 0;
8 | padding-top: 0; }
9 |
10 | .selected {
11 | box-sizing: border-box;
12 | border: solid black 2px;
13 | z-index: 1; }
14 |
15 | #compare {
16 | position: fixed;
17 | top: 50px;
18 | bottom: 0;
19 | left: 160px;
20 | right: 0; }
21 |
22 | #cmap {
23 | height: 20px;
24 | width: 80%; }
25 |
26 | #cmap_mid {
27 | position: absolute;
28 | left: 30%; }
29 |
30 | #cmap_max {
31 | position: absolute;
32 | right: 10%; }
33 |
34 | #outer {
35 | position: fixed;
36 | top: 100px;
37 | bottom: 10px;
38 | left: 160px;
39 | right: 10px; }
40 |
41 | #matrix {
42 | position: fixed;
43 | top: 100px;
44 | bottom: 10px;
45 | left: 180px;
46 | right: 250px; }
47 |
48 | #columns {
49 | position: absolute;
50 | overflow: hidden; }
51 | #columns .col {
52 | position: absolute;
53 | background-color: palegreen;
54 | text-align: center;
55 | overflow: hidden;
56 | font-size: 10px; }
57 | #columns .rotate {
58 | transform: rotate(-90deg);
59 | transform-origin: left 0px;
60 | text-align: center; }
61 |
62 | #rows {
63 | position: absolute;
64 | overflow-y: hidden; }
65 | #rows .row {
66 | position: absolute;
67 | background-color: paleturquoise;
68 | font-size: 10px; }
69 | #rows .row:hover {
70 | box-sizing: border-box;
71 | border: solid darkgrey 2px;
72 | z-index: 1; }
73 | #rows .rotate {
74 | transform: rotate(-90deg);
75 | transform-origin: left 0px;
76 | text-align: center; }
77 |
78 | #values {
79 | position: absolute;
80 | box-sizing: border-box; }
81 | #values .value {
82 | position: absolute; }
83 | #values .value:hover {
84 | box-sizing: border-box;
85 | border: solid darkgrey 2px;
86 | z-index: 1; }
87 |
88 | #frame {
89 | overflow: scroll;
90 | position: fixed;
91 | bottom: 10px;
92 | right: 250px; }
93 |
94 | #results {
95 | font-size: 10px;
96 | position: relative;
97 | height: 500px; }
98 | #results .value {
99 | position: absolute; }
100 | #results .rotate {
101 | transform: rotate(-90deg);
102 | transform-origin: left 0px;
103 | text-align: center; }
104 | #results .col {
105 | position: absolute;
106 | background-color: palegreen;
107 | text-align: center; }
108 | #results .colText {
109 | position: absolute; }
110 |
111 | #selection-values {
112 | height: 40px;
113 | padding-left: 10px; }
114 |
115 | #selection {
116 | position: absolute;
117 | right: 0;
118 | max-width: 200px; }
119 | #selection ul {
120 | list-style-type: none;
121 | padding: 0px;
122 | margin: 0px;
123 | overflow: auto; }
124 | #selection ul li {
125 | border-radius: 5px;
126 | padding-left: 5px;
127 | padding-top: 2px; }
128 | #selection ul li:hover {
129 | background-color: lightgrey; }
130 | #selection .li-body {
131 | margin-left: 10px; }
132 |
133 | .field-title {
134 | font-weight: bold;
135 | font-size: 10pt; }
136 |
137 | /*# sourceMappingURL=compare.css.map */
138 |
--------------------------------------------------------------------------------
/app/assets/compare.css.map:
--------------------------------------------------------------------------------
1 | {
2 | "version": 3,
3 | "mappings": "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",
4 | "sources": ["compare.scss"],
5 | "names": [],
6 | "file": "compare.css"
7 | }
8 |
--------------------------------------------------------------------------------
/app/assets/compare.scss:
--------------------------------------------------------------------------------
1 |
2 | .controls {
3 | width: 140px;
4 |
5 | .values {
6 | max-height: 100px;
7 | overflow: auto;
8 | }
9 |
10 | .value {
11 | margin-top: 0;
12 | padding-top: 0;
13 | }
14 | }
15 |
16 | .selected {
17 | box-sizing: border-box;
18 | border: solid black 2px;
19 | z-index: 1;
20 | }
21 |
22 | #compare {
23 | position: fixed;
24 | top: 50px;
25 | bottom: 0;
26 | left: 160px;
27 | right: 0;
28 | //border: solid lightblue 1px;
29 | }
30 |
31 | #cmap {
32 | height: 20px;
33 | width:80%;
34 | }
35 |
36 | #cmap_mid {
37 | position: absolute;
38 | left: 30%;
39 | }
40 | #cmap_max {
41 | position: absolute;
42 | right: 10%;
43 | }
44 |
45 | #outer {
46 | position: fixed;
47 | top: 100px;
48 | bottom: 10px;
49 | left: 160px;
50 | right:10px;
51 | //background-color: lightgrey;
52 | }
53 |
54 | #matrix {
55 | position: fixed;
56 | top: 100px;
57 | bottom: 10px;
58 | left: 180px;
59 | right: 250px;
60 | }
61 |
62 | #columns {
63 | position: absolute;
64 | overflow: hidden;
65 |
66 | .col {
67 | position: absolute;
68 | background-color: palegreen;
69 | text-align: center;
70 | overflow: hidden;
71 | font-size: 10px;
72 | }
73 |
74 | .rotate {
75 | transform: rotate(-90deg);
76 | transform-origin: left 0px;
77 | text-align: center;
78 | }
79 | }
80 |
81 |
82 | #rows {
83 | position: absolute;
84 | overflow-y: hidden;
85 |
86 | .row {
87 | position: absolute;
88 | background-color: paleturquoise;
89 | font-size: 10px;
90 |
91 | &:hover {
92 | box-sizing: border-box;
93 | border: solid darkgrey 2px;
94 | z-index: 1;
95 | }
96 | }
97 |
98 | .rotate {
99 | transform: rotate(-90deg);
100 | transform-origin: left 0px;
101 | text-align: center;
102 | }
103 | }
104 |
105 | #values {
106 | position: absolute;
107 | box-sizing: border-box;
108 | .value {
109 | position: absolute;
110 | &:hover {
111 | box-sizing: border-box;
112 | border: solid darkgrey 2px;
113 | z-index: 1;
114 | }
115 | }
116 | }
117 |
118 | #frame {
119 | overflow: scroll;
120 | position: fixed;
121 | bottom: 10px;
122 | right: 250px;
123 | }
124 |
125 | #results {
126 | font-size: 10px;
127 | position: relative;
128 | height: 500px;
129 | .value {
130 | position: absolute;
131 | //border: lightgrey solid 1px;
132 | }
133 |
134 |
135 |
136 | .rotate {
137 | transform: rotate(-90deg);
138 | transform-origin: left 0px;
139 | text-align: center;
140 | }
141 |
142 | .col {
143 | position: absolute;
144 | background-color: palegreen;
145 | text-align: center;
146 | }
147 |
148 | .colText {
149 | position: absolute;
150 | //background-color: lightblue;
151 | }
152 | }
153 |
154 | #selection-values {
155 | height: 40px;
156 | padding-left: 10px;
157 | }
158 |
159 | #selection {
160 | position: absolute;
161 | //width: 180px;
162 | right: 0;
163 | max-width: 200px;
164 |
165 | ul {
166 | list-style-type: none;
167 | padding: 0px;
168 | margin: 0px;
169 | overflow: auto;
170 | }
171 |
172 | ul li {
173 | border-radius: 5px;
174 | padding-left: 5px;
175 | padding-top: 2px;
176 |
177 | &:hover {
178 | background-color: lightgrey;
179 | }
180 |
181 | }
182 |
183 |
184 | .li-body {
185 | margin-left: 10px;
186 | }
187 | }
188 |
189 | .field-title {
190 | font-weight: bold;
191 | font-size: 10pt;
192 | }
193 |
--------------------------------------------------------------------------------
/app/assets/run.css:
--------------------------------------------------------------------------------
1 | .tabs {
2 | display: inline-block;
3 | /*----- Content of Tabs -----*/ }
4 | .tabs .tab-links {
5 | padding: 0;
6 | margin: 10px 0 0 0; }
7 | .tabs .tab-links:after {
8 | display: block;
9 | clear: both;
10 | content: ''; }
11 | .tabs .tab-links li {
12 | margin: 0px 5px;
13 | float: left;
14 | list-style: none; }
15 | .tabs .tab-links a {
16 | padding: 4px 8px;
17 | display: inline-block;
18 | border-radius: 3px 3px 0px 0px;
19 | color: #4c4c4c;
20 | transition: all linear 0.15s; }
21 | .tabs .tab-links a:hover {
22 | background: #f0f0f0;
23 | text-decoration: none; }
24 | .tabs li.active a, .tabs li.active a:hover {
25 | background: #e0e0e0;
26 | color: #4c4c4c; }
27 | .tabs .tab-content {
28 | padding: 0px;
29 | border-radius: 3px; }
30 | .tabs .tab {
31 | display: none; }
32 | .tabs .tab.active {
33 | display: block; }
34 |
35 | body {
36 | position: relative;
37 | font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
38 | font-size: 10pt; }
39 |
40 | .nav, .pagination, .carousel, .panel-title a {
41 | cursor: pointer; }
42 |
43 | div {
44 | margin: 0px; }
45 |
46 | .page {
47 | position: fixed;
48 | top: 0px;
49 | bottom: 0px;
50 | left: 0px;
51 | right: 0px; }
52 |
53 | .title {
54 | font-size: 16pt;
55 | font-weight: bold; }
56 |
57 | .color-menu {
58 | border: 1px solid black;
59 | background-color: #ccc; }
60 |
61 | .color-entry {
62 | margin: 2px;
63 | border: 1px solid #ccc; }
64 | .color-entry:hover {
65 | border: 1px solid black; }
66 |
67 | .swatch {
68 | display: block;
69 | width: 20px;
70 | height: 15px; }
71 |
72 | #data-table {
73 | font-size: 10pt; }
74 |
75 | .controls {
76 | top: 10px;
77 | left: 5px;
78 | width: 260px; }
79 | .controls ul {
80 | list-style-type: none;
81 | padding: 0px;
82 | margin: 0px; }
83 | .controls ul li {
84 | border-radius: 5px;
85 | padding-left: 15px;
86 | padding-top: 5px;
87 | margin-top: 10px;
88 | background-color: #f0f0f0; }
89 | .controls .li-title {
90 | margin-left: -10px;
91 | font-weight: bold;
92 | font-size: 10pt; }
93 | .controls .li-body {
94 | margin-left: 10px; }
95 | .controls .range-value {
96 | width: 50px;
97 | position: absolute;
98 | text-align: right; }
99 | .controls #cmap:hover {
100 | cursor: ns-resize; }
101 | .controls .job-color {
102 | display: inline-block;
103 | width: 20px;
104 | height: 10px;
105 | cursor: pointer; }
106 | .controls .jobs {
107 | font-size: 8pt; }
108 |
109 | .job-color {
110 | border: solid lightgrey 1px; }
111 | .job-color:hover {
112 | border: solid gray 1px; }
113 | .job-color.selected {
114 | border: solid black 1px; }
115 |
116 | .sub-label {
117 | width: 40px; }
118 |
119 | .info {
120 | margin-left: 0;
121 | margin-top: 0; }
122 |
123 | .counter {
124 | width: 250px;
125 | background-color: #fdf5ce; }
126 |
127 | #view {
128 | position: fixed;
129 | top: 0;
130 | bottom: 0;
131 | left: 280px;
132 | right: 0; }
133 |
134 | .views {
135 | position: fixed;
136 | top: 0;
137 | bottom: 0;
138 | left: 280px;
139 | right: 0; }
140 |
141 | .view {
142 | overflow: scroll; }
143 |
144 | .histogram .bar {
145 | shape-rendering: crispEdges;
146 | pointer-events: none; }
147 | .histogram .bar text {
148 | fill: #fff; }
149 | .histogram .axis text {
150 | font-size: 12px; }
151 | .histogram .axis path, .histogram .axis line {
152 | fill: none;
153 | stroke: #333;
154 | shape-rendering: crispEdges; }
155 | .histogram .brush .extent {
156 | fill: #ddd;
157 | fill-opacity: 1;
158 | stroke: #888;
159 | stroke-width: 1px;
160 | shape-rendering: crispEdges; }
161 | .histogram .externalHandler {
162 | fill: #ddd;
163 | fill-opacity: 1;
164 | stroke: #888;
165 | stroke-width: 1px;
166 | shape-rendering: crispEdges; }
167 |
168 | .slider {
169 | stroke: #333; }
170 | .slider .axis text {
171 | font-size: 12px; }
172 | .slider .axis line, .slider path {
173 | fill: none;
174 | stroke: #333;
175 | /*stroke-width: 2px;*/
176 | shape-rendering: crispEdges; }
177 | .slider .brush .extent {
178 | fill: #ddd;
179 | stroke: #888;
180 | stroke-width: 1px;
181 | /*fill-opacity: .25;*/
182 | shape-rendering: crispEdges; }
183 | .slider .resize {
184 | fill: #888; }
185 |
186 | .radial-view {
187 | display: inline-block; }
188 |
189 | .radial {
190 | display: inline-block;
191 | vertical-align: top;
192 | position: absolute; }
193 | .radial .group {
194 | fill: #fff;
195 | /*#f8f8f8;*/
196 | stroke: #ccc; }
197 | .radial .group text {
198 | stroke: none;
199 | fill: black; }
200 | .radial .group text:hover {
201 | cursor: pointer;
202 | fill: red;
203 | font-size: large; }
204 | .radial .group.selected text {
205 | font-size: large; }
206 | .radial .group.selected path {
207 | stroke: #000;
208 | stroke-width: 2px; }
209 | .radial .connector {
210 | fill: #a0a0a0;
211 | stroke: none; }
212 | .radial .connection {
213 | stroke-opacity: 1;
214 | stroke-width: 0.5;
215 | fill: none; }
216 | .radial .connection.fade {
217 | stroke-opacity: 0.3;
218 | stroke: lightgray; }
219 | .radial .connection.highlight {
220 | stroke-width: 4; }
221 |
222 | .first {
223 | stroke-dasharray: 50%; }
224 |
225 | .router .nodes {
226 | fill: #eee;
227 | stroke-width: 1px;
228 | stroke: none; }
229 | .router circle {
230 | stroke-width: 2px;
231 | r: 2px; }
232 | .router circle:hover {
233 | stroke-width: 4px; }
234 | .router circle:active {
235 | r: 4px; }
236 | .router circle.fade {
237 | opacity: 0.3; }
238 | .router.fade {
239 | opacity: 0.3; }
240 |
241 | #bg-div {
242 | display: inline-block; }
243 | #bg-div #bg-button {
244 | position: absolute;
245 | right: 10px; }
246 | #bg-div.closed canvas {
247 | display: none; }
248 |
249 | .matrix line {
250 | fill: none;
251 | stroke: lightgray;
252 | stroke-width: 1px;
253 | shape-rendering: crispEdges;
254 | opacity: 0.4; }
255 |
256 | .node {
257 | stroke: white;
258 | stroke-width: 1.5px; }
259 |
260 | .edge {
261 | stroke-width: 1.5px;
262 | stroke-opacity: 0.6; }
263 |
264 | .graph-ctrl {
265 | padding-left: 40px; }
266 |
267 | .overlay {
268 | fill: none;
269 | pointer-events: all; }
270 |
271 | /* group view */
272 | .group-view .green {
273 | stroke-width: 1px;
274 | stroke: green;
275 | shape-rendering: crispEdges; }
276 |
277 | .closeup {
278 | padding-bottom: 10px; }
279 | .closeup .closeup-group {
280 | fill: lightgray; }
281 | .closeup .closeup-group rect.fade {
282 | fill-opacity: 0.3; }
283 | .closeup .canvas {
284 | position: fixed;
285 | padding-left: 30px;
286 | vertical-align: top;
287 | fill: lightblue; }
288 |
289 | /*# sourceMappingURL=run.css.map */
290 |
--------------------------------------------------------------------------------
/app/assets/run.css.map:
--------------------------------------------------------------------------------
1 | {
2 | "version": 3,
3 | "mappings": "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",
4 | "sources": ["tabs.scss","run.scss"],
5 | "names": [],
6 | "file": "run.css"
7 | }
8 |
--------------------------------------------------------------------------------
/app/assets/run.scss:
--------------------------------------------------------------------------------
1 | @import "tabs";
2 |
3 | body {
4 | position: relative;
5 | font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
6 | font-size: 10pt;
7 | }
8 |
9 | .nav, .pagination, .carousel, .panel-title a { cursor: pointer; }
10 |
11 | div {
12 | margin: 0px;
13 | }
14 |
15 | .page {
16 | position: fixed;
17 | top: 0px;
18 | bottom: 0px;
19 | left: 0px;
20 | right: 0px;
21 | }
22 |
23 | .title {
24 | font-size: 16pt;
25 | font-weight: bold;
26 | }
27 |
28 | .color-menu {
29 | border: 1px solid black;
30 | background-color: #ccc;
31 | }
32 |
33 | .color-entry {
34 | margin: 2px;
35 | border: 1px solid #ccc;
36 | &:hover {
37 | border: 1px solid black;
38 | }
39 | }
40 |
41 | .swatch {
42 | //display: inline-block;
43 | display: block;
44 | width: 20px;
45 | height: 15px;
46 | }
47 |
48 | #data-table {
49 | font-size: 10pt;
50 | }
51 |
52 | .controls {
53 | // position: fixed;
54 | top: 10px;
55 | left: 5px;
56 | width: 260px;
57 |
58 | ul {
59 | list-style-type: none;
60 | padding: 0px;
61 | margin: 0px;
62 | }
63 |
64 | ul li {
65 | border-radius: 5px;
66 | padding-left: 15px;
67 | padding-top: 5px;
68 | margin-top: 10px;
69 | background-color: #f0f0f0;
70 |
71 | }
72 |
73 | .li-title {
74 | // font-style: italic;
75 | margin-left: -10px;
76 | font-weight: bold;
77 | font-size: 10pt;
78 | }
79 |
80 | .li-body {
81 | margin-left: 10px;
82 | }
83 |
84 | .range-value {
85 | width:50px;
86 | position: absolute;
87 | text-align: right;
88 | }
89 |
90 |
91 | #cmap {
92 | &:hover {
93 | cursor: ns-resize;
94 | }
95 | }
96 |
97 | .job-color {
98 | display: inline-block;
99 | width: 20px;
100 | height: 10px;
101 | cursor: pointer;
102 | }
103 |
104 | .jobs{
105 | font-size: 8pt;
106 | }
107 |
108 |
109 | }
110 |
111 | .job-color {
112 | border: solid lightgrey 1px ;
113 |
114 | &:hover {
115 | border: solid gray 1px;
116 | }
117 |
118 | &.selected {
119 | border: solid black 1px;
120 | }
121 | }
122 |
123 | .sub-label {
124 | width: 40px;
125 | }
126 |
127 | .info {
128 | margin-left: 0;
129 | margin-top: 0;
130 | }
131 |
132 |
133 | .counter {
134 | width: 250px;
135 | background-color: #fdf5ce;
136 | }
137 |
138 | #view {
139 | position: fixed;
140 | top: 10px;
141 | bottom: 0;
142 | left: 280px;
143 | right: 0;
144 | }
145 |
146 | .views {
147 | position: fixed;
148 | top: 0;
149 | bottom: 0;
150 | left: 280px;
151 | right: 0;
152 | }
153 |
154 | .view {
155 | overflow: scroll
156 | }
157 |
158 | .histogram {
159 |
160 | .bar {
161 | shape-rendering: crispEdges;
162 | pointer-events: none;
163 | }
164 |
165 | .bar text {
166 | fill: #fff;
167 | }
168 |
169 | .axis text {
170 | font-size: 12px;
171 | }
172 |
173 | .axis path, .axis line {
174 | fill: none;
175 | stroke: #333;
176 | shape-rendering: crispEdges;
177 | }
178 |
179 | .brush .extent {
180 | fill: #ddd;
181 | fill-opacity: 1;
182 | stroke: #888;
183 | stroke-width: 1px;
184 | shape-rendering: crispEdges;
185 | }
186 |
187 | .externalHandler {
188 | fill: #ddd;
189 | fill-opacity: 1;
190 | stroke: #888;
191 | stroke-width: 1px;
192 | shape-rendering: crispEdges;
193 | }
194 | }
195 |
196 | .slider {
197 | stroke: #333;
198 |
199 | .axis text {
200 | font-size: 12px;
201 | }
202 | .axis line, path {
203 | fill: none;
204 | stroke: #333;
205 | /*stroke-width: 2px;*/
206 | shape-rendering: crispEdges;
207 | }
208 |
209 | .brush .extent {
210 | fill: #ddd;
211 | stroke: #888;
212 | stroke-width: 1px;
213 | /*fill-opacity: .25;*/
214 | shape-rendering: crispEdges;
215 | }
216 |
217 | .resize {
218 | fill: #888;
219 | }
220 | }
221 |
222 | .radial-view {
223 | display: inline-block;
224 | }
225 |
226 |
227 | .radial {
228 | display: inline-block;
229 | vertical-align: top;
230 | position: absolute;
231 |
232 | .group {
233 | fill: #fff; /*#f8f8f8;*/
234 | stroke: #ccc;
235 |
236 | text {
237 | stroke: none;
238 | fill: black;
239 | }
240 |
241 | text:hover {
242 | cursor:pointer;
243 | fill: red;
244 | font-size: large;
245 | }
246 |
247 | //&.:hover {
248 | // cursor:pointer;
249 | //
250 | // text {
251 | // fill: red;
252 | // font-size: large;
253 | // }
254 | //
255 | // path {
256 | // stroke: #808080;
257 | // stroke-width: 1px;
258 | // }
259 | //}
260 |
261 | &.selected {
262 | text {
263 | font-size: large;
264 | }
265 |
266 | path {
267 | //fill: #d8d8d8;
268 | stroke: #000;
269 | stroke-width: 2px;
270 | }
271 | }
272 |
273 | }
274 |
275 |
276 |
277 | .connector {
278 | fill: #a0a0a0;
279 | stroke: none;
280 | }
281 |
282 | .connection {
283 | // stroke: steelblue;
284 | stroke-opacity: 1;
285 | stroke-width: 0.5;
286 | fill: none;
287 | // pointer-events: none;
288 |
289 | &.fade {
290 | stroke-opacity: 0.3;
291 | stroke: lightgray;
292 | }
293 | &.highlight {
294 | stroke-width: 4;
295 | //stroke-dasharray: 50%;
296 | }
297 | }
298 |
299 | }
300 |
301 | .first {
302 | stroke-dasharray: 50%;
303 | }
304 |
305 | .router {
306 | .nodes {
307 | fill: #eee;
308 | stroke-width: 1px;
309 | stroke: none;
310 | }
311 |
312 | circle {
313 | stroke-width: 2px;
314 | r: 2px;
315 |
316 | &:hover {
317 | stroke-width: 4px;
318 | }
319 |
320 | &:active {
321 | r: 4px;
322 | }
323 |
324 | &.fade {
325 | opacity: 0.3;
326 | }
327 | }
328 |
329 | &.fade {
330 | opacity: 0.3;
331 | }
332 |
333 | }
334 |
335 | #bg-div {
336 | display: inline-block;
337 |
338 | #bg-button {
339 | position: absolute;
340 | right: 10px;
341 | }
342 |
343 | &.closed {
344 | canvas {
345 | display: none;
346 | }
347 |
348 | }
349 | }
350 |
351 |
352 |
353 | .canvas {
354 | }
355 |
356 | .matrix {
357 | line {
358 | fill: none;
359 | stroke: lightgray;
360 | stroke-width: 1px;
361 | shape-rendering: crispEdges;
362 | opacity: 0.4;
363 | }
364 | }
365 |
366 | .node {
367 | // fill: steelblue;
368 | stroke: white;
369 | stroke-width: 1.5px;
370 | }
371 |
372 | .edge {
373 | // stroke: #ddd;
374 | stroke-width: 1.5px;
375 | stroke-opacity: 0.6;
376 | }
377 |
378 | .graph-ctrl {
379 | padding-left: 40px;
380 | }
381 |
382 | .overlay {
383 | fill: none;
384 | pointer-events: all;
385 | }
386 |
387 | /* group view */
388 | .group-view {
389 | .green {
390 | stroke-width: 1px;
391 | stroke: green;
392 | shape-rendering: crispEdges;
393 | }
394 | }
395 |
396 | .closeup {
397 | //background-color: #eeff6e;
398 | padding-bottom: 10px;
399 |
400 | .closeup-group {
401 | fill: lightgray;
402 |
403 | rect.fade {
404 | fill-opacity: 0.3;
405 | }
406 | }
407 |
408 | .canvas {
409 | position: fixed;
410 | padding-left: 30px;
411 | vertical-align: top;
412 | fill: lightblue;
413 | }
414 | }
--------------------------------------------------------------------------------
/app/assets/tabs.scss:
--------------------------------------------------------------------------------
1 |
2 | .tabs {
3 | // width: 100%;
4 | display: inline-block;
5 |
6 | .tab-links {
7 | padding: 0;
8 | margin: 10px 0 0 0;
9 | }
10 | .tab-links:after {
11 | display: block;
12 | clear: both;
13 | content: '';
14 | }
15 |
16 | .tab-links li {
17 | margin: 0px 5px;
18 | float: left;
19 | list-style: none;
20 | }
21 |
22 | .tab-links a {
23 | padding: 4px 8px;
24 | display: inline-block;
25 | border-radius: 3px 3px 0px 0px;
26 | // background: #7FB5DA;
27 | // font-size: 14px;
28 | // font-weight: 600;
29 | color: #4c4c4c;
30 | transition: all linear 0.15s;
31 | }
32 |
33 | .tab-links a:hover {
34 | background: #f0f0f0;
35 | text-decoration: none;
36 | }
37 |
38 | li.active a, li.active a:hover {
39 | background: #e0e0e0;
40 | color: #4c4c4c;
41 | }
42 |
43 | /*----- Content of Tabs -----*/
44 | .tab-content {
45 | padding: 0px;
46 | border-radius: 3px;
47 | // box-shadow: -1px 1px 1px rgba(0, 0, 0, 0.15);
48 | // background: #fff;
49 | }
50 |
51 | .tab {
52 | display: none;
53 | }
54 |
55 | .tab.active {
56 | display: block;
57 | }
58 |
59 | };
--------------------------------------------------------------------------------
/app/compare.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Simulation Runs
8 |
9 |
14 |
15 |
16 |
17 | Config:
18 | Field :
19 | Function:
20 |
21 |
22 |
23 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
Freeze
37 |
38 |
39 |
40 |
41 |
Values
42 |
43 |
44 |
45 |
46 |
Simulations
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
--------------------------------------------------------------------------------
/app/data/edison/runs-edison.csv:
--------------------------------------------------------------------------------
1 | name,counters,jobs,comm
{256-184},edison/2014-09-22-09-39-51/standard/dnd_net_counters.csv,edison/2014-09-22-09-39-51/standard/dnd_jobs.csv,edison/comm-graphs/milc.256nodes.csv
{256-206},edison/2014-09-08-02-05-59/standard/dnd_net_counters.csv,edison/2014-09-08-02-05-59/standard/dnd_jobs.csv,edison/comm-graphs/milc.256nodes.csv
{256-208},edison/2014-09-22-06-46-25/standard/dnd_net_counters.csv,edison/2014-09-22-06-46-25/standard/dnd_jobs.csv,edison/comm-graphs/milc.256nodes.csv
{256-215},edison/2014-09-12-17-47-31/standard/dnd_net_counters.csv,edison/2014-09-12-17-47-31/standard/dnd_jobs.csv,edison/comm-graphs/milc.256nodes.csv
{256-219},edison/2014-09-20-05-29-50/standard/dnd_net_counters.csv,edison/2014-09-20-05-29-50/standard/dnd_jobs.csv,edison/comm-graphs/milc.256nodes.csv
{256-233},edison/2014-09-09-10-18-03/standard/dnd_net_counters.csv,edison/2014-09-09-10-18-03/standard/dnd_jobs.csv,edison/comm-graphs/milc.256nodes.csv
{256-246},edison/2014-09-08-17-59-25/standard/dnd_net_counters.csv,edison/2014-09-08-17-59-25/standard/dnd_jobs.csv,edison/comm-graphs/milc.256nodes.csv
{256-268},edison/2014-09-07-14-46-43/standard/dnd_net_counters.csv,edison/2014-09-07-14-46-43/standard/dnd_jobs.csv,edison/comm-graphs/milc.256nodes.csv
{256-288},edison/2014-09-11-09-28-32/standard/dnd_net_counters.csv,edison/2014-09-11-09-28-32/standard/dnd_jobs.csv,edison/comm-graphs/milc.256nodes.csv
{256-292},edison/2014-09-05-13-45-14/standard/dnd_net_counters.csv,edison/2014-09-05-13-45-14/standard/dnd_jobs.csv,edison/comm-graphs/milc.256nodes.csv
{256-297},edison/2014-09-19-05-48-35/standard/dnd_net_counters.csv,edison/2014-09-19-05-48-35/standard/dnd_jobs.csv,edison/comm-graphs/milc.256nodes.csv
{256-305},edison/2014-09-01-10-45-18/standard/dnd_net_counters.csv,edison/2014-09-01-10-45-18/standard/dnd_jobs.csv,edison/comm-graphs/milc.256nodes.csv
{256-322},edison/2014-09-03-15-46-29/standard/dnd_net_counters.csv,edison/2014-09-03-15-46-29/standard/dnd_jobs.csv,edison/comm-graphs/milc.256nodes.csv
{256-332},edison/2014-09-23-09-41-34/standard/dnd_net_counters.csv,edison/2014-09-23-09-41-34/standard/dnd_jobs.csv,edison/comm-graphs/milc.256nodes.csv
{256-334},edison/2014-09-01-22-41-42/standard/dnd_net_counters.csv,edison/2014-09-01-22-41-42/standard/dnd_jobs.csv,edison/comm-graphs/milc.256nodes.csv
{256-334},edison/2014-09-16-15-58-16/standard/dnd_net_counters.csv,edison/2014-09-16-15-58-16/standard/dnd_jobs.csv,edison/comm-graphs/milc.256nodes.csv
{256-378},edison/2014-09-18-17-12-34/standard/dnd_net_counters.csv,edison/2014-09-18-17-12-34/standard/dnd_jobs.csv,edison/comm-graphs/milc.256nodes.csv
{256-400},edison/2014-09-02-18-17-45/standard/dnd_net_counters.csv,edison/2014-09-02-18-17-45/standard/dnd_jobs.csv,edison/comm-graphs/milc.256nodes.csv
{256-419},edison/2014-09-18-16-45-22/standard/dnd_net_counters.csv,edison/2014-09-18-16-45-22/standard/dnd_jobs.csv,edison/comm-graphs/milc.256nodes.csv
{256-544},edison/2014-09-21-12-30-53/standard/dnd_net_counters.csv,edison/2014-09-21-12-30-53/standard/dnd_jobs.csv,edison/comm-graphs/milc.256nodes.csv
{256-654},edison/2014-09-14-14-08-58/standard/dnd_net_counters.csv,edison/2014-09-14-14-08-58/standard/dnd_jobs.csv,edison/comm-graphs/milc.256nodes.csv
{256-661},edison/2014-09-14-15-51-56/standard/dnd_net_counters.csv,edison/2014-09-14-15-51-56/standard/dnd_jobs.csv,edison/comm-graphs/milc.256nodes.csv
{384-177},edison/2014-09-20-05-58-07/standard/dnd_net_counters.csv,edison/2014-09-20-05-58-07/standard/dnd_jobs.csv,edison/comm-graphs/milc.384nodes.csv
{384-182},edison/2014-09-20-05-19-01/standard/dnd_net_counters.csv,edison/2014-09-20-05-19-01/standard/dnd_jobs.csv,edison/comm-graphs/milc.384nodes.csv
{384-187},edison/2014-09-23-07-38-12/standard/dnd_net_counters.csv,edison/2014-09-23-07-38-12/standard/dnd_jobs.csv,edison/comm-graphs/milc.384nodes.csv
{384-192},edison/2014-09-20-05-39-04/standard/dnd_net_counters.csv,edison/2014-09-20-05-39-04/standard/dnd_jobs.csv,edison/comm-graphs/milc.384nodes.csv
{384-203},edison/2014-09-12-19-04-33/standard/dnd_net_count./2015-09-18-17-25-18/xtdb2proc.outrs.csv,edison/2014-09-12-19-04-33/standard/dnd_jobs.csv,edison/comm-graphs/milc.384nodes.csv
{384-208},edison/2014-09-12-19-39-57/standard/dnd_net_counters.csv,edison/2014-09-12-19-39-57/standard/dnd_jobs.csv,edison/comm-graphs/milc.384nodes.csv
{384-214},edison/2014-09-21-13-04-13/standard/dnd_net_counters.csv,edison/2014-09-21-13-04-13/standard/dnd_jobs.csv,edison/comm-graphs/milc.384nodes.csv
{384-218},edison/2014-09-10-19-07-11/standard/dnd_net_counters.csv,edison/2014-09-10-19-07-11/standard/dnd_jobs.csv,edison/comm-graphs/milc.384nodes.csv
{384-227},edison/2014-09-22-07-14-07/standard/dnd_net_counters.csv,edison/2014-09-22-07-14-07/standard/dnd_jobs.csv,edison/comm-graphs/milc.384nodes.csv
{384-231},edison/2014-09-01-23-05-04/standard/dnd_net_counters.csv,edison/2014-09-01-23-05-04/standard/dnd_jobs.csv,edison/comm-graphs/milc.384nodes.csv
{384-236},edison/2014-09-08-16-03-58/standard/dnd_net_counters.csv,edison/2014-09-08-16-03-58/standard/dnd_jobs.csv,edison/comm-graphs/milc.384nodes.csv
{384-253},edison/2014-09-07-14-48-27/standard/dnd_net_counters.csv,edison/2014-09-07-14-48-27/standard/dnd_jobs.csv,edison/comm-graphs/milc.384nodes.csv
{384-278},edison/2014-09-17-19-00-59/standard/dnd_net_counters.csv,edison/2014-09-17-19-00-59/standard/dnd_jobs.csv,edison/comm-graphs/milc.384nodes.csv
{384-278},edison/2014-09-19-05-23-04/standard/dnd_net_counters.csv,edison/2014-09-19-05-23-04/standard/dnd_jobs.csv,edison/comm-graphs/milc.384nodes.csv
{384-279},edison/2014-09-08-18-56-36/standard/dnd_net_counters.csv,edison/2014-09-08-18-56-36/standard/dnd_jobs.csv,edison/comm-graphs/milc.384nodes.csv
{384-283},edison/2014-09-24-03-43-41/standard/dnd_net_counters.csv,edison/2014-09-24-03-43-41/standard/dnd_jobs.csv,edison/comm-graphs/milc.384nodes.csv
{384-304},edison/2014-09-02-20-56-08/standard/dnd_net_counters.csv,edison/2014-09-02-20-56-08/standard/dnd_jobs.csv,edison/comm-graphs/milc.384nodes.csv
{384-310},edison/2014-09-01-10-50-59/standard/dnd_net_counters.csv,edison/2014-09-01-10-50-59/standard/dnd_jobs.csv,edison/comm-graphs/milc.384nodes.csv
{384-340},edison/2014-09-03-16-58-50/standard/dnd_net_counters.csv,edison/2014-09-03-16-58-50/standard/dnd_jobs.csv,edison/comm-graphs/milc.384nodes.csv
{384-595},edison/2014-09-14-16-36-45/standard/dnd_net_counters.csv,edison/2014-09-14-16-36-45/standard/dnd_jobs.csv,edison/comm-graphs/milc.384nodes.csv
{384-610},edison/2014-09-05-16-16-52/standard/dnd_net_counters.csv,edison/2014-09-05-16-16-52/standard/dnd_jobs.csv,edison/comm-graphs/milc.384nodes.csv
{384-633},edison/2014-09-14-16-04-02/standard/dnd_net_counters.csv,edison/2014-09-14-16-04-02/standard/dnd_jobs.csv,edison/comm-graphs/milc.384nodes.csv
{384-730},edison/2014-09-09-20-31-06/standard/dnd_net_counters.csv,edison/2014-09-09-20-31-06/standard/dnd_jobs.csv,edison/comm-graphs/milc.384nodes.csv
{512-198},edison/2014-09-10-19-10-40/standard/dnd_net_counters.csv,edison/2014-09-10-19-10-40/standard/dnd_jobs.csv,edison/comm-graphs/milc.512nodes.csv
{512-211},edison/2014-09-12-19-53-40/standard/dnd_net_counters.csv,edison/2014-09-12-19-53-40/standard/dnd_jobs.csv,edison/comm-graphs/milc.512nodes.csv
{512-222},edison/2014-09-21-13-26-42/standard/dnd_net_counters.csv,edison/2014-09-21-13-26-42/standard/dnd_jobs.csv,edison/comm-graphs/milc.512nodes.csv
{512-223},edison/2014-09-12-19-24-56/standard/dnd_net_counters.csv,edison/2014-09-12-19-24-56/standard/dnd_jobs.csv,edison/comm-graphs/milc.512nodes.csv
{512-230},edison/2014-09-21-06-28-47/standard/dnd_net_counters.csv,edison/2014-09-21-06-28-47/standard/dnd_jobs.csv,edison/comm-graphs/milc.512nodes.csv
{512-249},edison/2014-09-24-04-43-45/standard/dnd_net_counters.csv,edison/2014-09-24-04-43-45/standard/dnd_jobs.csv,edison/comm-graphs/milc.512nodes.csv
{512-260},edison/2014-09-05-19-27-45/standard/dnd_net_counters.csv,edison/2014-09-05-19-27-45/standard/dnd_jobs.csv,edison/comm-graphs/milc.512nodes.csv
{512-261},edison/2014-09-22-08-35-54/standard/dnd_net_counters.csv,edison/2014-09-22-08-35-54/standard/dnd_jobs.csv,edison/comm-graphs/milc.512nodes.csv
{512-264},edison/2014-09-05-19-11-04/standard/dnd_net_counters.csv,edison/2014-09-05-19-11-04/standard/dnd_jobs.csv,edison/comm-graphs/milc.512nodes.csv
{512-273},edison/2014-09-07-15-06-58/standard/dnd_net_counters.csv,edison/2014-09-07-15-06-58/standard/dnd_jobs.csv,edison/comm-graphs/milc.512nodes.csv
{512-281},edison/2014-09-08-21-55-30/standard/dnd_net_counters.csv,edison/2014-09-08-21-55-30/standard/dnd_jobs.csv,edison/comm-graphs/milc.512nodes.csv
{512-284},edison/2014-09-23-10-16-28/standard/dnd_net_counters.csv,edison/2014-09-23-10-16-28/standard/dnd_jobs.csv,edison/comm-graphs/milc.512nodes.csv
{512-292},edison/2014-09-01-23-27-40/standard/dnd_net_counters.csv,edison/2014-09-01-23-27-40/standard/dnd_jobs.csv,edison/comm-graphs/milc.512nodes.csv
{512-313},edison/2014-09-19-05-50-45/standard/dnd_net_counters.csv,edison/2014-09-19-05-50-45/standard/dnd_jobs.csv,edison/comm-graphs/milc.512nodes.csv
{512-324},edison/2014-09-08-23-31-23/standard/dnd_net_counters.csv,edison/2014-09-08-23-31-23/standard/dnd_jobs.csv,edison/comm-graphs/milc.512nodes.csv
{512-346},edison/2014-09-09-20-59-35/standard/dnd_net_counters.csv,edison/2014-09-09-20-59-35/standard/dnd_jobs.csv,edison/comm-graphs/milc.512nodes.csv
{512-350},edison/2014-09-01-12-50-30/standard/dnd_net_counters.csv,edison/2014-09-01-12-50-30/standard/dnd_jobs.csv,edison/comm-graphs/milc.512nodes.csv
{512-413},edison/2014-09-18-16-50-03/standard/dnd_net_counters.csv,edison/2014-09-18-16-50-03/standard/dnd_jobs.csv,edison/comm-graphs/milc.512nodes.csv
{512-441},edison/2014-09-02-21-17-32/standard/dnd_net_counters.csv,edison/2014-09-02-21-17-32/standard/dnd_jobs.csv,edison/comm-graphs/milc.512nodes.csv
{512-610},edison/2014-09-14-16-56-28/standard/dnd_net_counters.csv,edison/2014-09-14-16-56-28/standard/dnd_jobs.csv,edison/comm-graphs/milc.512nodes.csv
{512-618},edison/2014-09-21-12-30-46/standard/dnd_net_counters.csv,edison/2014-09-21-12-30-46/standard/dnd_jobs.csv,edison/comm-graphs/milc.512nodes.csv
{512-645},edison/2014-09-21-11-36-49/standard/dnd_net_counters.csv,edison/2014-09-21-11-36-49/standard/dnd_jobs.csv,edison/comm-graphs/milc.512nodes.csv
{512-690},edison/2014-09-14-16-30-21/standard/dnd_net_counters.csv,edison/2014-09-14-16-30-21/standard/dnd_jobs.csv,edison/comm-graphs/milc.512nodes.csv
--------------------------------------------------------------------------------
/app/data/pacvis/fix.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | find links/linkdata/4b-2grn -name "*.csv" | sed \
3 | -e 's/\(.*\/\)\([^\/]*\)/pushd \1; ln -s \2 \2Z; popd/' \
4 | -e 's/links-\([^\.]*\)[^ ]*\(\-.\)\.csvZ/links-\1\2.csv/' \
5 | -e 's/links-\([^\.]*\)[^ ]*\.csvZ/links-\1.csv/' \
6 | -e 's/ \([^\.]*\)[^ ]*\(\-.\).csvZ/ \1\2.csv/' \
7 | -e 's/ \([^\.]*\)[^ ]*.csvZ/ \1.csv/' > l
8 |
9 | source l;
10 | rm l
11 |
--------------------------------------------------------------------------------
/app/data/sim/alldata.csv:
--------------------------------------------------------------------------------
1 | /Users/yarden/data/piper/alldata.csv
--------------------------------------------------------------------------------
/app/data/sim/dump_net.py:
--------------------------------------------------------------------------------
1 | __author__ = 'yarden'
2 |
3 | import os
4 | import re
5 | import csv
6 | from sys import argv
7 | from collections import namedtuple
8 | import yaml
9 |
10 | from utils.eyaml import eyaml_load
11 |
12 | NodeCoord = namedtuple('NodeCoord', 'group row col node')
13 |
14 | MPI_PATTERN = '.*\.mpiP'
15 | PROC_PATTERN = 'xtdb2proc'
16 | QSTAT_PATTERN = 'qstat.*before'
17 | NETTILE_PATTERN = 'networktiles.yaml'
18 | PROCTILE_PATTERN = 'proctiles.yaml'
19 |
20 | COUNTERS_OUT = 'dnd_net_counters.csv'
21 | JOBS_OUT = 'dnd_jobs.csv'
22 |
23 | jobid = None
24 | mpirank = []
25 | nodes = {}
26 | topology = {}
27 | dir_name = None
28 |
29 | edison_pattern = re.compile('l(\d)(\d).(\d+):(\d+):(\d+)')
30 |
31 |
32 | def dump(path):
33 | global jobid, files, mpirank, nodes, topology, dir_name
34 |
35 | jobid = None
36 | mpirank = []
37 | nodes = {}
38 | topology = {}
39 |
40 | dir_name = path
41 | print path
42 | files = os.listdir(dir_name)
43 | # sig = os.path.basename(dir_name)
44 | # if string.digits.find(sig[0]) == -1:
45 | # sig = os.path.basename(os.path.dirname(dir_name))
46 |
47 | load_topology()
48 | jobid = parse_job()
49 | parse_mpi()
50 | parse_proc()
51 | parse_net()
52 | parse_qstat()
53 | write_jobs()
54 |
55 |
56 | def parse(field):
57 | m = edison_pattern.search(field)
58 | if m is None:
59 | return None
60 | return int(m.group(3)), int(m.group(4)), int(m.group(5)), int(m.group(1))*8+int(m.group(2))
61 |
62 |
63 | def load_topology():
64 | with open('assets/interconnect.txt') as r:
65 | for line in r:
66 | fields = line.strip().split()
67 | color = fields[1][0] if fields[1] != 'black' else 'k'
68 | if color != 'p' and fields[3] != 'unused':
69 | sg, sr, sc, sp = parse(fields[0])
70 | dg, dr, dc, dp = parse(fields[3])
71 | topology[(sg, sr, sc, sp)] = (dg, dr, dc, color)
72 |
73 |
74 | def find_file(pattern):
75 | for filename in files:
76 | if re.match(pattern, filename):
77 | return local(filename)
78 | raise IOError('file not found: '+pattern)
79 |
80 |
81 | def local(name):
82 | return os.path.join(dir_name, name)
83 |
84 |
85 | def find_line(f, text):
86 | while True:
87 | line = f.readline()
88 | if line == '':
89 | raise IOError('reached EOF while searching for '+text)
90 | if line.startswith(text):
91 | return line
92 |
93 |
94 | def physical_to_logical(row, col, cage, slot, cpu):
95 | return NodeCoord(row*4+col/2, cage+(col % 2)*3, slot, cpu)
96 |
97 |
98 | def mpirank_to_router(rank):
99 | (g, r, c, n) = nodes[mpirank[rank]][1]
100 | return g, r, c
101 |
102 |
103 | # def parse_job():
104 | # filename = find_file(NETTILE_PATTERN)
105 | # ignore, meta, net = eyaml_load(filename)
106 | # job = meta['jobid']
107 | # job = job[:job.index('.')]
108 | # return job
109 |
110 | def parse_job():
111 | filename = find_file(NETTILE_PATTERN)
112 | with open(filename, 'r') as f:
113 | loader = yaml.SafeLoader(f)
114 | key = loader.get_data()
115 | meta = loader.get_data()
116 | job = meta[0]['jobid']
117 | job = job[:job.index('.')]
118 | return job
119 |
120 | def parse_mpi():
121 | with open(find_file(MPI_PATTERN), 'r') as f:
122 | # parse mpi tasks
123 | line = find_line(f, '@ MPI Task Assignment')
124 | while line.startswith('@ MPI Task Assignment'):
125 | rank, nid = line[line.index(':') + 1:].strip().split(' ')
126 | mpirank.append(str(int(nid[3:])))
127 | line = f.readline()
128 |
129 |
130 | def parse_qstat():
131 | # jobs = []
132 | with open(find_file(QSTAT_PATTERN), 'r') as f:
133 | for i in range(5):
134 | next(f)
135 |
136 | status = None
137 | jid = None
138 | for line in f:
139 | line = line.strip()
140 | if not line.startswith('+'):
141 | fields = line.split()
142 |
143 | status = fields[9]
144 | if status is 'R':
145 | jid = fields[0][:fields[0].index('.')]
146 | job = (jid, fields[3], int(fields[5]))
147 | # jobs.append(job)
148 | parse_node_list(fields[11], jid)
149 | elif status is 'R':
150 | # a continuation line
151 | parse_node_list(line, jid)
152 |
153 | # return sorted(jobs, key=lambda j: j.count, reverse=True)
154 |
155 |
156 | def parse_node_list(line, jid):
157 | fields = line.split('+')
158 | for pair in fields:
159 | if pair is not '':
160 | nid = pair.split('/')[0]
161 | node = nodes[nid]
162 | if node[3] == '':
163 | nodes[nid] = (node[0], node[1], node[2], jid)
164 |
165 |
166 | def parse_proc():
167 | with open(find_file(PROC_PATTERN), 'r') as f:
168 | for i in range(7):
169 | next(f)
170 |
171 | for line in f:
172 | fields = line.strip().split(',')
173 |
174 | node = int(fields[0].split('=')[1])
175 | slot = int(fields[1].split('=')[1])
176 | cage = int(fields[2].split('=')[1])
177 | col = int(fields[4].split('=')[1])
178 | row = int(fields[5].split('=')[1])
179 |
180 | # print (row,col,cage,slot, node), 'g:', row*4+col/2
181 | status = fields[11].split('=')[1].split('\'')[1]
182 | # node_type = fields[12].split('=')[1].split('\'')[1]
183 | node_id = fields[14].split('=')[1]
184 |
185 | nodes[node_id] = (node_id, physical_to_logical(row, col, cage, slot, node), status, '')
186 |
187 |
188 | counters_mapping = [
189 | ['flits', None],
190 | ['stalls', None],
191 | ['stalls/flit', None],
192 | ['flits_vc_0', 'INQ_PRF_INCOMING_FLIT_VC0'],
193 | ['flits_vc_1', 'INQ_PRF_INCOMING_FLIT_VC1'],
194 | ['flits_vc_2', 'INQ_PRF_INCOMING_FLIT_VC2'],
195 | ['flits_vc_3', 'INQ_PRF_INCOMING_FLIT_VC3'],
196 | ['flits_vc_4', 'INQ_PRF_INCOMING_FLIT_VC4'],
197 | ['flits_vc_5', 'INQ_PRF_INCOMING_FLIT_VC5'],
198 | ['flits_vc_6', 'INQ_PRF_INCOMING_FLIT_VC6'],
199 | ['flits_vc_7', 'INQ_PRF_INCOMING_FLIT_VC7'],
200 | ['stalls_vc_0', 'INQ_PRF_INCOMING_PKT_VC0_FILTER_FLIT0_CNT'],
201 | ['stalls_vc_1', 'INQ_PRF_INCOMING_PKT_VC1_FILTER_FLIT1_CNT'],
202 | ['stalls_vc_2', 'INQ_PRF_INCOMING_PKT_VC2_FILTER_FLIT2_CNT'],
203 | ['stalls_vc_3', 'INQ_PRF_INCOMING_PKT_VC3_FILTER_FLIT3_CNT'],
204 | ['stalls_vc_4', 'INQ_PRF_INCOMING_PKT_VC4_FILTER_FLIT4_CNT'],
205 | ['stalls_vc_5', 'INQ_PRF_INCOMING_PKT_VC5_FILTER_FLIT5_CNT'],
206 | ['stalls_vc_6', 'INQ_PRF_INCOMING_PKT_VC6_FILTER_FLIT6_CNT'],
207 | ['stalls_vc_7', 'INQ_PRF_INCOMING_PKT_VC7_FILTER_FLIT7_CNT'],
208 | ['stalls/flit_0', None],
209 | ['stalls/flit_1', None],
210 | ['stalls/flit_2', None],
211 | ['stalls/flit_3', None],
212 | ['stalls/flit_4', None],
213 | ['stalls/flit_5', None],
214 | ['stalls/flit_6', None],
215 | ['stalls/flit_7', None]
216 | ]
217 |
218 |
219 | def convert_counters(counters, indices):
220 | values = [counters[i] if i is not None else 0 for i in indices]
221 | values[0] = sum(values[3:11])
222 | values[1] = sum(values[11:19])
223 | values[2] = float(values[1])/values[0]
224 | for i in range(8):
225 | values[19+i] = float(values[11+i])/values[3+i] if values[3+i] > 0 else 0
226 | return values
227 |
228 |
229 | def parse_net():
230 | try:
231 | filename = find_file(NETTILE_PATTERN)
232 |
233 | ignore, meta, net = eyaml_load(filename)
234 | net = net.reshape(len(net)/40, 40)
235 |
236 | header = ['sg', 'sr', 'sc', 'dg', 'dr', 'dc', 'color']
237 | # header.extend(list(net.dtype.names)[3:])
238 | header.extend([x[0] for x in counters_mapping])
239 |
240 | names = list(net.dtype.names)[3:]
241 | indices = [names.index(x[1]) if x[1] is not None else None for x in counters_mapping]
242 |
243 | with open(local(COUNTERS_OUT), 'w') as f:
244 | writer = csv.writer(f)
245 | writer.writerow(header)
246 | routers = set()
247 | i = 0
248 | for j in range(net.shape[0]):
249 | rank = net[j][0][0]
250 | rid = mpirank_to_router(rank)
251 | if rid not in routers:
252 | routers.add(rid)
253 | g, r, c = rid
254 | for p in range(40):
255 | key = (g, r, c, p)
256 | # ignore empty counters (all 0) for non-existing links
257 | if key in topology:
258 | dg, dr, dc, color = topology[key]
259 | row = [g, r, c, dg, dr, dc, color]
260 | row.extend(convert_counters(list(net[j][p])[3:], indices))
261 | writer.writerow(row)
262 | except IOError:
263 | print dir_name, 'missing tile files'
264 |
265 |
266 | def write_jobs():
267 | map = {}
268 | with open(local(JOBS_OUT), 'w') as f:
269 | w = csv.writer(f)
270 | w.writerow(['g', 'r', 'c', 'n', 'job'])
271 | for i in mpirank:
272 | nid, coord, status, jid = nodes[i]
273 | if coord not in map:
274 | map[coord] = True
275 | g, r, c, n = coord
276 | w.writerow([g, r, c, n, jid])
277 |
278 |
279 | # process dir
280 | if len(argv) != 2:
281 | print 'Usage: ', argv[0], '
'
282 | exit(255)
283 |
284 | src = argv[1]
285 | dirs = [os.path.join(src, d, 'standard') for d in os.listdir(src)]
286 | [dump(d) for d in dirs]
287 |
288 |
--------------------------------------------------------------------------------
/app/data/sim/fix_comm.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 | for f in $(find edison/comm-graphs/); do
3 | echo $f
4 | echo 'from,to,bytes' > $f.csv
5 | sed 's/ /,/g' $f >> $f.csv
6 | done
--------------------------------------------------------------------------------
/app/data/sim/fix_sim.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 | dir=sim/simulations/single/placements
4 | for f in $(ls $dir); do
5 | cat header > $dir/$f.csv
6 | sed 's/ /,/g' $dir/$f >> $dir/$f.csv
7 | done
--------------------------------------------------------------------------------
/app/data/sim/header:
--------------------------------------------------------------------------------
1 | g,r,c,n,core,jobid
2 |
--------------------------------------------------------------------------------
/app/data/sim/list_edison.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 | for f in $(ls -d edison/*/standard); do
3 | echo '{'`sed 's/^[^:]*: \([0-9]*\).*size: \([0-9]*\).*/\2-\1/' $f/catalog.yaml | head -1`'}',$f/dnd_net_counters.csv,$f/dnd_jobs.csv >> runs.csv;
4 | done
5 |
--------------------------------------------------------------------------------
/app/data/sim/list_links.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | root=links
4 |
5 | echo name,counters,jobs > runs-"$root".csv
6 |
7 | path=$root/linkdata
8 | for d in $(ls $path/4jobs-1/sim*/*.csv); do
9 | echo $d
10 | # for f in $(ls -r $root/single/$d/*.csv); do
11 | # filename=`echo $f | sed 's/.*links-//' | sed 's/\.csv//'`
12 | # # name=`echo "$f" | sed 's/-\([0-9][0-9]k\)/- \1/'`
13 | # jobs=$root/placements/single/$filename
14 | # echo $d/$filename,$f,$jobs >> runs-"$root".csv
15 | # done
16 | done
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/app/data/sim/list_runs.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | echo name,counters,jobs > runs.csv
3 |
4 | path=sim/simulations/single
5 | for d in $(ls -r $path); do
6 | if [ "$d" != 'placement' ]; then
7 | for f in $(ls -r $path/$d); do
8 | name=`echo "$f" | sed 's/-\([0-9][0-9]k\)/- \1/'`
9 | jobs=$path/placement/`echo $f | sed 's/-/./'`.csv
10 | counters=$(ls $path/$d/$f/*.csv)
11 | echo single/$name,$counters,$jobs >> runs.csv
12 | done
13 | fi
14 | done
15 |
16 | path=sim/simulations/multi
17 | for d in $(ls -r $path); do
18 | if [ "$d" != 'placement' ]; then
19 | for f in $(ls -r $path/$d); do
20 | name=`echo "$f" `
21 | jobs=$path/placements/`echo $f | sed 's/-/./'`.csv
22 | counters=$(ls $path/$d/$f/*.csv)
23 | echo multi/$name,$counters,$jobs >> runs.csv
24 | done
25 | fi
26 | done
27 |
28 |
29 |
--------------------------------------------------------------------------------
/app/data/sim/runs-1blue.csv:
--------------------------------------------------------------------------------
1 | name,counters,jobs
2 | 4jobs/sim1, links/linkdata/1blue/4jobs-1/sim1/links-4jobs.32k4.csv, links/placements/4jobs-1/4jobs.32k4.csv
3 | 4jobs/sim1-spread, links/linkdata/1blue/4jobs-1/sim1/links-4jobs.32k4-0.csv, links/placements/4jobs-1/4jobs.32k4-0.csv
4 | 4jobs/sim1-2dstencil,links/linkdata/1blue/4jobs-1/sim1/links-4jobs.32k4-1.csv,links/placements/4jobs-1/4jobs.32k4-1.csv
5 | 4jobs/sim1-4dstencil,links/linkdata/1blue/4jobs-1/sim1/links-4jobs.32k4-2.csv,links/placements/4jobs-1/4jobs.32k4-2.csv
6 | 4jobs/sim1-many2many,links/linkdata/1blue/4jobs-1/sim1/links-4jobs.32k4-3.csv,links/placements/4jobs-1/4jobs.32k4-3.csv
7 |
8 | 4jobs/sim2,links/linkdata/1blue/4jobs-1/sim2/links-4jobs.32k4.csv,links/placements/4jobs-1/4jobs.32k4.csv
9 | 4jobs/sim2-2dstencil,links/linkdata/1blue/4jobs-1/sim2/links-4jobs.32k4-0.csv,links/placements/4jobs-1/4jobs.32k4-0.csv
10 | 4jobs/sim2-4dstencil,links/linkdata/1blue/4jobs-1/sim2/links-4jobs.32k4-1.csv,links/placements/4jobs-1/4jobs.32k4-1.csv
11 | 4jobs/sim2-umesh,links/linkdata/1blue/4jobs-1/sim2/links-4jobs.32k4-2.csv,links/placements/4jobs-1/4jobs.32k4-2.csv
12 | 4jobs/sim2-spread,links/linkdata/1blue/4jobs-1/sim2/links-4jobs.32k4-3.csv,links/placements/4jobs-1/4jobs.32k4-3.csv
13 |
14 | 4jobs/sim3,links/linkdata/1blue/4jobs-1/sim3/links-4jobs.32k4.csv,links/placements/4jobs-1/4jobs.32k4.csv
15 | 4jobs/sim3-umesh,links/linkdata/1blue/4jobs-1/sim3/links-4jobs.32k4-0.csv,links/placements/4jobs-1/4jobs.32k4-0.csv
16 | 4jobs/sim3-spread,links/linkdata/1blue/4jobs-1/sim3/links-4jobs.32k4-1.csv,links/placements/4jobs-1/4jobs.32k4-1.csv
17 | 4jobs/sim3-many2many,links/linkdata/1blue/4jobs-1/sim3/links-4jobs.32k4-2.csv,links/placements/4jobs-1/4jobs.32k4-2.csv
18 | 4jobs/sim3-2dstencil,links/linkdata/1blue/4jobs-1/sim3/links-4jobs.32k4-3.csv,links/placements/4jobs-1/4jobs.32k4-3.csv
19 |
20 | 4jobs/sim4,links/linkdata/1blue/4jobs-1/sim4/links-4jobs.32k4.csv,links/placements/4jobs-1/4jobs.32k4.csv
21 | 4jobs/sim4-4dstencil,links/linkdata/1blue/4jobs-1/sim4/links-4jobs.32k4-0.csv,links/placements/4jobs-1/4jobs.32k4-0.csv
22 | 4jobs/sim4-many2many,links/linkdata/1blue/4jobs-1/sim4/links-4jobs.32k4-1.csv,links/placements/4jobs-1/4jobs.32k4-1.csv
23 | 4jobs/sim4-spread,links/linkdata/1blue/4jobs-1/sim4/links-4jobs.32k4-2.csv,links/placements/4jobs-1/4jobs.32k4-2.csv
24 | 4jobs/sim4-umesh,links/linkdata/1blue/4jobs-1/sim4/links-4jobs.32k4-3.csv,links/placements/4jobs-1/4jobs.32k4-3.csv
25 |
26 |
--------------------------------------------------------------------------------
/app/data/sim/runs-2blacks.csv:
--------------------------------------------------------------------------------
1 | name,counters,jobs
2 | 4jobs/sim1,links/linkdata/2blacks/4jobs-1/sim1/links-4jobs.32k4.csv,links/placements/4jobs-1/4jobs.32k4.csv
3 | 4jobs/sim1-spread,links/linkdata/2blacks/4jobs-1/sim1/links-4jobs.32k4-0.csv,links/placements/4jobs-1/4jobs.32k4-0.csv
4 | 4jobs/sim1-2dstencil,links/linkdata/2blacks/4jobs-1/sim1/links-4jobs.32k4-1.csv,links/placements/4jobs-1/4jobs.32k4-1.csv
5 | 4jobs/sim1-4dstencil,links/linkdata/2blacks/4jobs-1/sim1/links-4jobs.32k4-2.csv,links/placements/4jobs-1/4jobs.32k4-2.csv
6 | 4jobs/sim1-many2many,links/linkdata/2blacks/4jobs-1/sim1/links-4jobs.32k4-3.csv,links/placements/4jobs-1/4jobs.32k4-3.csv
7 |
8 | 4jobs/sim2,links/linkdata/2blacks/4jobs-1/sim2/links-4jobs.32k4.csv,links/placements/4jobs-1/4jobs.32k4.csv
9 | 4jobs/sim2-2dstencil,links/linkdata/2blacks/4jobs-1/sim2/links-4jobs.32k4-0.csv,links/placements/4jobs-1/4jobs.32k4-0.csv
10 | 4jobs/sim2-4dstencil,links/linkdata/2blacks/4jobs-1/sim2/links-4jobs.32k4-1.csv,links/placements/4jobs-1/4jobs.32k4-1.csv
11 | 4jobs/sim2-umesh,links/linkdata/2blacks/4jobs-1/sim2/links-4jobs.32k4-2.csv,links/placements/4jobs-1/4jobs.32k4-2.csv
12 | 4jobs/sim2-spread,links/linkdata/2blacks/4jobs-1/sim2/links-4jobs.32k4-3.csv,links/placements/4jobs-1/4jobs.32k4-3.csv
13 |
14 | 4jobs/sim3,links/linkdata/2blacks/4jobs-1/sim3/links-4jobs.32k4.csv,links/placements/4jobs-1/4jobs.32k4.csv
15 | 4jobs/sim3-umesh,links/linkdata/2blacks/4jobs-1/sim3/links-4jobs.32k4-0.csv,links/placements/4jobs-1/4jobs.32k4-0.csv
16 | 4jobs/sim3-spread,links/linkdata/2blacks/4jobs-1/sim3/links-4jobs.32k4-1.csv,links/placements/4jobs-1/4jobs.32k4-1.csv
17 | 4jobs/sim3-many2many,links/linkdata/2blacks/4jobs-1/sim3/links-4jobs.32k4-2.csv,links/placements/4jobs-1/4jobs.32k4-2.csv
18 | 4jobs/sim3-2dstencil,links/linkdata/2blacks/4jobs-1/sim3/links-4jobs.32k4-3.csv,links/placements/4jobs-1/4jobs.32k4-3.csv
19 |
20 | 4jobs/sim4,links/linkdata/2blacks/4jobs-1/sim4/links-4jobs.32k4.csv,links/placements/4jobs-1/4jobs.32k4.csv
21 | 4jobs/sim4-4dstencil,links/linkdata/2blacks/4jobs-1/sim4/links-4jobs.32k4-0.csv,links/placements/4jobs-1/4jobs.32k4-0.csv
22 | 4jobs/sim4-many2many,links/linkdata/2blacks/4jobs-1/sim4/links-4jobs.32k4-1.csv,links/placements/4jobs-1/4jobs.32k4-1.csv
23 | 4jobs/sim4-spread,links/linkdata/2blacks/4jobs-1/sim4/links-4jobs.32k4-2.csv,links/placements/4jobs-1/4jobs.32k4-2.csv
24 | 4jobs/sim4-umesh,links/linkdata/2blacks/4jobs-1/sim4/links-4jobs.32k4-3.csv,links/placements/4jobs-1/4jobs.32k4-3.csv
25 |
26 |
--------------------------------------------------------------------------------
/app/data/sim/runs-4jobs-1.csv:
--------------------------------------------------------------------------------
1 | name,counters,jobs
2 | 4jobs-1/sim1,links/linkdata/default/4jobs-1/sim1/links-4jobs.32k4.csv,links/placements/4jobs-1/4jobs.32k4.csv
3 | 4jobs-1/job0-spread,links/linkdata/default/4jobs-1/sim1/links-4jobs.32k4-0.csv,links/placements/4jobs-1/4jobs.32k4-0.csv
4 | 4jobs-1/job1-2dstencil,links/linkdata/default/4jobs-1/sim1/links-4jobs.32k4-1.csv,links/placements/4jobs-1/4jobs.32k4-1.csv
5 | 4jobs-1/job2-4dstencil,links/linkdata/default/4jobs-1/sim1/links-4jobs.32k4-2.csv,links/placements/4jobs-1/4jobs.32k4-2.csv
6 | 4jobs-1/job3-many2many,links/linkdata/default/4jobs-1/sim1/links-4jobs.32k4-3.csv,links/placements/4jobs-1/4jobs.32k4-3.csv
7 |
8 | 4jobs-1/sim2,links/linkdata/default/4jobs-1/sim2/links-4jobs.32k4.csv,links/placements/4jobs-1/4jobs.32k4.csv
9 | 4jobs-1/job0-2dstencil,links/linkdata/default/4jobs-1/sim2/links-4jobs.32k4-0.csv,links/placements/4jobs-1/4jobs.32k4-0.csv
10 | 4jobs-1/job1-4dstencil,links/linkdata/default/4jobs-1/sim2/links-4jobs.32k4-1.csv,links/placements/4jobs-1/4jobs.32k4-1.csv
11 | 4jobs-1/job2-umesh,links/linkdata/default/4jobs-1/sim2/links-4jobs.32k4-2.csv,links/placements/4jobs-1/4jobs.32k4-2.csv
12 | 4jobs-1/job3-spread,links/linkdata/default/4jobs-1/sim2/links-4jobs.32k4-3.csv,links/placements/4jobs-1/4jobs.32k4-3.csv
13 |
14 | 4jobs-1/sim3,links/linkdata/default/4jobs-1/sim3/links-4jobs.32k4.csv,links/placements/4jobs-1/4jobs.32k4.csv
15 | 4jobs-1/job0-umesh,links/linkdata/default/4jobs-1/sim3/links-4jobs.32k4-0.csv,links/placements/4jobs-1/4jobs.32k4-0.csv
16 | 4jobs-1/job1-spread,links/linkdata/default/4jobs-1/sim3/links-4jobs.32k4-1.csv,links/placements/4jobs-1/4jobs.32k4-1.csv
17 | 4jobs-1/job2-many2many,links/linkdata/default/4jobs-1/sim3/links-4jobs.32k4-2.csv,links/placements/4jobs-1/4jobs.32k4-2.csv
18 | 4jobs-1/job3-2dstencil,links/linkdata/default/4jobs-1/sim3/links-4jobs.32k4-3.csv,links/placements/4jobs-1/4jobs.32k4-3.csv
19 |
20 | 4jobs-1/sim4,links/linkdata/default/4jobs-1/sim4/links-4jobs.32k4.csv,links/placements/4jobs-1/4jobs.32k4.csv
21 | 4jobs-1/job0-4dstencil,links/linkdata/default/4jobs-1/sim4/links-4jobs.32k4-0.csv,links/placements/4jobs-1/4jobs.32k4-0.csv
22 | 4jobs-1/job1-many2many,links/linkdata/default/4jobs-1/sim4/links-4jobs.32k4-1.csv,links/placements/4jobs-1/4jobs.32k4-1.csv
23 | 4jobs-1/job2-spread,links/linkdata/default/4jobs-1/sim4/links-4jobs.32k4-2.csv,links/placements/4jobs-1/4jobs.32k4-2.csv
24 | 4jobs-1/job3-umesh,links/linkdata/default/4jobs-1/sim4/links-4jobs.32k4-3.csv,links/placements/4jobs-1/4jobs.32k4-3.csv
25 |
--------------------------------------------------------------------------------
/app/data/sim/runs-8jobs-1.csv:
--------------------------------------------------------------------------------
1 | name,counters,jobs
2 | 8jobs-1/sim1,links/linkdata/default/8jobs-1/sim1/links-8jobs.16k8.csv,links/placements/8jobs-1/8jobs.16k8.csv
3 | 8jobs-1/job0-spread,links/linkdata/default/8jobs-1/sim1/links-8jobs.16k8-0.csv,links/placements/8jobs-1/8jobs.16k8-0.csv
4 | 8jobs-1/job1-2dstencil,links/linkdata/default/8jobs-1/sim1/links-8jobs.16k8-1.csv,links/placements/8jobs-1/8jobs.16k8-1.csv
5 | 8jobs-1/job2-2dstencil,links/linkdata/default/8jobs-1/sim1/links-8jobs.16k8-2.csv,links/placements/8jobs-1/8jobs.16k8-2.csv
6 | 8jobs-1/job3-4dstencil,links/linkdata/default/8jobs-1/sim1/links-8jobs.16k8-3.csv,links/placements/8jobs-1/8jobs.16k8-3.csv
7 | 8jobs-1/job4-4dstencil,links/linkdata/default/8jobs-1/sim1/links-8jobs.16k8-4.csv,links/placements/8jobs-1/8jobs.16k8-4.csv
8 | 8jobs-1/job5-many2many,links/linkdata/default/8jobs-1/sim1/links-8jobs.16k8-5.csv,links/placements/8jobs-1/8jobs.16k8-5.csv
9 | 8jobs-1/job6-many2many,links/linkdata/default/8jobs-1/sim1/links-8jobs.16k8-6.csv,links/placements/8jobs-1/8jobs.16k8-6.csv
10 | 8jobs-1/job7-umesh,links/linkdata/default/8jobs-1/sim1/links-8jobs.16k8-7.csv,links/placements/8jobs-1/8jobs.16k8-7.csv
11 |
12 | 8jobs-1/sim2,links/linkdata/default/8jobs-1/sim2/links-8jobs.16k8.csv,links/placements/8jobs-1/8jobs.16k8.csv
13 | 8jobs-1/job0-spread,links/linkdata/default/8jobs-1/sim2/links-8jobs.16k8-0.csv,links/placements/8jobs-1/8jobs.16k8-0.csv
14 | 8jobs-1/job1-2dstencil,links/linkdata/default/8jobs-1/sim2/links-8jobs.16k8-1.csv,links/placements/8jobs-1/8jobs.16k8-1.csv
15 | 8jobs-1/job2-2dstencil,links/linkdata/default/8jobs-1/sim2/links-8jobs.16k8-2.csv,links/placements/8jobs-1/8jobs.16k8-2.csv
16 | 8jobs-1/job3-4dstencil,links/linkdata/default/8jobs-1/sim2/links-8jobs.16k8-3.csv,links/placements/8jobs-1/8jobs.16k8-3.csv
17 | 8jobs-1/job4-4dstencil,links/linkdata/default/8jobs-1/sim2/links-8jobs.16k8-4.csv,links/placements/8jobs-1/8jobs.16k8-4.csv
18 | 8jobs-1/job5-many2many,links/linkdata/default/8jobs-1/sim2/links-8jobs.16k8-5.csv,links/placements/8jobs-1/8jobs.16k8-5.csv
19 | 8jobs-1/job6-umesh,links/linkdata/default/8jobs-1/sim2/links-8jobs.16k8-6.csv,links/placements/8jobs-1/8jobs.16k8-6.csv
20 | 8jobs-1/job7-umesh,links/linkdata/default/8jobs-1/sim2/links-8jobs.16k8-7.csv,links/placements/8jobs-1/8jobs.16k8-7.csv
21 |
22 | 8jobs-1/sim3,links/linkdata/default/8jobs-1/sim3/links-8jobs.16k8.csv,links/placements/8jobs-1/8jobs.16k8.csv
23 | 8jobs-1/job0-spread,links/linkdata/default/8jobs-1/sim3/links-8jobs.16k8-0.csv,links/placements/8jobs-1/8jobs.16k8-0.csv
24 | 8jobs-1/job1-2dstencil,links/linkdata/default/8jobs-1/sim3/links-8jobs.16k8-1.csv,links/placements/8jobs-1/8jobs.16k8-1.csv
25 | 8jobs-1/job2-2dstencil,links/linkdata/default/8jobs-1/sim3/links-8jobs.16k8-2.csv,links/placements/8jobs-1/8jobs.16k8-2.csv
26 | 8jobs-1/job3-4dstencil,links/linkdata/default/8jobs-1/sim3/links-8jobs.16k8-3.csv,links/placements/8jobs-1/8jobs.16k8-3.csv
27 | 8jobs-1/job4-many2many,links/linkdata/default/8jobs-1/sim3/links-8jobs.16k8-4.csv,links/placements/8jobs-1/8jobs.16k8-4.csv
28 | 8jobs-1/job5-many2many,links/linkdata/default/8jobs-1/sim3/links-8jobs.16k8-5.csv,links/placements/8jobs-1/8jobs.16k8-5.csv
29 | 8jobs-1/job6-umesh,links/linkdata/default/8jobs-1/sim3/links-8jobs.16k8-6.csv,links/placements/8jobs-1/8jobs.16k8-6.csv
30 | 8jobs-1/job7-umesh,links/linkdata/default/8jobs-1/sim3/links-8jobs.16k8-7.csv,links/placements/8jobs-1/8jobs.16k8-7.csv
31 |
32 | 8jobs-1/sim4,links/linkdata/default/8jobs-1/sim4/links-8jobs.16k8.csv,links/placements/8jobs-1/8jobs.16k8.csv
33 | 8jobs-1/job0-spread,links/linkdata/default/8jobs-1/sim4/links-8jobs.16k8-0.csv,links/placements/8jobs-1/8jobs.16k8-0.csv
34 | 8jobs-1/job1-2dstencil,links/linkdata/default/8jobs-1/sim4/links-8jobs.16k8-1.csv,links/placements/8jobs-1/8jobs.16k8-1.csv
35 | 8jobs-1/job2-4dstencil,links/linkdata/default/8jobs-1/sim4/links-8jobs.16k8-2.csv,links/placements/8jobs-1/8jobs.16k8-2.csv
36 | 8jobs-1/job3-4dstencil,links/linkdata/default/8jobs-1/sim4/links-8jobs.16k8-3.csv,links/placements/8jobs-1/8jobs.16k8-3.csv
37 | 8jobs-1/job4-many2many,links/linkdata/default/8jobs-1/sim4/links-8jobs.16k8-4.csv,links/placements/8jobs-1/8jobs.16k8-4.csv
38 | 8jobs-1/job5-many2many,links/linkdata/default/8jobs-1/sim4/links-8jobs.16k8-5.csv,links/placements/8jobs-1/8jobs.16k8-5.csv
39 | 8jobs-1/job6-umesh,links/linkdata/default/8jobs-1/sim4/links-8jobs.16k8-6.csv,links/placements/8jobs-1/8jobs.16k8-6.csv
40 | 8jobs-1/job7-umesh,links/linkdata/default/8jobs-1/sim4/links-8jobs.16k8-7.csv,links/placements/8jobs-1/8jobs.16k8-7.csv
41 |
42 |
--------------------------------------------------------------------------------
/app/data/sim/runs-DAT.csv:
--------------------------------------------------------------------------------
1 | name,counters,jobs,comm
t-21,Feb-DAT/baseline.1/2016-02-10-12-28-22/dnd_net_counters.su3_rmd.21.csv,Feb-DAT/baseline.1/2016-02-10-12-28-22/dnd_jobs.su3_rmd.21.csv
t-22,Feb-DAT/baseline.1/2016-02-10-12-28-22/dnd_net_counters.su3_rmd.22.csv,Feb-DAT/baseline.1/2016-02-10-12-28-22/dnd_jobs.su3_rmd.22.csv
t-23,Feb-DAT/baseline.1/2016-02-10-12-28-22/dnd_net_counters.su3_rmd.23.csv,Feb-DAT/baseline.1/2016-02-10-12-28-22/dnd_jobs.su3_rmd.23.csv
t-24,Feb-DAT/baseline.1/2016-02-10-12-28-22/dnd_net_counters.su3_rmd.24.csv,Feb-DAT/baseline.1/2016-02-10-12-28-22/dnd_jobs.su3_rmd.24.csv
t-25,Feb-DAT/baseline.1/2016-02-10-12-28-22/dnd_net_counters.su3_rmd.25.csv,Feb-DAT/baseline.1/2016-02-10-12-28-22/dnd_jobs.su3_rmd.25.csv
t-26,Feb-DAT/baseline.1/2016-02-10-12-28-22/dnd_net_counters.su3_rmd.26.csv,Feb-DAT/baseline.1/2016-02-10-12-28-22/dnd_jobs.su3_rmd.26.csv
t-27,Feb-DAT/baseline.1/2016-02-10-12-28-22/dnd_net_counters.su3_rmd.27.csv,Feb-DAT/baseline.1/2016-02-10-12-28-22/dnd_jobs.su3_rmd.27.csv
t-28,Feb-DAT/baseline.1/2016-02-10-12-28-22/dnd_net_counters.su3_rmd.28.csv,Feb-DAT/baseline.1/2016-02-10-12-28-22/dnd_jobs.su3_rmd.28.csv
t-29,Feb-DAT/baseline.1/2016-02-10-12-28-22/dnd_net_counters.su3_rmd.29.csv,Feb-DAT/baseline.1/2016-02-10-12-28-22/dnd_jobs.su3_rmd.29.csv
t-31,Feb-DAT/baseline.1/2016-02-10-12-28-22/dnd_net_counters.su3_rmd.31.csv,Feb-DAT/baseline.1/2016-02-10-12-28-22/dnd_jobs.su3_rmd.31.csv
t-32,Feb-DAT/baseline.1/2016-02-10-12-28-22/dnd_net_counters.su3_rmd.32.csv,Feb-DAT/baseline.1/2016-02-10-12-28-22/dnd_jobs.su3_rmd.32.csv
t-33,Feb-DAT/baseline.1/2016-02-10-12-28-22/dnd_net_counters.su3_rmd.33.csv,Feb-DAT/baseline.1/2016-02-10-12-28-22/dnd_jobs.su3_rmd.33.csv
t-34,Feb-DAT/baseline.1/2016-02-10-12-28-22/dnd_net_counters.su3_rmd.34.csv,Feb-DAT/baseline.1/2016-02-10-12-28-22/dnd_jobs.su3_rmd.34.csv
t-35,Feb-DAT/baseline.1/2016-02-10-12-28-22/dnd_net_counters.su3_rmd.35.csv,Feb-DAT/baseline.1/2016-02-10-12-28-22/dnd_jobs.su3_rmd.35.csv
t-36,Feb-DAT/baseline.1/2016-02-10-12-28-22/dnd_net_counters.su3_rmd.36.csv,Feb-DAT/baseline.1/2016-02-10-12-28-22/dnd_jobs.su3_rmd.36.csv
t-37,Feb-DAT/baseline.1/2016-02-10-12-28-22/dnd_net_counters.su3_rmd.37.csv,Feb-DAT/baseline.1/2016-02-10-12-28-22/dnd_jobs.su3_rmd.37.csv
t-38,Feb-DAT/baseline.1/2016-02-10-12-28-22/dnd_net_counters.su3_rmd.38.csv,Feb-DAT/baseline.1/2016-02-10-12-28-22/dnd_jobs.su3_rmd.38.csv
t-39,Feb-DAT/baseline.1/2016-02-10-12-28-22/dnd_net_counters.su3_rmd.39.csv,Feb-DAT/baseline.1/2016-02-10-12-28-22/dnd_jobs.su3_rmd.39.csv
t-40,Feb-DAT/baseline.1/2016-02-10-12-28-22/dnd_net_counters.su3_rmd.40.csv,Feb-DAT/baseline.1/2016-02-10-12-28-22/dnd_jobs.su3_rmd.40.csv
--------------------------------------------------------------------------------
/app/data/sim/runs-edison.csv:
--------------------------------------------------------------------------------
1 | name,counters,jobs,comm
{256-184},edison/2014-09-22-09-39-51/standard/dnd_net_counters.csv,edison/2014-09-22-09-39-51/standard/dnd_jobs.csv,edison/comm-graphs/milc.256nodes.csv
{256-206},edison/2014-09-08-02-05-59/standard/dnd_net_counters.csv,edison/2014-09-08-02-05-59/standard/dnd_jobs.csv,edison/comm-graphs/milc.256nodes.csv
{256-208},edison/2014-09-22-06-46-25/standard/dnd_net_counters.csv,edison/2014-09-22-06-46-25/standard/dnd_jobs.csv,edison/comm-graphs/milc.256nodes.csv
{256-215},edison/2014-09-12-17-47-31/standard/dnd_net_counters.csv,edison/2014-09-12-17-47-31/standard/dnd_jobs.csv,edison/comm-graphs/milc.256nodes.csv
{256-219},edison/2014-09-20-05-29-50/standard/dnd_net_counters.csv,edison/2014-09-20-05-29-50/standard/dnd_jobs.csv,edison/comm-graphs/milc.256nodes.csv
{256-233},edison/2014-09-09-10-18-03/standard/dnd_net_counters.csv,edison/2014-09-09-10-18-03/standard/dnd_jobs.csv,edison/comm-graphs/milc.256nodes.csv
{256-246},edison/2014-09-08-17-59-25/standard/dnd_net_counters.csv,edison/2014-09-08-17-59-25/standard/dnd_jobs.csv,edison/comm-graphs/milc.256nodes.csv
{256-268},edison/2014-09-07-14-46-43/standard/dnd_net_counters.csv,edison/2014-09-07-14-46-43/standard/dnd_jobs.csv,edison/comm-graphs/milc.256nodes.csv
{256-288},edison/2014-09-11-09-28-32/standard/dnd_net_counters.csv,edison/2014-09-11-09-28-32/standard/dnd_jobs.csv,edison/comm-graphs/milc.256nodes.csv
{256-292},edison/2014-09-05-13-45-14/standard/dnd_net_counters.csv,edison/2014-09-05-13-45-14/standard/dnd_jobs.csv,edison/comm-graphs/milc.256nodes.csv
{256-297},edison/2014-09-19-05-48-35/standard/dnd_net_counters.csv,edison/2014-09-19-05-48-35/standard/dnd_jobs.csv,edison/comm-graphs/milc.256nodes.csv
{256-305},edison/2014-09-01-10-45-18/standard/dnd_net_counters.csv,edison/2014-09-01-10-45-18/standard/dnd_jobs.csv,edison/comm-graphs/milc.256nodes.csv
{256-322},edison/2014-09-03-15-46-29/standard/dnd_net_counters.csv,edison/2014-09-03-15-46-29/standard/dnd_jobs.csv,edison/comm-graphs/milc.256nodes.csv
{256-332},edison/2014-09-23-09-41-34/standard/dnd_net_counters.csv,edison/2014-09-23-09-41-34/standard/dnd_jobs.csv,edison/comm-graphs/milc.256nodes.csv
{256-334},edison/2014-09-01-22-41-42/standard/dnd_net_counters.csv,edison/2014-09-01-22-41-42/standard/dnd_jobs.csv,edison/comm-graphs/milc.256nodes.csv
{256-334},edison/2014-09-16-15-58-16/standard/dnd_net_counters.csv,edison/2014-09-16-15-58-16/standard/dnd_jobs.csv,edison/comm-graphs/milc.256nodes.csv
{256-378},edison/2014-09-18-17-12-34/standard/dnd_net_counters.csv,edison/2014-09-18-17-12-34/standard/dnd_jobs.csv,edison/comm-graphs/milc.256nodes.csv
{256-400},edison/2014-09-02-18-17-45/standard/dnd_net_counters.csv,edison/2014-09-02-18-17-45/standard/dnd_jobs.csv,edison/comm-graphs/milc.256nodes.csv
{256-419},edison/2014-09-18-16-45-22/standard/dnd_net_counters.csv,edison/2014-09-18-16-45-22/standard/dnd_jobs.csv,edison/comm-graphs/milc.256nodes.csv
{256-544},edison/2014-09-21-12-30-53/standard/dnd_net_counters.csv,edison/2014-09-21-12-30-53/standard/dnd_jobs.csv,edison/comm-graphs/milc.256nodes.csv
{256-654},edison/2014-09-14-14-08-58/standard/dnd_net_counters.csv,edison/2014-09-14-14-08-58/standard/dnd_jobs.csv,edison/comm-graphs/milc.256nodes.csv
{256-661},edison/2014-09-14-15-51-56/standard/dnd_net_counters.csv,edison/2014-09-14-15-51-56/standard/dnd_jobs.csv,edison/comm-graphs/milc.256nodes.csv
{384-177},edison/2014-09-20-05-58-07/standard/dnd_net_counters.csv,edison/2014-09-20-05-58-07/standard/dnd_jobs.csv,edison/comm-graphs/milc.384nodes.csv
{384-182},edison/2014-09-20-05-19-01/standard/dnd_net_counters.csv,edison/2014-09-20-05-19-01/standard/dnd_jobs.csv,edison/comm-graphs/milc.384nodes.csv
{384-187},edison/2014-09-23-07-38-12/standard/dnd_net_counters.csv,edison/2014-09-23-07-38-12/standard/dnd_jobs.csv,edison/comm-graphs/milc.384nodes.csv
{384-192},edison/2014-09-20-05-39-04/standard/dnd_net_counters.csv,edison/2014-09-20-05-39-04/standard/dnd_jobs.csv,edison/comm-graphs/milc.384nodes.csv
{384-203},edison/2014-09-12-19-04-33/standard/dnd_net_count./2015-09-18-17-25-18/xtdb2proc.outrs.csv,edison/2014-09-12-19-04-33/standard/dnd_jobs.csv,edison/comm-graphs/milc.384nodes.csv
{384-208},edison/2014-09-12-19-39-57/standard/dnd_net_counters.csv,edison/2014-09-12-19-39-57/standard/dnd_jobs.csv,edison/comm-graphs/milc.384nodes.csv
{384-214},edison/2014-09-21-13-04-13/standard/dnd_net_counters.csv,edison/2014-09-21-13-04-13/standard/dnd_jobs.csv,edison/comm-graphs/milc.384nodes.csv
{384-218},edison/2014-09-10-19-07-11/standard/dnd_net_counters.csv,edison/2014-09-10-19-07-11/standard/dnd_jobs.csv,edison/comm-graphs/milc.384nodes.csv
{384-227},edison/2014-09-22-07-14-07/standard/dnd_net_counters.csv,edison/2014-09-22-07-14-07/standard/dnd_jobs.csv,edison/comm-graphs/milc.384nodes.csv
{384-231},edison/2014-09-01-23-05-04/standard/dnd_net_counters.csv,edison/2014-09-01-23-05-04/standard/dnd_jobs.csv,edison/comm-graphs/milc.384nodes.csv
{384-236},edison/2014-09-08-16-03-58/standard/dnd_net_counters.csv,edison/2014-09-08-16-03-58/standard/dnd_jobs.csv,edison/comm-graphs/milc.384nodes.csv
{384-253},edison/2014-09-07-14-48-27/standard/dnd_net_counters.csv,edison/2014-09-07-14-48-27/standard/dnd_jobs.csv,edison/comm-graphs/milc.384nodes.csv
{384-278},edison/2014-09-17-19-00-59/standard/dnd_net_counters.csv,edison/2014-09-17-19-00-59/standard/dnd_jobs.csv,edison/comm-graphs/milc.384nodes.csv
{384-278},edison/2014-09-19-05-23-04/standard/dnd_net_counters.csv,edison/2014-09-19-05-23-04/standard/dnd_jobs.csv,edison/comm-graphs/milc.384nodes.csv
{384-279},edison/2014-09-08-18-56-36/standard/dnd_net_counters.csv,edison/2014-09-08-18-56-36/standard/dnd_jobs.csv,edison/comm-graphs/milc.384nodes.csv
{384-283},edison/2014-09-24-03-43-41/standard/dnd_net_counters.csv,edison/2014-09-24-03-43-41/standard/dnd_jobs.csv,edison/comm-graphs/milc.384nodes.csv
{384-304},edison/2014-09-02-20-56-08/standard/dnd_net_counters.csv,edison/2014-09-02-20-56-08/standard/dnd_jobs.csv,edison/comm-graphs/milc.384nodes.csv
{384-310},edison/2014-09-01-10-50-59/standard/dnd_net_counters.csv,edison/2014-09-01-10-50-59/standard/dnd_jobs.csv,edison/comm-graphs/milc.384nodes.csv
{384-340},edison/2014-09-03-16-58-50/standard/dnd_net_counters.csv,edison/2014-09-03-16-58-50/standard/dnd_jobs.csv,edison/comm-graphs/milc.384nodes.csv
{384-595},edison/2014-09-14-16-36-45/standard/dnd_net_counters.csv,edison/2014-09-14-16-36-45/standard/dnd_jobs.csv,edison/comm-graphs/milc.384nodes.csv
{384-610},edison/2014-09-05-16-16-52/standard/dnd_net_counters.csv,edison/2014-09-05-16-16-52/standard/dnd_jobs.csv,edison/comm-graphs/milc.384nodes.csv
{384-633},edison/2014-09-14-16-04-02/standard/dnd_net_counters.csv,edison/2014-09-14-16-04-02/standard/dnd_jobs.csv,edison/comm-graphs/milc.384nodes.csv
{384-730},edison/2014-09-09-20-31-06/standard/dnd_net_counters.csv,edison/2014-09-09-20-31-06/standard/dnd_jobs.csv,edison/comm-graphs/milc.384nodes.csv
{512-198},edison/2014-09-10-19-10-40/standard/dnd_net_counters.csv,edison/2014-09-10-19-10-40/standard/dnd_jobs.csv,edison/comm-graphs/milc.512nodes.csv
{512-211},edison/2014-09-12-19-53-40/standard/dnd_net_counters.csv,edison/2014-09-12-19-53-40/standard/dnd_jobs.csv,edison/comm-graphs/milc.512nodes.csv
{512-222},edison/2014-09-21-13-26-42/standard/dnd_net_counters.csv,edison/2014-09-21-13-26-42/standard/dnd_jobs.csv,edison/comm-graphs/milc.512nodes.csv
{512-223},edison/2014-09-12-19-24-56/standard/dnd_net_counters.csv,edison/2014-09-12-19-24-56/standard/dnd_jobs.csv,edison/comm-graphs/milc.512nodes.csv
{512-230},edison/2014-09-21-06-28-47/standard/dnd_net_counters.csv,edison/2014-09-21-06-28-47/standard/dnd_jobs.csv,edison/comm-graphs/milc.512nodes.csv
{512-249},edison/2014-09-24-04-43-45/standard/dnd_net_counters.csv,edison/2014-09-24-04-43-45/standard/dnd_jobs.csv,edison/comm-graphs/milc.512nodes.csv
{512-260},edison/2014-09-05-19-27-45/standard/dnd_net_counters.csv,edison/2014-09-05-19-27-45/standard/dnd_jobs.csv,edison/comm-graphs/milc.512nodes.csv
{512-261},edison/2014-09-22-08-35-54/standard/dnd_net_counters.csv,edison/2014-09-22-08-35-54/standard/dnd_jobs.csv,edison/comm-graphs/milc.512nodes.csv
{512-264},edison/2014-09-05-19-11-04/standard/dnd_net_counters.csv,edison/2014-09-05-19-11-04/standard/dnd_jobs.csv,edison/comm-graphs/milc.512nodes.csv
{512-273},edison/2014-09-07-15-06-58/standard/dnd_net_counters.csv,edison/2014-09-07-15-06-58/standard/dnd_jobs.csv,edison/comm-graphs/milc.512nodes.csv
{512-281},edison/2014-09-08-21-55-30/standard/dnd_net_counters.csv,edison/2014-09-08-21-55-30/standard/dnd_jobs.csv,edison/comm-graphs/milc.512nodes.csv
{512-284},edison/2014-09-23-10-16-28/standard/dnd_net_counters.csv,edison/2014-09-23-10-16-28/standard/dnd_jobs.csv,edison/comm-graphs/milc.512nodes.csv
{512-292},edison/2014-09-01-23-27-40/standard/dnd_net_counters.csv,edison/2014-09-01-23-27-40/standard/dnd_jobs.csv,edison/comm-graphs/milc.512nodes.csv
{512-313},edison/2014-09-19-05-50-45/standard/dnd_net_counters.csv,edison/2014-09-19-05-50-45/standard/dnd_jobs.csv,edison/comm-graphs/milc.512nodes.csv
{512-324},edison/2014-09-08-23-31-23/standard/dnd_net_counters.csv,edison/2014-09-08-23-31-23/standard/dnd_jobs.csv,edison/comm-graphs/milc.512nodes.csv
{512-346},edison/2014-09-09-20-59-35/standard/dnd_net_counters.csv,edison/2014-09-09-20-59-35/standard/dnd_jobs.csv,edison/comm-graphs/milc.512nodes.csv
{512-350},edison/2014-09-01-12-50-30/standard/dnd_net_counters.csv,edison/2014-09-01-12-50-30/standard/dnd_jobs.csv,edison/comm-graphs/milc.512nodes.csv
{512-413},edison/2014-09-18-16-50-03/standard/dnd_net_counters.csv,edison/2014-09-18-16-50-03/standard/dnd_jobs.csv,edison/comm-graphs/milc.512nodes.csv
{512-441},edison/2014-09-02-21-17-32/standard/dnd_net_counters.csv,edison/2014-09-02-21-17-32/standard/dnd_jobs.csv,edison/comm-graphs/milc.512nodes.csv
{512-610},edison/2014-09-14-16-56-28/standard/dnd_net_counters.csv,edison/2014-09-14-16-56-28/standard/dnd_jobs.csv,edison/comm-graphs/milc.512nodes.csv
{512-618},edison/2014-09-21-12-30-46/standard/dnd_net_counters.csv,edison/2014-09-21-12-30-46/standard/dnd_jobs.csv,edison/comm-graphs/milc.512nodes.csv
{512-645},edison/2014-09-21-11-36-49/standard/dnd_net_counters.csv,edison/2014-09-21-11-36-49/standard/dnd_jobs.csv,edison/comm-graphs/milc.512nodes.csv
{512-690},edison/2014-09-14-16-30-21/standard/dnd_net_counters.csv,edison/2014-09-14-16-30-21/standard/dnd_jobs.csv,edison/comm-graphs/milc.512nodes.csv
--------------------------------------------------------------------------------
/app/data/sim/runs-links.csv:
--------------------------------------------------------------------------------
1 | name,counters,jobs
2 | 4jobs/sim1,links/linkdata/4jobs-1/sim1/links-4jobs.32kEach.csv,links/placements/4jobs-1/4jobs.32kEach.csv
3 | 4jobs/sim2,links/linkdata/4jobs-1/sim2/links-4jobs.32kEach.csv,links/placements/4jobs-1/4jobs.32kEach.csv
4 | 4jobs/sim3,links/linkdata/4jobs-1/sim3/links-4jobs.32kEach.csv,links/placements/4jobs-1/4jobs.32kEach.csv
5 | 4jobs/sim4,links/linkdata/4jobs-1/sim4/links-4jobs.32kEach.csv,links/placements/4jobs-1/4jobs.32kEach.csv
6 |
7 |
--------------------------------------------------------------------------------
/app/data/sim/runs-multi.csv:
--------------------------------------------------------------------------------
1 | name,counters,jobs,comm
2 | 2ds-compact-32k-32k-64k,sim/simulations/multi/3jobs/2ds-compact-32k-32k-64k/links-compact.32k-32k-64k.csv,sim/simulations/multi/placements/compact.32k-32k-64k.csv
3 | 2ds-random-32k-32k-64k,sim/simulations/multi/3jobs/2ds-random-32k-32k-64k/links-random.32k-32k-64k.csv,sim/simulations/multi/placements/random.32k-32k-64k.csv
4 | 2ds-nonuni-32k-32k-64k,sim/simulations/multi/3jobs/2ds-nonuni-32k-32k-64k/links-nonuni.32k-32k-64k.csv,sim/simulations/multi/placements/nonuni.32k-32k-64k.csv
5 |
6 | 2ds-m2m-random-64k-64k,sim/simulations/multi/2jobs/2ds-m2m-random-64k-64k/links-random.64k-64k.csv,sim/simulations/multi/placements/random.64k-64k.csv
7 | 2ds-m2m-nonuni-64k-64k,sim/simulations/multi/2jobs/2ds-m2m-nonuni-64k-64k/links-nonuni.64k-64k.csv,sim/simulations/multi/placements/nonuni.64k-64k.csv
8 | 2ds-m2m-compact-64k-64k,sim/simulations/multi/2jobs/2ds-m2m-compact-64k-64k/links-compact.64k-64k.csv,sim/simulations/multi/placements/compact.64k-64k.csv
9 |
10 | 2ds-ume-compact-64k-64k,sim/simulations/multi/2jobs/2ds-ume-compact-64k-64k/links-compact.64k-64k.csv,sim/simulations/multi/placements/compact.64k-64k.csv
11 | 2ds-ume-random-64k-64k,sim/simulations/multi/2jobs/2ds-ume-random-64k-64k/links-random.64k-64k.csv,sim/simulations/multi/placements/random.64k-64k.csv
12 | 2ds-ume-nonuni-64k-64k,sim/simulations/multi/2jobs/2ds-ume-nonuni-64k-64k/links-nonuni.64k-64k.csv,sim/simulations/multi/placements/nonuni.64k-64k.csv
13 |
14 | m2m-compact-32k-32k-64k,sim/simulations/multi/3jobs/m2m-compact-32k-32k-64k/links-compact.32k-32k-64k.csv,sim/simulations/multi/placements/compact.32k-32k-64k.csv
15 | m2m-random-32k-32k-64k,sim/simulations/multi/3jobs/m2m-random-32k-32k-64k/links-random.32k-32k-64k.csv,sim/simulations/multi/placements/random.32k-32k-64k.csv
16 | m2m-nonuni-32k-32k-64k,sim/simulations/multi/3jobs/m2m-nonuni-32k-32k-64k/links-nonuni.32k-32k-64k.csv,sim/simulations/multi/placements/nonuni.32k-32k-64k.csv
17 |
18 | m2m-ume-compact-64k-64k,sim/simulations/multi/2jobs/m2m-ume-compact-64k-64k/links-compact.64k-64k.csv,sim/simulations/multi/placements/compact.64k-64k.csv
19 | m2m-ume-random-64k-64k,sim/simulations/multi/2jobs/m2m-ume-random-64k-64k/links-random.64k-64k.csv,sim/simulations/multi/placements/random.64k-64k.csv
20 | m2m-ume-nonuni-64k-64k,sim/simulations/multi/2jobs/m2m-ume-nonuni-64k-64k/links-nonuni.64k-64k.csv,sim/simulations/multi/placements/nonuni.64k-64k.csv
21 |
22 | ume-compact-32k-32k-64k,sim/simulations/multi/3jobs/ume-compact-32k-32k-64k/links-compact.32k-32k-64k.csv,sim/simulations/multi/placements/compact.32k-32k-64k.csv
23 | ume-random-32k-32k-64k,sim/simulations/multi/3jobs/ume-random-32k-32k-64k/links-random.32k-32k-64k.csv,sim/simulations/multi/placements/random.32k-32k-64k.csv
24 | ume-nonuni-32k-32k-64k,sim/simulations/multi/3jobs/ume-nonuni-32k-32k-64k/links-nonuni.32k-32k-64k.csv,sim/simulations/multi/placements/nonuni.32k-32k-64k.csv
--------------------------------------------------------------------------------
/app/data/sim/runs-single-bak.csv:
--------------------------------------------------------------------------------
1 | name,counters,jobs,comm
2 | 2dstencil-compact-16k,sim/simulations/single/2dstencil/compact-16k/links-compact.16k.csv,sim/simulations/single/placements/compact.16k.csv,sim/comm-graphs/2dstencil/comm.16k.csv
3 | 2dstencil-compact-32k,sim/simulations/single/2dstencil/compact-32k/links-compact.32k.csv,sim/simulations/single/placements/compact.32k.csv,sim/comm-graphs/2dstencil/comm.32k.csv
4 | 2dstencil-compact-64k,sim/simulations/single/2dstencil/compact-64k/links-compact.64k.csv,sim/simulations/single/placements/compact.64k.csv,sim/comm-graphs/2dstencil/comm.64k.csv
5 | 2dstencil-compact-128k,sim/simulations/single/2dstencil/compact-128k/links-compact.128k.csv,sim/simulations/single/placements/compact.128k.csv,sim/comm-graphs/2dstencil/comm.128k.csv
6 |
7 | 2dstencil-random-16k,sim/simulations/single/2dstencil/random-16k/links-random.16k.csv,sim/simulations/single/placements/random.16k.csv,sim/comm-graphs/2dstencil/comm.16k.csv
8 | 2dstencil-random-32k,sim/simulations/single/2dstencil/random-32k/links-random.32k.csv,sim/simulations/single/placements/random.32k.csv,sim/comm-graphs/2dstencil/comm.32k.csv
9 | 2dstencil-random-64k,sim/simulations/single/2dstencil/random-64k/links-random.64k.csv,sim/simulations/single/placements/random.64k.csv,sim/comm-graphs/2dstencil/comm.64k.csv
10 | 2dstencil-random-128k,sim/simulations/single/2dstencil/random-128k/links-random.128k.csv,sim/simulations/single/placements/random.128k.csv,sim/comm-graphs/2dstencil/comm.128k.csv
11 |
12 | 2dstencil-nonuni-16k,sim/simulations/single/2dstencil/nonuni-16k/links-nonuni.16k.csv,sim/simulations/single/placements/nonuni.16k.csv,sim/comm-graphs/2dstencil/comm.16k.csv
13 | 2dstencil-nonuni-32k,sim/simulations/single/2dstencil/nonuni-32k/links-nonuni.32k.csv,sim/simulations/single/placements/nonuni.32k.csv,sim/comm-graphs/2dstencil/comm.32k.csv
14 | 2dstencil-nonuni-64k,sim/simulations/single/2dstencil/nonuni-64k/links-nonuni.64k.csv,sim/simulations/single/placements/nonuni.64k.csv,sim/comm-graphs/2dstencil/comm.64k.csv
15 | 2dstencil-nonuni-128k,sim/simulations/single/2dstencil/nonuni-128k/links-nonuni.128k.csv,sim/simulations/single/placements/nonuni.128k.csv,sim/comm-graphs/2dstencil/comm.128k.csv
16 |
17 | many2many-compact-16k,sim/simulations/single/many2many/compact-16k/links-compact.16k.csv,sim/simulations/single/placements/compact.16k.csv,sim/comm-graphs/many2many/comm.16k.csv
18 | many2many-compact-32k,sim/simulations/single/many2many/compact-32k/links-compact.32k.csv,sim/simulations/single/placements/compact.32k.csv,sim/comm-graphs/many2many/comm.32k.csv
19 | many2many-compact-64k,sim/simulations/single/many2many/compact-64k/links-compact.64k.csv,sim/simulations/single/placements/compact.64k.csv,sim/comm-graphs/many2many/comm.64k.csv
20 | many2many-compact-128k,sim/simulations/single/many2many/compact-128k/links-compact.128k.csv,sim/simulations/single/placements/compact.128k.csv,sim/comm-graphs/many2many/comm.128k.csv
21 |
22 | many2many-random-16k,sim/simulations/single/many2many/random-16k/links-random.16k.csv,sim/simulations/single/placements/random.16k.csv,sim/comm-graphs/many2many/comm.16k.csv
23 | many2many-random-32k,sim/simulations/single/many2many/random-32k/links-random.32k.csv,sim/simulations/single/placements/random.32k.csv,sim/comm-graphs/many2many/comm.32k.csv
24 | many2many-random-64k,sim/simulations/single/many2many/random-64k/links-random.64k.csv,sim/simulations/single/placements/random.64k.csv,sim/comm-graphs/many2many/comm.64k.csv
25 | many2many-random-128k,sim/simulations/single/many2many/random-128k/links-random.128k.csv,sim/simulations/single/placements/random.128k.csv,sim/comm-graphs/many2many/comm.128k.csv
26 |
27 | many2many-nonuni-16k,sim/simulations/single/many2many/nonuni-16k/links-nonuni.16k.csv,sim/simulations/single/placements/nonuni.16k.csv,sim/comm-graphs/many2many/comm.16k.csv
28 | many2many-nonuni-32k,sim/simulations/single/many2many/nonuni-32k/links-nonuni.32k.csv,sim/simulations/single/placements/nonuni.32k.csv,sim/comm-graphs/many2many/comm.32k.csv
29 | many2many-nonuni-64k,sim/simulations/single/many2many/nonuni-64k/links-nonuni.64k.csv,sim/simulations/single/placements/nonuni.64k.csv,sim/comm-graphs/many2many/comm.64k.csv
30 | many2many-nonuni-128k,sim/simulations/single/many2many/nonuni-128k/links-nonuni.128k.csv,sim/simulations/single/placements/nonuni.128k.csv,sim/comm-graphs/many2many/comm.128k.csv
31 |
32 | umesh-compact-16k,sim/simulations/single/umesh/compact-16k/links-compact.16k.csv,sim/simulations/single/placements/compact.16k.csv,sim/comm-graphs/umesh/comm.16k.csv
33 | umesh-compact-32k,sim/simulations/single/umesh/compact-32k/links-compact.32k.csv,sim/simulations/single/placements/compact.32k.csv,sim/comm-graphs/umesh/comm.32k.csv
34 | umesh-compact-64k,sim/simulations/single/umesh/compact-64k/links-compact.64k.csv,sim/simulations/single/placements/compact.64k.csv,sim/comm-graphs/umesh/comm.64k.csv
35 | umesh-compact-128k,sim/simulations/single/umesh/compact-128k/links-compact.128k.csv,sim/simulations/single/placements/compact.128k.csv,sim/comm-graphs/umesh/comm.128k.csv
36 |
37 | umesh-random-16k,sim/simulations/single/umesh/random-16k/links-random.16k.csv,sim/simulations/single/placements/random.16k.csv,sim/comm-graphs/umesh/comm.16k.csv
38 | umesh-random-32k,sim/simulations/single/umesh/random-32k/links-random.32k.csv,sim/simulations/single/placements/random.32k.csv,sim/comm-graphs/umesh/comm.32k.csv
39 | umesh-random-64k,sim/simulations/single/umesh/random-64k/links-random.64k.csv,sim/simulations/single/placements/random.64k.csv,sim/comm-graphs/umesh/comm.64k.csv
40 | umesh-random-128k,sim/simulations/single/umesh/random-128k/links-random.128k.csv,sim/simulations/single/placements/random.128k.csv,sim/comm-graphs/umesh/comm.128k.csv
41 |
42 | umesh-nonuni-16k,sim/simulations/single/umesh/nonuni-16k/links-nonuni.16k.csv,sim/simulations/single/placements/nonuni.16k.csv,sim/comm-graphs/umesh/comm.16k.csv
43 | umesh-nonuni-32k,sim/simulations/single/umesh/nonuni-32k/links-nonuni.32k.csv,sim/simulations/single/placements/nonuni.32k.csv,sim/comm-graphs/umesh/comm.32k.csv
44 | umesh-nonuni-64k,sim/simulations/single/umesh/nonuni-64k/links-nonuni.64k.csv,sim/simulations/single/placements/nonuni.64k.csv,sim/comm-graphs/umesh/comm.64k.csv
45 | umesh-nonuni-128k,sim/simulations/single/umesh/nonuni-128k/links-nonuni.128k.csv,sim/simulations/single/placements/nonuni.128k.csv,sim/comm-graphs/umesh/comm.128k.csv
46 |
--------------------------------------------------------------------------------
/app/data/sim/runs-single.csv:
--------------------------------------------------------------------------------
1 | name,counters,jobs,comm
2 | 2dstencil-nonUniR-8k,links/linkdata/single/2dstencil/links-nonUniR.8k.csv,links/placements/single/nonUniR.8k.csv
3 | 2dstencil-nonUniR-16k,links/linkdata/single/2dstencil/links-nonUniR.16k.csv,links/placements/single/nonUniR.16k.csv
4 | 2dstencil-nonUniR-32k,links/linkdata/single/2dstencil/links-nonUniR.32k.csv,links/placements/single/nonUniR.32k.csv
5 | 2dstencil-nonUniR-64k,links/linkdata/single/2dstencil/links-nonUniR.64k.csv,links/placements/single/nonUniR.64k.csv
6 | 2dstencil-nonUniR-128k,links/linkdata/single/2dstencil/links-nonUniR.128k.csv,links/placements/single/nonUniR.128k.csv
7 |
8 | 4dstencil-nonUniR-8k,links/linkdata/single/4dstencil/links-nonUniR.8k.csv,links/placements/single/nonUniR.8k.csv
9 | 4dstencil-nonUniR-16k,links/linkdata/single/4dstencil/links-nonUniR.16k.csv,links/placements/single/nonUniR.16k.csv
10 | 4dstencil-nonUniR-32k,links/linkdata/single/4dstencil/links-nonUniR.32k.csv,links/placements/single/nonUniR.32k.csv
11 | 4dstencil-nonUniR-64k,links/linkdata/single/4dstencil/links-nonUniR.64k.csv,links/placements/single/nonUniR.64k.csv
12 | 4dstencil-nonUniR-128k,links/linkdata/single/4dstencil/links-nonUniR.128k.csv,links/placements/single/nonUniR.128k.csv
13 |
14 | many2many-nonUniR-8k,links/linkdata/single/many2many/links-nonUniR.8k.csv,links/placements/single/nonUniR.8k.csv
15 | many2many-nonUniR-16k,links/linkdata/single/many2many/links-nonUniR.16k.csv,links/placements/single/nonUniR.16k.csv
16 | many2many-nonUniR-32k,links/linkdata/single/many2many/links-nonUniR.32k.csv,links/placements/single/nonUniR.32k.csv
17 | many2many-nonUniR-64k,links/linkdata/single/many2many/links-nonUniR.64k.csv,links/placements/single/nonUniR.64k.csv
18 | many2many-nonUniR-128k,links/linkdata/single/many2many/links-nonUniR.128k.csv,links/placements/single/nonUniR.128k.csv
19 |
20 | spread-nonUniR-8k,links/linkdata/single/spread/links-nonUniR.8k.csv,links/placements/single/nonUniR.8k.csv
21 | spread-nonUniR-16k,links/linkdata/single/spread/links-nonUniR.16k.csv,links/placements/single/nonUniR.16k.csv
22 | spread-nonUniR-32k,links/linkdata/single/spread/links-nonUniR.32k.csv,links/placements/single/nonUniR.32k.csv
23 | spread-nonUniR-64k,links/linkdata/single/spread/links-nonUniR.64k.csv,links/placements/single/nonUniR.64k.csv
24 | spread-nonUniR-128k,links/linkdata/single/spread/links-nonUniR.128k.csv,links/placements/single/nonUniR.128k.csv
25 |
26 | umesh-nonUniR-8k,links/linkdata/single/umesh/links-nonUniR.8k.csv,links/placements/single/nonUniR.8k.csv
27 | umesh-nonUniR-16k,links/linkdata/single/umesh/links-nonUniR.16k.csv,links/placements/single/nonUniR.16k.csv
28 | umesh-nonUniR-32k,links/linkdata/single/umesh/links-nonUniR.32k.csv,links/placements/single/nonUniR.32k.csv
29 | umesh-nonUniR-64k,links/linkdata/single/umesh/links-nonUniR.64k.csv,links/placements/single/nonUniR.64k.csv
30 | umesh-nonUniR-128k,links/linkdata/single/umesh/links-nonUniR.128k.csv,links/placements/single/nonUniR.128k.csv
31 |
32 |
--------------------------------------------------------------------------------
/app/data/sim/runs-state.csv:
--------------------------------------------------------------------------------
1 | name,counters,jobs
2 | 2dstencil/randRtr.8k,state/single/2dstencil/links-randRtr.8k.csv,state/placements/single/randRtr.8k
3 | 2dstencil/randRtr.64k,state/single/2dstencil/links-randRtr.64k.csv,state/placements/single/randRtr.64k
4 | 2dstencil/randRtr.32k,state/single/2dstencil/links-randRtr.32k.csv,state/placements/single/randRtr.32k
5 | 2dstencil/randRtr.16k,state/single/2dstencil/links-randRtr.16k.csv,state/placements/single/randRtr.16k
6 | 2dstencil/randRtr.128k,state/single/2dstencil/links-randRtr.128k.csv,state/placements/single/randRtr.128k
7 | 2dstencil/compact.8k,state/single/2dstencil/links-compact.8k.csv,state/placements/single/compact.8k
8 | 2dstencil/compact.64k,state/single/2dstencil/links-compact.64k.csv,state/placements/single/compact.64k
9 | 2dstencil/compact.32k,state/single/2dstencil/links-compact.32k.csv,state/placements/single/compact.32k
10 | 2dstencil/compact.16k,state/single/2dstencil/links-compact.16k.csv,state/placements/single/compact.16k
11 | 2dstencil/compact.128k,state/single/2dstencil/links-compact.128k.csv,state/placements/single/compact.128k
12 | 4dstencil/randRtr.8k,state/single/4dstencil/links-randRtr.8k.csv,state/placements/single/randRtr.8k
13 | 4dstencil/randRtr.64k,state/single/4dstencil/links-randRtr.64k.csv,state/placements/single/randRtr.64k
14 | 4dstencil/randRtr.32k,state/single/4dstencil/links-randRtr.32k.csv,state/placements/single/randRtr.32k
15 | 4dstencil/randRtr.16k,state/single/4dstencil/links-randRtr.16k.csv,state/placements/single/randRtr.16k
16 | 4dstencil/randRtr.128k,state/single/4dstencil/links-randRtr.128k.csv,state/placements/single/randRtr.128k
17 | 4dstencil/compact.8k,state/single/4dstencil/links-compact.8k.csv,state/placements/single/compact.8k
18 | 4dstencil/compact.64k,state/single/4dstencil/links-compact.64k.csv,state/placements/single/compact.64k
19 | 4dstencil/compact.32k,state/single/4dstencil/links-compact.32k.csv,state/placements/single/compact.32k
20 | 4dstencil/compact.16k,state/single/4dstencil/links-compact.16k.csv,state/placements/single/compact.16k
21 | 4dstencil/compact.128k,state/single/4dstencil/links-compact.128k.csv,state/placements/single/compact.128k
22 | many2many/randRtr.8k,state/single/many2many/links-randRtr.8k.csv,state/placements/single/randRtr.8k
23 | many2many/randRtr.64k,state/single/many2many/links-randRtr.64k.csv,state/placements/single/randRtr.64k
24 | many2many/randRtr.32k,state/single/many2many/links-randRtr.32k.csv,state/placements/single/randRtr.32k
25 | many2many/randRtr.16k,state/single/many2many/links-randRtr.16k.csv,state/placements/single/randRtr.16k
26 | many2many/randRtr.128k,state/single/many2many/links-randRtr.128k.csv,state/placements/single/randRtr.128k
27 | many2many/compact.8k,state/single/many2many/links-compact.8k.csv,state/placements/single/compact.8k
28 | many2many/compact.64k,state/single/many2many/links-compact.64k.csv,state/placements/single/compact.64k
29 | many2many/compact.32k,state/single/many2many/links-compact.32k.csv,state/placements/single/compact.32k
30 | many2many/compact.16k,state/single/many2many/links-compact.16k.csv,state/placements/single/compact.16k
31 | many2many/compact.128k,state/single/many2many/links-compact.128k.csv,state/placements/single/compact.128k
32 | spread/randRtr.8k,state/single/spread/links-randRtr.8k.csv,state/placements/single/randRtr.8k
33 | spread/randRtr.64k,state/single/spread/links-randRtr.64k.csv,state/placements/single/randRtr.64k
34 | spread/randRtr.32k,state/single/spread/links-randRtr.32k.csv,state/placements/single/randRtr.32k
35 | spread/randRtr.16k,state/single/spread/links-randRtr.16k.csv,state/placements/single/randRtr.16k
36 | spread/randRtr.128k,state/single/spread/links-randRtr.128k.csv,state/placements/single/randRtr.128k
37 | spread/compact.8k,state/single/spread/links-compact.8k.csv,state/placements/single/compact.8k
38 | spread/compact.64k,state/single/spread/links-compact.64k.csv,state/placements/single/compact.64k
39 | spread/compact.32k,state/single/spread/links-compact.32k.csv,state/placements/single/compact.32k
40 | spread/compact.16k,state/single/spread/links-compact.16k.csv,state/placements/single/compact.16k
41 | spread/compact.128k,state/single/spread/links-compact.128k.csv,state/placements/single/compact.128k
42 | umesh/randRtr.8k,state/single/umesh/links-randRtr.8k.csv,state/placements/single/randRtr.8k
43 | umesh/randRtr.64k,state/single/umesh/links-randRtr.64k.csv,state/placements/single/randRtr.64k
44 | umesh/randRtr.32k,state/single/umesh/links-randRtr.32k.csv,state/placements/single/randRtr.32k
45 | umesh/randRtr.16k,state/single/umesh/links-randRtr.16k.csv,state/placements/single/randRtr.16k
46 | umesh/randRtr.128k,state/single/umesh/links-randRtr.128k.csv,state/placements/single/randRtr.128k
47 | umesh/compact.8k,state/single/umesh/links-compact.8k.csv,state/placements/single/compact.8k
48 | umesh/compact.64k,state/single/umesh/links-compact.64k.csv,state/placements/single/compact.64k
49 | umesh/compact.32k,state/single/umesh/links-compact.32k.csv,state/placements/single/compact.32k
50 | umesh/compact.16k,state/single/umesh/links-compact.16k.csv,state/placements/single/compact.16k
51 | umesh/compact.128k,state/single/umesh/links-compact.128k.csv,state/placements/single/compact.128k
52 |
--------------------------------------------------------------------------------
/app/data/sim/substitute.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | find links/ -name "*.csv" | sed \
3 | -e 's/\(.*\/\)\([^\/]*\)/pushd \1; ln -s \2 \2Z; popd/' \
4 | -e 's/links-\([^\.]*\)[^ ]*\(\-.\)\.csvZ/links-\1\2.csv/' \
5 | -e 's/links-\([^\.]*\)[^ ]*\.csvZ/links-\1.csv/' \
6 | -e 's/ \([^\.]*\)[^ ]*\(\-.\).csvZ/ \1\2.csv/' \
7 | -e 's/ \([^\.]*\)[^ ]*.csvZ/ \1.csv/' > l
8 |
9 | source l;
10 | rm l
11 |
--------------------------------------------------------------------------------
/app/data/staci_sep_29/Screen Shot 2016-04-06 at 1.49.37 PM.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LLNL/DragonView/9c5384e03b2e4f64cb2bbbe5872ba5c9bcd3cec5/app/data/staci_sep_29/Screen Shot 2016-04-06 at 1.49.37 PM.png
--------------------------------------------------------------------------------
/app/data/staci_sep_29/runs.csv:
--------------------------------------------------------------------------------
1 | name,counters,jobs,comm
2 | 21,dnd_net_counters.21.csv,dnd_jobs.21.csv,null
3 |
--------------------------------------------------------------------------------
/app/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | DragonView
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 | DragonView
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/app/lib-code/jquery-element-onresize.js:
--------------------------------------------------------------------------------
1 | /**
2 | * jquery-element-onresize 0.1.1
3 | * jquery-element-onresize is a simple jQuery plugin for detecting ALL changes in a size of ANY positioned element.
4 | *
5 | * Usage: $("#element").detectResizing({onResize: noArgFunction});
6 | *
7 | * Copyright 2014, RB Software Robert Bar (http://rbsoftware.pl)
8 | * Licensed under the MIT license.
9 | *
10 | */
11 | define(function(require) {
12 |
13 | var $ = require('jquery');
14 |
15 | (function ($, window, document, undefined) {
16 | "use strict";
17 |
18 | var pluginName = "detectResizing"
19 | , defaults = {onResize: undefined};
20 |
21 | function Plugin(element, options) {
22 | this.element = element;
23 | this.$element = $(element);
24 | this.settings = $.extend(true, {}, defaults, options);
25 | this._defaults = defaults;
26 | this._init();
27 | }
28 |
29 | $.extend(Plugin.prototype, {
30 | _init: function () {
31 |
32 | var frameContent = "jquery.detectResizing"
33 | , iframes = [$(''), $('')]
34 | , length = iframes.length
35 | , index = 0
36 | , $iframe;
37 |
38 | for (; index < length; index++) {
39 | $iframe = iframes[index];
40 | this.$element.append($iframe);
41 | $iframe.data("plugin_" + pluginName, this);
42 | $iframe[0].contentWindow.emitcontent = frameContent;
43 | $iframe[0].src = "javascript:window.emitcontent";
44 | }
45 |
46 | this._iframes = iframes;
47 | this._fireResizeFunction();
48 | },
49 |
50 | _fireResizeFunction: function () {
51 | var fn = this.settings.onResize;
52 |
53 | if ($.isFunction(fn)) {
54 | fn();
55 | }
56 | },
57 |
58 | destroy: function () {
59 | var length = this._iframes.length
60 | , index = 0
61 | , $iframe;
62 |
63 | if (this.$element.data("plugin_" + pluginName)) {
64 | this.$element.removeData("plugin_" + pluginName);
65 | for (; index < length; index++) {
66 | $iframe = this._iframes[index];
67 | $iframe.removeData("plugin_" + pluginName);
68 | $iframe.remove();
69 | }
70 | }
71 | }
72 | });
73 |
74 | $.fn[pluginName] = function (options) {
75 | this.each(function () {
76 | if (!$.data(this, "plugin_" + pluginName)) {
77 | $.data(this, "plugin_" + pluginName, new Plugin(this, options));
78 | }
79 | });
80 | return this;
81 | };
82 |
83 | })($, window, document)
84 |
85 | });
--------------------------------------------------------------------------------
/app/run.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | Radial DragonView
4 |
5 |
6 |
7 |
8 |
9 |
10 | DragonView
11 |
12 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
--------------------------------------------------------------------------------
/app/src/app.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Created by yarden on 1/30/15.
3 | */
4 |
5 | define(function(require) {
6 | 'use strict';
7 |
8 |
9 | var radio = require('radio');
10 | var compare = require('./compare');
11 | var Run = require('./run');
12 |
13 | var tabs = new Map();
14 |
15 | compare.on('selected', onSelect);
16 | window.addEventListener('resize', function() {
17 | var s = getSize('#outer');
18 | compare.resize([s[0]-200, s[1]]);
19 | });
20 |
21 |
22 | window.dispatchEvent(new Event('resize'));
23 |
24 | function onSelect(selection) {
25 | var tab = tabs.get(selection.key);
26 | if (!tab) {
27 | tab = {window: null, run: Run() };
28 | tabs.set(selection.key, tab);
29 | }
30 | if (!tab.window || tab.window.closed) {
31 | tab.window = window.open('run.html', selection.key);
32 | d3.select(tab.window).on('load', function() { tab.run.init(selection, tab.window); });
33 | } else {
34 | tab.window.focus();
35 | }
36 | }
37 |
38 |
39 |
40 | function getSize(el) {
41 | var d3el = d3.select(el);
42 | return [parseInt(d3el.style('width')), parseInt(d3el.style('height'))];
43 | }
44 | });
45 |
46 | //function loadTemplate(tid, eid) {
47 | // var t = importDoc.querySelector(tid);
48 | // var clone = document.importNode(t.content, true);
49 | // var d = document.getElementsByTagName(eid);
50 | // d[0].appendChild(clone);
51 | //}
52 | //loadTemplate('#compare-template', name);
--------------------------------------------------------------------------------
/app/src/cmap.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Created by yarden on 11/24/16.
3 | */
4 |
5 |
6 | define(function(require) {
7 |
8 | var d3 = require('d3');
9 |
10 | return function() {
11 | var COLORS = ["#4575b4", "#74add1", "#abd9e9", "#e0f3f8", "#ffffbf", "#fee090", "#fdae61", "#f46d43", "#d73027"];
12 | var value_scale = d3.scale.linear().domain([0, 0.5, 1]).range([0, 0.5, 1]).clamp(true);
13 | var color_scale = d3.scale.quantize().domain([0, 1]).range(COLORS);
14 |
15 | function cmap(v) {
16 | return color_scale(value_scale(v));
17 | }
18 |
19 | cmap.value_range = function (_) {
20 | if (!arguments.length) return value_scale.domain();
21 | value_scale.domain(_);
22 | return cmap;
23 | };
24 |
25 | cmap.colors = function (_) {
26 | if (!arguments.length) return color_scale.range();
27 | color_scale.range(_);
28 | return cmap;
29 | };
30 |
31 | return cmap;
32 | }
33 | });
--------------------------------------------------------------------------------
/app/src/components/cmap_swath.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Created by yarden on 11/24/16.
3 | */
4 | define(function(require) {
5 |
6 | var d3 = require('d3');
7 |
8 | return function() {
9 | var selection = null;
10 | var colors = null;
11 | var horizontal = true;
12 | var dispatch = d3.dispatch("changed");
13 |
14 | var size = 100;
15 | var mid = 0.5;
16 | var mid_pos = Math.floor(mid * size);
17 |
18 | function mouse_update(mouse_pos) {
19 | var pos = horizontal ? mouse_pos[0] : size - mouse_pos[1];
20 | if (pos == mid_pos) return;
21 | mid_pos = pos;
22 | mid = mid_pos/size;
23 | render();
24 | dispatch.changed(mid);
25 | }
26 |
27 | function update(f) {
28 | if (mid == f) return;
29 | mid = f;
30 | mid_pos = mid * size;
31 | render();
32 | }
33 |
34 | function render() {
35 | if (selection)
36 | selection
37 | .style('background-image', "linear-gradient(" + (horizontal ? "to right, " : "to top, ") + create() + ")");
38 | }
39 |
40 | function create() {
41 | return colors.map(function(v,i) { return i==4 ? v + " " + Math.floor(mid*100) + "%" : v;}).toString();
42 | }
43 |
44 | function swath(_) {
45 | selection = _;
46 | selection
47 | .on('mousedown', function () {
48 | d3.event.preventDefault();
49 | selection
50 | .on('mousemove', function () {
51 | mouse_update(d3.mouse(this));
52 | })
53 | .on('mouseup', function () {
54 | selection
55 | .on('mousemove', null)
56 | .on('mouseup', null);
57 | });
58 | mouse_update(d3.mouse(this));
59 | });
60 | render();
61 | return this;
62 | }
63 |
64 | swath.colors = function(_) {
65 | if (!arguments.length) return colors;
66 | colors = _.concat();
67 | return swath;
68 | };
69 |
70 | swath.size = function(_) {
71 | if (!arguments.length) return size;
72 | size = _;
73 | return swath;
74 | };
75 |
76 | swath.horizontal = function(_) {
77 | if (!arguments.length) return horizontal;
78 | horizontal = _;
79 | return swath;
80 | };
81 |
82 | swath.mid = function(_) {
83 | if (!arguments.length) return mid;
84 | mid = _;
85 | return swath;
86 | };
87 |
88 | swath.update = function(_) {
89 | update(_);
90 | return swath;
91 | };
92 |
93 | swath.on = function(type, cb) {
94 | dispatch.on(type, cb);
95 | return swath;
96 | };
97 |
98 | return swath;
99 | }
100 | });
--------------------------------------------------------------------------------
/app/src/config.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Created by yarden on 4/2/15.
3 | */
4 |
5 |
6 |
7 | define(function(require) {
8 |
9 | var d3 = require('d3');
10 |
11 |
12 | var value_band = d3.scale.linear().rangeRound([8, 0]);
13 | var VALUES_COLORMAP =["#4575b4", "#74add1", "#abd9e9", "#e0f3f8", "#ffffbf", "#fee090", "#fdae61", "#f46d43", "#d73027"];
14 | var JOBS_COLORMAP = colorbrewer.Set2[8];
15 | var value_color = d3.scale.ordinal().domain([0, 8]).range(VALUES_COLORMAP);
16 | var scale = d3.scale.quantize().domain([0,1]).range(VALUES_COLORMAP);
17 | var value_scale = d3.scale.linear().domain([0, 0.5, 1]).range([0, 0.5, 1]).clamp(true);
18 | var data_range = [0, 1];
19 |
20 | return {
21 | MULTI_JOBS_COLOR: '#00ffff',
22 | UNKNOWN_JOB_COLOR: '#e0e0e0',
23 | VALUES_COLORMAP: VALUES_COLORMAP,
24 | JOBS_COLORMAP: JOBS_COLORMAP,
25 |
26 | ROUTER_RADIUS: 2.5,
27 | ROUTER_RADIUS_INACTIVE: 1.5,
28 | ROUTER_RADIUS_HIGHLIGHT: 4,
29 |
30 | value_scale: value_scale,
31 |
32 | jobColor: function(id) {
33 | id = Math.min(id, JOBS_COLORMAP.length-1);
34 | return JOBS_COLORMAP[id];
35 | },
36 |
37 | data_range: function(range) {
38 | if (!arguments.length) return data_range;
39 | data_range = range;
40 | // if (!arguments.length) return scale.domain();
41 | // return scale.domain(range);
42 | },
43 |
44 | color: function (v) {
45 | return scale(value_scale(v));
46 | },
47 |
48 | color2: d3.scale.linear()
49 | .range(['#ff0000', '#00ff00'])
50 | .interpolate(d3.interpolateHcl)
51 | }
52 | });
53 |
--------------------------------------------------------------------------------
/app/src/data.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Created by yarden on 2/6/15.
3 | */
4 | define(function(require) {
5 |
6 | var model = require('model');
7 | var d3 = require('d3');
8 | var queue = require('d3_queue');
9 | var Radio = require('radio');
10 | var config = require('config');
11 |
12 |
13 | var runsInfo;
14 | var runs = d3.map();
15 |
16 |
17 | function Run(name) {
18 | this.groups = [];
19 | this.routers = d3.map();
20 | //this.nodes = new Map();
21 | this.counters = [];
22 | this.blues = [];
23 | this.greens = [];
24 | this.blacks = [];
25 | this.links = new Map();
26 | this.jobs = d3.map();
27 | this.jobsColor = [];
28 | this.core_to_node = d3.map();
29 |
30 |
31 |
32 | // for(g = 0; g < model.N_GROUPS; g++) {
33 | //
34 | // }
35 | }
36 |
37 | Run.prototype.createGroup = function(g) {
38 | var r, c, node, rid = 0, cid = 0;
39 | var group = {id: g, routers: [], mode: 'full'};
40 |
41 | this.groups[g] = group;
42 | for(r = 0; r < model.N_ROWS; r++) {
43 | var row = [];
44 | group.routers.push(row);
45 | for(c = 0; c < model.N_COLS; c++) {
46 | var router = {
47 | id: model.router_id(g, r, c),
48 | g: g, r:r, c:c,
49 | jobs:[],
50 | nodes_jobs: [undefined, undefined, undefined, undefined],
51 | nodes_color: [undefined, undefined, undefined, undefined],
52 | color: config.UNKNOWN_JOB_COLOR,
53 | green: 0,
54 | black: 0
55 | };
56 | row.push(router);
57 | this.routers.set(router.id, router);
58 | }
59 | }
60 | };
61 |
62 | Run.prototype.updateJobColor = function(job, color) {
63 | this.jobsColor[job.idx] = color;
64 | this.routers.values().forEach(function (router) {
65 | if (router.jobs.length == 1 && router.jobs[0] == job)
66 | router.color = color;
67 | });
68 | };
69 |
70 | function loadRun(channel, name) {
71 | var info = runsInfo.get(name);
72 | queue()
73 | .defer(d3.csv, info.jobs)
74 | .defer(d3.text, info.counters)
75 | .await(function (error, placement, counters) {
76 | if (error) {
77 | console.log("Error loading data", error);
78 | }
79 | else {
80 | var run = new Run(name);
81 | run.commFile = info.comm;
82 | loadPlacement(placement, run);
83 | loadCounters(counters, run);
84 | Backbone.Radio.channel(channel).trigger('data.run', run);
85 | }
86 | });
87 | }
88 |
89 | function loadPlacement(data, run) {
90 | var job, router, idx=0, n, i;
91 |
92 | data.forEach(function (item) {
93 | if (item.core == undefined || item.core == 0) {
94 | item.g = +item.g;
95 | item.r = +item.r;
96 | item.c = +item.c;
97 | item.n = +item.n;
98 | item.id = model.node_id(item);
99 | item.jobid = +item.jobid;
100 | if (item.jobid == undefined)
101 | console.log('undefined jobid for core:',item);
102 |
103 | // TEMP: ignore data outside of config params
104 | if (item.g >= model.N_GROUPS || item.r >= model.N_ROWS || item.c >= model.N_COLS || item.n >= model.N_NODES) return;
105 |
106 | job = run.jobs.get(item.jobid);
107 | if (!job) {
108 | job = {id: item.jobid, idx: idx, n:0};
109 | run.jobs.set(item.jobid, job);
110 | idx++;
111 | }
112 | job.n++;
113 |
114 | var router_id = model.router_id(item);
115 | router = run.routers.get(router_id);
116 | if (!router) {
117 | run.createGroup(item.g);
118 | router = run.routers.get(router_id);
119 | }
120 | if (router.jobs.indexOf(job) == -1) {
121 | router.jobs.push(job);
122 | //router.color = router.jobs.length == 1 ? job.color : config.MULTI_JOBS_COLOR;
123 | }
124 | if (!router.nodes_jobs[item.n]) router.nodes_jobs[item.n] = new Set([job]);
125 | else router.nodes_jobs[item.n].add(job);
126 | }
127 | });
128 |
129 | var jobs = run.jobs.values();
130 | jobs.sort(function (a,b) { return b.n - a.n;});
131 | for (i=0, n=jobs.length; i 1 ? config.MULTI_JOBS_COLOR : router.nodes_jobs[i].values().next().value.color;
146 | }
147 | });
148 | }
149 |
150 | function loadCounters(data, run) {
151 | var i, n, idx, base;
152 | var values, sg, sr, sc, dg, dr, dc, color, j, nc, id, link;
153 |
154 | var rows = d3.csv.parseRows(data);
155 | run.countersNames = rows[0].slice(7);
156 | run.counters = [];
157 | n = rows.length;
158 | for (i = 1; i < n; i++) {
159 | values = rows[i];
160 | sg = +values.shift();
161 | sr = +values.shift();
162 | sc = +values.shift();
163 | dg = +values.shift();
164 | dr = +values.shift();
165 | dc = +values.shift();
166 |
167 | // TEMP: ignore data outside of config parameters
168 | if (sg >= model.N_GROUPS || sr >= model.N_ROWS || sc >= model.N_COLS || dg >= model.N_GROUPS || dr >= model.N_ROWS || dc >= model.N_COLS) continue;
169 |
170 | color = values.shift();
171 | nc = values.length;
172 | for (j = 0; j < nc; j++) {
173 | values[j] = +values[j];
174 | }
175 | id = model.link_id(sg, sr, sc, dg, dr, dc);
176 | link = run.links.get(id);
177 | if (!link) {
178 | link = {
179 | id: id,
180 | color: color,
181 | srcId: {g: sg, r: sr, c: sc},
182 | destId: {g: dg, r: dr, c: dc},
183 | src: run.routers.get(model.router_id(sg, sr, sc)),
184 | dest: run.routers.get(model.router_id(dg, dr, dc)),
185 | counters: values,
186 | total: values.concat(),
187 | n: 1
188 | };
189 | run.links.set(link.id, link);
190 | if (color == 'b') run.blues.push(link);
191 | else if (color == 'g') run.greens.push(link);
192 | else run.blacks.push(link);
193 | } else {
194 | for (j=0; j to.id) {
71 | var temp = from;
72 | from = to; to = temp;
73 | }
74 | var id = from.id+':'+to.id;
75 | var edge = edge_map.get(id);
76 | if (!edge) {
77 | edge = {id:id, source:from, target:to};
78 | edge_map.set(id, edge);
79 | }
80 | var f = Math.floor(from.id/4);
81 | var t = Math.floor(to.id/4);
82 | var ft = f+':'+t;
83 | var link = link_map.get(ft);
84 | if (!link) {
85 | link = {id:ft, edges:d3.map()};
86 | link_map.set(ft, link);
87 | }
88 | link.edges.set(edge.id, edge);
89 | }
90 |
91 | function load(filename) {
92 | force.stop();
93 | if (filename == comm_file) return;
94 | comm_file = filename;
95 |
96 | node_map = d3.map();
97 | edge_map = d3.map();
98 | link_map = d3.map();
99 | nodes = [];
100 | edges = [];
101 |
102 | svgNodes.selectAll('.node').remove();
103 | svgEdges.selectAll('.link').remove();
104 |
105 | if (!filename) {
106 | console.log('*** missing name of comm file');
107 | return;
108 | }
109 | var from, to;
110 | d3.csv(filename, function(comm) {
111 | if (comm) {
112 | comm.forEach(function (item) {
113 | from = getNode(item.from);
114 | to = getNode(item.to);
115 | getEdge(from, to);
116 | }
117 | );
118 | }
119 | nodes = node_map.values();
120 | edges = edge_map.values();
121 |
122 | var n = nodes.length, i = -1;
123 | var angle;
124 | var node;
125 | while (++i < n) {
126 | node = nodes[i];
127 | angle = i * 2 * Math.PI / n;
128 | node.x = 500 + 500 * Math.cos(angle);
129 | node.y = 500 + 500 * Math.sin(angle);
130 | }
131 | console.log('load comm: ', nodes.length, edges.length);
132 | render();
133 | });
134 | }
135 |
136 | function render() {
137 | force
138 | .nodes(nodes)
139 | .links(edges)
140 | .on('tick', null)
141 | .on('end', end)
142 | .start();
143 |
144 | for (var i=0; i<50; i++) force.tick();
145 | force.on('tick', update);
146 |
147 | d3edges = svgEdges.selectAll('.edge')
148 | .data(edges, function(d) { return d.id; });
149 |
150 | d3edges.enter()
151 | .append('line')
152 | .attr('class', 'edge')
153 | .attr('stroke', '#ddd');
154 |
155 | d3edges.exit()
156 | .remove();
157 |
158 | d3nodes = svgNodes.selectAll('.node')
159 | .data(nodes, function(d) { return d.id;});
160 |
161 | d3nodes.enter()
162 | .append('circle')
163 | .attr('class', 'node')
164 | .attr('cx', function(d) { return d.x;})
165 | .attr('cy', function(d) { return d.y;})
166 | .attr('r', 3)
167 | .attr('fill', 'lightgray')
168 | .call(drag);
169 |
170 | d3nodes.exit().remove();
171 |
172 |
173 | }
174 |
175 | function clamp(x) { return x < 500 ? x : 500;}
176 |
177 | function update() {
178 | d3nodes
179 | .attr('cx', function(d) { return d.x; })
180 | .attr('cy', function(d) { return d.y; });
181 |
182 | d3edges
183 | .attr('x1', function(d) { return d.source.x; })
184 | .attr('y1', function(d) { return d.source.y; })
185 | .attr('x2', function(d) { return d.target.x; })
186 | .attr('y2', function(d) { return d.target.y; });
187 | }
188 |
189 | function end() {
190 | console.log('force done');
191 | }
192 |
193 | function filter() {
194 | var value, i, j;
195 | var map = d3.map(), node;
196 | var links = [];
197 | var selected = select_color == 'blue' ? data.blues
198 | : select_color == 'green' ? data.greens
199 | : select_color == 'black' ? data.blacks
200 | : data.links;
201 | node_map.forEach(function(key, node) { node.value = 0; node.color = '#000'});
202 | selected.forEach(function(link) {
203 | //value = link.counters[counterId];
204 | if (range[0] <= link.value && link.value <= range[1]) {
205 | var sid = model.node_id(link.srcId.g, link.srcId.r, link.srcId.c, 0);
206 | for(i = 0; i < 4; i++) {
207 | node = node_map.get(sid + i);
208 | if (node) {
209 | if (link.value > node.value) {
210 | node.value = link.value;
211 | node.color = link.vis_color;
212 | }
213 | map.set(sid + i, node);
214 | }
215 | }
216 | var did = model.node_id(link.destId.g, link.destId.r, link.destId.c, 0);
217 | for(i = 0; i < 4; i++) {
218 | node = node_map.get(did + i);
219 | if (node) {
220 | if (link.value > node.value) {
221 | node.value = link.value;
222 | node.color = link.vis_color;
223 | }
224 | map.set(did + i, node);
225 | }
226 | }
227 |
228 | //sid = Math.floor(sid/4);
229 | //did = Math.floor(did/4);
230 | //var id = sid < did ? sid+':'+did : did+':'+sid;
231 | //var l = link_map.get(id);
232 | //if (l) {
233 | // l.edges.forEach(function(entry, value) {
234 | // links.push(value);
235 | // });
236 | //}
237 | }
238 | });
239 |
240 | //var color = colors[select_color];
241 |
242 | //var d3links = svg.select('.edges').selectAll('.edge')
243 | // .data(links, function(d) { return d.id; });
244 | //
245 | //d3links
246 | // .attr('stroke', color);
247 | //
248 | //d3links.exit()
249 | // .attr('stroke', '#ddd');
250 |
251 | var nodes = svgNodes.selectAll('.node')
252 | .data(map.values(), function(d) { return d.id;});
253 |
254 | nodes
255 | .attr('fill', function(d) { return d.color;})
256 | .attr('r', 4);
257 |
258 | nodes.exit()
259 | .attr('fill', 'lightgray')
260 | .attr('r', 2);
261 | }
262 |
263 | var view = {};
264 |
265 | view.el = function(el) {
266 | svgContainer = d3.select(el)
267 | .classed("view", true)
268 | .append("svg")
269 | .attr('width', WIDTH)
270 | .attr('height', HEIGHT);
271 |
272 | svg = svgContainer.append("g").call(zoom);
273 |
274 | svg.append("rect")
275 | .attr("class", "overlay")
276 | .attr("width", WIDTH)
277 | .attr("height", WIDTH);
278 |
279 | container = svg.append('g');
280 | svgEdges = container.append('g').attr('class', 'edges');
281 | svgNodes = container.append('g').attr('class', 'nodes');
282 |
283 | return this;
284 | };
285 |
286 | view.resize = function(w,h) {
287 | force.size([w, h]);
288 |
289 | svg.select('.overlay')
290 | .attr('width', w)
291 | .attr('height', h);
292 |
293 | return this;
294 | };
295 |
296 | view.data = function(_) {
297 | if (!arguments.length) return data;
298 | data = _;
299 | load(data.commFile);
300 | return this;
301 | };
302 |
303 | view.counter = function(_) {
304 | if (!arguments.length) return counterId;
305 | counterId = _;
306 | return this;
307 | };
308 |
309 | view.range = function(_) {
310 | if (!arguments.length) return range;
311 | range = _;
312 | return this;
313 | };
314 |
315 | view.counter = function(_) {
316 | if (!arguments.length) return counterId;
317 | counterId = _;
318 | return this;
319 | };
320 |
321 | view.filter = function() {
322 | if (data && range)
323 | filter();
324 | return this;
325 | };
326 |
327 | view.select = function(color) {
328 | select_color = color;
329 | if (data && range)
330 | filter();
331 | return this;
332 | };
333 |
334 | return view;
335 |
336 | }
337 | });
--------------------------------------------------------------------------------
/app/src/graph/graph_view.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Created by yarden on 3/5/15.
3 | */
4 | define(function(require) {
5 | var Component = require('graph/graph');
6 | var _ = require('underscore');
7 | var $ = require('jquery');
8 | var Resize = require('resize');
9 | var Radio = require('radio');
10 |
11 | return function(id_) {
12 | var id = id_;
13 | var component, el;
14 | var active = false, _data, _range, _counter;
15 |
16 | Radio.channel(id).on('data.run', function (data) {
17 | if (active) component.data(data).filter();
18 | else _data = data;
19 | });
20 |
21 | Radio.channel(id).on('data.range', function (range) {
22 | if (active) component.range(range).filter();
23 | else _range = range;
24 | });
25 |
26 | Radio.channel(id).on('data.change', function (index) {
27 | if (active) component.counter(index).filter();
28 | else _counter = index;
29 | });
30 |
31 | function onResize() {
32 | component.resize(el.width(), el.height());
33 | }
34 |
35 | var view = function(elem) {
36 | //el = $(elem);
37 | var div = d3.select(elem).append('div');
38 | var ctrl = div.append('div').attr('class', 'graph-ctrl').selectAll('input')
39 | .data(['blue', 'green', 'black', 'all'])
40 | .enter()
41 | .append('g');
42 |
43 | ctrl.append('input')
44 | .attr('type', 'radio')
45 | .attr('name', 'select-link')
46 | .attr('value', function(d) { return d;})
47 | //.text(function(d) {return d;})
48 | .property('checked', function(d, i) { return i==0; })
49 | .on('change', function(d) { component.select(d);});
50 |
51 | ctrl.append('label')
52 | .text(function(d) { return d;});
53 |
54 | var g = div.append('div')[0][0];
55 | el = $(g);
56 | component = Component().el(g).counter(0).resize(600, 600);
57 | el.detectResizing({onResize: onResize});
58 | return view;
59 | };
60 |
61 | view.active = function (_) {
62 | if (!arguments.length) return active;
63 |
64 | if (active != _) {
65 | active = _;
66 | if (_data) component.data(_data);
67 | if (_counter != undefined) component.counter(_counter);
68 | if (_range) component.range(_range);
69 |
70 | if (_counter != undefined || _range)
71 | component.filter();
72 |
73 | _data = _range = _counter = undefined;
74 | }
75 | return this;
76 | };
77 |
78 | return view;
79 | }
80 |
81 | });
--------------------------------------------------------------------------------
/app/src/init.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Created by yarden on 12/15/14.
3 | */
4 | require.config({
5 |
6 | baseUrl: 'src',
7 | //urlArgs: "v=" + (new Date()).getTime(),
8 |
9 | paths: {
10 | text: '../lib/requirejs-text/text',
11 | jquery: '../lib/jquery/dist/jquery.min',
12 | jqueryui: '../lib/jquery-ui/jquery-ui.min',
13 | underscore: '../lib/lodash/lodash.min',
14 | //underscore: '../lib/underscore/underscore',
15 | backbone: '../lib/backbone/backbone',
16 | radio: '../lib/backbone.radio/build/backbone.radio',
17 | d3: '../lib/d3/d3',
18 | d3_queue: '../lib/queue-async/queue',
19 | resize: '../lib-code/jquery-element-onresize'
20 | }
21 | });
22 |
23 | // bootstrap the application
24 | require(['app'], function() {});
--------------------------------------------------------------------------------
/app/src/jobs_view.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Created by yarden on 3/25/15.
3 | */
4 | define(function(require) {
5 | var Radio = require('radio'),
6 | d3 = require('d3'),
7 | config = require('config');
8 |
9 | return function(id_, doc) {
10 | var localDocument = doc;
11 | var root = d3.select(localDocument);
12 | var id = id_;
13 |
14 | Radio.channel(id).on('data.run', newRun);
15 | Radio.channel(id).on('routers.active', active_routers);
16 |
17 | var colors = config.JOBS_COLORMAP; // colorbrewer.Set2[8];
18 | var context;
19 | var currentRun;
20 |
21 | root.select('body').append('div')
22 | .attr('class', 'color-menu')
23 | .style('display', 'none')
24 | .selectAll('div').data(colors)
25 | .enter()
26 | .append('div')
27 | .attr('class', 'color-entry')
28 | .style('width', '20px')
29 | .style('height', '10px')
30 | .style('background-color', function(d) { return d })
31 | .on('mouseup', function(d, i) {
32 | context.color = d;
33 | currentRun.updateJobColor(context, d);
34 | update();
35 | root.select('.color-menu').style('display', 'none')
36 | });
37 |
38 | root.select('body').on('click.color-menu', function() {
39 | root.select('.color-menu').style('display', 'none');
40 | });
41 |
42 | function update() {
43 | newRun(currentRun);
44 | Radio.channel(id).trigger('data.update', currentRun);
45 | }
46 |
47 | function newRun(run) {
48 | currentRun = run;
49 | var jobs = run.jobs.values().sort(function(a,b) { return b.n - a.n;});
50 | var l = jobs.length/2;
51 |
52 | root.select('#jobs').selectAll("div").remove();
53 |
54 | root.select('#jobs').selectAll("div")
55 | .data(jobs, function(d) { return d.id;})
56 | .enter()
57 | .append('div')
58 | .attr('class', 'job-entry')
59 | .style('position', 'absolute')
60 | .style('top', function(d,i) { return (i 0) min = value;
47 | if (value > max) max = value;
48 | if (value >= range[0] && value <= range[1]) {
49 | n++;
50 |
51 | src = srcCluster.add(link.srcId, value);
52 | dest = destCluster.add(link.destId, value);
53 |
54 | cellId = src.id + ':' + dest.id;
55 | cell = cells.get(cellId);
56 | if (!cell) {
57 | cell = {id: cellId, color: link.color, src: src, dest: dest, links: []};
58 | cells.set(cellId, cell);
59 | }
60 | cell.links.push(link);
61 | }
62 | });
63 |
64 | scale.domain([min, max]);
65 | //console.log('range: ', min, max);
66 | //console.log('links: ',n);
67 |
68 | computeValue(srcCluster.root());
69 | computeValue(destCluster.root());
70 |
71 | layout(srcCluster.root(), 10, 70, true);
72 | layout(destCluster.root(), 28, 52, false);
73 |
74 | var node, nodes = [];
75 | for (node of srcCluster.nodes().values()) {
76 | if (node.value > 0)
77 | nodes.push(node);
78 | }
79 |
80 | for (node of destCluster.nodes().values()) {
81 | if (node.value > 0)
82 | nodes.push(node);
83 | }
84 |
85 | //collect(srcCluster.root(), nodes);
86 | //collect(destCluster.root(), nodes);
87 |
88 | var d3nodes = d3dests.selectAll('rect')
89 | .data(nodes, function(d) {return d.id;});
90 |
91 | d3nodes.enter()
92 | .append('rect');
93 |
94 | d3nodes
95 | .attr('x', function(d) { return d.x;} )
96 | .attr('y', function(d) { return d.y;} )
97 | .attr('width', function(d) { return d.width;})
98 | .attr('height', function(d) { return d.height;})
99 | .attr('fill', function(d) { return d.color || 'lightgray';})
100 | .attr('opacity', function(d) { return scale(d.value); });
101 |
102 | d3nodes.exit()
103 | .remove();
104 |
105 | // bg lines
106 | var lines = [];
107 | var x1 = destCluster.root().x-1,
108 | x2 = x1 + destCluster.root().width+2,
109 | y1 = srcCluster.root().y-1,
110 | y2 = y1 + srcCluster.root().height+2;
111 |
112 | srcCluster.root().children.forEach(function(d) {
113 | if (d.value > 0)
114 | lines.push({x1:x1, y1:d.y-1, x2:x2, y2: d.y-1 });
115 | });
116 |
117 | destCluster.root().children.forEach(function(d) {
118 | if (d.value > 0)
119 | lines.push({x1:d.x-1, y1:y1, x2:d.x-1, y2: y2 });
120 | });
121 |
122 | var l = d3lines.selectAll('line')
123 | .data(lines);
124 |
125 | l.enter()
126 | .append('line');
127 |
128 | l.attr('x1', function(d) { return d.x1;})
129 | .attr('x2', function(d) { return d.x2;})
130 | .attr('y1', function(d) { return d.y1;})
131 | .attr('y2', function(d) { return d.y2;});
132 |
133 | l.exit().remove();
134 |
135 | // links
136 | nodes = [];
137 | for (cell of cells.values()) {
138 | if (!cell.src.ignore && !cell.dest.ignore) {
139 | cell.value = d3.max(cell.links, function(d) { return d.counters[counterId];});
140 | nodes.push(cell);
141 | }
142 | }
143 | d3nodes = d3cells.selectAll('rect')
144 | .data(nodes, function(d) { return d.id; });
145 |
146 | d3nodes.enter()
147 | .append('rect')
148 | .attr('width', 4)
149 | .attr('height', 4)
150 | .attr('fill', function(d) { return colormap[d.color];});
151 |
152 | d3nodes
153 | .attr('x', function(d) { return d.dest.x; })
154 | .attr('y', function(d) { return d.src.y; })
155 | .attr('opacity', function(d) { return scale(d.value); });
156 |
157 | d3nodes.exit().remove();
158 | }
159 |
160 | function collect(node, list) {
161 | list.push(node);
162 | if (node.open && node.value > 0 && node.children) {
163 | var n = node.children.length;
164 | for (var i=0; i 0 && node.children.length || 0;
172 |
173 | x += dx;
174 | if (n > 0) {
175 | for(i = 0; i < n; i++) {
176 | if (node.children[i].value > 0) {
177 | y = dy + layout(node.children[i], x, y, horizontal);
178 | }
179 | }
180 | y -= dy;
181 | } else {
182 | y += 4;
183 | }
184 | x -= dx;
185 |
186 | if (horizontal) assign(node, x0, y0, dx - 1, y - y0);
187 | else assign(node, y0, x0, y-y0, dx-1);
188 |
189 | return y;
190 | }
191 |
192 | function assign(node, x, y, w, h) {
193 | node.x = x;
194 | node.y = y;
195 | node.width = w;
196 | node.height = h;
197 | }
198 |
199 | function computeValue(node) {
200 | if (node.children) {
201 | node.value = 0;
202 | var n = node.children.length;
203 | for(var i = 0; i < n; i++) {
204 | node.value = Math.max(node.value, computeValue(node.children[i]));
205 | }
206 | } else {
207 | node.value = node.values && d3.max(node.values) || 0;
208 | }
209 | return node.value;
210 | }
211 |
212 | function update1() {
213 | var cellId, n, i, y, x;
214 | var value, src, dest, srcId, destId, cell;
215 |
216 | srcNodes = new Map();
217 | destNodes = new Map();
218 | cells = new Map();
219 |
220 | var min = range[1], max = range[0];
221 | n = 0;
222 | data.links.forEach(function(link) {
223 | if (!link.counters) return;
224 | value = link.counters[counterId];
225 | if (value >= range[0] && value <= range[1]) {
226 | if (value < min) min = value;
227 | if (value > max) max = value;
228 | n++;
229 | srcId = model.router_id(link.src);
230 | src = srcNodes.get(srcId);
231 | if (!src) {
232 | src = {id: srcId, values: []};
233 | srcNodes.set(srcId, src);
234 | }
235 | src.values.push(value);
236 |
237 | destId = model.router_id(link.dest);
238 | dest = destNodes.get(destId);
239 | if (!dest) {
240 | dest = {id: destId, values: []};
241 | destNodes.set(destId, dest);
242 | }
243 | dest.values.push(value);
244 |
245 | cellId = srcId + ':' + destId;
246 | cell = cells.get(cellId);
247 | if (!cell) {
248 | cell = {id: cellId, color: link.color, src:src, dest:dest, links: []};
249 | cells.set(cellId, cell);
250 | }
251 | cell.links.push(link);
252 | }
253 | });
254 |
255 | scale.domain([min, max]);
256 |
257 | console.log('links: ',n);
258 |
259 | // sort based on max per src/dest
260 | var srcArray = [];
261 | for (src of srcNodes.values()) {
262 | src.value = d3.max(src.values);
263 | srcArray.push(src);
264 | }
265 | srcArray.sort(function(a, b) { return b.value - a.value;});
266 | n = srcArray.length;
267 | y = 50;
268 | for (i = 0; i 100)
278 | srcArray = srcArray.slice(0,100);
279 |
280 | var destArray = [];
281 | for (dest of destNodes.values()) {
282 | dest.value = d3.max(dest.values);
283 | destArray.push(dest);
284 | }
285 | destArray.sort(function(a, b) { return b.value - a.value;});
286 | n = destArray.length;
287 | x = 50;
288 | for (i = 0; i 100)
298 | destArray = destArray.slice(0, 100);
299 |
300 | var cellArray = [];
301 | for (cell of cells.values()) {
302 | if (!cell.src.ignore && !cell.dest.ignore) {
303 | cell.value = d3.max(cell.links, function(d) { return d.counters[counterId];});
304 | cellArray.push(cell);
305 | }
306 | }
307 | console.log('cells: ', cellArray.length, ' / ', cells.size );
308 |
309 | // draw
310 | var d3nodes = d3srcs.selectAll('rect')
311 | .data(srcArray, function(d) {return d.id;});
312 |
313 | d3nodes.enter()
314 | .append('rect')
315 | .attr('width', 4)
316 | .attr('height', 4)
317 | .attr('fill', 'lightgray');
318 |
319 | d3nodes
320 | .attr('x', function(d) { return d.x;} )
321 | .attr('y', function(d) { return d.y;} );
322 |
323 | d3nodes.exit()
324 | .remove();
325 |
326 | d3nodes= d3dests.selectAll('rect')
327 | .data(destArray, function(d) {return d.id;});
328 |
329 | d3nodes.enter()
330 | .append('rect')
331 | .attr('width', 4)
332 | .attr('height', 4)
333 | .attr('fill', 'lightgray');
334 |
335 | d3nodes
336 | .attr('x', function(d) { return d.x;} )
337 | .attr('y', function(d) { return d.y;} );
338 |
339 | d3nodes.exit()
340 | .remove();
341 |
342 | d3nodes = d3cells.selectAll('rect')
343 | .data(cellArray, function(d) { return d.id; });
344 |
345 | d3nodes.enter()
346 | .append('rect')
347 | .attr('width', 4)
348 | .attr('height', 4)
349 | .attr('fill', function(d) { return colormap[d.color];});
350 |
351 | d3nodes
352 | .attr('x', function(d) { return d.dest.x; })
353 | .attr('y', function(d) { return d.src.y; })
354 | .attr('opacity', function(d) { return scale(d.value); });
355 |
356 | d3nodes.exit().remove();
357 | }
358 |
359 | var adj = function() {};
360 |
361 | adj.el = function(el) {
362 | svgContainer = d3.select(el)
363 | .classed("matrix", true)
364 | .append("svg")
365 | .attr('width', WIDTH)
366 | .attr('height', HEIGHT);
367 |
368 | svg = svgContainer.append("g");
369 |
370 | d3srcs = svg.append('g').attr('class', 'src');
371 | d3dests = svg.append('g').attr('class', 'dest');
372 | d3cells = svg.append('g').attr('class', 'cells');
373 | d3lines = svg.append('g').attr('class', 'lines');
374 |
375 | return this;
376 | };
377 |
378 | adj.resize = function(w, h) {
379 | svgContainer.attr("width", w).attr("height", h);
380 | //layout.size(w, h);
381 | if (data && range)
382 | update();
383 | return this;
384 | };
385 |
386 | adj.data = function(_) {
387 | if (!arguments.length) return data;
388 | data = _;
389 | return this;
390 | };
391 |
392 | adj.counter = function(_) {
393 | if (!arguments.length) return counterId;
394 | counterId = _;
395 | return this;
396 | };
397 |
398 | adj.range = function(_) {
399 | if (!arguments.length) return range;
400 | range = _;
401 | return this;
402 | };
403 |
404 | adj.update = function() {
405 | update();
406 | return this;
407 | };
408 |
409 | return adj;
410 | }
411 | });
--------------------------------------------------------------------------------
/app/src/matrix/cluster.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Created by yarden on 3/15/15.
3 | */
4 | define(function(require) {
5 |
6 | return function(id) {
7 | var nodes = new Map(), root = {id: id, open: true};
8 | var levels = [16, 6, 16];
9 | var colors = d3.scale.category20();
10 |
11 | function key(id) {
12 | return root.id+':'+id.g+':'+id.r+':'+id.c;
13 | }
14 |
15 | function init() {
16 | build(root, 0);
17 | for (var i=0; i 1000;});
139 | _series = series;
140 | domain = domain || [d3.min(_series), d3.max(_series)];
141 | x.domain(domain);
142 |
143 | if (domain[0] > 1000)
144 | xAxis.tickFormat(d3.format('.02e'));
145 | else
146 | xAxis.tickFormat(d3.format('g'));
147 |
148 | data = d3.layout.histogram()
149 | .range(x.domain())
150 | .bins(x.ticks(20))
151 | (_series);
152 |
153 |
154 | data.forEach(function(d) { console.log('hist:', d.x, d.y);});
155 | dx = data.length > 0 ? data[0].dx : 5;
156 | var min = x.domain()[0];
157 | dx = x(min+dx)-1;
158 | if (data.length > 1) {
159 | dx = x(data[1].x) - x(data[0].x);
160 | }
161 | //console.log('dx:',dx, ' x(dx):', x(dx));
162 | y.domain([0, d3.max(data, function(d) { return d.y;})]);
163 |
164 | brush.event(svg.select('.brush'));
165 | svg.select('.brush').call(brush);
166 | draw();
167 | return histogram;
168 | };
169 |
170 | histogram.xdomain = function(from, to) {
171 | var save=duration; duration = 0;
172 | this.data(_series, [from, to]);
173 | svg.select('.brush').call(brush);
174 | duration = save;
175 |
176 | return histogram;
177 | };
178 |
179 | histogram.on = function(type, listener) {
180 | dispatch.on(type, listener);
181 | return histogram;
182 | };
183 |
184 | return histogram;
185 | };
186 |
187 | });
--------------------------------------------------------------------------------
/app/src/svg/histogram_g.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Created by yarden on 12/16/14.
3 | */
4 |
5 | define(function(require) {
6 | var
7 | d3 = require('d3');
8 |
9 | return function() {
10 | var
11 | margin = {top: 10, right:10, bottom: 10, left: 40},
12 |
13 | width = 250-margin.left-margin.right,
14 | height = 150 - margin.top - margin.bottom,
15 | dx = 5, duration = 500,
16 | svg, histogram, _series, handle,
17 | counterId = undefined,
18 | percentile = undefined,
19 | percentileX = undefined,
20 | highlightPercentile = [false, false, false],
21 | dispatch = d3.dispatch('brushed');
22 |
23 | var insideMode = true;
24 | var leftHandle, rightHandle;
25 |
26 | var stack = d3.layout.stack();
27 | var x = d3.scale.linear()
28 | .domain([0, 1])
29 | .range([0, width])
30 | .clamp(true);
31 |
32 | var y = d3.scale.linear()
33 | .domain([0, 1])
34 | .rangeRound([height, 0]);
35 |
36 | var color = d3.scale.linear()
37 | .domain([0,2])
38 | .range( ['#4daf4a','#377eb8','#404040']);
39 |
40 | var xAxis = d3.svg.axis()
41 | .scale(x)
42 | .orient("bottom")
43 | .ticks(4)
44 | .tickFormat(d3.format('4g'));
45 |
46 | var yAxis = d3.svg.axis()
47 | .scale(y)
48 | .orient("left")
49 | .ticks(4)
50 | .tickFormat(d3.format('4g'));
51 |
52 | var brush = d3.svg.brush()
53 | .x(x)
54 | .on('brush', brushed);
55 | // .on('brushend', brushed);
56 |
57 | var dispatch_args = { f: 0, t: 0, i: false};
58 | var timeoutId = null;
59 |
60 | function brushed() {
61 | var e = brush.extent();
62 | // console.log('brush', e, d3.event);
63 | var ex = [Math.round(x(e[0])), Math.round(x(e[1]))];
64 |
65 | if (!insideMode) {
66 | leftHandle.attr('width', ex[0]);
67 | rightHandle.attr('x', ex[1]);
68 | rightHandle.attr('width', width-ex[1]);
69 | }
70 | var i, j, prev = highlightPercentile.concat();
71 | for (i=0; i<3; i++) {
72 | highlightPercentile[i] = false;
73 | for (j=0; j<2; j++) {
74 | if (ex[j] == percentileX[i]) highlightPercentile[i] = true;
75 | }
76 | }
77 | var change = false;
78 | for (i=0; i<3; i++) change |= prev[i] != highlightPercentile[i];
79 | // if (change) draw();
80 | // dispatch_args = { f: e[0], t: e[1], i: insideMode};
81 | // if (!timeoutId) {
82 | // timeoutId = window.setTimeout(function () {
83 | // console.log('delayed dispatch');
84 | // dispatch.brushed(dispatch_args.f, dispatch_args.t, dispatch_args.i);
85 | // timeoutId = null;
86 | // }, 0);
87 | // console.log('timeout:', timeoutId);
88 | // }
89 | dispatch.brushed([e[0], e[1], insideMode]);
90 | }
91 |
92 | var colorAccessor = function(link) {
93 | return link.color;
94 | };
95 |
96 | function draw() {
97 | if (svg == undefined) return;
98 |
99 | if (!percentile) {
100 | var values = _series.map(valueAccessor).sort(d3.ascending);
101 | var l = values.length;
102 | percentile = [values[l/4], values[l/2], values[l*3/4]];
103 | percentileX = [Math.round(x(percentile[0])), Math.round(x(percentile[1])),Math.round(x(percentile[2]))];
104 | }
105 |
106 | svg.select('.x')
107 | .call(xAxis);
108 |
109 | svg.select('.y')
110 | .call(yAxis);
111 |
112 | var colors = {g:'green', k:'black', b:'steelblue'};
113 | var bars = [];
114 | histogram.forEach(function(bin, idx) {
115 | var i=-1, n = bin.length, counts = {g:0, k:0, b:0};
116 | while( ++i 0 && lx[0] < width,
149 | color: highlightPercentile[0] && 'blue' || 'lighgray',
150 | width: highlightPercentile[0] && 4 || 1},
151 | {x1: lx[1], x2: lx[1], y1: 0, y2: -6, visible: lx[1] > 0 && lx[1] < width,
152 | color: highlightPercentile[1] && 'blue' || 'lightgray',
153 | width: highlightPercentile[1] && 4 || 1},
154 | {x1: lx[2], x2: lx[2], y1: 0, y2: -6, visible: lx[2] > 0 && lx[2] < width,
155 | color: highlightPercentile[2] && 'blue' || 'lightgray',
156 | width: highlightPercentile[2] && 4 || 1},
157 | {x1: lx[0], x2: lx[2], y1: -2.5, y2: -2.5, visible: true, color:'gray', width: 1}
158 | ];
159 |
160 | var line = svg.select('.percentile').selectAll('line')
161 | .data(lines);
162 |
163 | line.enter()
164 | .append('line')
165 | .style('stroke', 'black')
166 | .style('stroke-width', '1')
167 | .style('shape-rendering', 'crispEdges');
168 |
169 | line
170 | .attr('x1', function(d) { return d.x1; })
171 | .attr('x2', function(d) { return d.x2; })
172 | .attr('y1', function(d) { return d.y1; })
173 | .attr('y2', function(d) { return d.y2; })
174 | .style('stroke', function(d) { return d.color;})
175 | .style('stroke-width', function(d) { return d.width; })
176 | .attr('visibility', function(d) { return d.visible && 'visible' || 'hidden'; });
177 |
178 | }
179 |
180 | function api(selection) {
181 | svg = selection.append('g')
182 | .attr('class', 'histogram')
183 | .attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');
184 |
185 | svg.append('g')
186 | .append('rect')
187 | .attr('width', width)
188 | .attr('height', height)
189 | .style('fill', 'steelblue')
190 | .style('opacity', 0.0);
191 |
192 | var p = svg.append('g')
193 | .attr('class', 'percentile');
194 |
195 | //p.append('rect')
196 | // .attr('x', x(0))
197 | // .attr('y', -5)
198 | // .attr('height', 5)
199 | // .attr('width', 0)
200 | // .attr('fill', 'orange');
201 |
202 | //p.append('line')
203 | // .attr('x1', 0)
204 | // .attr('x2', 0)
205 | // .attr('y1', 0)
206 | // .attr('y2', -5)
207 | // .style('stroke', 'black')
208 | // .style('stroke-width', 1);
209 |
210 | handle = svg.append('g')
211 | .attr('class', 'brush')
212 | .call(brush);
213 |
214 | leftHandle = svg.append('rect')
215 | .attr('class', 'externalHandler')
216 | .attr('width', 0)
217 | .attr('height', height);
218 |
219 | rightHandle = svg.append('rect')
220 | .attr('class', 'externalHandler')
221 | .attr('width', 0)
222 | .attr('height', height)
223 | .attr('x', width);
224 |
225 | handle.selectAll('rect')
226 | .attr('height', height);
227 |
228 | svg.append('g')
229 | .attr('class', 'x axis')
230 | .attr('transform', 'translate(0,' + height + ')')
231 | .call(xAxis);
232 |
233 | svg.append('g')
234 | .attr('class', 'y axis')
235 | .call(yAxis);
236 |
237 | brush.clear();
238 | return this;
239 | }
240 |
241 | api.width = function(w) {
242 | if (!arguments.length) return width + margin.left + margin.right;
243 | width = w - margin.left - margin.right;
244 | x.range([0, width]);
245 |
246 | draw();
247 | return this;
248 | };
249 |
250 | api.height = function(h) {
251 | if (!arguments.length) return height + margin.top + margin.bottom;
252 | height = h - margin.top - margin.bottom;
253 | y.rangeRound([height, 0]);
254 | yAxis.ticks( Math.max(2, height/50));
255 | if (handle) {
256 | handle.selectAll('rect')
257 | .attr('height', height);
258 | }
259 |
260 | draw();
261 | return this;
262 | };
263 |
264 | api.margin = function(m) {
265 | if (!arguments.length) return margin;
266 | svg.attr('translate', 'transform(' + (m.left - margin.left) + ',' + (m.top - margin.top) + ')');
267 | margin = m;
268 | return api;
269 | };
270 |
271 | api.counter = function(id) {
272 | counterId = id;
273 | percentile = undefined;
274 | return this;
275 | };
276 |
277 | var valueAccessor = function(link) {
278 | return link.counters[counterId];
279 | };
280 |
281 | api.data = function(series, domain) {
282 | _series = series;
283 | percentile = undefined;
284 | return this;
285 | };
286 |
287 | api.range = function(range) {
288 | var save=duration; duration = 0;
289 |
290 | var extent = brush.extent();
291 |
292 | x.domain(range);
293 |
294 | histogram = d3.layout.histogram()
295 | .range(x.domain())
296 | .value(valueAccessor)
297 | .bins(20)
298 | (_series);
299 |
300 | dx = histogram.length > 1 ? x(histogram[1].x) - x(histogram[0].x)-1 : 5;
301 |
302 | y.domain([0, d3.max(histogram, function(d) { return d.y;})]);
303 | draw();
304 |
305 | if (!brush.empty()) {
306 | //extent = [Math.min(Math.max(extent[0], range[0]), range[1]), Math.max(Math.min(extent[1], range[1]), range[0])];
307 | //brush.extent(extent);
308 | svg.select('.brush').call(brush);
309 | brush.event(svg.select('.brush'));
310 | }
311 | duration = save;
312 | return this;
313 | };
314 |
315 | api.mode = function(on) {
316 | insideMode = on;
317 | if (insideMode) {
318 | leftHandle.attr('x', 0).attr('width', 0);
319 | rightHandle.attr('x', width).attr('width', 0);
320 | svg.select('.brush .extent').style('opacity', 1);
321 | } else {
322 | var e = brush.extent();
323 | var r = x(e[1]);
324 | leftHandle.attr('width', x(e[0]));
325 | rightHandle.attr('x', r).attr('width', width-r);
326 | svg.select('.brush .extent').style('opacity', 0);
327 | }
328 | svg.select('.brush').call(brush);
329 | brushed();
330 | };
331 |
332 | api.on = function(type, listener) {
333 | dispatch.on(type, listener);
334 | return this;
335 | };
336 |
337 | return api;
338 | };
339 |
340 | });
--------------------------------------------------------------------------------
/app/src/svg/slider.js:
--------------------------------------------------------------------------------
1 | define(function(require) {
2 | var d3 = require('d3');
3 |
4 | return function() {
5 | var width = 100, height = 25,
6 | handle, d3axis,
7 | manual = false;
8 |
9 | var dispatch = d3.dispatch('start', 'move', 'end');
10 | var x = d3.scale.linear()
11 | .domain([0, 1])
12 | .range([0, width]);
13 | //.clamp(true);
14 |
15 | var axis = d3.svg.axis()
16 | .scale(x)
17 | .orient('bottom')
18 | .ticks(4);
19 | // .tickFormat(function (d) { return d ; })
20 | // .tickSize(8, 8)
21 | // .tickPadding(12)
22 |
23 | var brush = d3.svg.brush()
24 | .x(x)
25 | //.extent([0, 1])
26 | .on("brush", brushmove)
27 | .clear();
28 | ;
29 |
30 | function brushmove() {
31 | manual = true;
32 | var e = brush.extent();
33 | dispatch.move(e);
34 | }
35 |
36 |
37 | function slider(selection) {
38 | selection.each(function () {
39 | var g = d3.select(this);
40 |
41 | var frame = g.append("g")
42 | .attr('class', 'slider')
43 | .attr('width', width)
44 | .attr('height', height);
45 |
46 | d3axis = frame.append('g')
47 | .attr('class', 'x axis')
48 | .attr('transform', 'translate(0.5,' + 10.5 + ')')
49 | .call(axis);
50 |
51 | handle = frame.append('g')
52 | .attr("class", "brush")
53 | .attr('transform', 'translate(0.5,' + 5 + ')')
54 | .call(brush);
55 |
56 | brush.clear();
57 |
58 | // handle.selectAll('.resize').append('path')
59 | // .attr('d', grasp);
60 |
61 | handle.selectAll("rect")
62 | .attr("height", 10);
63 |
64 | //handle.selectAll('.resize').selectAll('rect')
65 | // .style('visibility', 'visible');
66 | });
67 | }
68 |
69 | slider.width = function (value) {
70 | if (!arguments.length) return width;
71 | width = value;
72 | //console.log('extent pre:', brush.extent());
73 | x.range([0, width]);
74 | brush.x(x);
75 | if (handle != undefined) {
76 | handle.call(brush);
77 | //console.log('extent: post', brush.extent());
78 | }
79 |
80 | return slider;
81 | };
82 |
83 | slider.height = function (value) {
84 | if (!arguments.length) return height;
85 | height = value;
86 | return slider;
87 | };
88 |
89 | slider.scale = function (s) {
90 | if (!arguments.length) return x;
91 | x = s;
92 | return slider;
93 | };
94 |
95 | slider.axis = function (a) {
96 | if (!arguments.length) return axis;
97 | axis = a;
98 | return slider;
99 | };
100 |
101 | slider.domain = function(value) {
102 | if (!arguments.length) return x.domain();
103 | x.domain(value);
104 | if (value[0] > 1000)
105 | axis.tickFormat(d3.format('.1e'));
106 | else
107 | axis.tickFormat(d3.format('g'));
108 |
109 | //g.select('.x')
110 | d3axis.call(axis);
111 | //var extent = brush.extent();
112 | //if (manual) {
113 | // if (extent[0] < value[0]) extent[0] = value[0];
114 | // if (extent[1] > value[1]) extent[1] = value[1];
115 | // brush.extent(extent);
116 | //} else {
117 | // brush.extent(x.domain());
118 | //}
119 | brush.extent(x.domain());
120 |
121 | if (handle) handle.call(brush);
122 | return slider;
123 | };
124 |
125 | slider.extent = function(value) {
126 | if (!arguments.length) return brush.extent();
127 | brush.extent(value);
128 | return slider;
129 | };
130 |
131 | slider.on = function(type, listener) {
132 | dispatch.on(type, listener);
133 | return slider;
134 | };
135 |
136 | return slider;
137 | };
138 | });
--------------------------------------------------------------------------------
/app/src/views.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Created by yarden on 3/12/15.
3 | */
4 | define(function(require) {
5 | var d3 = require('d3');
6 | var RadialFactory = require('radial/radial_view');
7 | var MatrixFactory = require('matrix/matrix_view');
8 | var GraphFactory = require('graph/graph_view');
9 |
10 | return function(id, doc) {
11 | var localDocument = doc;
12 | var root = d3.select(localDocument);
13 | // var id = id_;
14 |
15 | // var views = [
16 | // {id:'radial', factory: RadialFactory, view:undefined},
17 | // {id:'matrix', factory: MatrixFactory, view:undefined},
18 | // {id:'graph', factory: GraphFactory, view:undefined }
19 | // ];
20 | //
21 | //
22 | // root.select('.views').select(".tab-links").selectAll("li")
23 | // .data(views)
24 | // .enter()
25 | // .append('li')
26 | // .classed('active', function(d,i) { return i==0;})
27 | // .append('a')
28 | // .attr('href', function(d) {return '#'+d.id;})
29 | // .text(function(d) { return d.id;})
30 | // .on('click', function(d) {
31 | // root.select('.views').select('.tab-links').selectAll('li')
32 | // .data(views)
33 | // .classed('active', function(tab) { return tab.id == d.id; });
34 | //
35 | // root.select('.views').selectAll('.tab')
36 | // .data(views)
37 | // .classed('active', function(tab) { return tab.id == d.id; })
38 | // .each(function(tab) { tab.view.active(tab.id == d.id); });
39 | // d3.event.preventDefault();
40 | // });
41 | //
42 | // root.select('.views').select('.tab-content').selectAll("div")
43 | // .data(views)
44 | // .enter()
45 | // .append('div')
46 | // .attr('id', function(d) { return d.id;})
47 | // .attr('class', function(d, i) { return 'tab'+(i==0? ' active' : ''); })
48 | // .each(function(d, i) {
49 | // d.view = d.factory(id);
50 | // var a = d.view(this);
51 | // d.view.active(i==0);});
52 | // };
53 |
54 | RadialFactory(id)(root.select('#view').node());
55 | }
56 | });
--------------------------------------------------------------------------------
/bower.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "radial",
3 | "version": "0.1.0",
4 | "authors": [
5 | "Yarden Livnat "
6 | ],
7 | "description": "Dragonfly performance",
8 | "main": "app.js",
9 | "license": "MIT",
10 | "private": true,
11 | "ignore": [
12 | "**/.*",
13 | "node_modules",
14 | "bower_components",
15 | "test",
16 | "tests"
17 | ],
18 | "dependencies": {
19 | "requirejs": "~2.1.15",
20 | "lodash": "~3.4.0",
21 | "requirejs-text": "~2.0.13",
22 | "require-css": "~0.1.8",
23 | "jquery": "~2.1.3",
24 | "fontawesome": "~4.3.0",
25 | "d3": "~3.5.3",
26 | "jquery-ui": "~1.11.2",
27 | "sprintf": "~1.0.2",
28 | "queue-async": "~1.0.7",
29 | "backbone.radio": "~0.9.0",
30 | "backbone": "~1.1.2",
31 | "jqueryui": "~1.11.3",
32 | "colorbrewer": "~1.0.0"
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/run:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | cd app
3 | #python -m SimpleHTTPServer 8888
4 | python ../server.py $1
5 |
6 |
--------------------------------------------------------------------------------
/server.py:
--------------------------------------------------------------------------------
1 | import os
2 | from sys import argv
3 |
4 | try:
5 | from SimpleHTTPServer import SimpleHTTPRequestHandler as Handler
6 | from SocketServer import TCPServer as Server
7 | except ImportError:
8 | from http.server import SimpleHTTPRequestHandler as Handler
9 | from http.server import HTTPServer as Server
10 |
11 | PORT = int(os.getenv('DRAGONVIEW_PORT', 8000))
12 |
13 | DATA_DIR = 'sim'
14 | if len(argv) == 2:
15 | DATA_DIR = argv[1]
16 | #if DATA_DIR[-1:] != '/':
17 | # DATA_DIR += '/'
18 |
19 | DATA_DIR = '/data/'+DATA_DIR
20 |
21 |
22 | class MyHandler(Handler):
23 | def do_GET(self):
24 | print 'PATH: ', self.path[:5]
25 | if self.path[:5] == '/data':
26 | print 'path:', self.path
27 | self.path = DATA_DIR + self.path[5:]
28 | print 'new path:', self.path
29 | Handler.do_GET(self)
30 |
31 | httpd = Server(("", PORT), MyHandler)
32 | print 'Port %i \nDATA %s' % (PORT, DATA_DIR)
33 | httpd.serve_forever()
--------------------------------------------------------------------------------