-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathLAHelper.js
224 lines (174 loc) · 7.63 KB
/
LAHelper.js
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
"use strict";
var express = require('express');
var app = express();
var bodyParser = require('body-parser');
var request = require("request");
var Promise = require("es6-promise").Promise;
var Log = require("./Logger.js");
app.use(bodyParser.raw({limit:'1.5mb'}));
//Lib for processing command line arguments
var argv = require('minimist')(process.argv.slice(2));
var PORT = argv.p || argv.port || "50807";
var LA_STORE_URL = argv.LA_STORE_URL || "http://localhost:50812";
///////////////////////////////////
///////////////////////////////////
//
// //////////////////////////////
app.post("/createUser", function(req, res){
var log = new Log(null, " Create client: ");
var url = LA_STORE_URL+"/client";
request.post(url, function(error, response, body){
if(error !== null){
log.error("API Error: " + error);
}
log.debug(body);
log.print();
res.send(body);
});
});
app.post("/getMessage/:messageId/:timestamp",function(req,res){
var log = new Log();
var timeOfChange = 1423142233;
var clientTimestampOfLastUpdate = req.params.timestamp;
var timestampIsValid = clientTimestampOfLastUpdate.match(/^[0-9]+$/);
timestampIsValid = (clientTimestampOfLastUpdate.match(/^[0-9]+$/) !== null
&& clientTimestampOfLastUpdate.match(/^[0-9]+$/).length > 0);
var clientIsUpToDate = timestampIsValid && timeOfChange < clientTimestampOfLastUpdate;
log.setMessage("Message request:"+req.params.messageId);
log.debug("Client up to date: "+clientIsUpToDate +" diff: "+(timeOfChange-clientTimestampOfLastUpdate));
if(clientIsUpToDate){
res.send("OK");
log.print();
return;
}
var message;
var dialogDisclaimer = "Learning Analytics Helper, er et Eclipse-tillegg som skal hjelpe oss å få innsikt i hvordan det jobbes med programmeringsoppgaver, så det blir lettere å forbedre dem og gi målrettet støtte.\nLA Helper logger kontinuerlig data om hva du gjør i Eclipse og sender det anonymt til en server. Det som logges er:\n-filer du redigerer\n-problem-markører i editoren som legges inn av kompilatoren\n-hvilke tester som kjøres og test-resultatene\n\nVed å aktivere logging samtykker du til at data kan brukes til analyse av hvordan det jobbes med koding, og til forbedring av oppgaver og øvingsopplegget.\n\nData logges anonymt, men du har anledning til å legge inn et kallenavn, som knyttes til dataene. Med dette kallenavnet har du muligheten til få innsyn i hva som er logget, og det kan brukes av oss til å gi mer personlig hjelp og støtte, hvis du ønsker det.";
//var dialogDisclaimer = "Ved å samle inn anonym data om oppgavevalg og utførelse, kan vi gjøre analyse for å identifisere spesielt vanskelige øvinger og tema.\nDette kan føre til mindre frustrasjon og mer hjelp til dere. All dataen er helt anonym og det er umulig å linke kode til individer.\n\nVed å aktivere logging samtykker du til logging av: tester som kjøres, kode som blir skrevet og feilmeldinger som oppstår.";
var preferenceDisclaimer = dialogDisclaimer;
//var preferenceDisclaimer = "Ved å samle inn anonym data om oppgavevalg og utførelse, kan vi gjøre analyse for å identifisere spesielt vanskelige øvinger og tema. Dette kan føre til mindre frustrasjon og mer hjelp til dere. All data er helt anonym og det er umulig å linke informasjon til individer. \n\nVed å trykke godta samtykker du til logging av: tester som kjøres, kode som blir skrevet og feilmeldinger som oppstår. \n\nLoggingen kan skrues av og på i instillingene, hvor det også er mulig å legge inn et kallenavn som gjør dine data tilgjengelig for studass om du skulle trenge hjelp.\n\nPå forhånd takk!\n";
if(req.params.messageId === "dialogDisclaimer"){
message = dialogDisclaimer;
} else if(req.params.messageId === "preferenceDisclaimer"){
message = preferenceDisclaimer;
} else{
message = "unkownIdMessageId";
}
res.send(message);
log.print();
});
app.post('/setClientName/:userId', function (req, res) {
var name = req.body.toString();
var clientId = req.params.userId;
var log = new Log(clientId,"SetName request: "+name);
var url =LA_STORE_URL+"/client/name";
var info = {name:name,clientId:clientId};
request({url:url,method:"POST",body:info,json:true}, function(error, response, body){
if(error !== null){
log.debug("error: "+error);
}
log.print();
res.send("OK");
});
});
app.post("/setClientParticipating/:userId", function (req, res) {
var url = LA_STORE_URL + "/client/participating";
var value = req.body.toString();
var clientId = req.params.userId;
var info = {participating: value, clientId: clientId};
var log = new Log(clientId, "Set client participating: " + req.body);
log.debug(JSON.stringify(info));
request({url: url, method: "POST", body: info, json: true}, function(error, response, body){
log.debug("API Response: " + JSON.stringify(body));
if(error !== null){
log.debug("error: " + error);
}
log.print();
res.send("OK");
});
});
app.post("/errorLog",function(req, res){
var log = new Log("unkown", "Error log");
var url = LA_STORE_URL + "/errorLog";
var errorString = req.body.toString();
var info = {clientId: "unkown", log: errorString};
log.error(errorString);
request({url: url, method: "POST", body: info, json: true}, function(error, response, body){
log.debug(body);
if(error !== null){
log.debug("API error: " + error);
}
log.print();
res.send("OK");
});
});
app.post('/errorLog/:userId',function(req,res){
var log = new Log(clientId,"Client error log ---");
var url = LA_STORE_URL+"/errorLog";
var clientId = req.params.userId;
var errorString = req.body.toString();
var error = JSON.parse(errorString);
var info= {clientId: clientId, log: errorString};
log.error(error);
request({url:url,method:"POST",body:info,json:true}, function(error, response, body){
log.debug(body);
log.debug("error: "+error);
log.print();
res.send("OK");
});
});
app.post('/eventLog/:userId',function(req,res){
//IMPLEMENT
console.log("--------- Got event log");
var url = LA_STORE_URL+"/eventLog";
var clientId = req.params.userId;
var log = req.body.toString();
var info= {clientId: clientId, log: log};
request({url:url,method:"POST",body:info,json:true}, function(error, response, body){
log.debug(body);
log.debug("error: "+error);
log.print();
res.send("OK");
});
});
app.post('/files/:clientId', function (req, res) {
var url = LA_STORE_URL+"/file";
var clientId = req.params.clientId;
var body = req.body.toString();
var files= JSON.parse(req.body.toString());
var info= {clientId: clientId, files: files};
var log = new Log(clientId,"File request");
var filesSent = files.map(function(file){
return file.name;
})
log.debug(filesSent);
request({url:url,method:"POST",body:info,json:true}, function(error, response, body){
if(error != null){
log.debug("error: "+error);
}
log.print();
res.send("OK");
});
});
app.get('/folder/:clientName',function(req,res){
var clientName =req.params.clientName;
var log = new Log(null,"Folder listing: "+clientName);
res.send("Endpoint deprecated, please use /errorreport instead");
/* db.getIdFromClientName(req.params.clientName).then(function(clientId){
FileOrganizer.getGitFilesListOfClient(clientId).then(function(result){
log.debug("Folder listing sent:",result);
res.send(result.replace(/\n/g,"<br>"));
log.print();
});
}).catch(function(error){
log.error("No user by that nickname..",error);
res.send("No user by that nickname");
log.print();
});
*/
});
app.use(express.static(__dirname + '/pub'));
var server = app.listen(PORT, function () {
var host = server.address().address;
var port = server.address().port;
console.log('Learning Analytics server listening at http://%s:%s apiServer: /%s', host, port,LA_STORE_URL);
});