From f7bcd3067fd9a4acc25f85d4bda10aaaca814762 Mon Sep 17 00:00:00 2001 From: Burt Bielicki Date: Thu, 10 Mar 2016 12:55:41 -0800 Subject: [PATCH] update where telemetry calls are made --- azure-cli.pyproj | 3 --- src/azure/cli/__main__.py | 13 +++++++++++- src/azure/cli/_argparse.py | 4 +--- src/azure/cli/_performance.py | 16 --------------- src/azure/cli/_telemetry.py | 37 +++++++++++++++-------------------- src/azure/cli/main.py | 4 ---- 6 files changed, 29 insertions(+), 48 deletions(-) delete mode 100644 src/azure/cli/_performance.py diff --git a/azure-cli.pyproj b/azure-cli.pyproj index 9eb41892ce6..cbcbc04dbc9 100644 --- a/azure-cli.pyproj +++ b/azure-cli.pyproj @@ -43,9 +43,6 @@ - - Code - Code diff --git a/src/azure/cli/__main__.py b/src/azure/cli/__main__.py index 666cda4f24e..9ceb748a4ee 100644 --- a/src/azure/cli/__main__.py +++ b/src/azure/cli/__main__.py @@ -2,4 +2,15 @@ import azure.cli.main -sys.exit(azure.cli.main.main(sys.argv[1:])) +from ._telemetry import init_telemetry, user_agrees_to_telemetry, telemetry_flush + +try: + try: + if user_agrees_to_telemetry(): + init_telemetry() + except Exception: #pylint: disable=broad-except + pass + + sys.exit(azure.cli.main.main(sys.argv[1:])) +finally: + telemetry_flush() diff --git a/src/azure/cli/_argparse.py b/src/azure/cli/_argparse.py index 3fec9b2f95b..def620bc29a 100644 --- a/src/azure/cli/_argparse.py +++ b/src/azure/cli/_argparse.py @@ -4,7 +4,6 @@ from ._locale import L, get_file as locale_get_file from ._logging import logger from ._output import OutputProducer -from ._telemetry import telemetry_log_event # Named arguments are prefixed with one of these strings ARG_PREFIXES = sorted(('-', '--', '/'), key=len, reverse=True) @@ -125,7 +124,7 @@ def add_command(self, else: v = aliases.pop().strip('<> ') if not target: - target, _ = _read_arg(aliases[0]) + target, _ = _read_arg(aliases[0]) kw.update({_read_arg(a)[0]: (target, v, req, aliases) for a in aliases}) ad.append(('/'.join(aliases), desc, req)) @@ -240,7 +239,6 @@ def not_global(a): sys.stdout = out return ArgumentParserResult(handler(parsed, others), output_format) except IncorrectUsageError as ex: - telemetry_log_event("Incorrect Usage", {"CommandName": " ".join(nouns)}) print(str(ex), file=out) return ArgumentParserResult(self._display_usage(nouns, m, out)) finally: diff --git a/src/azure/cli/_performance.py b/src/azure/cli/_performance.py deleted file mode 100644 index a5fb7613485..00000000000 --- a/src/azure/cli/_performance.py +++ /dev/null @@ -1,16 +0,0 @@ -import time -from ._telemetry import telemetry_log_performance - -class PerfTimer(object): # pylint:disable=too-few-public-methods - def __init__(self, event_name, properties): - self.event_name = event_name - self.properties = properties - self.start = 0 - super(PerfTimer, self).__init__() - - def total_milliseconds(self): - return (time.time() - self.start) * 1000 - - def store_perf_data(self): - self.properties["Milliseconds"] = self.total_milliseconds() - telemetry_log_performance(self.event_name, self.properties) diff --git a/src/azure/cli/_telemetry.py b/src/azure/cli/_telemetry.py index 3a8953f52c1..d6a504b61b7 100644 --- a/src/azure/cli/_telemetry.py +++ b/src/azure/cli/_telemetry.py @@ -3,37 +3,32 @@ from applicationinsights.exceptions import enable import azure.cli as cli -# event, exception, Trace, metric, message +client = {} -class Telemetry(object): # pylint:disable=too-few-public-methods - client = None - - @staticmethod - def init_telemetry(): +def init_telemetry(): + try: instrumentation_key = 'eb6e9d3a-b6ee-41a6-804f-70e152fdfc36' - Telemetry.client = TelemetryClient(instrumentation_key) + global client #pylint: disable=global-statement + client = TelemetryClient(instrumentation_key) - Telemetry.client.context.application.id = 'Azure CLI' - Telemetry.client.context.application.ver = cli.__version__ - Telemetry.client.context.user.id = hash(getpass.getuser()) + client.context.application.id = 'Azure CLI' + client.context.application.ver = cli.__version__ + client.context.user.id = hash(getpass.getuser()) enable(instrumentation_key) + except Exception: #pylint: disable=broad-except + # Never fail the command because of telemetry + pass def user_agrees_to_telemetry(): # TODO: agreement, needs to take Y/N from the command line # and needs a "skip" param to not show (for scripts) return True -def telemetry_log_event(name, properties=None, measurements=None): +def telemetry_flush(): try: - if Telemetry.client is None: - return - Telemetry.client.track_event(name, properties, measurements) - Telemetry.client.flush() - except Exception as e: - #pass - raise e - -def telemetry_log_performance(name, properties=None): - telemetry_log_event("Perf: "+name, properties) + client.flush() + except Exception: #pylint: disable=broad-except + # Never fail the command because of telemetry + pass diff --git a/src/azure/cli/main.py b/src/azure/cli/main.py index 5a6c0f9ed5d..591b6751495 100644 --- a/src/azure/cli/main.py +++ b/src/azure/cli/main.py @@ -5,7 +5,6 @@ from ._logging import configure_logging, logger from ._session import Session from ._output import OutputProducer -from ._telemetry import Telemetry, user_agrees_to_telemetry # CONFIG provides external configuration options CONFIG = Session() @@ -19,9 +18,6 @@ def main(args, file=sys.stdout): #pylint: disable=redefined-builtin configure_logging(args, CONFIG) - if user_agrees_to_telemetry(): - Telemetry.init_telemetry() - from ._locale import install as locale_install locale_install(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'locale',