Skip to content

Commit 436f55a

Browse files
authored
Merge pull request #59 from oslabs-beta/graphTimeRepair
Graph time repair Fixed timing difference between graph and roundtrip in grpc controller. finish team code review of protoParser
2 parents 7ec5ab6 + f7710db commit 436f55a

File tree

2 files changed

+46
-162
lines changed

2 files changed

+46
-162
lines changed

src/client/controllers/grpcController.js

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ grpcController.openGrpcConnection = (reqResObj, connectionArray) => {
110110

111111
// Open Connection and set time sent for Unary
112112
reqResObj.connection = 'open';
113-
113+
114114
time.timeSent = Date.now();
115115
// make Unary call
116116
client[rpc](query, meta, (err, data)=> {
@@ -155,9 +155,11 @@ grpcController.openGrpcConnection = (reqResObj, connectionArray) => {
155155
else {
156156
//Close Connection for client Stream
157157
reqResObj.connection = 'closed';
158-
let curTime = Date.now()
158+
let curTime = Date.now();
159+
console.log('curTime client stream: ', curTime);
159160
reqResObj.response.times.forEach(time => {
160161
time.timeReceived = curTime;
162+
console.log('time.timeReceived client stream: ', time.timeReceived);
161163
reqResObj.timeReceived = time.timeReceived;
162164

163165
})
@@ -185,7 +187,8 @@ grpcController.openGrpcConnection = (reqResObj, connectionArray) => {
185187
reqResObj.connection = 'pending';
186188

187189

188-
time.timeSent = timeSent
190+
time.timeSent = timeSent;
191+
console.log('time.timeSent client stream: ', time.timeSent );
189192
reqResObj.response.times.push(time)
190193

191194

@@ -205,18 +208,12 @@ grpcController.openGrpcConnection = (reqResObj, connectionArray) => {
205208
call.on("data", resp => {
206209
let time = {};
207210
time.timeReceived = Date.now();
211+
console.log('time.timeReceived Server Stream: ', time.timeReceived);
208212
time.timeSent = reqResObj.timeSent;
209213
// add server response to reqResObj and dispatch to state/store
210214
reqResObj.response.events.push(resp)
211-
212215
reqResObj.response.times.push(time)
213-
214-
215-
// timesArr.push(Date.now())
216-
//console.log('new time pushed: ', timesArr)
217-
// console.log('data response server stream',resp)
218-
// console.log(reqResObj.response.events)
219-
216+
reqResObj.timeReceived = time.timeReceived; // overwritten on each call to get the final value
220217

221218
store.default.dispatch(actions.reqResUpdate(reqResObj));
222219
})
@@ -228,11 +225,8 @@ grpcController.openGrpcConnection = (reqResObj, connectionArray) => {
228225
// Close Connection for SERVER Stream
229226
reqResObj.connection = 'closed';
230227

231-
reqResObj.timeReceived = Date.now();
232-
233-
// reqResObj.connectionType = 'plain';
234-
// reqResObj.timeReceived =Date.now();
235-
// reqResObj.timesArr = timesArr
228+
// reqResObj.timeReceived = Date.now();
229+
// console.log('reqResObj.timeReceived Server Stream: ', reqResObj.timeReceived);
236230

237231
// no need to push response to reqResObj, no event expected from on 'end'
238232
store.default.dispatch(actions.reqResUpdate(reqResObj));
@@ -259,6 +253,8 @@ grpcController.openGrpcConnection = (reqResObj, connectionArray) => {
259253
reqResObj.connection = 'pending';
260254
curTimeObj.timeReceived = Date.now();
261255
reqResObj.timeReceived = curTimeObj.timeReceived;
256+
console.log('curTimeObj.timeReceived BIDI on data: ', curTimeObj.timeReceived);
257+
console.log('reqResObj.timeReceived BIDI on data: ', reqResObj.timeReceived);
262258
reqResObj.response.events.push(response);
263259
reqResObj.response.times.push(curTimeObj);
264260
store.default.dispatch(actions.reqResUpdate(reqResObj));
@@ -280,7 +276,8 @@ grpcController.openGrpcConnection = (reqResObj, connectionArray) => {
280276
call.on('end', (data)=> {
281277
//Close Final Server Connection for BIDIRECTIONAL Stream
282278
reqResObj.connection = 'closed';
283-
reqResObj.timeReceived = Date.now();
279+
// reqResObj.timeReceived = Date.now();
280+
// console.log('reqResObj.timeReceived BIDI on end: ', reqResObj.timeReceived);
284281
// no need to push response to reqResObj, no event expected from on 'end'
285282
store.default.dispatch(actions.reqResUpdate(reqResObj));
286283
});
@@ -295,14 +292,17 @@ grpcController.openGrpcConnection = (reqResObj, connectionArray) => {
295292
reqResObj.connection = 'pending';
296293
}
297294
time.timeSent = Date.now();
295+
console.log('time.timeSent open connection for BIDI: ', time.timeSent);
298296
reqResObj.timeSent = time.timeSent;
297+
console.log('reqResObj.timeSent open connection for BIDI: ', reqResObj.timeSent);
299298
reqResObj.response.times.push(time)
300299
call.write(query);
301300
}
302301
call.end();
303302
}
304-
reqResObj.connection = 'closed';
305-
reqResObj.timeReceived = Date.now();
303+
// reqResObj.connection = 'closed';
304+
// reqResObj.timeReceived = Date.now();
305+
// console.log('reqResObj.timeReceived end of controller unspecified: ', reqResObj.timeReceived);
306306
store.default.dispatch(actions.reqResUpdate(reqResObj));
307307
};
308308
export default grpcController;

src/client/protoParser.js

Lines changed: 27 additions & 143 deletions
Original file line numberDiff line numberDiff line change
@@ -12,21 +12,20 @@ async function protoParserFunc(protoBodyData) {
1212
//store the original .proto content in the storage before parsing
1313
protoStorage.protoMaster = protoBodyData;
1414
//make unique protoID for file we are saving
15-
let protoID = Math.floor(Math.random() * 1000);
15+
let protoID = Math.floor(Math.random() * 10000);
1616
//if file path for that ID already exists, increment the ID
1717
try {
1818
while (fs.existsSync('src/client/components/composer/protos/' + protoID + '.proto')) {
19-
//file exists
19+
//if file name exists try incrementing by 1
2020
protoID += 1;
2121
}
2222
} catch(err) {
2323
console.error(err)
2424
}
25+
// const dirName = remote.app.getAppPath(); // remote.app.getAppPath() stopped working at some point so switched to process.cwd()
26+
2527
// write to saveProto file for interaction with the server
26-
// const dirName = remote.app.getAppPath(); // uncomment when done testing above
27-
fs.writeFileSync(path.join(process.cwd(), 'src/client/components/composer/protos/' + protoID + '.proto'), protoBodyData, 'utf-8')
28-
console.log('Proto file has been saved')
29-
// });
28+
fs.writeFileSync(path.join(process.cwd(), 'src/client/components/composer/protos/' + protoID + '.proto'), protoBodyData, 'utf-8');
3029

3130
// define the modular client for testing
3231
// declare path variable of imported proto file
@@ -40,40 +39,31 @@ async function protoParserFunc(protoBodyData) {
4039
defaults: true,
4140
oneofs:true
4241
};
43-
// console.log('before protoLoader');
44-
//create gRPC package definition w/ protoLoader
42+
43+
//create gRPC package definition w/ protoLoader library
4544
protoStorage.packageDefinition = protoLoader.loadSync(PROTO_PATH, protoOptionsObj);
46-
// console.log('after protoLoader');
45+
4746
//create descriptor from package packageDefinition
4847
//descriptor --> gRPC uses the Protobuf .proto file format to define your messages, services and some aspects of the code generation.
4948
protoStorage.descriptor = grpc.loadPackageDefinition(protoStorage.packageDefinition);
50-
// console.log(protoStorage.descriptor);
5149
protoStorage.packageName = Object.keys(protoStorage.descriptor)[0];
52-
// console.log('package name: ',protoStorage.packageName);
5350
protoStorage.descriptorDefinition = protoStorage.descriptor[protoStorage.packageName];
54-
// console.log('protoStorage.descriptorDefinition: ',protoStorage.descriptorDefinition);
5551
protoStorage.protoPath = PROTO_PATH;
56-
// console.log(PROTO_PATH);
52+
53+
// Store the services from the current .proto file
5754
const serviceArr = [];
5855
for (let [serviceName, serviceDef] of Object.entries(protoStorage.descriptorDefinition)){
5956
if (typeof serviceDef === 'function') {
60-
// console.log('serviceName: ', serviceName);
61-
// console.log('serviceDef: ', serviceDef);
6257
const serviceObj = {};
6358
serviceObj.packageName = protoStorage.packageName;
64-
// console.log('serviceName, serviceDef: ', serviceName, serviceDef);
6559
serviceObj.name = serviceName;
6660
serviceObj.rpcs = [];
6761
serviceObj.messages = []
68-
let counter = 1;
62+
6963
for (let [requestName, requestDef] of Object.entries(serviceDef.service)) {
70-
// console.log('counter: ', counter);
71-
counter++
72-
// console.log('requestName: ', requestName);
73-
// console.log('requestDef: ', requestDef);
7464
const streamingReq = requestDef.requestStream;
7565
const streamingRes = requestDef.responseStream;
76-
// console.log('streamingReq, streamingRes: ', streamingReq, streamingRes);
66+
7767
let stream = 'UNARY';
7868
if (streamingReq) stream = 'CLIENT STREAM';
7969
if (streamingRes) stream = 'SERVER STREAM';
@@ -87,13 +77,11 @@ async function protoParserFunc(protoBodyData) {
8777
res: messageNameRes
8878
});
8979

90-
// console.log('serviceName: ', serviceName); // ServiceName
91-
// console.log('requestName: ', requestName); // RPC Request Name
92-
// console.log('requestDef: ', requestDef); // too much info
80+
// create object with proto info that is formatted for interaction with Swell frontend
9381
let draftObj;
9482
requestDef.requestType.type.field.forEach((msgObj) => {
9583
let mName = msgObj.name;
96-
// let mType = msgObj.type;
84+
// bool will track if the message is a nested type
9785
let bool = false;
9886
if (msgObj.type === 'TYPE_MESSAGE') bool = true;
9987
if (!draftObj) {
@@ -108,6 +96,7 @@ async function protoParserFunc(protoBodyData) {
10896
draftObj.def[mName].nested = bool ;
10997
draftObj.def[mName].dependent = msgObj.typeName ;
11098

99+
// Frontend expects a message object in the following format
111100
// {
112101
// name: messageNameReq,
113102
// def: {
@@ -121,37 +110,9 @@ async function protoParserFunc(protoBodyData) {
121110

122111
})
123112
serviceObj.messages.push(draftObj)
124-
/*
125-
requestDef.responseType.type.field.forEach((msgObj) => {
126-
let mName = msgObj.name;
127-
// let mType = msgObj.type;
128-
let bool = false;
129-
if (msgObj.type === 'TYPE_MESSAGE') bool = true;
130113

131-
serviceObj.messages.push({
132-
name: messageNameRes,
133-
def: {[mName]: msgObj.type},
134-
nested: bool,
135-
dependent: msgObj.typeName
136-
})
137-
// serviceObj.messages.def =
138-
})
139-
*/ // not using the details of the response object since user will run
114+
// not using the details of the response object (requestDef.responseType) since user will run
140115
// their own server
141-
142-
// serviceObj[serviceName][requestName]
143-
// console.log('Request message type: ',requestDef.requestType.type); // need to iterate through .field to get all types per message
144-
// console.log('Request message name: ',requestDef.requestType.type.name); // Request message name
145-
// console.log('Request message type.field: ',requestDef.requestType.type.field);
146-
// console.log('message reqField [0].name: ', (requestDef.requestType.type.field)[0].name); // name of individual message field within message
147-
// console.log('message reqField [0].type: ', (requestDef.requestType.type.field)[0].type); // type of individual message field per message
148-
// console.log('Response message name: ',requestDef.responseType.type.name);// Response message name
149-
// console.log('Response message type.field: ',requestDef.responseType.type.field);
150-
// console.log('message resField [0].name: ', (requestDef.responseType.type.field)[0].name); // name of individual content type within message
151-
// console.log('message resField [0].type: ', (requestDef.responseType.type.field)[0].type);// type of individual content type per message
152-
153-
// console.log('serviceObj: ', serviceObj);
154-
// console.log('serviceObj.messages: ', serviceObj.messages);
155116
}
156117
serviceArr.push(serviceObj);
157118
}
@@ -162,102 +123,25 @@ async function protoParserFunc(protoBodyData) {
162123
// test run of protoParser
163124
// protoParser(tempData);
164125
//
126+
//current target shape of parsed grpc service object for frontend
165127
//this.state.services = [
166128
// {name: 'ServiceName',
167-
// messages: [{name: 'messageName',
168-
// def: {messageDef}
169-
// }]
129+
// messages: [{
130+
// name: messageNameReq,
131+
// def: {
132+
// [mName]: {
133+
// type:msgObj.type,
134+
// nested: bool,
135+
// dependent: msgObj.typeName}
136+
// }
137+
// }]
170138
// rpcs: [{name: 'RPC Name',
171139
// type: 'Stream Type',
172140
// req: 'MessageName for Requst',
173141
// res: 'MessageName for Response'}]
174142
// }]
175143
//
176-
// this.state.services: [
177-
// {
178-
// name: 'BookService',
179-
// messages: [
180-
// {
181-
// name: "Book",
182-
// def: {
183-
// isbn: 'int64',
184-
// title: 'string',
185-
// author: 'string',
186-
// }
187-
// },
188-
// {
189-
// name: "GetBookRequest",
190-
// def: {
191-
// isbn: 'int64'
192-
// }
193-
// },
194-
// {
195-
// name: "GetBookViaAuthor",
196-
// def: {
197-
// author: 'string',
198-
// }
199-
// }
200-
// ],
201-
// rpcs: [
202-
// {
203-
// name: "GetBook",
204-
// type: 'UNARY',
205-
// req: 'GetBookRequest',
206-
// res: 'Book'
207-
// },
208-
// {
209-
// name: "GetBooksViaAuthor",
210-
// type: 'SERVER STREAM',
211-
// req: 'GetBookViaAuthor',
212-
// res: 'Book'
213-
// },
214-
// {
215-
// name: "GetGreatestBook",
216-
// type: 'CLIENT STREAM',
217-
// req: 'GetBookRequest',
218-
// res: 'Book'
219-
// },
220-
// {
221-
// name: "GetBooks",
222-
// type: 'BIDIRECTIONAL',
223-
// req: 'GetBookRequest',
224-
// res: 'Book'
225-
// },
226-
// ]
227-
// },
228-
// {
229-
// name: 'DogService',
230-
// messages: [
231-
// {
232-
// name: "Info",
233-
// def: {
234-
// name: 'string',
235-
// breed: 'string'
236-
// }
237-
// },
238-
// {
239-
// name: "GetAge",
240-
// def: {
241-
// age: 'string'
242-
// }
243-
// }
244-
// ],
245-
// rpcs: [
246-
// {
247-
// name: "GetInfo",
248-
// type: 'UNARY',
249-
// req: 'GetAge',
250-
// res: 'Info',
251-
// },
252-
// {
253-
// name: "GetBackground",
254-
// type: 'BIDIRECTIONAL',
255-
// req: 'GetAge',
256-
// res: 'Info'
257-
// },
258-
// ]
259-
// }
260-
// ]
144+
261145
// console.log(tempData);
262146
// protoParserFunc(tempData).catch((err) => console.log(err));
263147
export default protoParserFunc

0 commit comments

Comments
 (0)