-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathcli.py
49 lines (39 loc) · 1.29 KB
/
cli.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
import logging
import os
import sys
import click
import daiquiri
from pythonjsonlogger.jsonlogger import JsonFormatter
from exporters import DataDogExporter
from receiver import CeleryEventReceiver
from store import InMemoryStore
def setup_logging() -> None:
prod_log_format = (
"%(asctime)s [%(process)d] %(levelname)-8.8s %(name)s: %(message)s"
)
is_production_env = os.environ.get("PROD", "False").lower() == "true"
output_formatter = (
JsonFormatter(prod_log_format)
if is_production_env
else daiquiri.formatter.ColorFormatter()
)
daiquiri.setup(
level=os.environ.get("LOG_LEVEL", "INFO"),
outputs=[
daiquiri.output.Stream(sys.stdout, formatter=output_formatter),
],
)
@click.command()
@click.option("--broker", default="redis://localhost:6379/1", help="celery broker uri")
def run(broker) -> None:
setup_logging()
# start all the exporters in different threads
logging.info("Initialize datadog exporter")
dd_exporter = DataDogExporter(store=InMemoryStore(max_size=100000))
dd_exporter.start()
logging.info("Initialize receiver")
event_receiver = CeleryEventReceiver(broker=broker)
event_receiver.attach(dd_exporter)
event_receiver.run()
if __name__ == "__main__":
run()