make-mp-data 3.0.2 → 3.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dungeons/adspend.js +13 -26
- package/dungeons/anon.js +1 -1
- package/dungeons/array-of-object-lookup.js +1 -2
- package/dungeons/benchmark-heavy.js +5 -6
- package/dungeons/benchmark-light.js +13 -28
- package/dungeons/big.js +3 -3
- package/dungeons/business.js +11 -12
- package/dungeons/complex.js +1 -2
- package/dungeons/copilot.js +8 -6
- package/dungeons/education.js +21 -22
- package/dungeons/experiments.js +4 -5
- package/dungeons/fintech.js +25 -26
- package/dungeons/foobar.js +1 -1
- package/dungeons/food.js +24 -25
- package/dungeons/funnels.js +2 -2
- package/dungeons/gaming.js +39 -40
- package/dungeons/media.js +30 -31
- package/dungeons/mil.js +17 -18
- package/dungeons/mirror.js +2 -3
- package/dungeons/retention-cadence.js +1 -2
- package/dungeons/rpg.js +42 -43
- package/dungeons/sanity.js +1 -2
- package/dungeons/sass.js +32 -33
- package/dungeons/scd.js +3 -4
- package/dungeons/simple.js +13 -14
- package/dungeons/social.js +27 -28
- package/dungeons/soup-test.js +52 -0
- package/dungeons/streaming.js +17 -18
- package/dungeons/student-teacher.js +0 -1
- package/dungeons/text-generation.js +0 -1
- package/dungeons/user-agent.js +1 -2
- package/index.js +18 -6
- package/lib/core/config-validator.js +22 -33
- package/lib/core/context.js +6 -3
- package/lib/generators/events.js +13 -10
- package/lib/generators/funnels.js +7 -4
- package/lib/generators/scd.js +29 -17
- package/lib/generators/text.js +18 -12
- package/lib/orchestrators/mixpanel-sender.js +26 -38
- package/lib/orchestrators/user-loop.js +68 -15
- package/lib/templates/phrases.js +8 -5
- package/lib/utils/function-registry.js +17 -0
- package/lib/utils/utils.js +15 -84
- package/package.json +3 -1
- package/types.d.ts +86 -19
- package/lib/templates/verbose-schema.js +0 -272
- package/lib/utils/chart.js +0 -210
package/dungeons/sass.js
CHANGED
|
@@ -98,9 +98,8 @@ const config = {
|
|
|
98
98
|
hasAdSpend: false,
|
|
99
99
|
percentUsersBornInDataset: 50,
|
|
100
100
|
hasAvatar: true,
|
|
101
|
-
makeChart: false,
|
|
102
101
|
batchSize: 2_500_000,
|
|
103
|
-
concurrency:
|
|
102
|
+
concurrency: 1,
|
|
104
103
|
writeToDisk: false,
|
|
105
104
|
scdProps: {},
|
|
106
105
|
|
|
@@ -168,8 +167,8 @@ const config = {
|
|
|
168
167
|
weight: 1,
|
|
169
168
|
isFirstEvent: true,
|
|
170
169
|
properties: {
|
|
171
|
-
company_size:
|
|
172
|
-
industry:
|
|
170
|
+
company_size: ["startup", "smb", "mid_market", "enterprise"],
|
|
171
|
+
industry: ["tech", "finance", "healthcare", "retail", "media"],
|
|
173
172
|
}
|
|
174
173
|
},
|
|
175
174
|
{
|
|
@@ -177,17 +176,17 @@ const config = {
|
|
|
177
176
|
weight: 10,
|
|
178
177
|
properties: {
|
|
179
178
|
service_id: u.pickAWinner(serviceIds),
|
|
180
|
-
service_type:
|
|
181
|
-
environment:
|
|
182
|
-
cloud_provider:
|
|
179
|
+
service_type: ["web_app", "api", "database", "cache", "queue", "ml_model"],
|
|
180
|
+
environment: ["production", "staging", "dev"],
|
|
181
|
+
cloud_provider: ["aws", "gcp", "azure"],
|
|
183
182
|
}
|
|
184
183
|
},
|
|
185
184
|
{
|
|
186
185
|
event: "dashboard viewed",
|
|
187
186
|
weight: 20,
|
|
188
187
|
properties: {
|
|
189
|
-
dashboard_type:
|
|
190
|
-
time_range:
|
|
188
|
+
dashboard_type: ["overview", "cost", "performance", "security", "custom"],
|
|
189
|
+
time_range: ["1h", "6h", "24h", "7d", "30d"],
|
|
191
190
|
}
|
|
192
191
|
},
|
|
193
192
|
{
|
|
@@ -195,8 +194,8 @@ const config = {
|
|
|
195
194
|
weight: 12,
|
|
196
195
|
properties: {
|
|
197
196
|
alert_id: u.pickAWinner(alertIds),
|
|
198
|
-
severity:
|
|
199
|
-
alert_type:
|
|
197
|
+
severity: ["info", "warning", "critical", "emergency"],
|
|
198
|
+
alert_type: ["cpu", "memory", "latency", "error_rate", "disk", "network"],
|
|
200
199
|
service_id: u.pickAWinner(serviceIds),
|
|
201
200
|
}
|
|
202
201
|
},
|
|
@@ -206,7 +205,7 @@ const config = {
|
|
|
206
205
|
properties: {
|
|
207
206
|
alert_id: u.pickAWinner(alertIds),
|
|
208
207
|
response_time_mins: u.weighNumRange(1, 120),
|
|
209
|
-
acknowledged_by_role:
|
|
208
|
+
acknowledged_by_role: ["engineer", "sre", "manager", "oncall"],
|
|
210
209
|
}
|
|
211
210
|
},
|
|
212
211
|
{
|
|
@@ -215,7 +214,7 @@ const config = {
|
|
|
215
214
|
properties: {
|
|
216
215
|
alert_id: u.pickAWinner(alertIds),
|
|
217
216
|
resolution_time_mins: u.weighNumRange(5, 1440),
|
|
218
|
-
root_cause:
|
|
217
|
+
root_cause: ["config_change", "capacity", "bug", "dependency", "network"],
|
|
219
218
|
}
|
|
220
219
|
},
|
|
221
220
|
{
|
|
@@ -223,7 +222,7 @@ const config = {
|
|
|
223
222
|
weight: 9,
|
|
224
223
|
properties: {
|
|
225
224
|
pipeline_id: u.pickAWinner(pipelineIds),
|
|
226
|
-
status:
|
|
225
|
+
status: ["success", "failed", "cancelled"],
|
|
227
226
|
duration_sec: u.weighNumRange(30, 1800),
|
|
228
227
|
commit_count: u.weighNumRange(1, 20),
|
|
229
228
|
}
|
|
@@ -243,7 +242,7 @@ const config = {
|
|
|
243
242
|
event: "cost report generated",
|
|
244
243
|
weight: 4,
|
|
245
244
|
properties: {
|
|
246
|
-
report_period:
|
|
245
|
+
report_period: ["daily", "weekly", "monthly"],
|
|
247
246
|
total_cost: u.weighNumRange(100, 50000),
|
|
248
247
|
cost_change_percent: u.weighNumRange(-30, 50),
|
|
249
248
|
}
|
|
@@ -252,23 +251,23 @@ const config = {
|
|
|
252
251
|
event: "team member invited",
|
|
253
252
|
weight: 3,
|
|
254
253
|
properties: {
|
|
255
|
-
role:
|
|
256
|
-
invitation_method:
|
|
254
|
+
role: ["admin", "editor", "viewer", "billing"],
|
|
255
|
+
invitation_method: ["email", "sso", "slack"],
|
|
257
256
|
}
|
|
258
257
|
},
|
|
259
258
|
{
|
|
260
259
|
event: "integration configured",
|
|
261
260
|
weight: 4,
|
|
262
261
|
properties: {
|
|
263
|
-
integration_type:
|
|
264
|
-
status:
|
|
262
|
+
integration_type: ["slack", "pagerduty", "jira", "github", "datadog", "terraform"],
|
|
263
|
+
status: ["active", "paused", "error"],
|
|
265
264
|
}
|
|
266
265
|
},
|
|
267
266
|
{
|
|
268
267
|
event: "query executed",
|
|
269
268
|
weight: 15,
|
|
270
269
|
properties: {
|
|
271
|
-
query_type:
|
|
270
|
+
query_type: ["metrics", "logs", "traces"],
|
|
272
271
|
time_range_hours: u.weighNumRange(1, 720),
|
|
273
272
|
result_count: u.weighNumRange(0, 10000),
|
|
274
273
|
}
|
|
@@ -278,7 +277,7 @@ const config = {
|
|
|
278
277
|
weight: 3,
|
|
279
278
|
properties: {
|
|
280
279
|
runbook_id: u.pickAWinner(runbookIds),
|
|
281
|
-
trigger:
|
|
280
|
+
trigger: ["manual", "automated", "alert_triggered"],
|
|
282
281
|
success: u.pickAWinner([true, false], 0.15),
|
|
283
282
|
}
|
|
284
283
|
},
|
|
@@ -286,7 +285,7 @@ const config = {
|
|
|
286
285
|
event: "billing event",
|
|
287
286
|
weight: 3,
|
|
288
287
|
properties: {
|
|
289
|
-
event_type:
|
|
288
|
+
event_type: ["invoice_generated", "payment_received", "payment_failed", "plan_upgraded", "plan_downgraded"],
|
|
290
289
|
amount: u.weighNumRange(99, 25000),
|
|
291
290
|
}
|
|
292
291
|
},
|
|
@@ -294,7 +293,7 @@ const config = {
|
|
|
294
293
|
event: "security scan",
|
|
295
294
|
weight: 6,
|
|
296
295
|
properties: {
|
|
297
|
-
scan_type:
|
|
296
|
+
scan_type: ["vulnerability", "compliance", "access_audit"],
|
|
298
297
|
findings_count: u.weighNumRange(0, 50),
|
|
299
298
|
critical_findings: u.weighNumRange(0, 10),
|
|
300
299
|
}
|
|
@@ -303,8 +302,8 @@ const config = {
|
|
|
303
302
|
event: "api call",
|
|
304
303
|
weight: 16,
|
|
305
304
|
properties: {
|
|
306
|
-
endpoint:
|
|
307
|
-
method:
|
|
305
|
+
endpoint: ["/deploy", "/status", "/metrics", "/alerts", "/config", "/billing"],
|
|
306
|
+
method: ["GET", "POST", "PUT", "DELETE"],
|
|
308
307
|
response_time_ms: u.weighNumRange(10, 5000),
|
|
309
308
|
status_code: u.pickAWinner([200, 201, 400, 401, 403, 500, 503]),
|
|
310
309
|
}
|
|
@@ -313,7 +312,7 @@ const config = {
|
|
|
313
312
|
event: "documentation viewed",
|
|
314
313
|
weight: 7,
|
|
315
314
|
properties: {
|
|
316
|
-
doc_section:
|
|
315
|
+
doc_section: ["getting_started", "api_reference", "best_practices", "troubleshooting", "changelog"],
|
|
317
316
|
time_on_page_sec: u.weighNumRange(5, 600),
|
|
318
317
|
}
|
|
319
318
|
},
|
|
@@ -323,20 +322,20 @@ const config = {
|
|
|
323
322
|
properties: {
|
|
324
323
|
flag_name: () => `flag_${chance.word()}`,
|
|
325
324
|
new_state: u.pickAWinner(["enabled", "disabled"], 0.15),
|
|
326
|
-
environment:
|
|
325
|
+
environment: ["production", "staging", "dev"],
|
|
327
326
|
}
|
|
328
327
|
},
|
|
329
328
|
],
|
|
330
329
|
|
|
331
330
|
superProps: {
|
|
332
331
|
plan_tier: u.pickAWinner(["free", "free", "team", "team", "business", "enterprise"]),
|
|
333
|
-
cloud_provider:
|
|
332
|
+
cloud_provider: ["aws", "gcp", "azure", "multi_cloud"],
|
|
334
333
|
},
|
|
335
334
|
|
|
336
335
|
userProps: {
|
|
337
336
|
company_size: u.pickAWinner(["startup", "startup", "smb", "mid_market", "enterprise"]),
|
|
338
|
-
primary_role:
|
|
339
|
-
team_name:
|
|
337
|
+
primary_role: ["engineer", "sre", "devops", "manager", "executive"],
|
|
338
|
+
team_name: ["Platform", "Backend", "Frontend", "Data", "Security", "Infrastructure"],
|
|
340
339
|
},
|
|
341
340
|
|
|
342
341
|
groupKeys: [
|
|
@@ -346,9 +345,9 @@ const config = {
|
|
|
346
345
|
groupProps: {
|
|
347
346
|
company_id: {
|
|
348
347
|
name: () => `${chance.word({ capitalize: true })} ${chance.pickone(["Systems", "Technologies", "Labs", "Cloud", "Digital", "Networks", "Solutions"])}`,
|
|
349
|
-
industry:
|
|
350
|
-
employee_count:
|
|
351
|
-
arr_bucket:
|
|
348
|
+
industry: ["tech", "finance", "healthcare", "retail", "media", "manufacturing", "logistics"],
|
|
349
|
+
employee_count: ["1-10", "11-50", "51-200", "201-1000", "1001-5000", "5000+"],
|
|
350
|
+
arr_bucket: ["<10k", "10k-50k", "50k-200k", "200k-1M", "1M+"],
|
|
352
351
|
}
|
|
353
352
|
},
|
|
354
353
|
|
package/dungeons/scd.js
CHANGED
|
@@ -32,7 +32,6 @@ const config = {
|
|
|
32
32
|
hasAnonIds: false, //if true, anonymousIds are created for each user
|
|
33
33
|
hasSessionIds: false, //if true, hasSessionIds are created for each user
|
|
34
34
|
hasAdSpend: false,
|
|
35
|
-
makeChart: false,
|
|
36
35
|
hasLocation: true,
|
|
37
36
|
hasAndroidDevices: true,
|
|
38
37
|
hasIOSDevices: true,
|
|
@@ -48,7 +47,7 @@ const config = {
|
|
|
48
47
|
weight: 2,
|
|
49
48
|
properties: {
|
|
50
49
|
amount: weighNumRange(5, 500, .25),
|
|
51
|
-
currency:
|
|
50
|
+
currency: ["USD", "CAD", "EUR", "BTC", "ETH", "JPY"],
|
|
52
51
|
coupon: weighChoices(["none", "none", "none", "none", "10%OFF", "20%OFF", "10%OFF", "20%OFF", "30%OFF", "40%OFF", "50%OFF"]),
|
|
53
52
|
numItems: weighNumRange(1, 10),
|
|
54
53
|
|
|
@@ -173,7 +172,7 @@ const config = {
|
|
|
173
172
|
company_id: {
|
|
174
173
|
name: () => { return chance.name(); },
|
|
175
174
|
email: () => { return `CSM: ${chance.pickone(["AK", "Neha", "Rajiv", "Deepak", "Justin", "Hans", "Katie", "Somya", "Tony", "Kaan"])}`; },
|
|
176
|
-
industry:
|
|
175
|
+
industry: [
|
|
177
176
|
"technology",
|
|
178
177
|
"education",
|
|
179
178
|
"finance",
|
|
@@ -190,7 +189,7 @@ const config = {
|
|
|
190
189
|
"utilities",
|
|
191
190
|
"agriculture",
|
|
192
191
|
"other",
|
|
193
|
-
]
|
|
192
|
+
],
|
|
194
193
|
segment: ["SMB", "SMB", "SMB", "Mid Market", "Mid Market", "Enterprise"],
|
|
195
194
|
"# active users": chance.integer({ min: 2, max: 20 })
|
|
196
195
|
}
|
package/dungeons/simple.js
CHANGED
|
@@ -22,17 +22,16 @@ const videoCategories = ["funny", "educational", "inspirational", "music", "news
|
|
|
22
22
|
|
|
23
23
|
/** @type {import('../types').Dungeon} */
|
|
24
24
|
const config = {
|
|
25
|
-
token: "",
|
|
25
|
+
token: "c63e5bca7d459fad276354ea9ddbaaeb",
|
|
26
26
|
seed: "simple is best",
|
|
27
27
|
numDays: 100, //how many days worth1 of data
|
|
28
|
-
numEvents:
|
|
29
|
-
numUsers:
|
|
28
|
+
numEvents: 500_000, //how many events
|
|
29
|
+
numUsers: 5_000, //how many users
|
|
30
30
|
format: 'json', //csv or json
|
|
31
31
|
region: "US",
|
|
32
32
|
hasAnonIds: true, //if true, anonymousIds are created for each user
|
|
33
33
|
hasSessionIds: true, //if true, hasSessionIds are created for each user
|
|
34
|
-
hasAdSpend:
|
|
35
|
-
makeChart: false,
|
|
34
|
+
hasAdSpend: false,
|
|
36
35
|
hasLocation: true,
|
|
37
36
|
hasAndroidDevices: true,
|
|
38
37
|
hasIOSDevices: true,
|
|
@@ -41,7 +40,7 @@ const config = {
|
|
|
41
40
|
hasCampaigns: true,
|
|
42
41
|
isAnonymous: false,
|
|
43
42
|
alsoInferFunnels: true,
|
|
44
|
-
concurrency:
|
|
43
|
+
concurrency: 1,
|
|
45
44
|
batchSize: 2_500_000,
|
|
46
45
|
|
|
47
46
|
|
|
@@ -50,14 +49,14 @@ const config = {
|
|
|
50
49
|
event: "ad impression",
|
|
51
50
|
weight: 15,
|
|
52
51
|
properties: {
|
|
53
|
-
partner:
|
|
52
|
+
partner: ["google", "facebook", "twitter", "linkedin", "bing", "taboola", "outbrain", "quora", "pinterest"],
|
|
54
53
|
}
|
|
55
54
|
},
|
|
56
55
|
{
|
|
57
56
|
event: "ad click",
|
|
58
57
|
weight: 10,
|
|
59
58
|
properties: {
|
|
60
|
-
partner:
|
|
59
|
+
partner: ["google", "facebook", "twitter", "linkedin", "bing", "taboola", "outbrain", "quora", "pinterest"],
|
|
61
60
|
}
|
|
62
61
|
},
|
|
63
62
|
{
|
|
@@ -65,7 +64,7 @@ const config = {
|
|
|
65
64
|
weight: 2,
|
|
66
65
|
properties: {
|
|
67
66
|
amount: weighNumRange(5, 500, .25),
|
|
68
|
-
currency:
|
|
67
|
+
currency: ["USD", "CAD", "EUR", "BTC", "ETH", "JPY"],
|
|
69
68
|
coupon: weighChoices(["none", "none", "none", "none", "10%OFF", "20%OFF", "10%OFF", "20%OFF", "30%OFF", "40%OFF", "50%OFF"]),
|
|
70
69
|
numItems: weighNumRange(1, 10),
|
|
71
70
|
|
|
@@ -127,7 +126,7 @@ const config = {
|
|
|
127
126
|
weight: 1,
|
|
128
127
|
isFirstEvent: true,
|
|
129
128
|
properties: {
|
|
130
|
-
signupMethod:
|
|
129
|
+
signupMethod: ["email", "google", "facebook", "twitter", "linkedin", "github"],
|
|
131
130
|
referral: weighChoices(["none", "none", "none", "friend", "ad", "ad", "ad", "friend", "friend", "friend", "friend"]),
|
|
132
131
|
}
|
|
133
132
|
},
|
|
@@ -192,8 +191,8 @@ const config = {
|
|
|
192
191
|
}
|
|
193
192
|
|
|
194
193
|
if (EVENT_TIME.isBefore(OVER_THINGS_GET_BETTER)) {
|
|
195
|
-
//
|
|
196
|
-
if (chance.bool({ likelihood: 33 }))
|
|
194
|
+
// tag 33% for removal (filtered in "everything" hook)
|
|
195
|
+
if (chance.bool({ likelihood: 33 })) record._drop = true;
|
|
197
196
|
}
|
|
198
197
|
}
|
|
199
198
|
|
|
@@ -233,10 +232,10 @@ const config = {
|
|
|
233
232
|
}
|
|
234
233
|
}
|
|
235
234
|
|
|
235
|
+
// Filter out events tagged for removal in the event hook
|
|
236
|
+
record = record.filter(e => !e._drop);
|
|
236
237
|
}
|
|
237
238
|
|
|
238
|
-
|
|
239
|
-
|
|
240
239
|
return record;
|
|
241
240
|
}
|
|
242
241
|
};
|
package/dungeons/social.js
CHANGED
|
@@ -118,9 +118,8 @@ const config = {
|
|
|
118
118
|
hasAdSpend: false,
|
|
119
119
|
percentUsersBornInDataset: 50,
|
|
120
120
|
hasAvatar: true,
|
|
121
|
-
makeChart: false,
|
|
122
121
|
batchSize: 2_500_000,
|
|
123
|
-
concurrency:
|
|
122
|
+
concurrency: 1,
|
|
124
123
|
writeToDisk: false,
|
|
125
124
|
scdProps: {},
|
|
126
125
|
|
|
@@ -188,15 +187,15 @@ const config = {
|
|
|
188
187
|
weight: 1,
|
|
189
188
|
isFirstEvent: true,
|
|
190
189
|
properties: {
|
|
191
|
-
"signup_method":
|
|
192
|
-
"referred_by":
|
|
190
|
+
"signup_method": ["email", "google", "apple", "sso"],
|
|
191
|
+
"referred_by": ["organic", "friend", "ad", "influencer"],
|
|
193
192
|
}
|
|
194
193
|
},
|
|
195
194
|
{
|
|
196
195
|
event: "post created",
|
|
197
196
|
weight: 12,
|
|
198
197
|
properties: {
|
|
199
|
-
"post_type":
|
|
198
|
+
"post_type": ["text", "image", "video", "poll", "link"],
|
|
200
199
|
"character_count": u.weighNumRange(1, 280),
|
|
201
200
|
"has_media": u.pickAWinner([true, false], 0.4),
|
|
202
201
|
"hashtag_count": u.weighNumRange(0, 10, 0.5),
|
|
@@ -206,23 +205,23 @@ const config = {
|
|
|
206
205
|
event: "post viewed",
|
|
207
206
|
weight: 30,
|
|
208
207
|
properties: {
|
|
209
|
-
"post_type":
|
|
208
|
+
"post_type": ["text", "image", "video", "poll", "link"],
|
|
210
209
|
"view_duration_sec": u.weighNumRange(1, 120, 0.3, 5),
|
|
211
|
-
"source":
|
|
210
|
+
"source": ["feed", "explore", "search", "profile", "notification"],
|
|
212
211
|
}
|
|
213
212
|
},
|
|
214
213
|
{
|
|
215
214
|
event: "post liked",
|
|
216
215
|
weight: 18,
|
|
217
216
|
properties: {
|
|
218
|
-
"post_type":
|
|
217
|
+
"post_type": ["text", "image", "video", "poll", "link"],
|
|
219
218
|
}
|
|
220
219
|
},
|
|
221
220
|
{
|
|
222
221
|
event: "post shared",
|
|
223
222
|
weight: 6,
|
|
224
223
|
properties: {
|
|
225
|
-
"share_destination":
|
|
224
|
+
"share_destination": ["repost", "dm", "external", "copy_link"],
|
|
226
225
|
}
|
|
227
226
|
},
|
|
228
227
|
{
|
|
@@ -237,21 +236,21 @@ const config = {
|
|
|
237
236
|
event: "user followed",
|
|
238
237
|
weight: 8,
|
|
239
238
|
properties: {
|
|
240
|
-
"discovery_source":
|
|
239
|
+
"discovery_source": ["suggested", "search", "post", "profile", "mutual"],
|
|
241
240
|
}
|
|
242
241
|
},
|
|
243
242
|
{
|
|
244
243
|
event: "user unfollowed",
|
|
245
244
|
weight: 2,
|
|
246
245
|
properties: {
|
|
247
|
-
"reason":
|
|
246
|
+
"reason": ["content_quality", "too_frequent", "lost_interest", "offensive"],
|
|
248
247
|
}
|
|
249
248
|
},
|
|
250
249
|
{
|
|
251
250
|
event: "story viewed",
|
|
252
251
|
weight: 15,
|
|
253
252
|
properties: {
|
|
254
|
-
"story_type":
|
|
253
|
+
"story_type": ["photo", "video", "text"],
|
|
255
254
|
"view_duration_sec": u.weighNumRange(1, 30, 0.5, 5),
|
|
256
255
|
"completed": u.pickAWinner([true, false], 0.6),
|
|
257
256
|
}
|
|
@@ -260,7 +259,7 @@ const config = {
|
|
|
260
259
|
event: "story created",
|
|
261
260
|
weight: 5,
|
|
262
261
|
properties: {
|
|
263
|
-
"story_type":
|
|
262
|
+
"story_type": ["photo", "video", "text"],
|
|
264
263
|
"has_filter": u.pickAWinner([true, false], 0.5),
|
|
265
264
|
"has_sticker": u.pickAWinner([true, false], 0.3),
|
|
266
265
|
}
|
|
@@ -269,7 +268,7 @@ const config = {
|
|
|
269
268
|
event: "search performed",
|
|
270
269
|
weight: 7,
|
|
271
270
|
properties: {
|
|
272
|
-
"search_type":
|
|
271
|
+
"search_type": ["users", "hashtags", "posts"],
|
|
273
272
|
"results_count": u.weighNumRange(0, 50, 0.5, 10),
|
|
274
273
|
}
|
|
275
274
|
},
|
|
@@ -277,7 +276,7 @@ const config = {
|
|
|
277
276
|
event: "notification received",
|
|
278
277
|
weight: 12,
|
|
279
278
|
properties: {
|
|
280
|
-
"notification_type":
|
|
279
|
+
"notification_type": ["like", "follow", "comment", "mention", "trending"],
|
|
281
280
|
"clicked": u.pickAWinner([true, false], 0.4),
|
|
282
281
|
}
|
|
283
282
|
},
|
|
@@ -285,7 +284,7 @@ const config = {
|
|
|
285
284
|
event: "dm sent",
|
|
286
285
|
weight: 8,
|
|
287
286
|
properties: {
|
|
288
|
-
"message_type":
|
|
287
|
+
"message_type": ["text", "image", "voice", "link"],
|
|
289
288
|
"conversation_length": u.weighNumRange(1, 100),
|
|
290
289
|
}
|
|
291
290
|
},
|
|
@@ -293,8 +292,8 @@ const config = {
|
|
|
293
292
|
event: "ad viewed",
|
|
294
293
|
weight: 10,
|
|
295
294
|
properties: {
|
|
296
|
-
"ad_format":
|
|
297
|
-
"ad_category":
|
|
295
|
+
"ad_format": ["feed_native", "story", "banner", "video"],
|
|
296
|
+
"ad_category": ["retail", "tech", "food", "finance", "entertainment"],
|
|
298
297
|
"view_duration_sec": u.weighNumRange(1, 30, 0.3),
|
|
299
298
|
}
|
|
300
299
|
},
|
|
@@ -302,38 +301,38 @@ const config = {
|
|
|
302
301
|
event: "ad clicked",
|
|
303
302
|
weight: 2,
|
|
304
303
|
properties: {
|
|
305
|
-
"ad_format":
|
|
306
|
-
"ad_category":
|
|
304
|
+
"ad_format": ["feed_native", "story", "banner", "video"],
|
|
305
|
+
"ad_category": ["retail", "tech", "food", "finance", "entertainment"],
|
|
307
306
|
}
|
|
308
307
|
},
|
|
309
308
|
{
|
|
310
309
|
event: "report submitted",
|
|
311
310
|
weight: 1,
|
|
312
311
|
properties: {
|
|
313
|
-
"report_type":
|
|
314
|
-
"content_type":
|
|
312
|
+
"report_type": ["spam", "harassment", "misinformation", "hate_speech", "other"],
|
|
313
|
+
"content_type": ["post", "comment", "user", "dm"],
|
|
315
314
|
}
|
|
316
315
|
},
|
|
317
316
|
{
|
|
318
317
|
event: "profile updated",
|
|
319
318
|
weight: 3,
|
|
320
319
|
properties: {
|
|
321
|
-
"field_updated":
|
|
320
|
+
"field_updated": ["bio", "avatar", "display_name", "privacy_settings", "interests"],
|
|
322
321
|
}
|
|
323
322
|
},
|
|
324
323
|
{
|
|
325
324
|
event: "creator subscription started",
|
|
326
325
|
weight: 2,
|
|
327
326
|
properties: {
|
|
328
|
-
"tier":
|
|
327
|
+
"tier": ["basic", "premium", "vip"],
|
|
329
328
|
"price_usd": u.pickAWinner([4.99, 9.99, 19.99]),
|
|
330
329
|
}
|
|
331
330
|
},
|
|
332
331
|
],
|
|
333
332
|
|
|
334
333
|
superProps: {
|
|
335
|
-
app_version:
|
|
336
|
-
account_type:
|
|
334
|
+
app_version: ["4.0", "4.1", "4.2", "4.3", "5.0"],
|
|
335
|
+
account_type: ["personal", "creator", "business"],
|
|
337
336
|
},
|
|
338
337
|
|
|
339
338
|
userProps: {
|
|
@@ -341,7 +340,7 @@ const config = {
|
|
|
341
340
|
"following_count": u.weighNumRange(0, 5000, 0.3, 100),
|
|
342
341
|
"bio_length": u.weighNumRange(0, 160),
|
|
343
342
|
"verified": u.pickAWinner([true, false], 0.05),
|
|
344
|
-
"content_niche":
|
|
343
|
+
"content_niche": ["lifestyle", "tech", "food", "fitness", "travel", "comedy", "news", "art"],
|
|
345
344
|
},
|
|
346
345
|
|
|
347
346
|
groupKeys: [
|
|
@@ -352,7 +351,7 @@ const config = {
|
|
|
352
351
|
community_id: {
|
|
353
352
|
"name": () => `${chance.word()} ${chance.pickone(["Hub", "Circle", "Squad", "Zone", "Space"])}`,
|
|
354
353
|
"member_count": u.weighNumRange(50, 5000, 0.3, 200),
|
|
355
|
-
"category":
|
|
354
|
+
"category": ["technology", "entertainment", "sports", "politics", "art", "science"],
|
|
356
355
|
"is_moderated": u.pickAWinner([true, false], 0.7),
|
|
357
356
|
}
|
|
358
357
|
},
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bare dungeon for testing TimeSoup time distribution.
|
|
3
|
+
* No hooks, no funnels, no ad spend — pure event generation
|
|
4
|
+
* so TimeSoup's distribution is the only thing shaping the data.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
/** @type {import('../types').Dungeon} */
|
|
8
|
+
const config = {
|
|
9
|
+
token: "",
|
|
10
|
+
seed: "soup-test",
|
|
11
|
+
numDays: 100,
|
|
12
|
+
numEvents: 50_000,
|
|
13
|
+
numUsers: 500,
|
|
14
|
+
format: "json",
|
|
15
|
+
writeToDisk: true,
|
|
16
|
+
concurrency: 1,
|
|
17
|
+
hasAdSpend: false,
|
|
18
|
+
hasCampaigns: false,
|
|
19
|
+
hasLocation: false,
|
|
20
|
+
hasAvatar: false,
|
|
21
|
+
hasBrowser: false,
|
|
22
|
+
hasAnonIds: false,
|
|
23
|
+
hasSessionIds: false,
|
|
24
|
+
hasAndroidDevices: true,
|
|
25
|
+
hasIOSDevices: true,
|
|
26
|
+
hasDesktopDevices: true,
|
|
27
|
+
isAnonymous: false,
|
|
28
|
+
alsoInferFunnels: false,
|
|
29
|
+
verbose: true,
|
|
30
|
+
batchSize: 2_500_000,
|
|
31
|
+
name: "soup-test",
|
|
32
|
+
|
|
33
|
+
// Uses default soup params — change these to test different distributions
|
|
34
|
+
// soup: { peaks: 5, deviation: 2, mean: 0 },
|
|
35
|
+
|
|
36
|
+
events: [
|
|
37
|
+
{ event: "page_view", weight: 5, isFirstEvent: true, properties: {} },
|
|
38
|
+
{ event: "click", weight: 3, properties: {} },
|
|
39
|
+
{ event: "purchase", weight: 1, properties: {} },
|
|
40
|
+
],
|
|
41
|
+
|
|
42
|
+
superProps: {},
|
|
43
|
+
userProps: {},
|
|
44
|
+
funnels: [],
|
|
45
|
+
scdProps: {},
|
|
46
|
+
mirrorProps: {},
|
|
47
|
+
groupKeys: [],
|
|
48
|
+
groupProps: {},
|
|
49
|
+
lookupTables: [],
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
export default config;
|