Skip to content

Commit b3d8f88

Browse files
authored
Merge pull request #56 from oslabs-beta/graph
Graph Roundtrip Updates Timing is still not correct, but we will continue to improve it.
2 parents 1eaa980 + 6181182 commit b3d8f88

File tree

4 files changed

+77
-52
lines changed

4 files changed

+77
-52
lines changed

src/client/components/containers/ReqResContainer.jsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ class ReqResContainer extends Component {
2323
}
2424

2525
render() {
26-
26+
console.log(this.props.reqResArray)
2727
const reqResArr = this.props.reqResArray
2828
.map((reqRes, index) => {
2929
return <SingleReqResContainer

src/client/components/display/Graph.jsx

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,20 @@ class Graph extends Component {
196196

197197
// populate events
198198
switch (reqRes.connectionType) {
199+
case 'GRPC': {
200+
reqRes.response.times.forEach(message => {
201+
if (message.timeSent && message.timeReceived) {
202+
203+
newEventCounter += 1;
204+
dataSet.data.push({
205+
x: message.timeReceived - message.timeSent,
206+
y: index,
207+
});
208+
}
209+
});
210+
211+
break;
212+
}
199213
case 'SSE': {
200214
reqRes.response.events.forEach((event) => {
201215
if (Date.now() - event.timeReceived < this.state.timeFromNowToDisplay) {

src/client/components/display/ResponseEventsDisplay.jsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import createDOMPurify from 'dompurify';
88
const ResponseEventsDisplay = ({ response }) => {
99
const { events, headers } = response;
1010
const displayContents = [];
11-
// console.log('what is events' , events)
1211

1312
// If it's an SSE, render event rows
1413

src/client/controllers/grpcController.js

Lines changed: 62 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,9 @@ let grpcController = {};
1919

2020
grpcController.openGrpcConnection = (reqResObj, connectionArray) => {
2121
//check for connection, if not open one
22-
console.log(reqResObj)
23-
if (false) {
24-
//use existing connection
25-
}
26-
else {
22+
23+
reqResObj.connectionType = 'GRPC';
24+
reqResObj.response.times = [];
2725

2826
// build out variables from reqresObj properties
2927
let service = reqResObj.service;
@@ -72,13 +70,10 @@ grpcController.openGrpcConnection = (reqResObj, connectionArray) => {
7270
let keysArray;
7371
for (let messageIdx in foundService.messages) {
7472
let message = foundService.messages[messageIdx];
75-
// console.log('message' , message)
7673

7774
if (foundRpc.req === message.name || foundRpc.req === 'stream ' +message.name) {
78-
// console.log('found matching message name')
7975
messageDefObj = message.def;
8076
keysArray = [];
81-
// console.log('messagedef', message.def);
8277
Object.keys(messageDefObj).forEach((key)=>{
8378
keysArray.push(key)
8479
})
@@ -104,36 +99,39 @@ grpcController.openGrpcConnection = (reqResObj, connectionArray) => {
10499
// create client requested metadata key and value pair for each type of streaming
105100
let meta = new grpc.Metadata()
106101
let metaArr = reqResObj.request.headers;
107-
// console.log("metaArr from grpcController line 100:", metaArr)
108102
for (let i = 0; i < metaArr.length; i+=1) {
109103
let currentHeader = metaArr[i];
110104
meta.add(currentHeader.key, currentHeader.value)
111-
// console.log("meta header key, value", meta)
112105
}
113106

114107
if (rpcType === 'UNARY') {
115108
let query = reqResObj.queryArr[0]
109+
let time = {};
116110

117111
// Open Connection and set time sent for Unary
118112
reqResObj.connection = 'open';
119-
reqResObj.timeSent = Date.now();
113+
114+
time.timeSent = Date.now();
120115
// make Unary call
121116
client[rpc](query, meta, (err, data)=> {
122-
// console.log("query from line 122 in grpcController", query)
117+
123118
if (err) {
124119
console.log('unary error' , err);
125120
}
126121
// Close Connection and set time received for Unary
127-
reqResObj.timeReceived = Date.now();
122+
reqResObj.timeSent = time.timeSent;
123+
124+
time.timeReceived = Date.now();
125+
reqResObj.timeReceived = time.timeReceived
126+
128127
reqResObj.connection = 'closed';
129-
reqResObj.connectionType = 'plain';
130128
reqResObj.response.events.push(data)
129+
reqResObj.response.times.push(time)
131130
store.default.dispatch(actions.reqResUpdate(reqResObj));
132131

133132

134133
}) // metadata from server
135134
.on('metadata', (metadata) => {
136-
// console.log("metadata from line 127", metadata)
137135
// if metadata is sent back from the server, analyze and handle
138136
let keys = Object.keys(metadata._internal_repr)
139137
for (let i = 0; i < keys.length; i += 1) {
@@ -147,8 +145,8 @@ grpcController.openGrpcConnection = (reqResObj, connectionArray) => {
147145
else if (rpcType === 'CLIENT STREAM') {
148146
// create call and open client stream connection
149147
reqResObj.connection = 'open';
150-
reqResObj.connectionType = 'plain';
151-
reqResObj.timeSent = Date.now();
148+
let timeSent = Date.now();
149+
reqResObj.timeSent = timeSent;
152150
let call = client[rpc](meta, function(error, response) {
153151
if (error) {
154152
console.log('error in client stream', error);
@@ -157,12 +155,16 @@ grpcController.openGrpcConnection = (reqResObj, connectionArray) => {
157155
else {
158156
//Close Connection for client Stream
159157
reqResObj.connection = 'closed';
160-
reqResObj.connectionType = 'plain';
161-
reqResObj.timeReceived = Date.now();
158+
let curTime = Date.now()
159+
reqResObj.response.times.forEach(time => {
160+
time.timeReceived = curTime;
161+
reqResObj.timeReceived = time.timeReceived;
162+
reqResObj.response.events.push(time)
163+
164+
})
162165
reqResObj.response.events.push(response)
163166
store.default.dispatch(actions.reqResUpdate(reqResObj));
164167

165-
// console.log('in client stream response', response);
166168
}}).on('metadata', (metadata) => {
167169
// if metadata is sent back from the server, analyze and handle
168170
let keys = Object.keys(metadata._internal_repr)
@@ -173,39 +175,50 @@ grpcController.openGrpcConnection = (reqResObj, connectionArray) => {
173175
store.default.dispatch(actions.reqResUpdate(reqResObj))
174176
});
175177

176-
// debugging call methods
177-
// console.log('call: ', call);
178178

179-
for (var i = 0; i < queryArr.length; i++) {
179+
for (let i = 0; i < queryArr.length; i++) {
180180
let query = queryArr[i];
181181
// Open Connection for client Stream
182182
// this needs additional work to provide correct sent time for each
183183
// request without overwrite
184+
let time = {};
185+
184186
reqResObj.connection = 'pending';
185-
reqResObj.connectionType = 'plain';
186-
reqResObj.timeSent = Date.now();
187+
188+
189+
time.timeSent = timeSent
190+
reqResObj.response.times.push(time)
191+
192+
193+
//reqResObj.connectionType = 'plain';
194+
// reqResObj.timeSent = Date.now();
195+
187196
call.write(query);
188-
// add console log for completed write?
189197
}
190198
call.end();
191199
}
192200
else if (rpcType === 'SERVER STREAM') {
193201
let timesArr = [];
194202
// Open Connection for SERVER Stream
195203
reqResObj.connection = 'open';
196-
reqResObj.connectionType = 'plain';
197204
reqResObj.timeSent = Date.now();
198-
console.log('rpc', rpc, 'reqresquery', reqResObj.queryArr[0])
199205
const call = client[rpc](reqResObj.queryArr[0], meta);
200206
call.on("data", resp => {
201-
// console.log('server streaming message:', data);
207+
let time = {};
208+
time.timeReceived = Date.now();
209+
time.timeSent = reqResObj.timeSent;
202210
// add server response to reqResObj and dispatch to state/store
203211
reqResObj.response.events.push(resp)
204-
timesArr.push(Date.now())
205-
console.log('new time pushed: ', timesArr)
212+
213+
reqResObj.response.times.push(time)
214+
215+
216+
// timesArr.push(Date.now())
217+
//console.log('new time pushed: ', timesArr)
206218
// console.log('data response server stream',resp)
207219
// console.log(reqResObj.response.events)
208220

221+
209222
store.default.dispatch(actions.reqResUpdate(reqResObj));
210223
})
211224
call.on('error', () => {
@@ -215,19 +228,21 @@ grpcController.openGrpcConnection = (reqResObj, connectionArray) => {
215228
call.on('end', () => {
216229
// Close Connection for SERVER Stream
217230
reqResObj.connection = 'closed';
218-
reqResObj.connectionType = 'plain';
219-
reqResObj.timeReceived =Date.now();
220-
reqResObj.timesArr = timesArr
231+
232+
reqResObj.timeReceived = Date.now();
233+
234+
// reqResObj.connectionType = 'plain';
235+
// reqResObj.timeReceived =Date.now();
236+
// reqResObj.timesArr = timesArr
237+
221238
// no need to push response to reqResObj, no event expected from on 'end'
222239
store.default.dispatch(actions.reqResUpdate(reqResObj));
223-
// console.log('server side stream completed')
224240
})
225241
call.on('metadata', (metadata) => {
226242
let keys = Object.keys(metadata._internal_repr)
227243
for (let i = 0; i < keys.length; i += 1) {
228244
let key = keys[i];
229245
reqResObj.response.headers[key] = metadata._internal_repr[key][0];
230-
// console.log('reqred headers are now', reqResObj.response.headers)
231246

232247
}
233248
store.default.dispatch(actions.reqResUpdate(reqResObj))
@@ -236,15 +251,17 @@ grpcController.openGrpcConnection = (reqResObj, connectionArray) => {
236251
//else BIDIRECTIONAL
237252
else {
238253
// Open duplex stream
254+
let counter = 0;
239255
let call = client[rpc](meta);
240256
call.on('data', (response) => {
241-
// console.log('Got server response "' + response );
257+
let curTimeObj = reqResObj.response.times[counter];
258+
counter++;
242259
//Close Individual Server Response for BIDIRECTIONAL Stream
243260
reqResObj.connection = 'pending';
244-
reqResObj.connectionType = 'plain';
245-
reqResObj.timeReceived = Date.now();
246-
reqResObj.response.events.push(response)
247-
// console.log(reqResObj.response.events)
261+
curTimeObj.timeReceived = Date.now();
262+
reqResObj.timeReceived = curTimeObj.timeReceived;
263+
reqResObj.response.events.push(response);
264+
reqResObj.response.times.push(curTimeObj);
248265
store.default.dispatch(actions.reqResUpdate(reqResObj));
249266

250267

@@ -255,8 +272,6 @@ grpcController.openGrpcConnection = (reqResObj, connectionArray) => {
255272
let key = keys[i];
256273
reqResObj.response.headers[key] = metadata._internal_repr[key][0];
257274

258-
// console.log('reqred headers are now', reqResObj.response.headers)
259-
260275
}
261276
store.default.dispatch(actions.reqResUpdate(reqResObj))
262277
});
@@ -266,32 +281,29 @@ grpcController.openGrpcConnection = (reqResObj, connectionArray) => {
266281
call.on('end', (data)=> {
267282
//Close Final Server Connection for BIDIRECTIONAL Stream
268283
reqResObj.connection = 'closed';
269-
reqResObj.connectionType = 'plain';
270284
reqResObj.timeReceived = Date.now();
271285
// no need to push response to reqResObj, no event expected from on 'end'
272286
store.default.dispatch(actions.reqResUpdate(reqResObj));
273-
// console.log('server response ended', data)
274287
});
275288

276289
for (var i = 0; i < queryArr.length; i++) {
290+
let time = {};
277291
let query = queryArr[i];
278292
//Open Connection for BIDIRECTIONAL Stream
279293
if (i === 0){
280294
reqResObj.connection = 'open';
281295
} else {
282296
reqResObj.connection = 'pending';
283297
}
284-
reqResObj.connectionType = 'plain';
285-
reqResObj.timeSent = Date.now();
298+
time.timeSent = Date.now();
299+
reqResObj.timeSent = time.timeSent;
300+
reqResObj.response.times.push(time)
286301
call.write(query);
287302
}
288303
call.end();
289304
}
290305
reqResObj.connection = 'closed';
291-
reqResObj.connectionType = 'plain';
292306
reqResObj.timeReceived = Date.now();
293307
store.default.dispatch(actions.reqResUpdate(reqResObj));
294-
295-
}
296308
};
297309
export default grpcController;

0 commit comments

Comments
 (0)