mirror of
https://github.com/codeninjasllc/codecombat.git
synced 2024-11-27 17:45:40 -05:00
Latest class owners script
This commit is contained in:
parent
24a43f2be8
commit
f64f209c99
1 changed files with 91 additions and 0 deletions
91
scripts/analytics/mongodb/queries/classOwners.js
Normal file
91
scripts/analytics/mongodb/queries/classOwners.js
Normal file
|
@ -0,0 +1,91 @@
|
|||
// Latest class owners (teachers)
|
||||
// Course instance owners assumed to be teachers unless hourOfCode=1
|
||||
|
||||
// Usage:
|
||||
// mongo <address>:<port>/<database> <script file> -u <username> -p <password>
|
||||
|
||||
var startDay = '2015-10-01';
|
||||
var endDay = '2016-10-01';
|
||||
print('Date range:', startDay, endDay);
|
||||
var userIDs = getClassOwners(startDay, endDay);
|
||||
print('Class owners found:', userIDs.length);
|
||||
var userEmails = getUserEmails(userIDs);
|
||||
print('User emails found:', userEmails.length);
|
||||
for (var i = 0; i < userEmails.length; i++) {
|
||||
print(userEmails[i]);
|
||||
}
|
||||
|
||||
function objectIdWithTimestamp(timestamp) {
|
||||
// Convert string date to Date object (otherwise assume timestamp is a date)
|
||||
if (typeof(timestamp) == 'string') timestamp = new Date(timestamp);
|
||||
// Convert date object to hex seconds since Unix epoch
|
||||
var hexSeconds = Math.floor(timestamp/1000).toString(16);
|
||||
// Create an ObjectId with that hex timestamp
|
||||
var constructedObjectId = ObjectId(hexSeconds + "0000000000000000");
|
||||
return constructedObjectId
|
||||
}
|
||||
|
||||
function getClassOwners(startDay, endDay) {
|
||||
var userIDs = [];
|
||||
var startObj = objectIdWithTimestamp(ISODate(startDay + "T00:00:00.000Z"));
|
||||
var endObj = objectIdWithTimestamp(ISODate(endDay + "T00:00:00.000Z"))
|
||||
var cursor = db.classrooms.find(
|
||||
{$and:
|
||||
[
|
||||
{_id: {$gte: startObj}},
|
||||
{_id: {$lt: endObj}}
|
||||
]
|
||||
},
|
||||
{ownerID: 1}
|
||||
);
|
||||
|
||||
while (cursor.hasNext()) {
|
||||
var myDoc = cursor.next();
|
||||
if (myDoc.ownerID) {
|
||||
userIDs.push(myDoc.ownerID);
|
||||
}
|
||||
else {
|
||||
print('No classroom owner!');
|
||||
printjson(myDoc);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
cursor = db.course.instances.find(
|
||||
{$and:
|
||||
[
|
||||
{_id: {$gte: startObj}},
|
||||
{_id: {$lt: endObj}}
|
||||
]
|
||||
},
|
||||
{hourOfCode: 1, ownerID: 1}
|
||||
);
|
||||
while (cursor.hasNext()) {
|
||||
var myDoc = cursor.next();
|
||||
if (myDoc.hourOfCode) continue;
|
||||
if (myDoc.ownerID) {
|
||||
userIDs.push(myDoc.ownerID);
|
||||
}
|
||||
else {
|
||||
print('No course.instance owner!');
|
||||
printjson(myDoc);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return userIDs;
|
||||
}
|
||||
|
||||
function getUserEmails(userIDs) {
|
||||
var cursor = db['users'].find({_id: {$in: userIDs}}, {emailLower: 1});
|
||||
|
||||
var userEmails = [];
|
||||
while (cursor.hasNext()) {
|
||||
var myDoc = cursor.next();
|
||||
if (myDoc.emailLower) {
|
||||
userEmails.push(myDoc.emailLower);
|
||||
}
|
||||
}
|
||||
userEmails.sort()
|
||||
return userEmails;
|
||||
}
|
Loading…
Reference in a new issue