openhands openhands commited on
Commit
5639e2a
·
1 Parent(s): 0658c19

Add PostHog analytics tracking

Browse files

Uses the same PostHog project key as the main OpenHands app.
Tracks pageviews and page leaves automatically via client-side JS.

Co-authored-by: openhands <openhands@all-hands.dev>

Files changed (1) hide show
  1. app.py +15 -1
app.py CHANGED
@@ -40,6 +40,20 @@ logger.info(f"All modules imported (LOCAL_DEBUG={LOCAL_DEBUG})")
40
  api = HfApi()
41
  LOGO_PATH = "assets/logo.svg"
42
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
43
  # JavaScripts
44
  scroll_script = """
45
  <script>
@@ -248,7 +262,7 @@ logger.info("Creating Gradio application")
248
  demo = gr.Blocks(
249
  theme=theme,
250
  css=final_css,
251
- head=scroll_script + redirect_script + tooltip_script,
252
  title="OpenHands Index",
253
  )
254
 
 
40
  api = HfApi()
41
  LOGO_PATH = "assets/logo.svg"
42
 
43
+ # PostHog analytics (client-side)
44
+ POSTHOG_API_KEY = os.getenv("POSTHOG_API_KEY", "phc_3ESMmY9SgqEAGBB6sMGK5ayYHkeUuknH2vP6FmWH9RA")
45
+ posthog_script = f"""
46
+ <script>
47
+ !function(t,e){{var o,n,p,r;e.__SV||(window.posthog=e,e._i=[],e.init=function(i,s,a){{function g(t,e){{var o=e.split(".");2==o.length&&(t=t[o[0]],e=o[1]),t[e]=function(){{t.push([e].concat(Array.prototype.slice.call(arguments,0)))}}}}(p=t.createElement("script")).type="text/javascript",p.async=!0,p.src=s.api_host.replace(".i.posthog.com","-assets.i.posthog.com")+"/static/array.js",(r=t.getElementsByTagName("script")[0]).parentNode.insertBefore(p,r);var u=e;for(void 0!==a?u=e[a]=[]:a="posthog",u.people=u.people||[],u.toString=function(t){{var e="posthog";return"posthog"!==a&&(e+="."+a),t||(e+=" (stub)"),e}},u.people.toString=function(){{return u.toString(1)+".people (stub)"}},o="init capture register register_once register_for_session unregister unregister_for_session getFeatureFlag getFeatureFlagPayload isFeatureEnabled reloadFeatureFlags updateEarlyAccessFeatureEnrollment getEarlyAccessFeatures on onFeatureFlags onSessionId getSurveys getActiveMatchingSurveys renderSurvey canRenderSurvey getNextSurveyStep identify setPersonProperties group resetGroups setPersonPropertiesForFlags resetPersonPropertiesForFlags setGroupPropertiesForFlags resetGroupPropertiesForFlags reset get_distinct_id getGroups get_session_id get_session_replay_url alias set_config startSessionRecording stopSessionRecording sessionRecordingStarted captureException loadToolbar get_property getSessionProperty createPersonProfile opt_in_capturing opt_out_capturing has_opted_in_capturing has_opted_out_capturing clear_opt_in_out_capturing debug getPageViewId captureTrackedElements captureTraceParent".split(" "),n=0;n<o.length;n++)g(u,o[n]);e._i.push([i,s,a])}},e.__SV=1)}}(document,window.posthog||[]);
48
+ posthog.init('{POSTHOG_API_KEY}', {{
49
+ api_host: 'https://us.i.posthog.com',
50
+ person_profiles: 'identified_only',
51
+ capture_pageview: true,
52
+ capture_pageleave: true,
53
+ }});
54
+ </script>
55
+ """
56
+
57
  # JavaScripts
58
  scroll_script = """
59
  <script>
 
262
  demo = gr.Blocks(
263
  theme=theme,
264
  css=final_css,
265
+ head=posthog_script + scroll_script + redirect_script + tooltip_script,
266
  title="OpenHands Index",
267
  )
268