-
Notifications
You must be signed in to change notification settings - Fork 6
/
app.js
124 lines (100 loc) · 3.72 KB
/
app.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
//
// Tractor Push: Node.js, socket.io, Ruby, MongoDB tailed cursor demo
// app.js - writer that writes continuously to the collection. Randomly
// chooses from three types to demonstrate schema flexibility of
// MongoDB as a queue.
//
// See also: https://github.com/mongolab/tractorpush-server
//
//
// ObjectLabs is the maker of MongoLab.com a MongoDB-as-a-Service
// provider.
//
//
// Copyright 2013 ObjectLabs Corp.
//
// MIT License
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation files
// (the "Software"), to deal in the Software without restriction,
// including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software,
// and to permit persons to whom the Software is furnished to do so,
// subject to the following conditions:
// The above copyright notice and this permission notice shall be
// included in all copies or substantial portions of the Software.
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
// BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//
//
// NB: I don't provide a durable connection to mongodb that retries on
// failures. Instead I'm relying on a PaaS's durable restarts.
//
var fs = require('fs'),
url = require('url'),
emitter = require('events').EventEmitter,
assert = require('assert'),
mongo = require('mongodb'),
QueryCommand = mongo.QueryCommand,
Cursor = mongo.Cursor,
Collection = mongo.Collection;
// Heroku-style environment variables
var uristring = process.env.MONGOLAB_URI || "mongodb://localhost/testdatabase"
var mongoUrl = url.parse (uristring);
//
// Open mongo database connection
// A capped collection is needed to use tailable cursors
//
mongo.Db.connect (uristring, function (err, db) {
console.log ("Attempting connection to " + mongoUrl.protocol + "//" + mongoUrl.hostname + " (complete URL supressed).");
db.collectionNames('messages', function (err, colls) {
if (colls.length > 0) {
console.log ('Attempting to drop old "messages" collection.')
db.dropCollection("messages", function (err) {
if (err) {
console.log ("Error dropping collection: ", err);
process.exit(2);
} else {
createAndPopulate(db);
}
});
} else {
createAndPopulate(db);
}
});
});
function createAndPopulate(db) {
db.createCollection ("messages", {capped: true, size: 8000000},
function (err, collection) {
if (err) {
console.log ("Error creating collection: ", err);
process.exit(3);
}
console.log ("Success connecting to " + mongoUrl.protocol + "//" + mongoUrl.hostname + ".");
insertDocs (collection);
});
}
insert = 1;
function insertDocs (collection) {
n = Math.floor(Math.random() * 3);
doc = docs[n]
if (doc["_id"]) delete doc["_id"];
time = new Date()
doc.time = time.getTime()
doc.ordinal = insert;
if (insert == Math.pow(2,30) -1)
insert = 1;
else
insert = insert + 1;
collection.insert(doc);
setTimeout(insertDocs, 1000, collection)
}
docs = [{'messagetype' : 'simple', 'ordinal' : 0, 'somename' : 'somevalue'},
{'messagetype' : 'array', 'ordinal' : 0, 'somearray' : ['a', 'b', 'c', 'd']},
{'messagetype' : 'complex', 'ordinal' :0, 'subdocument' : {'fname' : 'George', 'lname' : 'Washington', 'subproperty' : 'US-president'}}];