From 0989db4151f6db8beb765ce27cf6a7af989f11d3 Mon Sep 17 00:00:00 2001 From: "Jose Daniel Alvarez Coello (LT-3)" Date: Sun, 26 Jan 2020 20:15:15 +0100 Subject: [PATCH] docs: Initial commit with the template of the project See the TODOs to complete the project --- README.md | 233 ++++++++++++++++++ __init__.py | 0 consumers/__init__.py | 0 consumers/consumer.py | 104 ++++++++ consumers/faust_stream.py | 58 +++++ consumers/ksql.py | 60 +++++ consumers/logging.ini | 21 ++ consumers/models/__init__.py | 4 + consumers/models/line.py | 79 ++++++ consumers/models/lines.py | 39 +++ consumers/models/station.py | 43 ++++ consumers/models/weather.py | 23 ++ consumers/requirements.txt | 3 + consumers/server.py | 105 ++++++++ consumers/templates/status.html | 48 ++++ consumers/topic_check.py | 8 + docker-compose.yaml | 140 +++++++++++ images/diagram.png | Bin 0 -> 31922 bytes images/ui.png | Bin 0 -> 367682 bytes load_stations.sql | 25 ++ producers/__init__.py | 0 producers/connector.py | 74 ++++++ producers/data/README.md | 13 + producers/data/cta_stations.csv | 231 +++++++++++++++++ producers/data/ridership_curve.csv | 26 ++ producers/data/ridership_seed.csv | 145 +++++++++++ producers/logging.ini | 21 ++ producers/models/__init__.py | 5 + producers/models/line.py | 191 ++++++++++++++ producers/models/producer.py | 79 ++++++ producers/models/schemas/arrival_key.json | 11 + producers/models/schemas/arrival_value.json | 3 + producers/models/schemas/turnstile_key.json | 11 + producers/models/schemas/turnstile_value.json | 3 + producers/models/schemas/weather_key.json | 11 + producers/models/schemas/weather_value.json | 3 + producers/models/station.py | 104 ++++++++ producers/models/train.py | 27 ++ producers/models/turnstile.py | 59 +++++ producers/models/turnstile_hardware.py | 66 +++++ producers/models/weather.py | 112 +++++++++ producers/requirements.txt | 3 + producers/simulation.py | 83 +++++++ 43 files changed, 2274 insertions(+) create mode 100755 README.md create mode 100755 __init__.py create mode 100755 consumers/__init__.py create mode 100755 consumers/consumer.py create mode 100755 consumers/faust_stream.py create mode 100755 consumers/ksql.py create mode 100755 consumers/logging.ini create mode 100755 consumers/models/__init__.py create mode 100755 consumers/models/line.py create mode 100755 consumers/models/lines.py create mode 100755 consumers/models/station.py create mode 100755 consumers/models/weather.py create mode 100755 consumers/requirements.txt create mode 100755 consumers/server.py create mode 100755 consumers/templates/status.html create mode 100755 consumers/topic_check.py create mode 100755 docker-compose.yaml create mode 100755 images/diagram.png create mode 100755 images/ui.png create mode 100755 load_stations.sql create mode 100755 producers/__init__.py create mode 100755 producers/connector.py create mode 100755 producers/data/README.md create mode 100755 producers/data/cta_stations.csv create mode 100755 producers/data/ridership_curve.csv create mode 100755 producers/data/ridership_seed.csv create mode 100755 producers/logging.ini create mode 100755 producers/models/__init__.py create mode 100755 producers/models/line.py create mode 100755 producers/models/producer.py create mode 100755 producers/models/schemas/arrival_key.json create mode 100755 producers/models/schemas/arrival_value.json create mode 100755 producers/models/schemas/turnstile_key.json create mode 100755 producers/models/schemas/turnstile_value.json create mode 100755 producers/models/schemas/weather_key.json create mode 100755 producers/models/schemas/weather_value.json create mode 100755 producers/models/station.py create mode 100755 producers/models/train.py create mode 100755 producers/models/turnstile.py create mode 100755 producers/models/turnstile_hardware.py create mode 100755 producers/models/weather.py create mode 100755 producers/requirements.txt create mode 100755 producers/simulation.py diff --git a/README.md b/README.md new file mode 100755 index 0000000..d980e2c --- /dev/null +++ b/README.md @@ -0,0 +1,233 @@ +# Public Transit Status with Apache Kafka + +In this project, you will construct a streaming event pipeline around Apache Kafka and its ecosystem. Using public data from the [Chicago Transit Authority](https://www.transitchicago.com/data/) we will construct an event pipeline around Kafka that allows us to simulate and display the status of train lines in real time. + +When the project is complete, you will be able to monitor a website to watch trains move from station to station. + +![Final User Interface](images/ui.png) + + +## Prerequisites + +The following are required to complete this project: + +* Docker +* Python 3.7 +* Access to a computer with a minimum of 16gb+ RAM and a 4-core CPU to execute the simulation + +## Description + +The Chicago Transit Authority (CTA) has asked us to develop a dashboard displaying system status for its commuters. We have decided to use Kafka and ecosystem tools like REST Proxy and Kafka Connect to accomplish this task. + +Our architecture will look like so: + +![Project Architecture](images/diagram.png) + +### Step 1: Create Kafka Producers +The first step in our plan is to configure the train stations to emit some of the events that we need. The CTA has placed a sensor on each side of every train station that can be programmed to take an action whenever a train arrives at the station. + +To accomplish this, you must complete the following tasks: + +1. Complete the code in `producers/models/producer.py` +1. Define a `value` schema for the arrival event in `producers/models/schemas/arrival_value.json` with the following attributes + * `station_id` + * `train_id` + * `direction` + * `line` + * `train_status` + * `prev_station_id` + * `prev_direction` +1. Complete the code in `producers/models/station.py` so that: + * A topic is created for each station in Kafka to track the arrival events + * The station emits an `arrival` event to Kafka whenever the `Station.run()` function is called. + * Ensure that events emitted to kafka are paired with the Avro `key` and `value` schemas +1. Define a `value` schema for the turnstile event in `producers/models/schemas/turnstile_value.json` with the following attributes + * `station_id` + * `station_name` + * `line` +1. Complete the code in `producers/models/turnstile.py` so that: + * A topic is created for each turnstile for each station in Kafka to track the turnstile events + * The station emits a `turnstile` event to Kafka whenever the `Turnstile.run()` function is called. + * Ensure that events emitted to kafka are paired with the Avro `key` and `value` schemas + +### Step 2: Configure Kafka REST Proxy Producer +Our partners at the CTA have asked that we also send weather readings into Kafka from their weather hardware. Unfortunately, this hardware is old and we cannot use the Python Client Library due to hardware restrictions. Instead, we are going to use HTTP REST to send the data to Kafka from the hardware using Kafka's REST Proxy. + +To accomplish this, you must complete the following tasks: + +1. Define a `value` schema for the weather event in `producers/models/schemas/weather_value.json` with the following attributes + * `temperature` + * `status` +1. Complete the code in `producers/models/weather.py` so that: + * A topic is created for weather events + * The weather model emits `weather` event to Kafka REST Proxy whenever the `Weather.run()` function is called. + * **NOTE**: When sending HTTP requests to Kafka REST Proxy, be careful to include the correct `Content-Type`. Pay close attention to the [examples in the documentation](https://docs.confluent.io/current/kafka-rest/api.html#post--topics-(string-topic_name)) for more information. + * Ensure that events emitted to REST Proxy are paired with the Avro `key` and `value` schemas + +### Step 3: Configure Kafka Connect +Finally, we need to extract station information from our PostgreSQL database into Kafka. We've decided to use the [Kafka JDBC Source Connector](https://docs.confluent.io/current/connect/kafka-connect-jdbc/source-connector/index.html). + +To accomplish this, you must complete the following tasks: + +1. Complete the code and configuration in `producers/connectors.py` + * Please refer to the [Kafka Connect JDBC Source Connector Configuration Options](https://docs.confluent.io/current/connect/kafka-connect-jdbc/source-connector/source_config_options.html) for documentation on the options you must complete. + * You can run this file directly to test your connector, rather than running the entire simulation. + * Make sure to use the [Landoop Kafka Connect UI](http://localhost:8084) and [Landoop Kafka Topics UI](http://localhost:8085) to check the status and output of the Connector. + * To delete a misconfigured connector: `CURL -X DELETE localhost:8083/connectors/stations` + +### Step 4: Configure the Faust Stream Processor +We will leverage Faust Stream Processing to transform the raw Stations table that we ingested from Kafka Connect. The raw format from the database has more data than we need, and the line color information is not conveniently configured. To remediate this, we're going to ingest data from our Kafka Connect topic, and transform the data. + +To accomplish this, you must complete the following tasks: + +1. Complete the code and configuration in `consumers/faust_stream.py + +#### Watch Out! + +You must run this Faust processing application with the following command: + +`faust -A faust_stream worker -l info` + +### Step 5: Configure the KSQL Table +Next, we will use KSQL to aggregate turnstile data for each of our stations. Recall that when we produced turnstile data, we simply emitted an event, not a count. What would make this data more useful would be to summarize it by station so that downstream applications always have an up-to-date count + +To accomplish this, you must complete the following tasks: + +1. Complete the queries in `consumers/ksql.py` + +#### Tips + +* The KSQL CLI is the best place to build your queries. Try `ksql` in your workspace to enter the CLI. +* You can run this file on its own simply by running `python ksql.py` +* Made a mistake in table creation? `DROP TABLE `. If the CLI asks you to terminate a running query, you can `TERMINATE ` + + +### Step 6: Create Kafka Consumers +With all of the data in Kafka, our final task is to consume the data in the web server that is going to serve the transit status pages to our commuters. + +To accomplish this, you must complete the following tasks: + +1. Complete the code in `consumers/consumer.py` +1. Complete the code in `consumers/models/line.py` +1. Complete the code in `consumers/models/weather.py` +1. Complete the code in `consumers/models/station.py` + +### Documentation +In addition to the course content you have already reviewed, you may find the following examples and documentation helpful in completing this assignment: + +* [Confluent Python Client Documentation](https://docs.confluent.io/current/clients/confluent-kafka-python/#) +* [Confluent Python Client Usage and Examples](https://github.com/confluentinc/confluent-kafka-python#usage) +* [REST Proxy API Reference](https://docs.confluent.io/current/kafka-rest/api.html#post--topics-(string-topic_name)) +* [Kafka Connect JDBC Source Connector Configuration Options](https://docs.confluent.io/current/connect/kafka-connect-jdbc/source-connector/source_config_options.html) + +## Directory Layout +The project consists of two main directories, `producers` and `consumers`. + +The following directory layout indicates the files that the student is responsible for modifying by adding a `*` indicator. Instructions for what is required are present as comments in each file. + +``` +* - Indicates that the student must complete the code in this file + +├── consumers +│   ├── consumer.py * +│   ├── faust_stream.py * +│   ├── ksql.py * +│   ├── models +│   │   ├── lines.py +│   │   ├── line.py * +│   │   ├── station.py * +│   │   └── weather.py * +│   ├── requirements.txt +│   ├── server.py +│   ├── topic_check.py +│   └── templates +│   └── status.html +└── producers + ├── connector.py * + ├── models + │   ├── line.py + │   ├── producer.py * + │   ├── schemas + │   │   ├── arrival_key.json + │   │   ├── arrival_value.json * + │   │   ├── turnstile_key.json + │   │   ├── turnstile_value.json * + │   │   ├── weather_key.json + │   │   └── weather_value.json * + │   ├── station.py * + │   ├── train.py + │   ├── turnstile.py * + │   ├── turnstile_hardware.py + │   └── weather.py * + ├── requirements.txt + └── simulation.py +``` + +## Running and Testing + +To run the simulation, you must first start up the Kafka ecosystem on their machine utilizing Docker Compose. + +```%> docker-compose up``` + +Docker compose will take a 3-5 minutes to start, depending on your hardware. Please be patient and wait for the docker-compose logs to slow down or stop before beginning the simulation. + +Once docker-compose is ready, the following services will be available: + +| Service | Host URL | Docker URL | Username | Password | +| --- | --- | --- | --- | --- | +| Public Transit Status | [http://localhost:8888](http://localhost:8888) | n/a | || +| Landoop Kafka Connect UI | [http://localhost:8084](http://localhost:8084) | http://connect-ui:8084 | +| Landoop Kafka Topics UI | [http://localhost:8085](http://localhost:8085) | http://topics-ui:8085 | +| Landoop Schema Registry UI | [http://localhost:8086](http://localhost:8086) | http://schema-registry-ui:8086 | +| Kafka | PLAINTEXT://localhost:9092,PLAINTEXT://localhost:9093,PLAINTEXT://localhost:9094 | PLAINTEXT://kafka0:9092,PLAINTEXT://kafka1:9093,PLAINTEXT://kafka2:9094 | +| REST Proxy | [http://localhost:8082](http://localhost:8082/) | http://rest-proxy:8082/ | +| Schema Registry | [http://localhost:8081](http://localhost:8081/ ) | http://schema-registry:8081/ | +| Kafka Connect | [http://localhost:8083](http://localhost:8083) | http://kafka-connect:8083 | +| KSQL | [http://localhost:8088](http://localhost:8088) | http://ksql:8088 | +| PostgreSQL | `jdbc:postgresql://localhost:5432/cta` | `jdbc:postgresql://postgres:5432/cta` | `cta_admin` | `chicago` | + +Note that to access these services from your own machine, you will always use the `Host URL` column. + +When configuring services that run within Docker Compose, like **Kafka Connect you must use the Docker URL**. When you configure the JDBC Source Kafka Connector, for example, you will want to use the value from the `Docker URL` column. + +### Running the Simulation + +There are two pieces to the simulation, the `producer` and `consumer`. As you develop each piece of the code, it is recommended that you only run one piece of the project at a time. + +However, when you are ready to verify the end-to-end system prior to submission, it is critical that you open a terminal window for each piece and run them at the same time. **If you do not run both the producer and consumer at the same time you will not be able to successfully complete the project**. + +#### To run the `producer`: + +1. `cd producers` +2. `virtualenv venv` +3. `. venv/bin/activate` +4. `pip install -r requirements.txt` +5. `python simulation.py` + +Once the simulation is running, you may hit `Ctrl+C` at any time to exit. + +#### To run the Faust Stream Processing Application: +1. `cd consumers` +2. `virtualenv venv` +3. `. venv/bin/activate` +4. `pip install -r requirements.txt` +5. `faust -A faust_stream worker -l info` + + +#### To run the KSQL Creation Script: +1. `cd consumers` +2. `virtualenv venv` +3. `. venv/bin/activate` +4. `pip install -r requirements.txt` +5. `python ksql.py` + +#### To run the `consumer`: + +** NOTE **: Do not run the consumer until you have reached Step 6! +1. `cd consumers` +2. `virtualenv venv` +3. `. venv/bin/activate` +4. `pip install -r requirements.txt` +5. `python server.py` + +Once the server is running, you may hit `Ctrl+C` at any time to exit. diff --git a/__init__.py b/__init__.py new file mode 100755 index 0000000..e69de29 diff --git a/consumers/__init__.py b/consumers/__init__.py new file mode 100755 index 0000000..e69de29 diff --git a/consumers/consumer.py b/consumers/consumer.py new file mode 100755 index 0000000..02ad81b --- /dev/null +++ b/consumers/consumer.py @@ -0,0 +1,104 @@ +"""Defines core consumer functionality""" +import logging + +import confluent_kafka +from confluent_kafka import Consumer +from confluent_kafka.avro import AvroConsumer +from confluent_kafka.avro.serializer import SerializerError +from tornado import gen + + +logger = logging.getLogger(__name__) + + +class KafkaConsumer: + """Defines the base kafka consumer class""" + + def __init__( + self, + topic_name_pattern, + message_handler, + is_avro=True, + offset_earliest=False, + sleep_secs=1.0, + consume_timeout=0.1, + ): + """Creates a consumer object for asynchronous use""" + self.topic_name_pattern = topic_name_pattern + self.message_handler = message_handler + self.sleep_secs = sleep_secs + self.consume_timeout = consume_timeout + self.offset_earliest = offset_earliest + + # + # + # TODO: Configure the broker properties below. Make sure to reference the project README + # and use the Host URL for Kafka and Schema Registry! + # + # + self.broker_properties = { + # + # TODO + # + } + + # TODO: Create the Consumer, using the appropriate type. + if is_avro is True: + self.broker_properties["schema.registry.url"] = "http://localhost:8081" + #self.consumer = AvroConsumer(...) + else: + #self.consumer = Consumer(...) + pass + + # + # + # TODO: Configure the AvroConsumer and subscribe to the topics. Make sure to think about + # how the `on_assign` callback should be invoked. + # + # + # self.consumer.subscribe( TODO ) + + def on_assign(self, consumer, partitions): + """Callback for when topic assignment takes place""" + # TODO: If the topic is configured to use `offset_earliest` set the partition offset to + # the beginning or earliest + logger.info("on_assign is incomplete - skipping") + for partition in partitions: + pass + # + # + # TODO + # + # + + logger.info("partitions assigned for %s", self.topic_name_pattern) + consumer.assign(partitions) + + async def consume(self): + """Asynchronously consumes data from kafka topic""" + while True: + num_results = 1 + while num_results > 0: + num_results = self._consume() + await gen.sleep(self.sleep_secs) + + def _consume(self): + """Polls for a message. Returns 1 if a message was received, 0 otherwise""" + # + # + # TODO: Poll Kafka for messages. Make sure to handle any errors or exceptions. + # Additionally, make sure you return 1 when a message is processed, and 0 when no message + # is retrieved. + # + # + logger.info("_consume is incomplete - skipping") + return 0 + + + def close(self): + """Cleans up any open kafka consumers""" + # + # + # TODO: Cleanup the kafka consumer + # + # diff --git a/consumers/faust_stream.py b/consumers/faust_stream.py new file mode 100755 index 0000000..9d371a8 --- /dev/null +++ b/consumers/faust_stream.py @@ -0,0 +1,58 @@ +"""Defines trends calculations for stations""" +import logging + +import faust + + +logger = logging.getLogger(__name__) + + +# Faust will ingest records from Kafka in this format +class Station(faust.Record): + stop_id: int + direction_id: str + stop_name: str + station_name: str + station_descriptive_name: str + station_id: int + order: int + red: bool + blue: bool + green: bool + + +# Faust will produce records to Kafka in this format +class TransformedStation(faust.Record): + station_id: int + station_name: str + order: int + line: str + + +# TODO: Define a Faust Stream that ingests data from the Kafka Connect stations topic and +# places it into a new topic with only the necessary information. +app = faust.App("stations-stream", broker="kafka://localhost:9092", store="memory://") +# TODO: Define the input Kafka Topic. Hint: What topic did Kafka Connect output to? +# topic = app.topic("TODO", value_type=Station) +# TODO: Define the output Kafka Topic +# out_topic = app.topic("TODO", partitions=1) +# TODO: Define a Faust Table +#table = app.Table( +# # "TODO", +# # default=TODO, +# partitions=1, +# changelog_topic=out_topic, +#) + + +# +# +# TODO: Using Faust, transform input `Station` records into `TransformedStation` records. Note that +# "line" is the color of the station. So if the `Station` record has the field `red` set to true, +# then you would set the `line` of the `TransformedStation` record to the string `"red"` +# +# + + +if __name__ == "__main__": + app.main() diff --git a/consumers/ksql.py b/consumers/ksql.py new file mode 100755 index 0000000..4ffec87 --- /dev/null +++ b/consumers/ksql.py @@ -0,0 +1,60 @@ +"""Configures KSQL to combine station and turnstile data""" +import json +import logging + +import requests + +import topic_check + + +logger = logging.getLogger(__name__) + + +KSQL_URL = "http://localhost:8088" + +# +# TODO: Complete the following KSQL statements. +# TODO: For the first statement, create a `turnstile` table from your turnstile topic. +# Make sure to use 'avro' datatype! +# TODO: For the second statment, create a `turnstile_summary` table by selecting from the +# `turnstile` table and grouping on station_id. +# Make sure to cast the COUNT of station id to `count` +# Make sure to set the value format to JSON + +KSQL_STATEMENT = """ +CREATE TABLE turnstile ( + ??? +) WITH ( + ??? +); + +CREATE TABLE turnstile_summary +WITH (???) AS + ??? +""" + + +def execute_statement(): + """Executes the KSQL statement against the KSQL API""" + if topic_check.topic_exists("TURNSTILE_SUMMARY") is True: + return + + logging.debug("executing ksql statement...") + + resp = requests.post( + f"{KSQL_URL}/ksql", + headers={"Content-Type": "application/vnd.ksql.v1+json"}, + data=json.dumps( + { + "ksql": KSQL_STATEMENT, + "streamsProperties": {"ksql.streams.auto.offset.reset": "earliest"}, + } + ), + ) + + # Ensure that a 2XX status code was returned + resp.raise_for_status() + + +if __name__ == "__main__": + execute_statement() diff --git a/consumers/logging.ini b/consumers/logging.ini new file mode 100755 index 0000000..9f6cd73 --- /dev/null +++ b/consumers/logging.ini @@ -0,0 +1,21 @@ +[loggers] +keys=root + +[handlers] +keys=stream_handler + +[formatters] +keys=formatter + +[logger_root] +level=INFO +handlers=stream_handler + +[handler_stream_handler] +class=StreamHandler +level=INFO +formatter=formatter +args=(sys.stderr,) + +[formatter_formatter] +format=%(asctime)s %(name)-12s %(levelname)-8s %(message)s diff --git a/consumers/models/__init__.py b/consumers/models/__init__.py new file mode 100755 index 0000000..deaa83f --- /dev/null +++ b/consumers/models/__init__.py @@ -0,0 +1,4 @@ +from .station import Station +from .line import Line +from .lines import Lines +from .weather import Weather diff --git a/consumers/models/line.py b/consumers/models/line.py new file mode 100755 index 0000000..ec64762 --- /dev/null +++ b/consumers/models/line.py @@ -0,0 +1,79 @@ +"""Contains functionality related to Lines""" +import json +import logging + +from models import Station + + +logger = logging.getLogger(__name__) + + +class Line: + """Defines the Line Model""" + + def __init__(self, color): + """Creates a line""" + self.color = color + self.color_code = "0xFFFFFF" + if self.color == "blue": + self.color_code = "#1E90FF" + elif self.color == "red": + self.color_code = "#DC143C" + elif self.color == "green": + self.color_code = "#32CD32" + self.stations = {} + + def _handle_station(self, value): + """Adds the station to this Line's data model""" + if value["line"] != self.color: + return + self.stations[value["station_id"]] = Station.from_message(value) + + def _handle_arrival(self, message): + """Updates train locations""" + value = message.value() + prev_station_id = value.get("prev_station_id") + prev_dir = value.get("prev_direction") + if prev_dir is not None and prev_station_id is not None: + prev_station = self.stations.get(prev_station_id) + if prev_station is not None: + prev_station.handle_departure(prev_dir) + else: + logger.debug("unable to handle previous station due to missing station") + else: + logger.debug( + "unable to handle previous station due to missing previous info" + ) + + station_id = value.get("station_id") + station = self.stations.get(station_id) + if station is None: + logger.debug("unable to handle message due to missing station") + return + station.handle_arrival( + value.get("direction"), value.get("train_id"), value.get("train_status") + ) + + def process_message(self, message): + """Given a kafka message, extract data""" + # TODO: Based on the message topic, call the appropriate handler. + if True: # Set the conditional correctly to the stations Faust Table + try: + value = json.loads(message.value()) + self._handle_station(value) + except Exception as e: + logger.fatal("bad station? %s, %s", value, e) + elif True: # Set the conditional to the arrival topic + self._handle_arrival(message) + elif True: # Set the conditional to the KSQL Turnstile Summary Topic + json_data = json.loads(message.value()) + station_id = json_data.get("STATION_ID") + station = self.stations.get(station_id) + if station is None: + logger.debug("unable to handle message due to missing station") + return + station.process_message(json_data) + else: + logger.debug( + "unable to find handler for message from topic %s", message.topic + ) diff --git a/consumers/models/lines.py b/consumers/models/lines.py new file mode 100755 index 0000000..a36e1d7 --- /dev/null +++ b/consumers/models/lines.py @@ -0,0 +1,39 @@ +"""Contains functionality related to Lines""" +import json +import logging + +from models import Line + + +logger = logging.getLogger(__name__) + + +class Lines: + """Contains all train lines""" + + def __init__(self): + """Creates the Lines object""" + self.red_line = Line("red") + self.green_line = Line("green") + self.blue_line = Line("blue") + + def process_message(self, message): + """Processes a station message""" + if "org.chicago.cta.station" in message.topic(): + value = message.value() + if message.topic() == "org.chicago.cta.stations.table.v1": + value = json.loads(value) + if value["line"] == "green": + self.green_line.process_message(message) + elif value["line"] == "red": + self.red_line.process_message(message) + elif value["line"] == "blue": + self.blue_line.process_message(message) + else: + logger.debug("discarding unknown line msg %s", value["line"]) + elif "TURNSTILE_SUMMARY" == message.topic(): + self.green_line.process_message(message) + self.red_line.process_message(message) + self.blue_line.process_message(message) + else: + logger.info("ignoring non-lines message %s", message.topic()) diff --git a/consumers/models/station.py b/consumers/models/station.py new file mode 100755 index 0000000..6124168 --- /dev/null +++ b/consumers/models/station.py @@ -0,0 +1,43 @@ +"""Contains functionality related to Stations""" +import json +import logging + + +logger = logging.getLogger(__name__) + + +class Station: + """Defines the Station Model""" + + def __init__(self, station_id, station_name, order): + """Creates a Station Model""" + self.station_id = station_id + self.station_name = station_name + self.order = order + self.dir_a = None + self.dir_b = None + self.num_turnstile_entries = 0 + + @classmethod + def from_message(cls, value): + """Given a Kafka Station message, creates and returns a station""" + return Station(value["station_id"], value["station_name"], value["order"]) + + def handle_departure(self, direction): + """Removes a train from the station""" + if direction == "a": + self.dir_a = None + else: + self.dir_b = None + + def handle_arrival(self, direction, train_id, train_status): + """Unpacks arrival data""" + status_dict = {"train_id": train_id, "status": train_status.replace("_", " ")} + if direction == "a": + self.dir_a = status_dict + else: + self.dir_b = status_dict + + def process_message(self, json_data): + """Handles arrival and turnstile messages""" + self.num_turnstile_entries = json_data["COUNT"] diff --git a/consumers/models/weather.py b/consumers/models/weather.py new file mode 100755 index 0000000..f84e89b --- /dev/null +++ b/consumers/models/weather.py @@ -0,0 +1,23 @@ +"""Contains functionality related to Weather""" +import logging + + +logger = logging.getLogger(__name__) + + +class Weather: + """Defines the Weather model""" + + def __init__(self): + """Creates the weather model""" + self.temperature = 70.0 + self.status = "sunny" + + def process_message(self, message): + """Handles incoming weather data""" + logger.info("weather process_message is incomplete - skipping") + # + # + # TODO: Process incoming weather messages. Set the temperature and status. + # + # diff --git a/consumers/requirements.txt b/consumers/requirements.txt new file mode 100755 index 0000000..8f21648 --- /dev/null +++ b/consumers/requirements.txt @@ -0,0 +1,3 @@ +confluent-kafka[avro]==1.1.0 +faust==1.7.4 +tornado==6.0.3 diff --git a/consumers/server.py b/consumers/server.py new file mode 100755 index 0000000..427fcc0 --- /dev/null +++ b/consumers/server.py @@ -0,0 +1,105 @@ +"""Defines a Tornado Server that consumes Kafka Event data for display""" +import logging +import logging.config +from pathlib import Path + +import tornado.ioloop +import tornado.template +import tornado.web + + +# Import logging before models to ensure configuration is picked up +logging.config.fileConfig(f"{Path(__file__).parents[0]}/logging.ini") + + +from consumer import KafkaConsumer +from models import Lines, Weather +import topic_check + + +logger = logging.getLogger(__name__) + + +class MainHandler(tornado.web.RequestHandler): + """Defines a web request handler class""" + + template_dir = tornado.template.Loader(f"{Path(__file__).parents[0]}/templates") + template = template_dir.load("status.html") + + def initialize(self, weather, lines): + """Initializes the handler with required configuration""" + self.weather = weather + self.lines = lines + + def get(self): + """Responds to get requests""" + logging.debug("rendering and writing handler template") + self.write( + MainHandler.template.generate(weather=self.weather, lines=self.lines) + ) + + +def run_server(): + """Runs the Tornado Server and begins Kafka consumption""" + if topic_check.topic_exists("TURNSTILE_SUMMARY") is False: + logger.fatal( + "Ensure that the KSQL Command has run successfully before running the web server!" + ) + exit(1) + if topic_check.topic_exists("org.chicago.cta.stations.table.v1") is False: + logger.fatal( + "Ensure that Faust Streaming is running successfully before running the web server!" + ) + exit(1) + + weather_model = Weather() + lines = Lines() + + application = tornado.web.Application( + [(r"/", MainHandler, {"weather": weather_model, "lines": lines})] + ) + application.listen(8888) + + # Build kafka consumers + consumers = [ + KafkaConsumer( + "org.chicago.cta.weather.v1", + weather_model.process_message, + offset_earliest=True, + ), + KafkaConsumer( + "org.chicago.cta.stations.table.v1", + lines.process_message, + offset_earliest=True, + is_avro=False, + ), + KafkaConsumer( + "^org.chicago.cta.station.arrivals.", + lines.process_message, + offset_earliest=True, + ), + KafkaConsumer( + "TURNSTILE_SUMMARY", + lines.process_message, + offset_earliest=True, + is_avro=False, + ), + ] + + try: + logger.info( + "Open a web browser to http://localhost:8888 to see the Transit Status Page" + ) + for consumer in consumers: + tornado.ioloop.IOLoop.current().spawn_callback(consumer.consume) + + tornado.ioloop.IOLoop.current().start() + except KeyboardInterrupt as e: + logger.info("shutting down server") + tornado.ioloop.IOLoop.current().stop() + for consumer in consumers: + consumer.close() + + +if __name__ == "__main__": + run_server() diff --git a/consumers/templates/status.html b/consumers/templates/status.html new file mode 100755 index 0000000..0593a63 --- /dev/null +++ b/consumers/templates/status.html @@ -0,0 +1,48 @@ + + + CTA Status + + + + +
+
+
+ Welcome to the CTA Status Page! +
+
+ {{ int(weather.temperature) }}° | {{ weather.status.title().replace("_", " ") }} +
+
+
+ + + + + + + + + + + + {% for color, line in (("blue", lines.blue_line), ("green", lines.green_line), ("red", lines.red_line)) %} + {% for station in sorted(line.stations.values(), key=lambda x: x.order) %} + + + + + + + + {% end %} + {% end %} + +
LineStationTrain Direction ATrain Direction BTotal Turnstile Entries
{{ station.station_name }}{{ station.dir_a["train_id"] if station.dir_a is not None else "---" }}{{ station.dir_b["train_id"] if station.dir_b is not None else "---" }}{{ station.num_turnstile_entries }}
+
+
+ + + + + diff --git a/consumers/topic_check.py b/consumers/topic_check.py new file mode 100755 index 0000000..9b5a439 --- /dev/null +++ b/consumers/topic_check.py @@ -0,0 +1,8 @@ +from confluent_kafka.admin import AdminClient + + +def topic_exists(topic): + """Checks if the given topic exists in Kafka""" + client = AdminClient({"bootstrap.servers": "PLAINTEXT://localhost:9092"}) + topic_metadata = client.list_topics(timeout=5) + return topic in set(t.topic for t in iter(topic_metadata.topics.values())) diff --git a/docker-compose.yaml b/docker-compose.yaml new file mode 100755 index 0000000..614e050 --- /dev/null +++ b/docker-compose.yaml @@ -0,0 +1,140 @@ +# +# This docker-compose file starts and runs: +# * A 3-node kafka cluster +# * A 1-zookeeper ensemble +# * Schema Registry +# * Kafka REST Proxy +# * Kafka Connect +# + +version: '3.7' + +services: + zookeeper: + image: confluentinc/cp-zookeeper:5.2.2 + ports: + - "2181:2181" + environment: + ZOOKEEPER_CLIENT_PORT: "2181" + + kafka0: + image: confluentinc/cp-kafka:5.2.2 + ports: + - "9092:9092" + environment: + KAFKA_BROKER_ID: 0 + KAFKA_ZOOKEEPER_CONNECT: "zookeeper:2181" + KAFKA_ADVERTISED_LISTENERS: "INTERNAL://kafka0:19092,EXTERNAL://${DOCKER_HOST_IP:-127.0.0.1}:9092" + KAFKA_INTER_BROKER_LISTENER_NAME: "INTERNAL" + KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: "INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT" + KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: "1" + depends_on: + - "zookeeper" + + schema-registry: + image: confluentinc/cp-schema-registry:5.2.2 + ports: + - "8081:8081" + environment: + SCHEMA_REGISTRY_KAFKASTORE_BOOTSTRAP_SERVERS: "PLAINTEXT://kafka0:19092" + SCHEMA_REGISTRY_LISTENERS: "http://0.0.0.0:8081" + SCHEMA_REGISTRY_HOST_NAME: "schema-registry" + SCHEMA_REGISTRY_KAFKASTORE_TOPIC_REPLICATION_FACTOR: "1" + depends_on: + - "kafka0" + + rest-proxy: + image: confluentinc/cp-kafka-rest:5.2.2 + ports: + - "8082:8082" + environment: + KAFKA_REST_BOOTSTRAP_SERVERS: "PLAINTEXT://kafka0:19092" + KAFKA_REST_LISTENERS: "http://0.0.0.0:8082/" + KAFKA_REST_HOST_NAME: "rest-proxy" + KAFKA_REST_SCHEMA_REGISTRY_URL: "http://schema-registry:8081/" + depends_on: + - "kafka0" + - "schema-registry" + + connect: + image: confluentinc/cp-kafka-connect:5.2.2 + ports: + - "8083:8083" + environment: + CONNECT_BOOTSTRAP_SERVERS: "PLAINTEXT://kafka0:19092" + CONNECT_GROUP_ID: "connect" + CONNECT_REST_ADVERTISED_HOST_NAME: "connect" + CONNECT_PLUGIN_PATH: "/usr/share/java" + CONNECT_INTERNAL_KEY_CONVERTER: "org.apache.kafka.connect.json.JsonConverter" + CONNECT_INTERNAL_VALUE_CONVERTER: "org.apache.kafka.connect.json.JsonConverter" + CONNECT_KEY_CONVERTER: "io.confluent.connect.avro.AvroConverter" + CONNECT_KEY_CONVERTER_SCHEMA_REGISTRY_URL: "http://schema-registry:8081" + CONNECT_VALUE_CONVERTER: "io.confluent.connect.avro.AvroConverter" + CONNECT_VALUE_CONVERTER_SCHEMA_REGISTRY_URL: "http://schema-registry:8081" + CONNECT_CONFIG_STORAGE_TOPIC: "connect-config" + CONNECT_OFFSET_STORAGE_TOPIC: "connect-offset" + CONNECT_STATUS_STORAGE_TOPIC: "connect-status" + CONNECT_CONFIG_STORAGE_REPLICATION_FACTOR: "1" + CONNECT_OFFSET_STORAGE_REPLICATION_FACTOR: "1" + CONNECT_STATUS_STORAGE_REPLICATION_FACTOR: "1" + depends_on: + - "kafka0" + - "schema-registry" + + ksql: + image: confluentinc/cp-ksql-server:5.2.2 + ports: + - "8088:8088" + environment: + KSQL_BOOTSTRAP_SERVERS: "PLAINTEXT://kafka0:19092" + KSQL_LISTENERS: "http://0.0.0.0:8088" + KSQL_KSQL_SERVICE_ID: "ksql_service_docker" + KSQL_KSQL_SCHEMA_REGISTRY_URL: "http://schema-registry:8081/" + depends_on: + - "kafka0" + - "schema-registry" + + connect-ui: + image: landoop/kafka-connect-ui:0.9.7 + ports: + - "8084:8084" + environment: + PORT: "8084" + PROXY: "true" + CONNECT_URL: "http://connect:8083" + depends_on: + - "connect" + + topics-ui: + image: landoop/kafka-topics-ui:0.9.4 + ports: + - "8085:8085" + environment: + PORT: "8085" + PROXY: "true" + KAFKA_REST_PROXY_URL: "http://rest-proxy:8082" + depends_on: + - "rest-proxy" + + schema-registry-ui: + image: landoop/schema-registry-ui:0.9.5 + ports: + - "8086:8086" + environment: + PORT: "8086" + PROXY: "true" + SCHEMAREGISTRY_URL: "http://schema-registry:8081/" + depends_on: + - "schema-registry" + + postgres: + image: postgres:11 + ports: + - "5432:5432" + environment: + POSTGRES_USER: "cta_admin" + POSTGRES_PASSWORD: "chicago" + POSTGRES_DB: "cta" + volumes: + - ./producers/data/cta_stations.csv:/tmp/cta_stations.csv + - ./load_stations.sql:/docker-entrypoint-initdb.d/load_stations.sql diff --git a/images/diagram.png b/images/diagram.png new file mode 100755 index 0000000000000000000000000000000000000000..7525d2b7bfed8e07f22c868a058dfaf03b6f8700 GIT binary patch literal 31922 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∋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 BCh))g&owA>XlhbDv33!@n46z}ASU?tMTz@1 zt0Mrz-YzR!;YTk8r$b?=K9SXpI*FGWG|DGY*|B1afWTJ>C-tB;^D60D$|37V#3A>g zy|wiUjENz|j<|sWk@CKKM`z)w-P-z=ME6beZ zkp?uIH+xOLKZ!*PvJCj%T3K2$<&m|YKt_WcHIR~6W65lEC^T?-z?Ln7#_#SU5#jvz zU%f)R#M08`PTTUCsi{zZc$IX#aNO@Fx~ub4cQp!-4*h*r6FPOon4xE+xH7&&tv~rq z!6fm$c~^mL0s`UOTt}?B<;&LCeRr@RyXcs}!3}W;;7{nwT;>q7+XWB%k`g_AS7?(0 zYJ>Y3%I~(EL>ZeQAF&O645~>QLYkN~O~x^MbII_!v&e z#k(W=BTDYV^q}AHjnf9~kGn{Gmq|EU1=a(X%*=?25(vrR(X$i2b@fCEE+2Uiy@Y-Q zYh%jSnTlz}%^fgI^LwP8?~-P|`?h>#CW|1H(0J4R;7d_ru=?hoGlaD^luJPpleebx za+0r4V)zig|4<bFGX)Z12yW38q<^Y}kGH za>>sV8^_BQpPnD|S@AwIuv@N(ZU{xi3aghndIHGB|LpH;Z!;uK1ozm134?+4*?xYn z|FE@{K~jsS^j}>N#5qCucEyHn_t6X#fQGaIbi@F6adJ|Ii|YxpxajB?cD=G9q)2{! z_jY=6WaI+c&tBHn0wS=Y|Mslg=ic4BeB9g@;Sooymk~!*;RQjUuwgi%p${uWW8Be{ z<;y7Y0IBZC%KE^*?=52F0;l<@gw^j~zwXh<5FP(WHI1?Id{v;|(RYMP#JCzde+F|` z4-cz}GKkUPit$bypd^kQc&tI?goFymLp1OBvy>0{E`Gfuz#w2C0WB3c_~^VDNb(=Y zL#(Ztsh2kX6^W+z;&2M8dolf%xJi$F_8vVYsT5~Lf3d7$_fB0(KO@NXpvi-nIltRy z78A{zdhOerd@&-etgY){s0gz!JeL6&Mx>#ry*|(revy#J+@xi`h=Tjho)yjIcck^x z@Q;x|DYnH>8IAea?wzPR9?==8qc@jVQMs$(eXFUbC*cJ#+W6XlWS@|xAMlYvo{oox zJPHN+v2k&PIYw^6@^_fow!>W6#wH`D0v0;PI7G$D3e^S+S>DS^Asyzz5s{IN4-PlJ zdesX*{Bi~|{j+C#zkdCIqn&J|fz#wnt>{*pxUJ`*8(Jyxf-i8JoHX?E3Lab{!LhNP zu%#H=)*oPXb+S!INn=Y>+eH$R2$UJTMrGHzBDY&NzD*)DMoIk~%Dj-)G$tG~TyDk0 zBglV3mfD_Uf+{i?q0!UO6fuxx@SZ)BW$*7}kZ&3OE45=EHid)PDpIQE@?>%M@4wU| zrnMxF{K2_CDf(Z**EncU+uBZmOP?P9iB3rWJgQ8zM?-C`2bRn5i)FnxSUI5v1IUDN zqrgyGfio}ouqp!o4`~A>9Ojl9KXSVF%a<<$16RO?S#58k^phDd)6r>v%%6FjiH!}+ z2=C6xKsy(g$iN7y;C>W>jsHsD!9z1t=I%ke?&XDzLr~Yj()#%FBu4BV2ELG8P2;B@ z2pU~mOdpF6DYXnJ3o}{d<#kMH~q&> z&y%K1&X}69%47Yd^tk=Y&k6Ky8!}Ye*A0Ll0?8d4(DZM9I8Hl z{*1`J6+-#IB8h_s&qa8+x+ zvJ5gL3MFD#_Bj|@Y}Fx5M17u*_{1M|$yCp&E4Y7ui}NHRjEV|b3-bkdkbI7F=}yz* zevEAhN}etp@-g8xSB&-E%-HyyJ{AwAk5WA+IH~N3EXL(bjK=4D&V1doX9?#Sc$;%8 zJ-_^!g@GZtE5baYQ?Ub9fBNI8yoT8qE5Q+k^&?7xc5|dmGE}l@+ZoK28WApIm1?Vf zNwk!HPS0CH9L_81E|VptNAT)AG=ef2(>2!!Pg_~MZy!t0&5~hoZmDKzfKh9za zAf7m2CHcEA;ra$+{0dz`kmF=+Y#A69e0lC){s&=P&zs= zkX+gaEA%k2i0+Ro44se?OFsGVFA4idKG#!r{ZhDIBE52cAra$lU@**m=ZTrgR3cB# zO!%QkK<586Ou2t{3b#yhQjg?hxW24q)r?UQt^I^^QJ}!P(j(Q_Lu34;g{Dx(oK=TQ^=t18i%n)NMfKl^MiFNcNB5k3IZw>}SO2#=<+*6?b|=(t`>q2N#pXJliuA?if4R zra9>|w@Z-O@EMbrps1namk4tzDjus_!;YC)rbV(@*w}}MJ(9xqDI&OW=K z3Gf0Ljm1suA~pITx0ua14T^SiF%lyZ?K`LHr&hS5Hz(!jmFWORc?8%W9sr zC($%}fou%ttvO5%ud*7FcPKh_J6a!9#gGVj2Tv$~jw(t@M`3FSaCHAfS+{E+9n$&s zrpXL0wPYkR8qS}fqrMa*d8N~)pgu~d@Am%qQ%ExWBPIJcMAe}eipsen@BjGu^F4no zfsT43<1oH0Y8ciT(lBCR>EB|9cZVI)hzM^U{b^~#GxoEQ<-dqS5YAQSsMr<_b4H6! za;kJcZ~ye^T?l|JBwB8eOJW7oF7teGIz=s#7zj2CQy_aZjwQN=bFZ*=QWG~eOR^_o zoY?hp`QWTEIL*%#ryqar&`oQ?nBS$ze=O0{Qnd^&F&Um|lzE(1#&l1wNB}Ph5aQD_{DlJk#IZem$=$P+s0Xbt+BE3a66A@+9j=Q zuwyMZ)@Qm;9=&a`aPF%%yD`cU!02`qIj2u%1O(9N92n)MdQ6ZYG_5z9O7b#F1cTU;BYWHLQA=5G#740%{MYx~ zM#2KC@9o`={&RKUo}MFz!j^|3?bk&a8TB}m?}+Ro%Lcs5+~j0Yi+wN&5ldllaVNi#ydRf1ZnYIXo_r;;}oYVR~U0v86UfSZ|GGph>W#Jr|dp#dq*OikZq0DIF82;n* zl#1sjVReececPMEpPiZ=8zuLXJ<)TOf8WxQ)C>yudy+i@6d)l<<{SWHjb7h?7xDEQ zH)b`Y)3wGhuyjh@^OIgo3awih4ZCz?dq^c`aW#$+WaQIL>ROqs73jZ5wRtDDVl8^H z;F*t8$H417nljt?dv?Y!@)d0{MK@2O)DB0EiF(f4&1~NZ2}1DKU*HYHoPpgCb=%PK zg@!tdiHp0tx*{9J&8@OJa;@6RcG|9jmh*wY{oh8id7+-odZWn<4f;mXKE$LFnBi8WfrW(X)g+-g*SZp%{XOhuc; z2m6EM$|5gHw{_lZ9-8Y2rK}Z&uIBv&RRqLs!5mTo0uuoB5l#}TFSU8m{ra{CzLwV3 zuy;F*u_NX1?bL8BFncx$S3z!WMeg>uZ%vWnz}GhX$}$p16qnybMJ@nvmlYhUK<|Jn^LnNvm&CKaL9b6A!cHVmuhu)D}OW z_u@?{mH~gmf%_PgNZ=i{$E8sbid{y#W(H>^;_WmUKpp@)YVYU(?w^)&GdIU1H?RF&RiTEJ`6iSp;}3ZLO@&s+~um0_C|SHTk|o) z75$D!52LX=Y-w`Z?Jl9}UfK=Auf*4U1ziqRY%X0+%_`?04rusI76x#))?N?D$`j;Q%I7&kexCXE_Ku3C)N$4UtD%fmm(cgV`1? zB>c&n+C57-4pi5`E~d@EqaJ4;;cd=H&cOR1q@QEtNcjh;B=0x}LI$9#&}If6)R~Eh{6U+MwtzG?fG1tw zh3q|h_Yy?KZ=@L)w6wJ?EiJ*AOK>|wDv02eX8Zf%e<6fz|NMjYVWtvA7P4NLj4l@+ z2J|AOXl?<|dH|%floWCVOeG_IerKrx2Mdd0y3Rd#odUjvQuPKo@mfC5RRO?3`YoL2 z-{J@s1n}6}MVSCBEQWvp-Ro!426POKJ+MyN4S(*xVcNa)bV_Yq-M5mR%UOwuyCDLD z%XVR5)O(`qcabtqfaQP~-dImoRu*@FP%7nY@fBK1Ijp#7A`l>fZon^X^@-=FHn*xD zf`KO(zCWtYL3^9|g#}<_Rh5+ra)(7kgns_{92|!LCIP3y+U~oRI9_iTvI+dLrRl;H zVQ++cc8Fp_XGa7`~Uyf6hmsO6cYXWb_8m0oFy7w NLH_jdOxX+9{s*NrAngDE literal 0 HcmV?d00001 diff --git a/images/ui.png b/images/ui.png new file mode 100755 index 0000000000000000000000000000000000000000..d92741ce841421cb7e70f920afb7bc0c6347cccb GIT binary patch literal 367682 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�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 tl?NlR6b;?s3O~)Maq`9{s)ooIzRvb literal 0 HcmV?d00001 diff --git a/load_stations.sql b/load_stations.sql new file mode 100755 index 0000000..dcaade1 --- /dev/null +++ b/load_stations.sql @@ -0,0 +1,25 @@ +CREATE TABLE stations ( + stop_id INTEGER PRIMARY KEY, + direction_id VARCHAR(1) NOT NULL, + stop_name VARCHAR(70) NOT NULL, + station_name VARCHAR(70) NOT NULL, + station_descriptive_name VARCHAR(200) NOT NULL, + station_id INTEGER NOT NULL, + "order" INTEGER, + red BOOLEAN NOT NULL, + blue BOOLEAN NOT NULL, + green BOOLEAN NOT NULL +); + +COPY stations( + stop_id, + direction_id, + stop_name, + station_name, + station_descriptive_name, + station_id, + "order", + red, + blue, + green +) FROM '/tmp/cta_stations.csv' DELIMITER ',' CSV HEADER; diff --git a/producers/__init__.py b/producers/__init__.py new file mode 100755 index 0000000..e69de29 diff --git a/producers/connector.py b/producers/connector.py new file mode 100755 index 0000000..fae2578 --- /dev/null +++ b/producers/connector.py @@ -0,0 +1,74 @@ +"""Configures a Kafka Connector for Postgres Station data""" +import json +import logging + +import requests + + +logger = logging.getLogger(__name__) + + +KAFKA_CONNECT_URL = "http://localhost:8083/connectors" +CONNECTOR_NAME = "stations" + +def configure_connector(): + """Starts and configures the Kafka Connect connector""" + logging.debug("creating or updating kafka connect connector...") + + resp = requests.get(f"{KAFKA_CONNECT_URL}/{CONNECTOR_NAME}") + if resp.status_code == 200: + logging.debug("connector already created skipping recreation") + return + + # TODO: Complete the Kafka Connect Config below. + # Directions: Use the JDBC Source Connector to connect to Postgres. Load the `stations` table + # using incrementing mode, with `stop_id` as the incrementing column name. + # Make sure to think about what an appropriate topic prefix would be, and how frequently Kafka + # Connect should run this connector (hint: not very often!) + return + + # TODO: Complete the Kafka Connect Config below. + # Directions: Use the JDBC Source Connector to connect to Postgres. Load the `stations` table + # using incrementing mode, with `stop_id` as the incrementing column name. + # Make sure to think about what an appropriate topic prefix would be, and how frequently Kafka + # Connect should run this connector (hint: not very often!) + logger.info("connector code not completed skipping connector creation") + #resp = requests.post( + # KAFKA_CONNECT_URL, + # headers={"Content-Type": "application/json"}, + # data=json.dumps({ + # "name": CONNECTOR_NAME, + # "config": { + # "connector.class": "io.confluent.connect.jdbc.JdbcSourceConnector", + # "key.converter": "org.apache.kafka.connect.json.JsonConverter", + # "key.converter.schemas.enable": "false", + # "value.converter": "org.apache.kafka.connect.json.JsonConverter", + # "value.converter.schemas.enable": "false", + # "batch.max.rows": "500", + # # TODO + # "connection.url": "", + # # TODO + # "connection.user": "", + # # TODO + # "connection.password": "", + # # TODO + # "table.whitelist": "", + # # TODO + # "mode": "", + # # TODO + # "incrementing.column.name": "", + # # TODO + # "topic.prefix": "", + # # TODO + # "poll.interval.ms": "", + # } + # }), + #) + + ## Ensure a healthy response was given + #resp.raise_for_status() + #logging.debug("connector created successfully") + + +if __name__ == "__main__": + configure_connector() diff --git a/producers/data/README.md b/producers/data/README.md new file mode 100755 index 0000000..f9d2950 --- /dev/null +++ b/producers/data/README.md @@ -0,0 +1,13 @@ +### Simulation Datasets + +The data in this directory is used as the seed data that simulator uses to generate event data. + +Much of the data in this directory is derived from the (City of Chicago Transit Authority's open +datasets](https://www.transitchicago.com/data/). Thank you to the City of Chicago for providing +this data! Specifically, the following datasets originate from this source: + +* [`cta_stations.csv`](cta_stations.csv) +* [`ridership_seed.csv`](ridership_seed.csv) + +The data from these sources has been truncated and some columns were added to make the simulation +more useful. diff --git a/producers/data/cta_stations.csv b/producers/data/cta_stations.csv new file mode 100755 index 0000000..e6de624 --- /dev/null +++ b/producers/data/cta_stations.csv @@ -0,0 +1,231 @@ +stop_id,direction_id,stop_name,station_name,station_descriptive_name,station_id,order,red,blue,green +30004,W,Harlem (Terminal arrival),Harlem/Lake,Harlem/Lake (Green Line),40020,0,FALSE,FALSE,TRUE +30003,E,Harlem (63rd-bound),Harlem/Lake,Harlem/Lake (Green Line),40020,0,FALSE,FALSE,TRUE +30263,E,Oak Park (63rd-bound),Oak Park,Oak Park (Green Line),41350,1,FALSE,FALSE,TRUE +30264,W,Oak Park (Harlem-bound),Oak Park,Oak Park (Green Line),41350,1,FALSE,FALSE,TRUE +30119,E,Ridgeland (63rd-bound),Ridgeland,Ridgeland (Green Line),40610,2,FALSE,FALSE,TRUE +30120,W,Ridgeland (Harlem-bound),Ridgeland,Ridgeland (Green Line),40610,2,FALSE,FALSE,TRUE +30173,N,Howard (Terminal arrival),Howard,"Howard (Red, Purple & Yellow Lines)",40900,0,TRUE,FALSE,FALSE +30174,S,Howard (95th-Bound),Howard,"Howard (Red, Purple & Yellow Lines)",40900,0,TRUE,FALSE,FALSE +30228,S,Jarvis (95th-bound),Jarvis,Jarvis (Red Line),41190,1,TRUE,FALSE,FALSE +30227,N,Jarvis (Howard-bound),Jarvis,Jarvis (Red Line),41190,1,TRUE,FALSE,FALSE +30021,S,Morse (95th-bound),Morse,Morse (Red Line),40100,2,TRUE,FALSE,FALSE +30020,N,Morse (Howard-bound),Morse,Morse (Red Line),40100,2,TRUE,FALSE,FALSE +30252,S,Loyola (95th-bound),Loyola,Loyola (Red Line),41300,3,TRUE,FALSE,FALSE +30251,N,Loyola (Howard-bound),Loyola,Loyola (Red Line),41300,3,TRUE,FALSE,FALSE +30148,S,Granville (95th-bound),Granville,Granville (Red Line),40760,4,TRUE,FALSE,FALSE +30147,N,Granville (Howard-bound),Granville,Granville (Red Line),40760,4,TRUE,FALSE,FALSE +30170,S,Thorndale (95th-bound),Thorndale,Thorndale (Red Line),40880,5,TRUE,FALSE,FALSE +30169,N,Thorndale (Howard-bound),Thorndale,Thorndale (Red Line),40880,5,TRUE,FALSE,FALSE +30268,S,Bryn Mawr (95th-bound),Bryn Mawr,Bryn Mawr (Red Line),41380,6,TRUE,FALSE,FALSE +30267,N,Bryn Mawr (Howard-bound),Bryn Mawr,Bryn Mawr (Red Line),41380,6,TRUE,FALSE,FALSE +30067,S,Berwyn (95th-bound),Berwyn,Berwyn (Red Line),40340,7,TRUE,FALSE,FALSE +30066,N,Berwyn (Howard-bound),Berwyn,Berwyn (Red Line),40340,7,TRUE,FALSE,FALSE +30230,S,Argyle (95th-bound),Argyle,Argyle (Red Line),41200,8,TRUE,FALSE,FALSE +30229,N,Argyle (Howard-bound),Argyle,Argyle (Red Line),41200,8,TRUE,FALSE,FALSE +30150,S,Lawrence (95th-bound),Lawrence,Lawrence (Red Line),40770,9,TRUE,FALSE,FALSE +30149,N,Lawrence (Howard-bound),Lawrence,Lawrence (Red Line),40770,9,TRUE,FALSE,FALSE +30106,S,Wilson (95th-bound),Wilson,Wilson (Red & Purple Lines),40540,10,TRUE,FALSE,FALSE +30105,N,Wilson (Howard-bound),Wilson,Wilson (Red & Purple Lines),40540,10,TRUE,FALSE,FALSE +30017,S,Sheridan (95th-bound),Sheridan,Sheridan (Red Line),40080,11,TRUE,FALSE,FALSE +30016,N,Sheridan (Howard-bound),Sheridan,Sheridan (Red Line),40080,11,TRUE,FALSE,FALSE +30274,S,Addison (95th-bound),Addison,Addison (Red Line),41420,12,TRUE,FALSE,FALSE +30273,N,Addison (Howard-bound),Addison,Addison (Red Line),41420,12,TRUE,FALSE,FALSE +30256,S,Belmont (95th-bound),Belmont,"Belmont (Red, Brown & Purple Lines)",41320,13,TRUE,FALSE,FALSE +30255,N,Belmont (Howard-bound),Belmont,"Belmont (Red, Brown & Purple Lines)",41320,13,TRUE,FALSE,FALSE +30234,S,Fullerton (95th-bound),Fullerton,"Fullerton (Red, Brown & Purple Lines)",41220,14,TRUE,FALSE,FALSE +30233,N,Fullerton (Howard-bound),Fullerton,"Fullerton (Red, Brown & Purple Lines)",41220,14,TRUE,FALSE,FALSE +30126,S,North/Clybourn (95th-bound),North/Clybourn,North/Clybourn (Red Line),40650,15,TRUE,FALSE,FALSE +30125,N,North/Clybourn (Howard-bound),North/Clybourn,North/Clybourn (Red Line),40650,15,TRUE,FALSE,FALSE +30122,S,Clark/Division (95th-bound),Clark/Division,Clark/Division (Red Line),40630,16,TRUE,FALSE,FALSE +30121,N,Clark/Division (Howard-bound),Clark/Division,Clark/Division (Red Line),40630,16,TRUE,FALSE,FALSE +30280,S,Chicago (95th-bound),Chicago,Chicago (Red Line),41450,17,TRUE,FALSE,FALSE +30279,N,Chicago (Howard-bound),Chicago,Chicago (Red Line),41450,17,TRUE,FALSE,FALSE +30065,S,Grand/State (95th-bound),Grand,Grand (Red Line),40330,18,TRUE,FALSE,FALSE +30064,N,Grand/State (Howard-bound),Grand,Grand (Red Line),40330,18,TRUE,FALSE,FALSE +30290,S,Lake (95th-bound),Lake,Lake (Red Line),41660,19,TRUE,FALSE,FALSE +30289,N,Lake (Howard-bound),Lake,Lake (Red Line),41660,19,TRUE,FALSE,FALSE +30212,S,Monroe (95th-bound),Monroe,Monroe (Red Line),41090,20,TRUE,FALSE,FALSE +30211,N,Monroe (Howard-bound),Monroe,Monroe (Red Line),41090,20,TRUE,FALSE,FALSE +30110,S,Jackson/State (95th-bound),Jackson,Jackson (Red Line),40560,21,TRUE,FALSE,FALSE +30109,N,Jackson/State (Howard-bound),Jackson,Jackson (Red Line),40560,21,TRUE,FALSE,FALSE +30286,S,Harrison (95th-bound),Harrison,Harrison (Red Line),41490,22,TRUE,FALSE,FALSE +30285,N,Harrison (Howard-bound),Harrison,Harrison (Red Line),41490,22,TRUE,FALSE,FALSE +30269,N,Roosevelt (Howard-bound),Roosevelt,"Roosevelt (Red, Orange & Green Lines)",41400,23,TRUE,FALSE,FALSE +30270,S,Roosevelt (95th-bound),Roosevelt,"Roosevelt (Red, Orange & Green Lines)",41400,23,TRUE,FALSE,FALSE +30194,S,Cermak-Chinatown (95th-bound),Cermak-Chinatown,Cermak-Chinatown (Red Line),41000,24,TRUE,FALSE,FALSE +30193,N,Cermak-Chinatown (Howard-bound),Cermak-Chinatown,Cermak-Chinatown (Red Line),41000,24,TRUE,FALSE,FALSE +30037,S,Sox-35th (95th-bound),Sox-35th,Sox-35th (Red Line),40190,25,TRUE,FALSE,FALSE +30036,N,Sox-35th (Howard-bound),Sox-35th,Sox-35th (Red Line),40190,25,TRUE,FALSE,FALSE +30238,S,47th (95th-bound),47th,47th (Red Line),41230,26,TRUE,FALSE,FALSE +30237,N,47th (Howard-bound),47th,47th (Red Line),41230,26,TRUE,FALSE,FALSE +30224,S,Garfield (95th-bound),Garfield,Garfield (Red Line),41170,27,TRUE,FALSE,FALSE +30223,N,Garfield (Howard-bound),Garfield,Garfield (Red Line),41170,27,TRUE,FALSE,FALSE +30178,S,63rd (95th-bound),63rd,63rd (Red Line),40910,28,TRUE,FALSE,FALSE +30177,N,63rd (Howard-bound),63rd,63rd (Red Line),40910,28,TRUE,FALSE,FALSE +30192,S,69th (95th-bound),69th,69th (Red Line),40990,29,TRUE,FALSE,FALSE +30191,N,69th (Howard-bound),69th,69th (Red Line),40990,29,TRUE,FALSE,FALSE +30047,S,79th (95th-bound),79th,79th (Red Line),40240,30,TRUE,FALSE,FALSE +30046,N,79th (Howard-bound),79th,79th (Red Line),40240,30,TRUE,FALSE,FALSE +30275,N,87th (Howard-bound),87th,87th (Red Line),41430,31,TRUE,FALSE,FALSE +30276,S,87th (95th-bound),87th,87th (Red Line),41430,31,TRUE,FALSE,FALSE +30089,S,95th/Dan Ryan (95th-bound),95th/Dan Ryan,95th/Dan Ryan (Red Line),40450,32,TRUE,FALSE,FALSE +30088,N,95th/Dan Ryan (Howard-bound),95th/Ran Ryan,95th/Ran Ryan (Red Line),40450,32,TRUE,FALSE,FALSE +30243,E,Austin (63rd-bound),Austin,Austin (Green Line),41260,3,FALSE,FALSE,TRUE +30244,W,Austin (Harlem-bound),Austin,Austin (Green Line),41260,3,FALSE,FALSE,TRUE +30054,E,Central (63rd-bound),Central,Central (Green Line),40280,4,FALSE,FALSE,TRUE +30055,W,Central (Harlem-bound),Central,Central (Green Line),40280,4,FALSE,FALSE,TRUE +30135,E,Laramie (63rd-bound),Laramie,Laramie (Green Line),40700,5,FALSE,FALSE,TRUE +30136,W,Laramie (Harlem-bound),Laramie,Laramie (Green Line),40700,5,FALSE,FALSE,TRUE +30094,E,Cicero (63rd-bound),Cicero,Cicero (Green Line),40480,6,FALSE,FALSE,TRUE +30009,W,Cicero (Harlem-bound),Cicero,Cicero (Green Line),40480,6,FALSE,FALSE,TRUE +30172,S,O'Hare (Forest Pk-bound),O'Hare,O'Hare (Blue Line),40890,0,FALSE,TRUE,FALSE +30171,N,O'Hare (Terminal Arrival),O'Hare,O'Hare (Blue Line),40890,0,FALSE,TRUE,FALSE +30277,N,Addison (Kimball-bound),Addison,Addison (Brown Line),41440,8,FALSE,FALSE,FALSE +30278,S,Addison (Loop-bound),Addison,Addison (Brown Line),41440,8,FALSE,FALSE,FALSE +30127,N,Armitage (Kimball-Linden-bound),Armitage,Armitage (Brown & Purple Lines),40660,16,FALSE,FALSE,FALSE +30128,S,Armitage (Loop-bound),Armitage,Armitage (Brown & Purple Lines),40660,16,FALSE,FALSE,FALSE +30005,E,Pulaski (63rd-bound),Pulaski,Pulaski (Green Line),40030,7,FALSE,FALSE,TRUE +30006,W,Pulaski (Harlem-bound),Pulaski,Pulaski (Green Line),40030,7,FALSE,FALSE,TRUE +30291,E,Conservatory (63rd-bound),Conservatory,Conservatory (Green Line),41670,8,FALSE,FALSE,TRUE +30292,W,Conservatory (Harlem-bound),Conservatory,Conservatory (Green Line),41670,8,FALSE,FALSE,TRUE +30207,E,Kedzie (63rd-bound),Kedzie,Kedzie (Green Line),41070,9,FALSE,FALSE,TRUE +30208,W,Kedzie (Harlem-bound),Kedzie,Kedzie (Green Line),41070,9,FALSE,FALSE,TRUE +30160,S,Rosemont (Forest Pk-bound),Rosemont,Rosemont (Blue Line),40820,1,FALSE,TRUE,FALSE +30159,N,Rosemont (O'Hare-bound),Rosemont,Rosemont (Blue Line),40820,1,FALSE,TRUE,FALSE +30265,E,California (63rd-bound),California,California (Green Line),41360,10,FALSE,FALSE,TRUE +30266,W,California (Harlem-bound),California,California (Green Line),41360,10,FALSE,FALSE,TRUE +30045,S,Cumberland (Forest Pk-bound),Cumberland,Cumberland (Blue Line),40230,2,FALSE,TRUE,FALSE +30044,N,Cumberland (O'Hare-bound),Cumberland,Cumberland (Blue Line),40230,2,FALSE,TRUE,FALSE +30257,N,Belmont (Kimball-Linden-bound),Belmont,"Belmont (Red, Brown & Purple Lines)",41320,11,FALSE,FALSE,FALSE +30258,S,Belmont (Loop-bound),Belmont,"Belmont (Red, Brown & Purple Lines)",41320,11,FALSE,FALSE,FALSE +30032,E,Ashland (Loop-63rd-bound),Ashland,Ashland (Green & Pink Lines),40170,11,FALSE,FALSE,TRUE +30033,W,Ashland (Harlem-54th/Cermak-bound),Ashland,Ashland (Green & Pink Lines),40170,11,FALSE,FALSE,TRUE +30146,S,Harlem (O'Hare Branch) (Forest Pk-bound),Harlem,Harlem (Blue Line - O'Hare Branch),40750,3,FALSE,TRUE,FALSE +30145,N,Harlem (O'Hare Branch) (O'Hare-bound),Harlem,Harlem (Blue Line - O'Hare Branch),40750,3,FALSE,TRUE,FALSE +30296,W,Morgan (Harlem-54th/Cermak-bound),Morgan,Morgan (Green & Pink Lines),41510,12,FALSE,FALSE,TRUE +30295,E,Morgan (Loop-63rd-bound),Morgan,Morgan (Green & Pink Lines),41510,12,FALSE,FALSE,TRUE +30222,W,Clinton (Harlem-54th/Cermak-bound),Clinton,Clinton (Green & Pink Lines),41160,13,FALSE,FALSE,TRUE +30221,E,Clinton (Loop-63rd-bound),Clinton,Clinton (Green & Pink Lines),41160,13,FALSE,FALSE,TRUE +30248,S,Jefferson Park (Forest Pk-bound),Jefferson Park,Jefferson Park (Blue Line),41280,4,FALSE,TRUE,FALSE +30138,S,Chicago (Loop-bound),Chicago,Chicago (Brown & Purple Lines),40710,18,FALSE,FALSE,FALSE +30137,N,Chicago (Kimball-Linden-bound),Chicago,Chicago (Brown & Purple Lines),40710,18,FALSE,FALSE,FALSE +30247,N,Jefferson Park (O'Hare-bound),Jefferson Park,Jefferson Park (Blue Line),41280,4,FALSE,TRUE,FALSE +30260,S,Montrose (Forest Pk-bound),Montrose,Montrose (Blue Line),41330,5,FALSE,TRUE,FALSE +30259,N,Montrose (O'Hare-bound),Montrose,Montrose (Blue Line),41330,5,FALSE,TRUE,FALSE +30074,E,Clark/Lake (Inner Loop),Clark/Lake,"Clark/Lake (Blue, Brown, Green, Orange, Purple & Pink Lines)",40380,14,FALSE,FALSE,TRUE +30075,W,Clark/Lake (Outer Loop),Clark/Lake,"Clark/Lake (Blue, Brown, Green, Orange, Purple & Pink Lines)",40380,14,FALSE,FALSE,TRUE +30050,E,State/Lake (Inner Loop),State/Lake,"State/Lake (Brown, Green, Orange, Pink & Purple Lines)",40260,15,FALSE,FALSE,TRUE +30051,W,State/Lake (Outer Loop),State/Lake,"State/Lake (Brown, Green, Orange, Pink & Purple Lines)",40260,15,FALSE,FALSE,TRUE +30108,S,Irving Park (O'Hare Branch) (Forest Pk-bound),Irving Park,Irving Park (Blue Line),40550,6,FALSE,TRUE,FALSE +30107,N,Irving Park (O'Hare Branch) (O'Hare-bound),Irving Park,Irving Park (Blue Line),40550,6,FALSE,TRUE,FALSE +30239,N,Addison (O'Hare-bound),Addison,Addison (Blue Line),41240,7,FALSE,TRUE,FALSE +30240,S,Addison (Forest Pk-bound),Addison,Addison (Blue Line),41240,7,FALSE,TRUE,FALSE +30383,N,Washington/Wabash (Outer Loop),Washington/Wabash,"Washington/Wabash (Brown, Green, Orange, Purple & Pink Lines)",41700,16,FALSE,FALSE,TRUE +30384,S,Washington/Wabash (Inner Loop),Washington/Wabash,"Washington/Wabash (Brown, Green, Orange, Purple & Pink Lines)",41700,16,FALSE,FALSE,TRUE +30132,S,Adams/Wabash (Inner Loop),Adams/Wabash,"Adams/Wabash (Brown, Green, Orange, Pink & Purple Lines)",40680,17,FALSE,FALSE,TRUE +30131,N,Adams/Wabash (Outer Loop),Adams/Wabash,"Adams/Wabash (Brown, Green, Orange, Pink & Purple Lines)",40680,17,FALSE,FALSE,TRUE +30080,N,Roosevelt (Loop-Harlem-bound),Roosevelt,"Roosevelt (Red, Orange & Green Lines)",41400,18,FALSE,FALSE,TRUE +30081,S,Roosevelt (Midway-63rd-bound),Roosevelt,"Roosevelt (Red, Orange & Green Lines)",41400,18,FALSE,FALSE,TRUE +30013,S,Belmont (O'Hare Branch) (Forest Pk-bound),Belmont,Belmont (Blue Line),40060,8,FALSE,TRUE,FALSE +30012,N,Belmont (O'Hare Branch) (O'Hare-bound),Belmont,Belmont (Blue Line),40060,8,FALSE,TRUE,FALSE +30198,S,Logan Square (Forest Pk-bound),Logan Square,Logan Square (Blue Line),41020,9,FALSE,TRUE,FALSE +30197,N,Logan Square (O'Hare-bound),Logan Square,Logan Square (Blue Line),41020,9,FALSE,TRUE,FALSE +30018,N,Damen (Kimball-bound),Damen,Damen (Brown Line),40090,5,FALSE,FALSE,FALSE +30019,S,Damen (Loop-bound),Damen,Damen (Brown Line),40090,5,FALSE,FALSE,FALSE +30103,N,Diversey (Kimball-Linden-bound),Diversey,Diversey (Brown & Purple Lines),40530,13,FALSE,FALSE,FALSE +30104,S,Diversey (Loop-bound),Diversey,Diversey (Brown & Purple Lines),40530,13,FALSE,FALSE,FALSE +30111,N,California (O'Hare-bound),California,California (Blue Line),40570,10,FALSE,TRUE,FALSE +30112,S,California (Forest Pk-bound),California,California (Blue Line),40570,10,FALSE,TRUE,FALSE +30130,S,Western (O'Hare Branch) (Forest Pk-bound),Western/O'Hare Branch,Western (Blue Line - O'Hare Branch),40670,11,FALSE,TRUE,FALSE +30129,N,Western (O'Hare Branch) (O'Hare-bound),Western/O'Hare Branch,Western (Blue Line - O'Hare Branch),40670,11,FALSE,TRUE,FALSE +30167,N,Francisco (Kimball-bound),Francisco,Francisco (Brown Line),40870,2,FALSE,FALSE,FALSE +30168,S,Francisco (Loop-bound),Francisco,Francisco (Brown Line),40870,2,FALSE,FALSE,FALSE +30235,N,Fullerton (Kimball-Linden-bound),Fullerton,"Fullerton (Red, Brown & Purple Lines)",41220,15,FALSE,FALSE,FALSE +30236,S,Fullerton (Loop-bound),Fullerton,"Fullerton (Red, Brown & Purple Lines)",41220,15,FALSE,FALSE,FALSE +30382,S,Cermak-McCormick Place (63rd-bound),Cermak-McCormick Place,Cermak-McCormick Place (Green Line),41690,19,FALSE,FALSE,TRUE +30381,N,Cermak-McCormick Place (Harlem-bound),Cermak-McCormick Place,Cermak-McCormick Place (Green Line),41690,19,FALSE,FALSE,TRUE +30116,S,Damen/Milwaukee (Forest Pk-bound),Damen,Damen (Blue Line),40590,12,FALSE,TRUE,FALSE +30115,N,Damen/Milwaukee (O'Hare-bound),Damen,Damen (Blue Line),40590,12,FALSE,TRUE,FALSE +30214,S,35-Bronzeville-IIT (63rd-bound),35th-Bronzeville-IIT,35th-Bronzeville-IIT (Green Line),41120,20,FALSE,FALSE,TRUE +30213,N,35-Bronzeville-IIT (Harlem-bound),35th-Bronzeville-IIT,35th-Bronzeville-IIT (Green Line),41120,20,FALSE,FALSE,TRUE +30063,S,Division (Forest Pk-bound),Division,Division (Blue Line),40320,13,FALSE,TRUE,FALSE +30062,N,Division (O'Hare-bound),Division,Division (Blue Line),40320,13,FALSE,TRUE,FALSE +30271,N,Chicago (O'Hare-bound),Chicago,Chicago (Blue Line),41410,14,FALSE,TRUE,FALSE +30272,S,Chicago (Forest Pk-bound),Chicago,Chicago (Blue Line),41410,14,FALSE,TRUE,FALSE +30059,S,Indiana (63rd-bound),Indiana,Indiana (Green Line),40300,21,FALSE,FALSE,TRUE +30058,N,Indiana (Harlem-bound),Indiana,Indiana (Green Line),40300,21,FALSE,FALSE,TRUE +30166,W,H.W. Library (Inner Loop),Harold Washington Library-State/Van Buren,"Harold Washington Library-State/Van Buren (Brown, Orange, Purple & Pink Lines)",40850,24,FALSE,FALSE,FALSE +30165,E,H.W. Library (Outer Loop),Harold Washington Library-State/Van Buren,"Harold Washington Library-State/Van Buren (Brown, Orange, Purple & Pink Lines)",40850,24,FALSE,FALSE,FALSE +30096,S,Grand/Milwaukee (Forest Pk-bound),Grand,Grand (Blue Line),40490,15,FALSE,TRUE,FALSE +30095,N,Grand/Milwaukee (O'Hare-bound),Grand,Grand (Blue Line),40490,15,FALSE,TRUE,FALSE +30246,S,43rd (63rd-bound),43rd,43rd (Green Line),41270,22,FALSE,FALSE,TRUE +30245,N,43rd (Harlem-bound),43rd,43rd (Green Line),41270,22,FALSE,FALSE,TRUE +30374,S,Clark/Lake (Forest Pk-bound),Clark/Lake,"Clark/Lake (Blue, Brown, Green, Orange, Purple & Pink Lines)",40380,16,FALSE,TRUE,FALSE +30375,N,Clark/Lake (O'Hare-bound),Clark/Lake,"Clark/Lake (Blue, Brown, Green, Orange, Purple & Pink Lines)",40380,16,FALSE,TRUE,FALSE +30281,N,Irving Park (Kimball-bound),Irving Park,Irving Park (Brown Line),41460,7,FALSE,FALSE,FALSE +30282,S,Irving Park (Loop-bound),Irving Park,Irving Park (Brown Line),41460,7,FALSE,FALSE,FALSE +30073,S,Washington (Forest Pk-bound),Washington,Washington (Blue Line),40370,17,FALSE,TRUE,FALSE +30072,N,Washington (O'Hare-bound),Washington,Washington (Blue Line),40370,17,FALSE,TRUE,FALSE +30154,S,Monroe (Forest Pk-bound),Monroe,Monroe (Blue Line),40790,18,FALSE,TRUE,FALSE +30153,N,Monroe (O'Hare-bound),Monroe,Monroe (Blue Line),40790,18,FALSE,TRUE,FALSE +30225,N,Kedzie (Kimball-bound),Kedzie,Kedzie (Brown Line),41180,1,FALSE,FALSE,FALSE +30226,S,Kedzie (Loop-bound),Kedzie,Kedzie (Brown Line),41180,1,FALSE,FALSE,FALSE +30210,S,47th (63rd-bound),47th,47th (Green Line),41080,23,FALSE,FALSE,TRUE +30209,N,47th (Harlem-bound),47th,47th (Green Line),41080,23,FALSE,FALSE,TRUE +30015,S,Jackson/Dearborn (Forest Pk-bound),Jackson,Jackson (Blue Line),40070,19,FALSE,TRUE,FALSE +30014,N,Jackson/Dearborn (O'Hare-bound),Jackson,Jackson (Blue Line),40070,19,FALSE,TRUE,FALSE +30250,S,Kimball (Loop-bound),Kimball,Kimball (Brown Line),41290,0,FALSE,FALSE,FALSE +30249,N,Kimball (Terminal arrival),Kimball,Kimball (Brown Line),41290,0,FALSE,FALSE,FALSE +30025,S,51st (63rd-bound),51st,51st (Green Line),40130,24,FALSE,FALSE,TRUE +30024,N,51st (Harlem-bound),51st,51st (Green Line),40130,24,FALSE,FALSE,TRUE +30100,S,Garfield (63rd-bound),Garfield,Garfield (Green Line),40510,25,FALSE,FALSE,TRUE +30099,N,Garfield (Harlem-bound),Garfield,Garfield (Green Line),40510,25,FALSE,FALSE,TRUE +30262,W,LaSalle (Forest Pk-bound),LaSalle,LaSalle (Blue Line),41340,20,FALSE,TRUE,FALSE +30261,E,LaSalle (O'Hare-bound),LaSalle,LaSalle (Blue Line),41340,20,FALSE,TRUE,FALSE +30031,W,LaSalle/Van Buren (Inner Loop),LaSalle/Van Buren,"LaSalle/Van Buren (Brown, Orange, Purple & Pink Lines)",40160,25,FALSE,FALSE,FALSE +30030,E,LaSalle/Van Buren (Outer Loop),LaSalle/Van Buren,"LaSalle/Van Buren (Brown, Orange, Purple & Pink Lines)",40160,25,FALSE,FALSE,FALSE +30085,W,Clinton (Forest Pk-bound),Clinton,Clinton (Blue Line),40430,21,FALSE,TRUE,FALSE +30084,E,Clinton (O'Hare-bound),Clinton,Clinton (Blue Line),40430,21,FALSE,TRUE,FALSE +30090,N,Merchandise Mart (Kimball-Linden-bound),Merchandise Mart,Merchandise Mart (Brown & Purple Lines),40460,19,FALSE,FALSE,FALSE +30091,S,Merchandise Mart (Loop-bound),Merchandise Mart,Merchandise Mart (Brown & Purple Lines),40460,19,FALSE,FALSE,FALSE +30069,W,UIC-Halsted (Forest Pk-bound),UIC-Halsted,UIC-Halsted (Blue Line),40350,22,FALSE,TRUE,FALSE +30068,E,UIC-Halsted (O'Hare-bound),UIC-Halsted,UIC-Halsted (Blue Line),40350,22,FALSE,TRUE,FALSE +30093,W,Racine (Forest Pk-bound),Racine,Racine (Blue Line),40470,23,FALSE,TRUE,FALSE +30092,E,Racine (O'Hare-bound),Racine,Racine (Blue Line),40470,23,FALSE,TRUE,FALSE +30287,N,Montrose (Kimball-bound),Montrose,Montrose (Brown Line),41500,6,FALSE,FALSE,FALSE +30288,S,Montrose (Loop-bound),Montrose,Montrose (Brown Line),41500,6,FALSE,FALSE,FALSE +30184,W,Halsted/63rd (Ashland-bound),Halsted,Halsted (Green Line),40940,26,FALSE,FALSE,TRUE +30183,E,Halsted/63rd (Harlem-bound),Halsted,Halsted (Green Line),40940,26,FALSE,FALSE,TRUE +30158,W,Illinois Medical District (Forest Pk-bound),Illinois Medical District,Illinois Medical District (Blue Line),40810,24,FALSE,TRUE,FALSE +30157,E,Illinois Medical District (O'Hare-bound),Illinois Medical District,Illinois Medical District (Blue Line),40810,24,FALSE,TRUE,FALSE +30056,E,Ashland/63rd (Harlem-bound),Ashland/63rd,Ashland/63rd (Green Line),40290,27,FALSE,FALSE,TRUE +30057,W,Ashland/63rd (Terminal arrival),Ashland/63rd,Ashland/63rd (Green Line),40290,27,FALSE,FALSE,TRUE +30042,E,Western (Forest Pk Branch) (O'Hare-bound),Western/Forest Pk Branch,Western (Blue Line - Forest Park Branch),40220,25,FALSE,TRUE,FALSE +30043,W,Western (Forest Pk Branch) (Forest Pk-bound),Western/Forest Pk Branch,Western (Blue Line - Forest Park Branch),40220,25,FALSE,TRUE,FALSE +30253,N,Paulina (Kimball-bound),Paulina,Paulina (Brown Line),41310,9,FALSE,FALSE,FALSE +30254,S,Paulina (Loop-bound),Paulina,Paulina (Brown Line),41310,9,FALSE,FALSE,FALSE +30049,W,Kedzie-Homan (Forest Pk-bound),Kedzie-Homan,Kedzie-Homan (Blue Line),40250,26,FALSE,TRUE,FALSE +30048,E,Kedzie-Homan (O'Hare-bound),Kedzie-Homan,Kedzie-Homan (Blue Line),40250,26,FALSE,TRUE,FALSE +30180,W,Pulaski (Forest Pk-bound),Pulaski,Pulaski (Blue Line),40920,27,FALSE,TRUE,FALSE +30179,E,Pulaski (O'Hare-bound),Pulaski,Pulaski (Blue Line),40920,27,FALSE,TRUE,FALSE +30195,N,Rockwell (Kimball-bound),Rockwell,Rockwell (Brown Line),41010,3,FALSE,FALSE,FALSE +30196,S,Rockwell (Loop-bound),Rockwell,Rockwell (Brown Line),41010,3,FALSE,FALSE,FALSE +30188,W,Cicero (Forest Pk-bound),Cicero,Cicero (Blue Line),40970,28,FALSE,TRUE,FALSE +30187,E,Cicero (O'Hare-bound),Cicero,Cicero (Blue Line),40970,28,FALSE,TRUE,FALSE +30155,N,Sedgwick (Kimball-Linden-bound),Sedgwick,Sedgwick (Brown & Purple Lines),40800,17,FALSE,FALSE,FALSE +30156,S,Sedgwick (Loop-bound),Sedgwick,Sedgwick (Brown & Purple Lines),40800,17,FALSE,FALSE,FALSE +30070,N,Southport (Kimball-bound),Southport,Southport (Brown Line),40360,10,FALSE,FALSE,FALSE +30071,S,Southport (Loop-bound),Southport,Southport (Brown Line),40360,10,FALSE,FALSE,FALSE +30002,W,Austin (Forest Pk-bound),Austin,Austin (Blue Line),40010,29,FALSE,TRUE,FALSE +30001,E,Austin (O'Hare-bound),Austin,Austin (Blue Line),40010,29,FALSE,TRUE,FALSE +30035,W,Oak Park (Forest Pk-bound),Oak Park,Oak Park (Blue Line),40180,30,FALSE,TRUE,FALSE +30034,E,Oak Park (O'Hare-bound),Oak Park,Oak Park (Blue Line),40180,30,FALSE,TRUE,FALSE +30231,N,Wellington (Kimball-Linden-bound),Wellington,Wellington (Brown & Purple Lines),41210,12,FALSE,FALSE,FALSE +30232,S,Wellington (Loop-bound),Wellington,Wellington (Brown & Purple Lines),41210,12,FALSE,FALSE,FALSE +30283,N,Western (Kimball-bound),Western,Western (Brown Line),41480,4,FALSE,FALSE,FALSE +30284,S,Western (Loop-bound),Western,Western (Brown Line),41480,4,FALSE,FALSE,FALSE +30189,E,Harlem (Forest Pk Branch) (O'Hare-bound),Harlem,Harlem (Blue Line - Forest Park Branch),40980,31,FALSE,TRUE,FALSE +30190,W,Harlem (Forest Pk Branch) (Terminal arrival),Harlem,Harlem (Blue Line - Forest Park Branch),40980,31,FALSE,TRUE,FALSE +30076,E,Forest Park (O'Hare-bound),Forest Park,Forest Park (Blue Line),40390,32,FALSE,TRUE,FALSE +30077,W,Forest Park (Terminal Arrival),Forest Park,Forest Park (Blue Line),40390,32,FALSE,TRUE,FALSE \ No newline at end of file diff --git a/producers/data/ridership_curve.csv b/producers/data/ridership_curve.csv new file mode 100755 index 0000000..1f66c95 --- /dev/null +++ b/producers/data/ridership_curve.csv @@ -0,0 +1,26 @@ +hour,ridership_ratio +0,0.01 +1,0.01 +2,0.01 +3,0.01 +4,0.0125 +5,0.025 +6,0.05 +7,0.075 +8,0.125 +9,0.075 +10,0.05 +11,0.025 +12,0.0225 +13,0.0225 +14,0.0225 +15,0.025 +16,0.05 +17,0.075 +18,0.125 +19,0.075 +20,0.05 +21,0.025 +22,0.01 +23,0.01 +24,0.01 \ No newline at end of file diff --git a/producers/data/ridership_seed.csv b/producers/data/ridership_seed.csv new file mode 100755 index 0000000..6b63d16 --- /dev/null +++ b/producers/data/ridership_seed.csv @@ -0,0 +1,145 @@ +station_id,stationame,month_beginning,avg_weekday_rides,avg_saturday_rides,avg_sunday-holiday_rides,monthtotal +40380,Clark/Lake,10/01/2018,22811.6,6901.8,6233.5,577208 +40260,State/Lake,10/01/2018,14098.7,7307.8,5824.5,376799 +40200,Randolph/Wabash,10/01/2018,0,0,0,0 +41700,Washington/Wabash,10/01/2018,11079.3,5920,4248.8,295498 +40680,Adams/Wabash,10/01/2018,8448,3616.3,4136,225312 +40850,Library,10/01/2018,4236,1946,1918.8,112888 +40160,LaSalle/Van Buren,10/01/2018,3182.3,584.5,503.5,77544 +40040,Quincy/Wells,10/01/2018,8549.1,1715.5,1549.8,209691 +40730,Washington/Wells,10/01/2018,8696.1,1383.8,1442,211314 +41130,Halsted-Orange,10/01/2018,3112.3,1239.8,1142.3,81111 +41060,Ashland-Orange,10/01/2018,1789.4,928.3,721.3,47754 +40120,35th/Archer,10/01/2018,3389.5,1608.3,1229.3,89309 +40310,Western-Orange,10/01/2018,4133.9,1845.5,1440,108222 +41150,Kedzie-Midway,10/01/2018,3856,1753.8,1239.5,100661 +40960,Pulaski-Orange,10/01/2018,5773.9,2299,1719.5,148874 +40930,Midway Airport,10/01/2018,9311.2,4326.8,4062.3,247713 +40460,Merchandise Mart,10/01/2018,8616.9,1949.3,1640,212545 +40710,Chicago/Franklin,10/01/2018,7727.6,3147.3,2387.5,199874 +40800,Sedgwick,10/01/2018,4096.1,2299,2561.8,113654 +40660,Armitage,10/01/2018,4621.2,2419.5,1759.3,123002 +40530,Diversey,10/01/2018,6133.1,3026,2441.3,162930 +41210,Wellington,10/01/2018,3387,1461.8,1061.8,87994 +40360,Southport,10/01/2018,3838,2160.3,1636.5,103460 +41310,Paulina,10/01/2018,3011.7,1619,1193.8,80519 +41440,Addison-Brown,10/01/2018,2765.3,1130,882,71649 +41460,Irving Park-Brown,10/01/2018,3548.9,1736,1208,93401 +41500,Montrose-Brown,10/01/2018,2799.6,1481.3,1059.3,74553 +40090,Damen-Brown,10/01/2018,3063.5,1527,1059.3,80805 +41480,Western-Brown,10/01/2018,4224.4,2971.8,2114,117504 +41010,Rockwell,10/01/2018,1998.7,895,680.3,52270 +40870,Francisco,10/01/2018,1768,918.3,662,46985 +41180,Kedzie-Brown,10/01/2018,2130.9,1402.3,1055.8,58842 +41290,Kimball,10/01/2018,4342.8,2594,1830.3,117581 +40290,Ashland/63rd,10/01/2018,1190.6,345,281.5,29889 +40940,Halsted/63rd,10/01/2018,602.5,118.8,104.3,14749 +40720,East 63rd-Cottage Grove,10/01/2018,1076,348.8,249.3,27140 +41140,King Drive,10/01/2018,562,176.8,145.3,14214 +40510,Garfield-South Elevated,10/01/2018,805.9,261.3,207.8,20411 +40130,51st,10/01/2018,1289.1,1171,812.3,37582 +41080,47th-South Elevated,10/01/2018,1180.2,710,506.3,32010 +41270,43rd,10/01/2018,1095.7,541.3,400,28966 +40300,Indiana,10/01/2018,951.3,420.8,408.5,25196 +41120,35-Bronzeville-IIT,10/01/2018,2065.3,1137.8,1104.3,56470 +41690,Cermak-McCormick Place,10/01/2018,2194.5,1962,1960,66161 +41160,Clinton-Lake,10/01/2018,4761.7,1342.5,1237.3,119837 +41510,Morgan-Lake,10/01/2018,3738.1,2192.3,1834.5,102083 +40170,Ashland-Lake,10/01/2018,2690.8,1306.5,983.3,71048 +41360,California-Lake,10/01/2018,1150,535.8,424.3,30291 +41070,Kedzie-Lake,10/01/2018,1681.7,975.5,726.3,45485 +41670,Conservatory,10/01/2018,995,663.3,505.3,27559 +40030,Pulaski-Lake,10/01/2018,1497.1,970.3,732.3,41243 +40480,Cicero-Lake,10/01/2018,1311.9,827.5,622.3,35973 +40700,Laramie,10/01/2018,1270.8,756.3,545.5,34435 +40280,Central-Lake,10/01/2018,2099.9,1311.5,948.5,57337 +41260,Austin-Lake,10/01/2018,1926.3,1034.8,722.8,51334 +40610,Ridgeland,10/01/2018,1470,524.3,397,37496 +41350,Oak Park-Lake,10/01/2018,1709.1,770.8,624,44889 +40020,Harlem-Lake,10/01/2018,3948.2,2319,1813,107336 +40580,54th/Cermak,10/01/2018,2359.1,1133.3,818,62065 +40420,Cicero-Cermak,10/01/2018,1309.8,840.8,650.3,36089 +40600,Kostner,10/01/2018,537.5,297.8,205,14374 +40150,Pulaski-Cermak,10/01/2018,1158.8,668.5,517.3,31396 +40780,Central Park,10/01/2018,1289,713.8,506.8,34529 +41040,Kedzie-Cermak,10/01/2018,1118.5,636.5,475.5,30174 +40440,California-Cermak,10/01/2018,1511,808,633.5,40520 +40740,Western-Cermak,10/01/2018,1250.4,716,515,33684 +40210,Damen-Cermak,10/01/2018,1744.1,908.8,688.5,46503 +40830,18th,10/01/2018,1980.9,1299.5,1403.5,56372 +41030,Polk,10/01/2018,3621.4,763,589,88700 +40390,Forest Park,10/01/2018,3627.9,1530,1312.3,94810 +40980,Harlem-Forest Park,10/01/2018,1437.8,693.8,449.5,37643 +40180,Oak Park-Forest Park,10/01/2018,2012.6,668.3,512,51011 +40010,Austin-Forest Park,10/01/2018,2182.9,838.8,645.3,56143 +40970,Cicero-Forest Park,10/01/2018,1443.7,943,692.3,39747 +40920,Pulaski-Forest Park,10/01/2018,1795,1395.3,1093.3,51239 +40250,Kedzie-Homan-Forest Park,10/01/2018,2112.4,1282,1028.3,57827 +40220,Western-Forest Park,10/01/2018,1843.1,1021,805.5,49697 +40810,Medical Center,10/01/2018,3403.7,1293.5,954.3,87277 +40470,Racine,10/01/2018,2508.4,1094.3,1151.8,66678 +40350,UIC-Halsted,10/01/2018,8865,2556,3064.5,226378 +40430,Clinton-Forest Park,10/01/2018,3957.8,1341.8,1493.3,102369 +41340,LaSalle,10/01/2018,3518.1,1482.5,1538.8,93001 +40070,Jackson/Dearborn,10/01/2018,8242.5,3256,3571.8,216889 +40790,Monroe/Dearborn,10/01/2018,8761.8,2533,2182,220381 +40370,Washington/Dearborn,10/01/2018,14381,7121,5790.3,382409 +40490,Grand/Milwaukee,10/01/2018,3032.8,1615.5,1405.5,81839 +41410,Chicago/Milwaukee,10/01/2018,4445,2006,1572,116548 +40320,Division/Milwaukee,10/01/2018,6784.5,3353.8,2668,180130 +40590,Damen/Milwaukee,10/01/2018,7012.7,5016.5,3742.8,196329 +40670,Western/Milwaukee,10/01/2018,5996.8,2751.8,2208.3,157767 +40570,California/Milwaukee,10/01/2018,6202.4,3230.8,2518.5,165653 +41020,Logan Square,10/01/2018,8139.2,4356.5,3476,218531 +40060,Belmont-O'Hare,10/01/2018,4885,2593.5,1953.5,130542 +41240,Addison-O'Hare,10/01/2018,3449.7,1411.5,1058.5,89224 +40550,Irving Park-O'Hare,10/01/2018,4634.7,2404.3,1917,123883 +41330,Montrose-O'Hare,10/01/2018,3404.5,1488.3,1138.8,88812 +41280,Jefferson Park,10/01/2018,5507.2,2632.3,2112.3,145644 +40750,Harlem-O'Hare,10/01/2018,3488.3,1403,1082.5,90174 +40230,Cumberland,10/01/2018,4876.1,1975.3,1689,126807 +40820,Rosemont,10/01/2018,7237.5,4245,3437.5,197192 +40890,O'Hare Airport,10/01/2018,12484.1,10352.8,11347.3,373934 +41680,Oakton-Skokie,10/01/2018,1085,437.3,289,27859 +40140,Dempster-Skokie,10/01/2018,2106.7,892.5,740,54984 +40840,South Boulevard,10/01/2018,826.9,397,264,21663 +40270,Main,10/01/2018,1250.2,903.3,591.8,34735 +40690,Dempster,10/01/2018,844.4,649,519.5,24095 +40050,Davis,10/01/2018,3782.2,2782.5,1852.3,105530 +40520,Foster,10/01/2018,918.5,665.8,463.8,25643 +40400,Noyes,10/01/2018,1028.9,688.5,435.5,28160 +41250,Central-Evanston,10/01/2018,791.5,1954.5,267.3,27091 +41050,Linden,10/01/2018,971.7,545.5,385.8,26075 +40450,95th/Dan Ryan,10/01/2018,10237.4,5944.8,4625.3,277741 +41430,87th,10/01/2018,4273.8,2945,2298.3,119270 +40240,79th,10/01/2018,6957.2,4781,3810.3,194380 +40990,69th,10/01/2018,5140.1,3773,2781.8,144441 +40910,63rd-Dan Ryan,10/01/2018,3299.1,2446.5,1895.5,93248 +41170,Garfield-Dan Ryan,10/01/2018,3383.9,2962.8,1909.3,97318 +41230,47th-Dan Ryan,10/01/2018,3137.1,2214,1735.5,87951 +40190,Sox-35th-Dan Ryan,10/01/2018,4360.3,2655.3,2742,121876 +41000,Cermak-Chinatown,10/01/2018,4402.5,5216.8,5554.3,144342 +41400,Roosevelt,10/01/2018,11672,8987,9777,343512 +41490,Harrison,10/01/2018,4545.6,3598,3664,133596 +40560,Jackson/State,10/01/2018,11048.5,4484.3,5075,292353 +41090,Monroe/State,10/01/2018,11220.2,4936.5,3966.3,293676 +41660,Lake/State,10/01/2018,23156.5,13408,10374.5,627730 +40330,Grand/State,10/01/2018,11747.1,10969.5,9486,352006 +41450,Chicago/State,10/01/2018,15366,12059,9405.3,439275 +40630,Clark/Division,10/01/2018,8336.4,6283,6241,241834 +40650,North/Clybourn,10/01/2018,5881,4932.3,3834.8,170330 +41220,Fullerton,10/01/2018,14993,8758.3,7258.8,408906 +41320,Belmont-North Main,10/01/2018,13004.4,9683.3,8105,370255 +41420,Addison-North Main,10/01/2018,7732.3,5055.5,4774.8,217164 +40080,Sheridan,10/01/2018,5596.1,3394.5,3076.5,154595 +40540,Wilson,10/01/2018,7438,4732,3340.5,203364 +40770,Lawrence,10/01/2018,3459.4,3147.3,2360.5,101598 +41200,Argyle,10/01/2018,3304.6,2583,2121.5,94824 +40340,Berwyn,10/01/2018,3543.6,2481.8,1989.8,99388 +41380,Bryn Mawr,10/01/2018,5136.7,3362.8,2652.8,142206 +40880,Thorndale,10/01/2018,3399.9,2236.5,1708.8,93979 +40760,Granville,10/01/2018,4515.5,3612.3,2625,128805 +41300,Loyola,10/01/2018,6079.1,4896.5,3487.3,173354 +40100,Morse,10/01/2018,4765.6,3304.3,2636.3,133370 +41190,Jarvis,10/01/2018,1593.1,1242.3,987,45559 +40900,Howard,10/01/2018,5670.2,3825.5,2950.5,157519 \ No newline at end of file diff --git a/producers/logging.ini b/producers/logging.ini new file mode 100755 index 0000000..9f6cd73 --- /dev/null +++ b/producers/logging.ini @@ -0,0 +1,21 @@ +[loggers] +keys=root + +[handlers] +keys=stream_handler + +[formatters] +keys=formatter + +[logger_root] +level=INFO +handlers=stream_handler + +[handler_stream_handler] +class=StreamHandler +level=INFO +formatter=formatter +args=(sys.stderr,) + +[formatter_formatter] +format=%(asctime)s %(name)-12s %(levelname)-8s %(message)s diff --git a/producers/models/__init__.py b/producers/models/__init__.py new file mode 100755 index 0000000..b95c486 --- /dev/null +++ b/producers/models/__init__.py @@ -0,0 +1,5 @@ +from .turnstile import Turnstile +from .station import Station +from .train import Train +from .line import Line +from .weather import Weather diff --git a/producers/models/line.py b/producers/models/line.py new file mode 100755 index 0000000..6494299 --- /dev/null +++ b/producers/models/line.py @@ -0,0 +1,191 @@ +"""Defines functionality relating to train lines""" +import collections +from enum import IntEnum +import logging + +from models import Station, Train + + +logger = logging.getLogger(__name__) + + +class Line: + """Contains Chicago Transit Authority (CTA) Elevated Loop Train ("L") Station Data""" + + colors = IntEnum("colors", "blue green red", start=0) + num_directions = 2 + + def __init__(self, color, station_data, num_trains=10): + self.color = color + self.num_trains = num_trains + self.stations = self._build_line_data(station_data) + # We must always discount the terminal station at the end of each direction + self.num_stations = len(self.stations) - 1 + self.trains = self._build_trains() + + def _build_line_data(self, station_df): + """Constructs all stations on the line""" + stations = station_df["station_name"].unique() + + station_data = station_df[station_df["station_name"] == stations[0]] + line = [ + Station(station_data["station_id"].unique()[0], stations[0], self.color) + ] + prev_station = line[0] + for station in stations[1:]: + station_data = station_df[station_df["station_name"] == station] + new_station = Station( + station_data["station_id"].unique()[0], + station, + self.color, + prev_station, + ) + prev_station.dir_b = new_station + prev_station = new_station + line.append(new_station) + return line + + def _build_trains(self): + """Constructs and assigns train objects to stations""" + trains = [] + curr_loc = 0 + b_dir = True + for train_id in range(self.num_trains): + tid = str(train_id).zfill(3) + train = Train( + f"{self.color.name[0].upper()}L{tid}", Train.status.in_service + ) + trains.append(train) + + if b_dir: + self.stations[curr_loc].arrive_b(train, None, None) + else: + self.stations[curr_loc].arrive_a(train, None, None) + curr_loc, b_dir = self._get_next_idx(curr_loc, b_dir) + + return trains + + def run(self, timestamp, time_step): + """Advances trains between stations in the simulation. Runs turnstiles.""" + self._advance_turnstiles(timestamp, time_step) + self._advance_trains() + + def close(self): + """Called to stop the simulation""" + _ = [station.close() for station in self.stations] + + def _advance_turnstiles(self, timestamp, time_step): + """Advances the turnstiles in the simulation""" + _ = [station.turnstile.run(timestamp, time_step) for station in self.stations] + + def _advance_trains(self): + """Advances trains between stations in the simulation""" + # Find the first b train + curr_train, curr_index, b_direction = self._next_train() + self.stations[curr_index].b_train = None + + trains_advanced = 0 + while trains_advanced < self.num_trains - 1: + # The train departs the current station + if b_direction is True: + self.stations[curr_index].b_train = None + else: + self.stations[curr_index].a_train = None + + prev_station = self.stations[curr_index].station_id + prev_dir = "b" if b_direction else "a" + + # Advance this train to the next station + curr_index, b_direction = self._get_next_idx( + curr_index, b_direction, step_size=1 + ) + if b_direction is True: + self.stations[curr_index].arrive_b(curr_train, prev_station, prev_dir) + else: + self.stations[curr_index].arrive_a(curr_train, prev_station, prev_dir) + + # Find the next train to advance + move = 1 if b_direction else -1 + next_train, curr_index, b_direction = self._next_train( + curr_index + move, b_direction + ) + if b_direction is True: + curr_train = self.stations[curr_index].b_train + else: + curr_train = self.stations[curr_index].a_train + + curr_train = next_train + trains_advanced += 1 + + # The last train departs the current station + if b_direction is True: + self.stations[curr_index].b_train = None + else: + self.stations[curr_index].a_train = None + + # Advance last train to the next station + prev_station = self.stations[curr_index].station_id + prev_dir = "b" if b_direction else "a" + curr_index, b_direction = self._get_next_idx( + curr_index, b_direction, step_size=1 + ) + if b_direction is True: + self.stations[curr_index].arrive_b(curr_train, prev_station, prev_dir) + else: + self.stations[curr_index].arrive_a(curr_train, prev_station, prev_dir) + + def _next_train(self, start_index=0, b_direction=True, step_size=1): + """Given a starting index, finds the next train in either direction""" + if b_direction is True: + curr_index = self._next_train_b(start_index, step_size) + + if curr_index == -1: + curr_index = self._next_train_a(len(self.stations) - 1, step_size) + b_direction = False + else: + curr_index = self._next_train_a(start_index, step_size) + + if curr_index == -1: + curr_index = self._next_train_b(0, step_size) + b_direction = True + + if b_direction is True: + return self.stations[curr_index].b_train, curr_index, True + return self.stations[curr_index].a_train, curr_index, False + + def _next_train_b(self, start_index, step_size): + """Finds the next train in the b direction, if any""" + for i in range(start_index, len(self.stations), step_size): + if self.stations[i].b_train is not None: + return i + return -1 + + def _next_train_a(self, start_index, step_size): + """Finds the next train in the a direction, if any""" + for i in range(start_index, 0, -step_size): + if self.stations[i].a_train is not None: + return i + return -1 + + def _get_next_idx(self, curr_index, b_direction, step_size=None): + """Calculates the next station index. Returns next index and if it is b direction""" + if step_size is None: + step_size = int((self.num_stations * Line.num_directions) / self.num_trains) + if b_direction is True: + next_index = curr_index + step_size + if next_index < self.num_stations: + return next_index, True + else: + return self.num_stations - (next_index % self.num_stations), False + else: + next_index = curr_index - step_size + if next_index > 0: + return next_index, False + else: + return abs(next_index), True + + def __str__(self): + return "\n".join(str(station) for station in self.stations) + + def __repr__(self): + return str(self) diff --git a/producers/models/producer.py b/producers/models/producer.py new file mode 100755 index 0000000..3bdb14a --- /dev/null +++ b/producers/models/producer.py @@ -0,0 +1,79 @@ +"""Producer base-class providing common utilites and functionality""" +import logging +import time + + +from confluent_kafka import avro +from confluent_kafka.admin import AdminClient, NewTopic +from confluent_kafka.avro import AvroProducer + +logger = logging.getLogger(__name__) + + +class Producer: + """Defines and provides common functionality amongst Producers""" + + # Tracks existing topics across all Producer instances + existing_topics = set([]) + + def __init__( + self, + topic_name, + key_schema, + value_schema=None, + num_partitions=1, + num_replicas=1, + ): + """Initializes a Producer object with basic settings""" + self.topic_name = topic_name + self.key_schema = key_schema + self.value_schema = value_schema + self.num_partitions = num_partitions + self.num_replicas = num_replicas + + # + # + # TODO: Configure the broker properties below. Make sure to reference the project README + # and use the Host URL for Kafka and Schema Registry! + # + # + self.broker_properties = { + # TODO + # TODO + # TODO + } + + # If the topic does not already exist, try to create it + if self.topic_name not in Producer.existing_topics: + self.create_topic() + Producer.existing_topics.add(self.topic_name) + + # TODO: Configure the AvroProducer + # self.producer = AvroProducer( + # ) + + def create_topic(self): + """Creates the producer topic if it does not already exist""" + # + # + # TODO: Write code that creates the topic for this producer if it does not already exist on + # the Kafka Broker. + # + # + logger.info("topic creation kafka integration incomplete - skipping") + + def time_millis(self): + return int(round(time.time() * 1000)) + + def close(self): + """Prepares the producer for exit by cleaning up the producer""" + # + # + # TODO: Write cleanup code for the Producer here + # + # + logger.info("producer close incomplete - skipping") + + def time_millis(self): + """Use this function to get the key for Kafka Events""" + return int(round(time.time() * 1000)) diff --git a/producers/models/schemas/arrival_key.json b/producers/models/schemas/arrival_key.json new file mode 100755 index 0000000..3fe5151 --- /dev/null +++ b/producers/models/schemas/arrival_key.json @@ -0,0 +1,11 @@ +{ + "namespace": "com.udacity", + "type": "record", + "name": "arrival.key", + "fields": [ + { + "name": "timestamp", + "type": "long" + } + ] +} diff --git a/producers/models/schemas/arrival_value.json b/producers/models/schemas/arrival_value.json new file mode 100755 index 0000000..1e7c611 --- /dev/null +++ b/producers/models/schemas/arrival_value.json @@ -0,0 +1,3 @@ +{ + "TODO": "Complete this Schema! (Make sure to delete this Key/Value Pair!" +} diff --git a/producers/models/schemas/turnstile_key.json b/producers/models/schemas/turnstile_key.json new file mode 100755 index 0000000..c49aa0e --- /dev/null +++ b/producers/models/schemas/turnstile_key.json @@ -0,0 +1,11 @@ +{ + "namespace": "com.udacity", + "type": "record", + "name": "turnstile.key", + "fields": [ + { + "name": "timestamp", + "type": "long" + } + ] +} diff --git a/producers/models/schemas/turnstile_value.json b/producers/models/schemas/turnstile_value.json new file mode 100755 index 0000000..1e7c611 --- /dev/null +++ b/producers/models/schemas/turnstile_value.json @@ -0,0 +1,3 @@ +{ + "TODO": "Complete this Schema! (Make sure to delete this Key/Value Pair!" +} diff --git a/producers/models/schemas/weather_key.json b/producers/models/schemas/weather_key.json new file mode 100755 index 0000000..97b2d6c --- /dev/null +++ b/producers/models/schemas/weather_key.json @@ -0,0 +1,11 @@ +{ + "namespace": "com.udacity", + "type": "record", + "name": "weather.key", + "fields": [ + { + "name": "timestamp", + "type": "long" + } + ] +} diff --git a/producers/models/schemas/weather_value.json b/producers/models/schemas/weather_value.json new file mode 100755 index 0000000..1e7c611 --- /dev/null +++ b/producers/models/schemas/weather_value.json @@ -0,0 +1,3 @@ +{ + "TODO": "Complete this Schema! (Make sure to delete this Key/Value Pair!" +} diff --git a/producers/models/station.py b/producers/models/station.py new file mode 100755 index 0000000..b5ff2d5 --- /dev/null +++ b/producers/models/station.py @@ -0,0 +1,104 @@ +"""Methods pertaining to loading and configuring CTA "L" station data.""" +import logging +from pathlib import Path + +from confluent_kafka import avro + +from models import Turnstile +from models.producer import Producer + + +logger = logging.getLogger(__name__) + + +class Station(Producer): + """Defines a single station""" + + key_schema = avro.load(f"{Path(__file__).parents[0]}/schemas/arrival_key.json") + + # + # TODO: Define this value schema in `schemas/station_value.json, then uncomment the below + # + #value_schema = avro.load(f"{Path(__file__).parents[0]}/schemas/arrival_value.json") + + def __init__(self, station_id, name, color, direction_a=None, direction_b=None): + self.name = name + station_name = ( + self.name.lower() + .replace("/", "_and_") + .replace(" ", "_") + .replace("-", "_") + .replace("'", "") + ) + + # + # + # TODO: Complete the below by deciding on a topic name, number of partitions, and number of + # replicas + # + # + topic_name = f"{station_name}" # TODO: Come up with a better topic name + super().__init__( + topic_name, + key_schema=Station.key_schema, + # TODO: value_schema=Station.value_schema, # TODO: Uncomment once schema is defined + # TODO: num_partitions=???, + # TODO: num_replicas=???, + ) + + self.station_id = int(station_id) + self.color = color + self.dir_a = direction_a + self.dir_b = direction_b + self.a_train = None + self.b_train = None + self.turnstile = Turnstile(self) + + + def run(self, train, direction, prev_station_id, prev_direction): + """Simulates train arrivals at this station""" + # + # + # TODO: Complete this function by producing an arrival message to Kafka + # + # + logger.info("arrival kafka integration incomplete - skipping") + #self.producer.produce( + # topic=self.topic_name, + # key={"timestamp": self.time_millis()}, + # value={ + # # + # # + # # TODO: Configure this + # # + # # + # }, + #) + + def __str__(self): + return "Station | {:^5} | {:<30} | Direction A: | {:^5} | departing to {:<30} | Direction B: | {:^5} | departing to {:<30} | ".format( + self.station_id, + self.name, + self.a_train.train_id if self.a_train is not None else "---", + self.dir_a.name if self.dir_a is not None else "---", + self.b_train.train_id if self.b_train is not None else "---", + self.dir_b.name if self.dir_b is not None else "---", + ) + + def __repr__(self): + return str(self) + + def arrive_a(self, train, prev_station_id, prev_direction): + """Denotes a train arrival at this station in the 'a' direction""" + self.a_train = train + self.run(train, "a", prev_station_id, prev_direction) + + def arrive_b(self, train, prev_station_id, prev_direction): + """Denotes a train arrival at this station in the 'b' direction""" + self.b_train = train + self.run(train, "b", prev_station_id, prev_direction) + + def close(self): + """Prepares the producer for exit by cleaning up the producer""" + self.turnstile.close() + super(Station, self).close() diff --git a/producers/models/train.py b/producers/models/train.py new file mode 100755 index 0000000..0954364 --- /dev/null +++ b/producers/models/train.py @@ -0,0 +1,27 @@ +"""Defines CTA Train Model""" +from enum import IntEnum +import logging + + +logger = logging.getLogger(__name__) + + +class Train: + """Defines CTA Train Model""" + + status = IntEnum("status", "out_of_service in_service broken_down", start=0) + + def __init__(self, train_id, status): + self.train_id = train_id + self.status = status + if self.status is None: + self.status = Train.status.out_of_service + + def __str__(self): + return f"Train ID {self.train_id} is {self.status.name.replace('_', ' ')}" + + def __repr__(self): + return str(self) + + def broken(self): + return self.status == Train.status.broken_down diff --git a/producers/models/turnstile.py b/producers/models/turnstile.py new file mode 100755 index 0000000..70a2e78 --- /dev/null +++ b/producers/models/turnstile.py @@ -0,0 +1,59 @@ +"""Creates a turnstile data producer""" +import logging +from pathlib import Path + +from confluent_kafka import avro + +from models.producer import Producer +from models.turnstile_hardware import TurnstileHardware + + +logger = logging.getLogger(__name__) + + +class Turnstile(Producer): + key_schema = avro.load(f"{Path(__file__).parents[0]}/schemas/turnstile_key.json") + + # + # TODO: Define this value schema in `schemas/turnstile_value.json, then uncomment the below + # + #value_schema = avro.load( + # f"{Path(__file__).parents[0]}/schemas/turnstile_value.json" + #) + + def __init__(self, station): + """Create the Turnstile""" + station_name = ( + station.name.lower() + .replace("/", "_and_") + .replace(" ", "_") + .replace("-", "_") + .replace("'", "") + ) + + # + # + # TODO: Complete the below by deciding on a topic name, number of partitions, and number of + # replicas + # + # + super().__init__( + f"{station_name}", # TODO: Come up with a better topic name + key_schema=Turnstile.key_schema, + # TODO: value_schema=Turnstile.value_schema, TODO: Uncomment once schema is defined + # TODO: num_partitions=???, + # TODO: num_replicas=???, + ) + self.station = station + self.turnstile_hardware = TurnstileHardware(station) + + def run(self, timestamp, time_step): + """Simulates riders entering through the turnstile.""" + num_entries = self.turnstile_hardware.get_entries(timestamp, time_step) + logger.info("turnstile kafka integration incomplete - skipping") + # + # + # TODO: Complete this function by emitting a message to the turnstile topic for the number + # of entries that were calculated + # + # diff --git a/producers/models/turnstile_hardware.py b/producers/models/turnstile_hardware.py new file mode 100755 index 0000000..55b9a33 --- /dev/null +++ b/producers/models/turnstile_hardware.py @@ -0,0 +1,66 @@ +import logging +import math +from pathlib import Path +import random + +import pandas as pd + +from models.producer import Producer + + +logger = logging.getLogger(__name__) + + +class TurnstileHardware: + curve_df = None + seed_df = None + + def __init__(self, station): + """Create the Turnstile""" + self.station = station + TurnstileHardware._load_data() + self.metrics_df = TurnstileHardware.seed_df[ + TurnstileHardware.seed_df["station_id"] == station.station_id + ] + self.weekday_ridership = int( + round(self.metrics_df.iloc[0]["avg_weekday_rides"]) + ) + self.saturday_ridership = int( + round(self.metrics_df.iloc[0]["avg_saturday_rides"]) + ) + self.sunday_ridership = int( + round(self.metrics_df.iloc[0]["avg_sunday-holiday_rides"]) + ) + + @classmethod + def _load_data(cls): + if cls.curve_df is None: + cls.curve_df = pd.read_csv( + f"{Path(__file__).parents[1]}/data/ridership_curve.csv" + ) + if cls.seed_df is None: + cls.seed_df = pd.read_csv( + f"{Path(__file__).parents[1]}/data/ridership_seed.csv" + ) + + def get_entries(self, timestamp, time_step): + """Returns the number of turnstile entries for the given timeframe""" + hour_curve = TurnstileHardware.curve_df[ + TurnstileHardware.curve_df["hour"] == timestamp.hour + ] + ratio = hour_curve.iloc[0]["ridership_ratio"] + total_steps = int(60 / (60 / time_step.total_seconds())) + + num_riders = 0 + dow = timestamp.weekday() + if dow >= 0 or dow < 5: + num_riders = self.weekday_ridership + elif dow == 6: + num_riders = self.saturday_ridership + else: + num_riders = self.sunday_ridership + + # Calculate approximation of number of entries for this simulation step + num_entries = int(math.floor(num_riders * ratio / total_steps)) + # Introduce some randomness in the data + return max(num_entries + random.choice(range(-5, 5)), 0) diff --git a/producers/models/weather.py b/producers/models/weather.py new file mode 100755 index 0000000..c4d8e81 --- /dev/null +++ b/producers/models/weather.py @@ -0,0 +1,112 @@ +"""Methods pertaining to weather data""" +from enum import IntEnum +import json +import logging +from pathlib import Path +import random +import urllib.parse + +import requests + +from models.producer import Producer + + +logger = logging.getLogger(__name__) + + +class Weather(Producer): + """Defines a simulated weather model""" + + status = IntEnum( + "status", "sunny partly_cloudy cloudy windy precipitation", start=0 + ) + + rest_proxy_url = "http://localhost:8082" + + key_schema = None + value_schema = None + + winter_months = set((0, 1, 2, 3, 10, 11)) + summer_months = set((6, 7, 8)) + + def __init__(self, month): + # + # + # TODO: Complete the below by deciding on a topic name, number of partitions, and number of + # replicas + # + # + super().__init__( + "weather", # TODO: Come up with a better topic name + key_schema=Weather.key_schema, + value_schema=Weather.value_schema, + ) + + self.status = Weather.status.sunny + self.temp = 70.0 + if month in Weather.winter_months: + self.temp = 40.0 + elif month in Weather.summer_months: + self.temp = 85.0 + + if Weather.key_schema is None: + with open(f"{Path(__file__).parents[0]}/schemas/weather_key.json") as f: + Weather.key_schema = json.load(f) + + # + # TODO: Define this value schema in `schemas/weather_value.json + # + if Weather.value_schema is None: + with open(f"{Path(__file__).parents[0]}/schemas/weather_value.json") as f: + Weather.value_schema = json.load(f) + + def _set_weather(self, month): + """Returns the current weather""" + mode = 0.0 + if month in Weather.winter_months: + mode = -1.0 + elif month in Weather.summer_months: + mode = 1.0 + self.temp += min(max(-20.0, random.triangular(-10.0, 10.0, mode)), 100.0) + self.status = random.choice(list(Weather.status)) + + def run(self, month): + self._set_weather(month) + + # + # + # TODO: Complete the function by posting a weather event to REST Proxy. Make sure to + # specify the Avro schemas and verify that you are using the correct Content-Type header. + # + # + logger.info("weather kafka proxy integration incomplete - skipping") + #resp = requests.post( + # # + # # + # # TODO: What URL should be POSTed to? + # # + # # + # f"{Weather.rest_proxy_url}/TODO", + # # + # # + # # TODO: What Headers need to bet set? + # # + # # + # headers={"Content-Type": "TODO"}, + # data=json.dumps( + # { + # # + # # + # # TODO: Provide key schema, value schema, and records + # # + # # + # } + # ), + #) + #resp.raise_for_status() + + logger.debug( + "sent weather data to kafka, temp: %s, status: %s", + self.temp, + self.status.name, + ) diff --git a/producers/requirements.txt b/producers/requirements.txt new file mode 100755 index 0000000..6c1452f --- /dev/null +++ b/producers/requirements.txt @@ -0,0 +1,3 @@ +confluent-kafka[avro]==1.1.0 +pandas==0.24.2 +requests==2.22.0 diff --git a/producers/simulation.py b/producers/simulation.py new file mode 100755 index 0000000..8291d8a --- /dev/null +++ b/producers/simulation.py @@ -0,0 +1,83 @@ +"""Defines a time simulation responsible for executing any registered +producers +""" +import datetime +import time +from enum import IntEnum +import logging +import logging.config +from pathlib import Path + +import pandas as pd + +# Import logging before models to ensure configuration is picked up +logging.config.fileConfig(f"{Path(__file__).parents[0]}/logging.ini") + +from connector import configure_connector +from models import Line, Weather + + +logger = logging.getLogger(__name__) + + +class TimeSimulation: + weekdays = IntEnum("weekdays", "mon tue wed thu fri sat sun", start=0) + ten_min_frequency = datetime.timedelta(minutes=10) + + def __init__(self, sleep_seconds=5, time_step=None, schedule=None): + """Initializes the time simulation""" + self.sleep_seconds = sleep_seconds + self.time_step = time_step + if self.time_step is None: + self.time_step = datetime.timedelta(minutes=self.sleep_seconds) + + # Read data from disk + self.raw_df = pd.read_csv( + f"{Path(__file__).parents[0]}/data/cta_stations.csv" + ).sort_values("order") + + # Define the train schedule (same for all trains) + self.schedule = schedule + if schedule is None: + self.schedule = { + TimeSimulation.weekdays.mon: {0: TimeSimulation.ten_min_frequency}, + TimeSimulation.weekdays.tue: {0: TimeSimulation.ten_min_frequency}, + TimeSimulation.weekdays.wed: {0: TimeSimulation.ten_min_frequency}, + TimeSimulation.weekdays.thu: {0: TimeSimulation.ten_min_frequency}, + TimeSimulation.weekdays.fri: {0: TimeSimulation.ten_min_frequency}, + TimeSimulation.weekdays.sat: {0: TimeSimulation.ten_min_frequency}, + TimeSimulation.weekdays.sun: {0: TimeSimulation.ten_min_frequency}, + } + + self.train_lines = [ + Line(Line.colors.blue, self.raw_df[self.raw_df["blue"]]), + Line(Line.colors.red, self.raw_df[self.raw_df["red"]]), + Line(Line.colors.green, self.raw_df[self.raw_df["green"]]), + ] + + def run(self): + curr_time = datetime.datetime.utcnow().replace( + hour=0, minute=0, second=0, microsecond=0 + ) + logger.info("Beginning simulation, press Ctrl+C to exit at any time") + logger.info("loading kafka connect jdbc source connector") + configure_connector() + + logger.info("beginning cta train simulation") + weather = Weather(curr_time.month) + try: + while True: + logger.debug("simulation running: %s", curr_time.isoformat()) + # Send weather on the top of the hour + if curr_time.minute == 0: + weather.run(curr_time.month) + _ = [line.run(curr_time, self.time_step) for line in self.train_lines] + curr_time = curr_time + self.time_step + time.sleep(self.sleep_seconds) + except KeyboardInterrupt as e: + logger.info("Shutting down") + _ = [line.close() for line in self.train_lines] + + +if __name__ == "__main__": + TimeSimulation().run()