add version and config info to segment.io events

This commit is contained in:
Michael Gummelt
2015-04-15 14:38:26 -07:00
parent 303ba6ff55
commit c4173de893
2 changed files with 29 additions and 16 deletions

View File

@@ -26,7 +26,7 @@ Environment Variables:
to read about a specific subcommand.
"""
import json
import os
import sys
from subprocess import PIPE, Popen
@@ -89,24 +89,26 @@ def wait_and_track(subproc):
exit_code = subproc.poll()
con = config.load_from_path(
conf = config.load_from_path(
os.environ[constants.DCOS_CONFIG_ENV])
if con.get('core.report', True):
track(exit_code, err)
if conf.get('core.report', True):
track(exit_code, err, conf)
return exit_code
def track(exit_code, err):
def track(exit_code, err, conf):
# segment.io analytics
try:
# We don't have user id's right now, but segment.io requires
# them, so we use a constant (1)
analytics.track(1, 'dcos-cli', {
analytics.track('<dcos-cli-user>', 'dcos-cli', {
'cmd': ' '.join(sys.argv),
'exit_code': exit_code,
'err': err or None
'err': err or None,
'dcoscli.version': dcoscli.version,
'config': json.dumps(list(conf.property_items()))
})
analytics.flush()

View File

@@ -1,7 +1,9 @@
import json
import os
import analytics
from dcos.api import constants, util
import dcoscli
from dcos.api import config, constants, util
from dcoscli.main import main
import mock
@@ -135,13 +137,21 @@ def _mock_analytics_run(args):
return main()
def _analytics_base_properties(args):
conf = config.load_from_path(os.environ[constants.DCOS_CONFIG_ENV])
return {'cmd': ' '.join(args),
'exit_code': 0,
'err': None,
'dcoscli.version': dcoscli.version,
'config': json.dumps(list(conf.property_items()))}
def test_analytics_no_err():
args = ['dcos']
exit_code = _mock_analytics_run(args)
analytics.track.assert_called_with(1, 'dcos-cli',
{'cmd': ' '.join(args),
'exit_code': 0,
'err': None})
props = _analytics_base_properties(args)
analytics.track.assert_called_with('<dcos-cli-user>', 'dcos-cli', props)
analytics.flush.assert_called_with()
assert exit_code == 0
@@ -149,10 +159,11 @@ def test_analytics_no_err():
def test_analytics_err():
args = ['dcos', 'marathon', 'task', 'show', 'asdf']
exit_code = _mock_analytics_run(args)
attrs = {'cmd': ' '.join(args),
'exit_code': 1,
'err': "Task 'asdf' does not exist\n"}
analytics.track.assert_called_with(1, 'dcos-cli', attrs)
props = _analytics_base_properties(args)
props['exit_code'] = 1
props['err'] = "Task 'asdf' does not exist\n"
analytics.track.assert_called_with('<dcos-cli-user>', 'dcos-cli', props)
analytics.flush.assert_called_with()
assert exit_code == 1