11import logging
2+ import os
3+ import requests
4+ from dotenv import load_dotenv
25from flask import Flask , jsonify , request
36
7+ # Load environment variables from .env file
8+ load_dotenv ()
9+
410# Configure logging
511logging .basicConfig (level = logging .INFO )
612logger = logging .getLogger (__name__ )
713
14+ # Environment variables for configuration
15+ GETDX_API_KEY = os .getenv ("GETDX_API_KEY" )
16+ EVENTS_TRACKED = os .getenv ("EVENTS_TRACKED" , "" ).split ("," )
17+
18+ # Clean up event list and convert to lowercase for case-insensitive comparison
19+ EVENTS_TRACKED = [event .strip ().lower () for event in EVENTS_TRACKED ]
20+
821app = Flask (__name__ )
922
1023@app .route ("/" , methods = ['GET' ])
@@ -15,11 +28,55 @@ def hello_world():
1528def webhook_handler ():
1629 payload = request .get_json ()
1730 logger .info ("Received webhook payload: %s" , payload )
31+
32+ event_name = payload .get ("event" , "" ).strip ()
33+
34+ if event_name .lower () in EVENTS_TRACKED :
35+ logger .info ("Forwarding event: %s" , event_name )
36+ forward_to_getdx (payload )
37+ else :
38+ logger .info ("Event not tracked, ignoring: %s" , event_name )
39+
1840 return jsonify ({"status" : "received" })
1941
42+ def forward_to_getdx (payload ):
43+ if not GETDX_API_KEY :
44+ logger .error ("GETDX_API_KEY is not set" )
45+ return
46+
47+ # Extract user information more flexibly
48+ user_email = payload .get ("user" , {}).get ("email" ) or payload .get ("user_email" )
49+
50+ getdx_payload = {
51+ "name" : payload .get ("event" ),
52+ "email" : user_email ,
53+ "timestamp" : payload .get ("timestamp" ),
54+ "properties" : {
55+ "workspace_name" : payload .get ("workspace" , {}).get ("name" ),
56+ "template_name" : payload .get ("template" , {}).get ("name" ),
57+ "user_name" : payload .get ("user" , {}).get ("username" ),
58+ "organization" : payload .get ("organization" , {}).get ("name" )
59+ }
60+ }
61+
62+ # Remove None values from properties
63+ getdx_payload ["properties" ] = {k : v for k , v in getdx_payload ["properties" ].items () if v is not None }
64+
65+ headers = {
66+ "Content-Type" : "application/json" ,
67+ "Authorization" : f"Bearer { GETDX_API_KEY } "
68+ }
69+
70+ try :
71+ response = requests .post ("https://api.getdx.com/events.track" , json = getdx_payload , headers = headers )
72+ response .raise_for_status ()
73+ logger .info ("Successfully forwarded event to getDX" )
74+ except requests .exceptions .RequestException as e :
75+ logger .error ("Failed to forward event to getDX: %s" , e )
76+
2077@app .route ("/health" )
2178def health_check ():
2279 return jsonify ({"status" : "healthy" })
2380
2481if __name__ == "__main__" :
25- app .run (host = "0.0.0.0" , port = 8080 , debug = True )
82+ app .run (host = "0.0.0.0" , port = 8080 , debug = True )
0 commit comments