Skip to content

Commit 4c72ccd

Browse files
committed
added rolling data producer
1 parent 78947a8 commit 4c72ccd

File tree

4 files changed

+48
-5
lines changed

4 files changed

+48
-5
lines changed

Diff for: README.md

+7-4
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,8 @@ python main.py \
3333
--port 13041 \
3434
--topic-name pizza-orders \
3535
--nr-messages 0 \
36-
--max-waiting-time 0
36+
--max-waiting-time 0 \
37+
--subject pizza
3738
```
3839
in ``SASL_SSL`` security protocol:
3940
```bash
@@ -47,7 +48,8 @@ python main.py \
4748
--port 13041 \
4849
--topic-name pizza-orders \
4950
--nr-messages 0 \
50-
--max-waiting-time 0
51+
--max-waiting-time 0 \
52+
--subject pizza
5153
```
5254
in ``PLAINTEXT`` security protocol:
5355
```bash
@@ -57,7 +59,8 @@ python main.py \
5759
--port 9092 \
5860
--topic-name pizza-orders \
5961
--nr-messages 0 \
60-
--max-waiting-time 0
62+
--max-waiting-time 0 \
63+
--subject pizza
6164
```
6265
Where
6366
* `security-protocol`: Security protocol for Kafka. ``PLAINTEXT``, ``SSL`` or ``SASL_SSL`` are supported.
@@ -67,7 +70,7 @@ Where
6770
* `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)
6871
* `nr-messages`: the number of messages to send
6972
* `max-waiting-time`: the maximum waiting time in seconds between messages
70-
* `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`.
73+
* `subject`: select amongst various subjects: `pizza` is the default one, but you can generate also `userbehaviour`, `bet`, `stock`, `realstock` (using the yahoo finance apis), `metric`, and `rolling`.
7174

7275
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
7376

Diff for: data_rolling.json

+1
Large diffs are not rendered by default.

Diff for: main.py

+4-1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
from realstockproducer import RealStockProvider
1212
from metricproducer import MetricProvider
1313
from userbets import UserBetsProvider
14+
from rolling import RollingProvider
1415

1516

1617
MAX_NUMBER_PIZZAS_IN_ORDER = 10
@@ -79,10 +80,12 @@ def produce_msgs(security_protocol='SSL',
7980
fake.add_provider(UserBehaviorProvider)
8081
elif subject == 'bet':
8182
fake.add_provider(UserBetsProvider)
83+
elif subject == 'rolling':
84+
fake.add_provider(RollingProvider)
8285
else:
8386
fake.add_provider(PizzaProvider)
8487
while i < nr_messages:
85-
if subject in ['stock', 'userbehaviour', 'realstock', 'metric','bet']:
88+
if subject in ['stock', 'userbehaviour', 'realstock', 'metric', 'bet', 'rolling']:
8689
message, key = fake.produce_msg()
8790
else:
8891
message, key = fake.produce_msg(fake, i, MAX_NUMBER_PIZZAS_IN_ORDER, MAX_ADDITIONAL_TOPPINGS_IN_PIZZA)

Diff for: rolling.py

+36
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import random
2+
import time
3+
from faker.providers import BaseProvider
4+
import json
5+
6+
7+
nr_item = 0
8+
base_timestamp = int(time.time()*1000)
9+
f = open('data_rolling.json')
10+
data = json.load(f)
11+
12+
# Adding a RollingProvider with 1 method:
13+
# * getcode to retrieve the username
14+
15+
class RollingProvider(BaseProvider):
16+
17+
def produce_msg (self):
18+
19+
global nr_item
20+
global base_timestamp
21+
item = data[nr_item]
22+
23+
# message composition
24+
message = {
25+
'val': item['value'],
26+
'ts': base_timestamp+int(item['timestamp'])
27+
}
28+
key = {'ts':base_timestamp+int(item['timestamp'])}
29+
if nr_item == 1732:
30+
print("Waiting next iteration")
31+
time.sleep(30)
32+
nr_item = 0
33+
base_timestamp = int(time.time()*1000)
34+
else:
35+
nr_item = nr_item + 1
36+
return message, key

0 commit comments

Comments
 (0)