-
Notifications
You must be signed in to change notification settings - Fork 13
/
generate.js
158 lines (130 loc) · 5.02 KB
/
generate.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
/*
* Copyright 2013 Apereo Foundation (AF) Licensed under the
* Educational Community License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License. You may
* obtain a copy of the License at
*
* http://www.osedu.org/licenses/ECL-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an "AS IS"
* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
* or implied. See the License for the specific language governing
* permissions and limitations under the License.
*/
var argv = require('optimist')
.usage('Usage: $0 -b <number of batches to generate> -t <tenant alias> [-u <number of users>] [-g <number of groups>] [-c <number of content items]')
.demand('b')
.alias('b', 'batches')
.describe('b', 'Number of batches to generate')
.demand('t')
.alias('t', 'tenant')
.describe('t', 'Tenant alias')
.alias('u', 'users')
.describe('u', 'Number of users per batch')
.default('u', 1000)
.alias('g', 'groups')
.describe('g', 'Number of groups per batch')
.default('g', 2000)
.alias('c', 'content')
.describe('c', 'Number of content items per batch')
.default('c', 5000)
.alias('f', 'folders')
.describe('f', 'Number of folders per batch')
.default('f', 2500)
.alias('d', 'discussions')
.describe('d', 'Number of discussion items per batch')
.default('d', 5000)
.argv;
var fs = require('fs');
var general = require('./api/general');
var user = require('./api/user.generate');
var group = require('./api/group.generate');
var folder = require('./api/folder.generate');
var content = require('./api/content.generate');
var discussion = require('./api/discussion.generate');
//////////////////////////////////////
// OVERALL CONFIGURATION PARAMETERS //
//////////////////////////////////////
var SCRIPT_FOLDER = 'scripts';
var TOTAL_BATCHES = argv.batches;
var TENANT_ALIAS = argv.tenant;
var USERS_PER_BATCH = argv.users;
var GROUPS_PER_BATCH = argv.groups;
var folderS_PER_BATCH = argv.folders;
var CONTENT_PER_BATCH = argv.content;
var DISCUSSIONS_PER_BATCH = argv.discussions;
////////////////////
// KICK OFF BATCH //
////////////////////
var run = function() {
for (var i = 0; i < TOTAL_BATCHES; i++) {
var batch = generateBatch(i);
// Write users to file
general.writeObjectToFile('./' + SCRIPT_FOLDER + '/users/' + i + '.txt', batch.users);
// Write groups to file
general.writeObjectToFile('./' + SCRIPT_FOLDER + '/groups/' + i + '.txt', batch.groups);
// Write content to file
general.writeObjectToFile('./' + SCRIPT_FOLDER + '/content/' + i + '.txt', batch.content);
// Write discussions to file
general.writeObjectToFile('./' + SCRIPT_FOLDER + '/discussions/' + i + '.txt', batch.discussions);
// Write folders to file
general.writeObjectToFile('./' + SCRIPT_FOLDER + '/folders/' + i + '.txt', batch.folders);
}
};
var generateBatch = function(id) {
console.time('Finished Generating Batch ' + id);
console.log('Generating Batch ' + id);
var batch = {
users: {},
groups: {},
folders: {},
content: {},
discussions: {}
};
console.log('Generating users');
for (var u = 0; u < USERS_PER_BATCH; u++) {
var newUser = new user.User(id, TENANT_ALIAS);
batch.users[newUser.id] = newUser;
}
console.log('Adding following');
user.setFollowing(batch.users);
console.log('Generating groups');
for (var g = 0; g < GROUPS_PER_BATCH; g++) {
var newGroup = new group.Group(id, batch.users, TENANT_ALIAS);
batch.groups[newGroup.id] = newGroup;
}
console.log('Adding group members');
batch.groups = group.setGroupMemberships(id, batch.groups, batch.users);
console.log('Generating content');
for (var c = 0; c < CONTENT_PER_BATCH; c++) {
var newContent = new content.Content(id, batch.users, batch.groups);
batch.content[newContent.id] = newContent;
}
console.log('Generating discussions');
for (var d = 0; d < DISCUSSIONS_PER_BATCH; d++) {
var newDiscussion = new discussion.Discussion(id, batch.users, batch.groups);
batch.discussions[newDiscussion.id] = newDiscussion;
}
console.log('Generating folders');
for (var x = 0; x < folderS_PER_BATCH; x++) {
var newfolder = new folder.folder(id, batch.users, batch.groups, batch.content);
batch.folders[newfolder.id] = newfolder;
}
console.timeEnd('Finished Generating Batch ' + id);
console.log('=================================');
return batch;
};
var checkDirectories = function() {
general.createFolder('scripts');
general.createFolder('scripts/users');
general.createFolder('scripts/groups');
general.createFolder('scripts/content');
general.createFolder('scripts/folders');
general.createFolder('scripts/discussions');
};
var init = function() {
checkDirectories();
run();
};
init();