Skip to content

Commit fe455e0

Browse files
authored
Merge pull request #682 from melihkorkmaz/times-of-day-guidelines
Times of day plugin guideline fixes.
2 parents 6f67c12 + e026017 commit fe455e0

File tree

4 files changed

+130
-71
lines changed

4 files changed

+130
-71
lines changed

plugins/times-of-day/api/api.js

+35-30
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
var plugin = {},
22
common = require('../../../api/utils/common.js'),
33
plugins = require('../../pluginManager.js'),
4-
async = require('async'),
54
moment = require('moment');
65

7-
(function(plugin) {
6+
(function() {
87
plugins.register("/i", function(ob) {
98
var params = ob.params;
109

@@ -38,17 +37,17 @@ var plugin = {},
3837
var options = {};
3938

4039

41-
if (hasSession && params.qstring.hour !== undefined && params.qstring.dow !== undefined) {
40+
if (hasSession && params.qstring.hour && params.qstring.dow) {
4241
var sessionDate = common.initTimeObj(params.appTimezone, params.qstring.timestamp);
43-
var id = "[CLY]_session" + "_" + sessionDate.monthly.replace('.', ':');
42+
let id = "[CLY]_session" + "_" + sessionDate.monthly.replace('.', ':');
4443

4544
criteria = {
4645
"_id": id
4746
};
4847

49-
var incData = {};
48+
let incData = {};
5049
incData['d.' + params.qstring.dow + "." + params.qstring.hour + ".count"] = 1;
51-
var setData = {};
50+
let setData = {};
5251
setData._id = id;
5352
setData.m = sessionDate.monthly.replace('.', ':');
5453
setData.s = "[CLY]_session";
@@ -80,7 +79,7 @@ var plugin = {},
8079
var timeStamp = events[i].timestamp || params.qstring.timestamp;
8180
var eventDate = common.initTimeObj(params.appTimezone, timeStamp);
8281

83-
var id = events[i].key + "_" + eventDate.monthly.replace('.', ':');
82+
let id = events[i].key + "_" + eventDate.monthly.replace('.', ':');
8483

8584
criteria = {
8685
"_id": id
@@ -94,11 +93,11 @@ var plugin = {},
9493
continue;
9594
}
9695

97-
var incData = (query[id] && query[id].update) ? query[id].update.$inc : {};
96+
let incData = (query[id] && query[id].update) ? query[id].update.$inc : {};
9897
incData['d.' + dow + "." + hour + ".count"] = incData['d.' + dow + "." + hour + ".count"] ?
9998
incData['d.' + dow + "." + hour + ".count"] + events[i].count : events[i].count;
10099

101-
var setData = {};
100+
let setData = {};
102101
setData._id = id;
103102
setData.m = eventDate.monthly.replace('.', ':');
104103
setData.s = events[i].key;
@@ -132,7 +131,7 @@ var plugin = {},
132131
return true;
133132
}
134133

135-
eventData = eventData == undefined ? { list: [] } : eventData;
134+
eventData = eventData || { list: [] } ;
136135

137136
var limit = plugins.getConfig("api", params.app && params.app.plugins, true).event_limit;
138137
var overLimit = eventData.list.count > limit;
@@ -141,7 +140,7 @@ var plugin = {},
141140
var bulk = common.db._native.collection(collectionName).initializeUnorderedBulkOp();
142141

143142

144-
Object.keys(query).forEach(function(key, index) {
143+
Object.keys(query).forEach(function(key) {
145144
var queryObject = query[key];
146145
var s = queryObject.update.$set.s;
147146

@@ -152,12 +151,7 @@ var plugin = {},
152151

153152

154153
if (bulk.length > 0) {
155-
bulk.execute(function(err, updateResult) {
156-
if (err) {
157-
//there was an error
158-
}
159-
//all done
160-
});
154+
bulk.execute(function() {});
161155
}
162156
});
163157
});
@@ -169,7 +163,7 @@ var plugin = {},
169163
plugins.register("/o", function(ob) {
170164
var params = ob.params;
171165

172-
if (params.qstring.method == "times-of-day") {
166+
if (params.qstring.method === "times-of-day") {
173167
var appId = params.qstring.app_id;
174168
var todType = params.qstring.tod_type;
175169

@@ -198,13 +192,19 @@ var plugin = {},
198192
return false;
199193
});
200194

195+
/**
196+
* Fetch Times of Day Plugin
197+
* @param {string} collectionName | Name of collection
198+
* @param {object} criteria | Filter object
199+
* @param {func} callback | Callback function
200+
*/
201201
function fetchTodData(collectionName, criteria, callback) {
202202
common.db.collection(collectionName).find(criteria).toArray(function(err, results) {
203203
if (err) {
204204
return callback(err);
205205
}
206206

207-
var timesOfDay = [0, 1, 2, 3, 4, 5, 6].map(function(x) {
207+
var timesOfDay = [0, 1, 2, 3, 4, 5, 6].map(() => {
208208
return Array(24).fill(0);
209209
});
210210

@@ -235,27 +235,26 @@ var plugin = {},
235235
});
236236

237237
plugins.register("/dashboard/data", function(ob) {
238-
return new Promise((resolve, reject) => {
239-
var params = ob.params;
238+
return new Promise((resolve) => {
240239
var data = ob.data;
241240

242-
if (data.widget_type == "times-of-day") {
241+
if (data.widget_type === "times-of-day") {
243242
var collectionName = "";
244243
var criteria = {};
245244

246245
var appId = data.apps[0];
247246
var dataType = data.data_type;
248-
var period = data.period;
247+
let period = data.period;
249248

250249
var todType = "[CLY]_session";
251250

252-
if (dataType == "event") {
251+
if (dataType === "event") {
253252
var event = data.events[0];
254253
var eventKey = event.split("***")[1];
255254
todType = eventKey;
256255
}
257256

258-
var criteria = {
257+
criteria = {
259258
"s": todType
260259
};
261260

@@ -265,7 +264,7 @@ var plugin = {},
265264
criteria.m = { $in: periodRange.split(',') };
266265
}
267266

268-
var collectionName = "timesofday" + appId;
267+
collectionName = "timesofday" + appId;
269268
fetchTodData(collectionName, criteria, function(err, result) {
270269
data.dashData = {
271270
data: result || []
@@ -277,18 +276,24 @@ var plugin = {},
277276
resolve();
278277
}
279278

279+
/**
280+
* Get date range for period
281+
* @param {string} period | Period
282+
* @return {string|null} | Response
283+
*/
280284
function getDateRange(period) {
285+
let d;
281286
switch (period) {
282287
case "current":
283-
var d = moment();
288+
d = moment();
284289
return d.year() + ":" + (d.month() + 1);
285290
case "previous":
286-
var d = moment().add(-1, "M");
291+
d = moment().add(-1, "M");
287292
return d.year() + ":" + (d.month() + 1);
288293
case "last_3":
289294
var response = [];
290-
for (var i = 0; i < 3; i++) {
291-
var d = moment().add(-1 * i, "M");
295+
for (let i = 0; i < 3; i++) {
296+
d = moment().add(-1 * i, "M");
292297
response.push(d.year() + ":" + (d.month() + 1));
293298
}
294299
return response.join(',');

plugins/times-of-day/frontend/app.js

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
var plugin = {};
1+
var exportedPlugin = {};
22

33
(function(plugin) {
4-
plugin.init = function(app, countlyDb) {
4+
plugin.init = function() {
55

66
};
7-
}(plugin));
7+
}(exportedPlugin));
88

9-
module.exports = plugin;
9+
module.exports = exportedPlugin;

plugins/times-of-day/frontend/public/javascripts/countly.models.js

+18-18
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
/*global countlyGlobal,countlyCommon,countlyEvent,d3,jQuery */
12
(function(timesOfDayPlugin, $) {
23

34
var _todData = {};
@@ -60,7 +61,7 @@
6061
var duration = 0;
6162

6263
event = event.toLowerCase();
63-
if (event != "sessions") {
64+
if (event !== "sessions") {
6465
event = event + "(s)";
6566
}
6667

@@ -81,6 +82,10 @@
8182

8283
loadPunchCard(timesOfDayData);
8384

85+
/**
86+
* Load d3 punch chard
87+
* @param {object} punchCardData | Chart data
88+
*/
8489
function loadPunchCard(punchCardData) {
8590

8691
var labelsX = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23"];
@@ -95,10 +100,11 @@
95100
};
96101

97102
var averages = [];
98-
for (var i = 0; i <= 23; i++) {
99-
var total = [0, 1, 2, 3, 4, 5, 6].reduce(function(acc, current, y) {
100-
return acc + punchCardData[y][i];
101-
}, 0);
103+
var reducer = function(c, acc, current, y) {
104+
return acc + punchCardData[y][c];
105+
};
106+
for (var c = 0; c <= 23; c++) {
107+
var total = [0, 1, 2, 3, 4, 5, 6].reduce(reducer.bind(this, c), 0);
102108
averages.push(total / 7);
103109
}
104110

@@ -137,6 +143,11 @@
137143

138144
}
139145

146+
/**
147+
* Update chart
148+
* @param {object} data | Data object
149+
* @param {string} labelsX | X label
150+
*/
140151
function update(data, labelsX) {
141152
var allValues = Array.prototype.concat.apply([], data.map(function(d) {
142153
return d.values;
@@ -151,7 +162,7 @@
151162
return 0;
152163
}
153164

154-
f = d3.scale.sqrt()
165+
var f = d3.scale.sqrt()
155166
.domain([d3.min(allValues), d3.max(allValues)])
156167
.rangeRound([2, maxR - padding]);
157168

@@ -184,17 +195,6 @@
184195
return 'translate(' + yLabelWidth + ',' + (maxR * i * 2 + maxR + xLabelHeight) + ')';
185196
});
186197

187-
var rowContainer = rows.append('rect')
188-
.attr('x', 1)
189-
.attr('y', 0 - maxR)
190-
.attr('width', maxR * 2 * labelsX.length - 2)
191-
.attr('height', maxR * 2)
192-
.style('fill-opacity', function(d, i) {
193-
return i % 2 === 1 ? 1 : 0;
194-
})
195-
.style('fill', '#f9f9f9');
196-
197-
198198
var dots = rows.selectAll('circle')
199199
.data(function(d) {
200200
return d.values;
@@ -271,7 +271,7 @@
271271
return { day: d.day, value: x, label: d.label, average: d.averages[i] };
272272
});
273273
})
274-
.attr('class', function(d, i) {
274+
.attr('class', function() {
275275
return 'dot-label';
276276
});
277277

0 commit comments

Comments
 (0)