aboutsummaryrefslogtreecommitdiffstats
path: root/Library/Homebrew/utils/analytics.sh
blob: 1e607931cb2439b48e3c43e2604134f35d737955 (plain)
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
setup-analytics() {
  [[ -z "$HOMEBREW_ANALYTICS" ]] && return
  [[ -n "$HOMEBREW_NO_ANALYTICS" ]] && return

  # User UUID file. Used for Homebrew user counting. Can be deleted and
  # recreated with no adverse effect (beyond our user counts being inflated).
  HOMEBREW_ANALYTICS_USER_UUID_FILE="$HOME/.homebrew_analytics_user_uuid"
  if [[ -r "$HOMEBREW_ANALYTICS_USER_UUID_FILE" ]]
  then
    HOMEBREW_ANALYTICS_USER_UUID="$(<"$HOMEBREW_ANALYTICS_USER_UUID_FILE")"
  else
    HOMEBREW_ANALYTICS_USER_UUID="$(uuidgen)"
    echo "$HOMEBREW_ANALYTICS_USER_UUID" > "$HOMEBREW_ANALYTICS_USER_UUID_FILE"
  fi

  if [[ -n "$HOMEBREW_LINUX" ]]
  then
    # For Linuxbrew's analytics.
    HOMEBREW_ANALYTICS_ID="UA-76492262-1"
  else
    # Otherwise, fall back to Homebrew's analytics.
    HOMEBREW_ANALYTICS_ID="UA-75654628-1"
  fi

  export HOMEBREW_ANALYTICS_ID
  export HOMEBREW_ANALYTICS_USER_UUID
}

report-analytics-screenview-command() {
  [[ -z "$HOMEBREW_ANALYTICS" ]] && return
  [[ -n "$HOMEBREW_NO_ANALYTICS" ]] && return

  # Don't report non-official commands.
  if ! [[ "$HOMEBREW_COMMAND" = "bundle"   ||
          "$HOMEBREW_COMMAND" = "cask"     ||
          "$HOMEBREW_COMMAND" = "services" ||
          -f "$HOMEBREW_LIBRARY/Homebrew/cmd/$HOMEBREW_COMMAND.rb"     ||
          -f "$HOMEBREW_LIBRARY/Homebrew/cmd/$HOMEBREW_COMMAND.sh"     ||
          -f "$HOMEBREW_LIBRARY/Homebrew/dev-cmd/$HOMEBREW_COMMAND.rb" ||
          -f "$HOMEBREW_LIBRARY/Homebrew/dev-cmd/$HOMEBREW_COMMAND.sh" ]]
  then
    return
  fi

  # Don't report commands used mostly by our scripts and not users.
  # TODO: list more e.g. shell completion things here perhaps using a single
  # script as a shell-completion entry point.
  if [[ "$HOMEBREW_COMMAND" = "commands" ]]
  then
    return
  fi

  local args=(
    --max-time 3 \
    --user-agent "$HOMEBREW_USER_AGENT_CURL" \
    -d v=1 \
    -d tid="$HOMEBREW_ANALYTICS_ID" \
    -d cid="$HOMEBREW_ANALYTICS_USER_UUID" \
    -d aip=1 \
    -d an="$HOMEBREW_PRODUCT" \
    -d av="$HOMEBREW_VERSION" \
    -d t=screenview \
    -d cd="$HOMEBREW_COMMAND" \
  )

  # Send analytics. Don't send or store any personally identifiable information.
  # https://github.com/Homebrew/brew/blob/master/share/doc/homebrew/Analytics.md
  # https://developers.google.com/analytics/devguides/collection/protocol/v1/devguide#screenView
  # https://developers.google.com/analytics/devguides/collection/protocol/v1/parameters
  if [[ -z "$HOMEBREW_ANALYTICS_DEBUG" ]]
  then
    "$HOMEBREW_CURL" https://www.google-analytics.com/collect \
      "${args[@]}" \
      --silent --output /dev/null &>/dev/null & disown
  else
    "$HOMEBREW_CURL" https://www.google-analytics.com/debug/collect \
      "${args[@]}"
  fi
}