Skip to content

Commit 00b23fa

Browse files
authored
Merge pull request #11 from aiven/adding-user-bets
Added bet producer
2 parents 9810164 + 94165c6 commit 00b23fa

File tree

4 files changed

+73
-4
lines changed

4 files changed

+73
-4
lines changed

.gitignore

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,4 @@
11
**/certs
2-
.vscode
2+
.vscode
3+
*.pyc
4+
venv

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ Where
4040
* `topic-name`: the Apache Kafka topic name to write to (the topic needs to be pre-created or `kafka.auto_create_topics_enable` parameter enabled)
4141
* `nr-messages`: the number of messages to send
4242
* `max-waiting-time`: the maximum waiting time in seconds between messages
43-
* `subject`: select amongst various subjects: **pizza** is the default one, but you can generate also `userbehaviour`, `stock`, `realstock` (using the yahoo finance apis) and `metric`.
43+
* `subject`: select amongst various subjects: `pizza` is the default one, but you can generate also `userbehaviour`, `bet`, `stock`, `realstock` (using the yahoo finance apis) and `metric`.
4444

4545
If successfully connected to a Apache Kafka cluster, the command will output a number of messages (`nr-messages` parameter) that are been sent to Apache Kafka in the form
4646

main.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
from stockproducer import StockProvider
1010
from realstockproducer import RealStockProvider
1111
from metricproducer import MetricProvider
12+
from userbets import UserBetsProvider
13+
1214

1315
MAX_NUMBER_PIZZAS_IN_ORDER = 10
1416
MAX_ADDITIONAL_TOPPINGS_IN_PIZZA = 5
@@ -50,11 +52,12 @@ def produce_msgs(cert_folder = '~/kafka-pizza/',
5052
fake.add_provider(MetricProvider)
5153
elif subject == 'userbehaviour':
5254
fake.add_provider(UserBehaviorProvider)
55+
elif subject == 'bet':
56+
fake.add_provider(UserBetsProvider)
5357
else:
5458
fake.add_provider(PizzaProvider)
55-
5659
while i < nr_messages:
57-
if subject in ['stock', 'userbehaviour', 'realstock', 'metric']:
60+
if subject in ['stock', 'userbehaviour', 'realstock', 'metric','bet']:
5861
message, key = fake.produce_msg()
5962
else:
6063
message, key = fake.produce_msg(fake, i, MAX_NUMBER_PIZZAS_IN_ORDER, MAX_ADDITIONAL_TOPPINGS_IN_PIZZA)

userbets.py

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
import random
2+
from faker.providers import BaseProvider
3+
4+
MIN_AMOUNT = 2 # Min betting amount
5+
MAX_AMOUNT = 1000 # Max betting amount
6+
7+
ALPHA = 50
8+
9+
# Adding a UserBets with 3 methods:
10+
# * username to retrieve the username,
11+
# * bet_amount to retrieve the amount
12+
# * betting_channel_event to retrieve event and channel
13+
class UserBetsProvider(BaseProvider):
14+
15+
def username(self):
16+
valid_usernames = [
17+
'nopineappleonpizza',
18+
'catanzaro99',
19+
'thedoctor',
20+
'bettingexpert01',
21+
'losingmoney66',
22+
'manutd007',
23+
'manutd009',
24+
'citylife1',
25+
'lysa_X',
26+
'aiventest',
27+
]
28+
return random.choice(valid_usernames)
29+
30+
def bet_amount(self):
31+
#return int(random.triangular(MIN_AMOUNT, MID_AMOUNT, MAX_AMOUNT))
32+
return int((random.paretovariate(ALPHA)-1)*(MAX_AMOUNT - MIN_AMOUNT))+1
33+
34+
def bet_category_event(self):
35+
valid_events = [
36+
{'category': 'Sport', 'subcategory': 'Football', 'event': 'ManUTD vs Chelsea'},
37+
{'category': 'Sport', 'subcategory': 'Box', 'event': 'Chicken Legs vs Power Kick'},
38+
{'category': 'Sport', 'subcategory': 'Curling', 'event': 'Italy vs England'},
39+
{'category': 'Sport', 'subcategory': 'Netball', 'event': 'Sydney vs Camberra'},
40+
{'category': 'Lottery', 'subcategory': 'Bingo', 'event': 'Uk Bingo'},
41+
{'category': 'Lottery', 'subcategory': 'WinForLife', 'event': 'Win For Life America'},
42+
{'category': 'Event', 'subcategory': 'Music', 'event': 'Rick Astley #1 in World Charts'},
43+
{'category': 'Event', 'subcategory': 'Politics', 'event': 'Mickey Mouse new Italian President'},
44+
{'category': 'Event', 'subcategory': 'Celebrities', 'event': 'Donald Duck and Marge Simpson Wedding'},
45+
]
46+
return random.choice(valid_events)
47+
48+
def produce_msg (self):
49+
username = self.username()
50+
bet_amount = self.bet_amount()
51+
bet_event = self.bet_category_event()
52+
53+
# message composition
54+
message = {
55+
'username': username,
56+
'event': {
57+
'category': bet_event['category'],
58+
'subcategory': bet_event['subcategory'],
59+
'name': bet_event['event']
60+
},
61+
'amount': bet_amount
62+
}
63+
key = {'event': bet_event['event']}
64+
return message, key

0 commit comments

Comments
 (0)