add version and config info to segment.io events
This commit is contained in:
@@ -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()
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user