-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathapp.js
More file actions
358 lines (321 loc) · 11.4 KB
/
app.js
File metadata and controls
358 lines (321 loc) · 11.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
/* Copyright IBM Corp. 2013 All Rights Reserved */
/*eshint-env node */
var http = require('http');
var path = require('path');
var express = require('express');
var multer = require('multer');
var hogan = require('hogan-express');
var mysql = require('mysql');
var fs = require('fs');
var _ = require("underscore");
var AdmZip = require('adm-zip');
var port = (process.env.PORT || 3000);
// all environments
var app = express();
var db = mysql.createConnection({
"database": "hackathonmysql",
"host": "hackathon.c7ppscfyfcfj.us-west-2.rds.amazonaws.com",
"port": 3306,
"user": "hackathon",
"password": "asdfasdfa",
});
app.set('port', port);
app.set('view engine', 'html'); //do we want this weird hgan express shit?
app.set('env', 'development');
app.engine('html', hogan);
app.all('/*', function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "X-Requested-With");
next();
});
app.use(express.favicon(path.join(__dirname, 'public/images/favicon.ico')));
app.use(express.logger());
//app.use(express.bodyParser({uploadDir:'./uploads'}));
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));
app.use(express.static(path.join(__dirname, 'client/snacks/client-dist')));
app.use(express.static(path.join(__dirname, 'client/snacks/client-js')));
// development only
if ('development' == app.get('env')) {
app.use(express.errorHandler());
}
app.post('/upload',[ multer({ dest: './uploads/'}), function(req, res){
console.log("hit upload code");
console.log(req.body) // form fields
console.log(req.files) // form files
var originalFileName = req.files.file.name;
var shortFileName = req.files.file.originalname;
var inputPath = "./uploads/";
var outputPath = "./uploads/extracted/";
var finalFilePath = outputPath + shortFileName.replace('.zip', '');
// reading archives
console.log("before zippity zip");
var zip = new AdmZip(inputPath + originalFileName);
console.log("during zippity zip");
var zipEntries = zip.getEntries(); // an array of ZipEntry records
console.log("after zippity zip");
zipEntries.forEach(function(zipEntry) {
console.log(zipEntry.toString()); // outputs zip entries information
});
zip.extractAllTo(outputPath, true);
var sql = "INSERT INTO TESTDATA (path, datatype) VALUES('"+ finalFilePath +"','"+ req.body.type +"')";
db.query(sql, function (err, result) {
if (err) {
console.log(err);
return;
}
var sql = 'SELECT MAX(id) as id FROM TESTDATA';
db.query(sql, function(err, result) {
console.log("result: " + JSON.stringify(result));
if(err) {
console.log(err);
return;
}
var sql = 'SELECT * FROM API WHERE datatype=' + req.body.type;
console.log("sencind back /getresult/"+ result[0].id);
http.get("http://apapi.herokuapp.com/runTest/" + result[0].id + "/" + req.body.type);
res.redirect("seeresults.html#/?id="+result[0].id);
});
});
}]);
app.get('/getresult/:id?', function(req, res, next) {
var id = req.params.id;
if(!id) {
var sql = 'SELECT result.id, result.date, score.value, scoretype.name as scoretypename, testdata.path as testdatapath,' +
'api.name as apiname, apitype.name as apitypename, testdatatype.name as datatypename, testdata.id as testdataid FROM RESULT as result ' +
'INNER JOIN API as api on api.id = result.apiid ' +
'INNER JOIN APITYPE as apitype on apitype.id = api.apitype ' +
'INNER JOIN SCORE as score on score.resultid = result.id ' +
'INNER JOIN TESTDATA as testdata on testdata.id = result.testdataid ' +
'INNER JOIN TESTDATATYPE as testdatatype on testdatatype.id = testdata.datatype ' +
'INNER JOIN SCORETYPE as scoretype on scoretype.id = score.scoretype ';
db.query(sql, function (err, result) {
if (err) {
console.log(err);
return;
}
res.json(result);
});
console.log("no Id");
return;
}
var sql = 'SELECT result.id, result.date, score.value, scoretype.name as scoretypename, ' +
'api.name as apiname, apitype.name as apitypename, testdatatype.name as datatypename FROM RESULT as result ' +
'INNER JOIN API as api on api.id = result.apiid ' +
'INNER JOIN APITYPE as apitype on apitype.id = api.apitype ' +
'INNER JOIN SCORE as score on score.resultid = result.id ' +
'INNER JOIN TESTDATA as testdata on testdata.id = result.testdataid ' +
'INNER JOIN TESTDATATYPE as testdatatype on testdatatype.id = testdata.datatype ' +
'INNER JOIN SCORETYPE as scoretype on scoretype.id = score.scoretype where result.id=' + id;
db.query(sql, function (err, result) {
if (err) console.log(err);
res.json(result);
});
});
app.get('/getTestData/:id?', function(req, res, next) {
var id = req.params.id;
if(!id) {
var sql = 'SELECT testdata.id, testdata.path, testdatatype.name FROM TESTDATA as testdata ' +
'INNER JOIN TESTDATATYPE as testdatatype on testdatatype.id = testdata.datatype ';
db.query(sql, function (err, result) {
if (err) {
console.log(err);
return;
}
res.json(result);
});
console.log("no Id");
return;
}
var sql = 'SELECT testdata.id, testdata.path, testdatatype.name FROM TESTDATA as testdata ' +
'INNER JOIN TESTDATATYPE as testdatatype on testdatatype.id = testdata.datatype where testdata.id=' + id;
db.query(sql, function (err, result) {
if (err) {
console.log(err);
return;
}
res.json(result);
});
console.log(id);
});
var runApiOnModules = function(modulesPromise, filePath) {
return modulesPromise.then(function(modules) {
var resultPromises = [];
console.log(JSON.stringify(modules));
_.each(modules, function(module) {
var newModule = require(module.apimodulepath);
console.log(module.apimodulepath);
resultPromises.push(newModule.runAPI(filePath));
});
return Promise.all(resultPromises).then(function(results) {
console.log("promises.all returns " + JSON.stringify(results));
return results;
});
});
};
app.get('/runTest/:testDataId/:apiId', function(req, res, next) {
var testDataId = req.params.testDataId;
var apiId = req.params.apiId;
console.log("valid route, testDataId: " + testDataId + " apiId: " + apiId);
var filePath;
var apiModulePath;
var apiName;
var dataType;
var filePathPromise = new Promise(function(resolve, reject){
var sql = 'SELECT path, datatype FROM TESTDATA where id=' + testDataId;
db.query(sql, function (err, result) {
if (err) {
console.log(err);
return;
}
resolve(result[0]);
});
});
var modulesPromise;
filePathPromise.then(function(testData) {
modulesPromise = new Promise(function(resolve, reject) {
var sql = 'SELECT apimodulepath, id, name FROM API where datatype = ' + testData.datatype + ' AND apitype=' + apiId;
console.log("sql = " + sql);
db.query(sql, function (err, result) {
if (err) {
console.log(err);
return;
}
console.log(JSON.stringify(result));
resolve(result);
});
});
var returnValuePromise = runApiOnModules(modulesPromise, testData.path);
return returnValuePromise.then(function(results){
console.log("final result = " + JSON.stringify(results))
_.each(results, function(singleApiResult, outerIndex) {
console.log("single LADIES " + JSON.stringify(singleApiResult));
//store these results
var sql = 'INSERT INTO RESULT (apiid, testdataid, date) VALUES (' + singleApiResult[2] + ', ' + testDataId + ', Now())';
console.log("married ladies" + sql);
db.query(sql, function(err, result) {
if(err) {
console.log(err);
return;
}
var sql = 'SELECT MAX(id) as id FROM RESULT';
db.query(sql, function(err, result) {
console.log("result: " + JSON.stringify(result));
if(err) {
console.log(err);
return;
}
_.each(results[outerIndex], function(scoreResult, index) {
if(index != 2) {
var scoreTypeArray = Object.keys(scoreResult);
var scoreType = scoreTypeArray[0];
console.log(scoreType);
//replace this later with less of a kludge
var scoreTypeValue;
switch(scoreType) {
case "speed":
scoreTypeValue = 1;
break;
case "accuracy":
scoreTypeValue = 2;
break;
}
var sql = 'INSERT INTO SCORE (resultid, scoretype, value) VALUES (' + (result[0].id - 2 + outerIndex) + ', ' + scoreTypeValue + ', ' + scoreResult[scoreType] + ')';
console.log(sql);
db.query(sql, function(err, results) {
if(err) {
console.log(err);
return;
}
});
}
});
});
});
});
//return the id of those results
res.json(results);
})
}).catch(function(error){
console.error(error);
})
});
// start server
http.createServer(app).listen(app.get('port'), function () {
console.log('Express server listening at port:' + port);
});
function createTable() {
var sql = 'CREATE TABLE IF NOT EXISTS posts ('
+ 'id INTEGER PRIMARY KEY AUTO_INCREMENT,'
+ 'text text'
+ ');';
db.query(sql, function (err, result) {
if (err) console.log(err);
});
console.log("created posts table");
var sql = 'CREATE TABLE IF NOT EXISTS API ('
+ 'id INTEGER PRIMARY KEY AUTO_INCREMENT,'
+ 'name varchar(50),'
+ 'apitype INTEGER,'
+ 'datatype INTEGER,'
+ 'apimodulepath varchar(50)'
+ ');';
db.query(sql, function (err, result) {
if (err) console.log(err);
});
console.log("created api table");
var sql = 'CREATE TABLE IF NOT EXISTS APITYPE ('
+ 'id INTEGER PRIMARY KEY AUTO_INCREMENT,'
+ 'name varchar(50)'
+ ');';
db.query(sql, function (err, result) {
if (err) console.log(err);
});
console.log("created api type table");
var sql = 'CREATE TABLE IF NOT EXISTS TESTDATA ('
+ 'id INTEGER PRIMARY KEY AUTO_INCREMENT,'
+ 'path varchar(50),'
+ 'datatype INTEGER'
+ ');';
db.query(sql, function (err, result) {
if (err) console.log(err);
});
console.log("created testdata table");
var sql = 'CREATE TABLE IF NOT EXISTS TESTDATATYPE ('
+ 'id INTEGER PRIMARY KEY AUTO_INCREMENT,'
+ 'name varchar(50)'
+ ');';
db.query(sql, function (err, result) {
if (err) console.log(err);
});
console.log("created test data type table");
var sql = 'CREATE TABLE IF NOT EXISTS RESULT ('
+ 'id INTEGER PRIMARY KEY AUTO_INCREMENT,'
+ 'apiid INTEGER,'
+ 'testdataid INTEGER,'
+ 'date DATETIME'
+ ');';
db.query(sql, function (err, result) {
if (err) console.log(err);
});
console.log("created result table");
var sql = 'CREATE TABLE IF NOT EXISTS SCORE ('
+ 'id INTEGER PRIMARY KEY AUTO_INCREMENT,'
+ 'resultid INTEGER,'
+ 'scoretype INTEGER,'
+ 'value INTEGER'
+ ');';
db.query(sql, function (err, result) {
if (err) console.log(err);
});
console.log("created score table");
var sql = 'CREATE TABLE IF NOT EXISTS SCORETYPE ('
+ 'id INTEGER PRIMARY KEY AUTO_INCREMENT,'
+ 'name varchar(50)'
+ ');';
db.query(sql, function (err, result) {
if (err) console.log(err);
});
console.log("created score type table");
}