From 07fa17e3bcde9d40795f7672d6f8a01de534dcc7 Mon Sep 17 00:00:00 2001 From: Yishi Wang Date: Mon, 10 Jul 2023 15:18:40 +0800 Subject: [PATCH 1/3] drop client telemetry push interval --- .../azure/cli/telemetry/__init__.py | 8 ++------ .../cli/telemetry/components/records_collection.py | 13 ++----------- 2 files changed, 4 insertions(+), 17 deletions(-) diff --git a/src/azure-cli-telemetry/azure/cli/telemetry/__init__.py b/src/azure-cli-telemetry/azure/cli/telemetry/__init__.py index 85b82cbe7fa..b2ed82611ff 100644 --- a/src/azure-cli-telemetry/azure/cli/telemetry/__init__.py +++ b/src/azure-cli-telemetry/azure/cli/telemetry/__init__.py @@ -54,8 +54,8 @@ def save(config_dir, payload): logger = get_logger('main') try: # Split payload to cli events and extra events by instrumentation key - # cli events should be stored in local cache and sent together # extra events can be sent immediately + # cli events will be handled in separate process import json events = json.loads(payload) @@ -75,7 +75,7 @@ def save(config_dir, payload): logger.info("Split cli events and extra events failure: %s", str(ex)) cli_payload = payload - if save_payload(config_dir, cli_payload) and should_upload(config_dir): + if save_payload(config_dir, cli_payload): logger.info('Begin creating telemetry upload process.') _start(config_dir) logger.info('Finish creating telemetry upload process.') @@ -95,10 +95,6 @@ def main(): logger = get_logger('main') logger.info('Attempt start. Configuration directory [%s].', sys.argv[1]) - if not should_upload(config_dir): - logger.info('Exit early. The note file indicates it is not a suitable time to upload telemetry.') - sys.exit(0) - try: with TelemetryNote(config_dir) as telemetry_note: telemetry_note.touch() diff --git a/src/azure-cli-telemetry/azure/cli/telemetry/components/records_collection.py b/src/azure-cli-telemetry/azure/cli/telemetry/components/records_collection.py index a5daf5267d5..8f04a668c76 100644 --- a/src/azure-cli-telemetry/azure/cli/telemetry/components/records_collection.py +++ b/src/azure-cli-telemetry/azure/cli/telemetry/components/records_collection.py @@ -36,11 +36,8 @@ def snapshot_and_read(self): if not os.path.isdir(folder): return - # Collect all cache.x files. If it has been a long time since last sent, also collect cache file itself. - push_interval = datetime.timedelta(hours=self._get_push_interval_config()) - include_cache = datetime.datetime.now() - self._last_sent > push_interval - candidates = [(fn, os.stat(os.path.join(folder, fn))) for fn in os.listdir(folder) - if include_cache or fn != 'cache'] + # Collect all cache/cache.x files + candidates = [(fn, os.stat(os.path.join(folder, fn))) for fn in os.listdir(folder)] # sort the cache files base on their last modification time. candidates = [(fn, file_stat) for fn, file_stat in candidates if stat.S_ISREG(file_stat.st_mode)] @@ -72,12 +69,6 @@ def snapshot_and_read(self): onerror=lambda _, p, tr: self._logger.error('Fail to remove file %s', p)) self._logger.info('Remove directory %s', tmp) - def _get_push_interval_config(self): - config = CLIConfig(config_dir=self._config_dir) - threshold = config.getint('telemetry', 'push_interval_in_hours', fallback=1) - # the threshold for push telemetry can't be less than 1 hour, default value is 1 hour - return threshold if threshold >= 1 else 1 - def _read_file(self, path): """ Read content of a telemetry cache file and parse them into records. """ try: From fd682f2ffd37fb905a04d069e69cb2f04c3d9d90 Mon Sep 17 00:00:00 2001 From: Yishi Wang Date: Mon, 10 Jul 2023 16:58:34 +0800 Subject: [PATCH 2/3] upgrade telemetry version --- src/azure-cli-core/setup.py | 2 +- src/azure-cli-telemetry/HISTORY.rst | 4 ++++ src/azure-cli-telemetry/azure/cli/telemetry/__init__.py | 2 +- .../azure/cli/telemetry/tests/test_records_collection.py | 4 ++-- src/azure-cli-telemetry/setup.py | 2 +- src/azure-cli/requirements.py3.Darwin.txt | 2 +- src/azure-cli/requirements.py3.Linux.txt | 2 +- src/azure-cli/requirements.py3.windows.txt | 2 +- 8 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/azure-cli-core/setup.py b/src/azure-cli-core/setup.py index d9d4dea4b49..29472151b96 100644 --- a/src/azure-cli-core/setup.py +++ b/src/azure-cli-core/setup.py @@ -44,7 +44,7 @@ DEPENDENCIES = [ 'argcomplete~=3.1.1', - 'azure-cli-telemetry==1.0.8.*', + 'azure-cli-telemetry==1.1.0.*', 'azure-mgmt-core>=1.2.0,<2', 'cryptography', # On Linux, the distribution (Ubuntu, Debian, etc) and version are logged in telemetry diff --git a/src/azure-cli-telemetry/HISTORY.rst b/src/azure-cli-telemetry/HISTORY.rst index 7345ea876f5..671ab40ab3e 100644 --- a/src/azure-cli-telemetry/HISTORY.rst +++ b/src/azure-cli-telemetry/HISTORY.rst @@ -2,6 +2,10 @@ Release History =============== +1.1.0 ++++++ +* Drop telemetry cache strategy. Records will be uploaded immediately + 1.0.8 +++++ * Keep storing telemetry to CLI AppInsights in local cache but send telemetry to other AppInsights immediately diff --git a/src/azure-cli-telemetry/azure/cli/telemetry/__init__.py b/src/azure-cli-telemetry/azure/cli/telemetry/__init__.py index b2ed82611ff..cb71183cbb3 100644 --- a/src/azure-cli-telemetry/azure/cli/telemetry/__init__.py +++ b/src/azure-cli-telemetry/azure/cli/telemetry/__init__.py @@ -10,7 +10,7 @@ from azure.cli.telemetry.util import save_payload -__version__ = "1.0.8" +__version__ = "1.1.0" DEFAULT_INSTRUMENTATION_KEY = 'c4395b75-49cc-422c-bc95-c7d51aef5d46' diff --git a/src/azure-cli-telemetry/azure/cli/telemetry/tests/test_records_collection.py b/src/azure-cli-telemetry/azure/cli/telemetry/tests/test_records_collection.py index 1f831a2db5b..dac3e0341dd 100644 --- a/src/azure-cli-telemetry/azure/cli/telemetry/tests/test_records_collection.py +++ b/src/azure-cli-telemetry/azure/cli/telemetry/tests/test_records_collection.py @@ -46,8 +46,8 @@ def test_create_records_collection_with_last_send(self): collection = RecordsCollection(last_send, self.work_dir) collection.snapshot_and_read() - # the threshold for pushing 'cache' file is 1 hour, so 'cache' file should not be moved - self.assert_cache_files_count(1) + # cache strategy has been dropped, so no `cache` file + self.assert_cache_files_count(0) # no new records since last_send self.assertEqual(0, len([r for r in collection])) diff --git a/src/azure-cli-telemetry/setup.py b/src/azure-cli-telemetry/setup.py index c79b027b743..922999eb07a 100755 --- a/src/azure-cli-telemetry/setup.py +++ b/src/azure-cli-telemetry/setup.py @@ -8,7 +8,7 @@ from codecs import open from setuptools import setup -VERSION = "1.0.8" +VERSION = "1.1.0" CLASSIFIERS = [ 'Development Status :: 5 - Production/Stable', diff --git a/src/azure-cli/requirements.py3.Darwin.txt b/src/azure-cli/requirements.py3.Darwin.txt index 3be413552cd..71badb9f98b 100644 --- a/src/azure-cli/requirements.py3.Darwin.txt +++ b/src/azure-cli/requirements.py3.Darwin.txt @@ -5,7 +5,7 @@ asn1crypto==0.24.0 azure-appconfiguration==1.1.1 azure-batch==14.0.0 azure-cli-core==2.50.0 -azure-cli-telemetry==1.0.8 +azure-cli-telemetry==1.1.0 azure-cli==2.50.0 azure-common==1.1.22 azure-core==1.26.0 diff --git a/src/azure-cli/requirements.py3.Linux.txt b/src/azure-cli/requirements.py3.Linux.txt index 0354694a829..17346c02779 100644 --- a/src/azure-cli/requirements.py3.Linux.txt +++ b/src/azure-cli/requirements.py3.Linux.txt @@ -5,7 +5,7 @@ asn1crypto==0.24.0 azure-appconfiguration==1.1.1 azure-batch==14.0.0 azure-cli-core==2.50.0 -azure-cli-telemetry==1.0.8 +azure-cli-telemetry==1.1.0 azure-cli==2.50.0 azure-common==1.1.22 azure-core==1.26.0 diff --git a/src/azure-cli/requirements.py3.windows.txt b/src/azure-cli/requirements.py3.windows.txt index 6d56cb9a772..f392b1a86fe 100644 --- a/src/azure-cli/requirements.py3.windows.txt +++ b/src/azure-cli/requirements.py3.windows.txt @@ -5,7 +5,7 @@ asn1crypto==0.24.0 azure-appconfiguration==1.1.1 azure-batch==14.0.0 azure-cli-core==2.50.0 -azure-cli-telemetry==1.0.8 +azure-cli-telemetry==1.1.0 azure-cli==2.50.0 azure-common==1.1.22 azure-core==1.26.0 From 174b50931a8e8ae1cb02ef8755cca77c7531f2da Mon Sep 17 00:00:00 2001 From: Yishi Wang Date: Fri, 14 Jul 2023 10:28:00 +0800 Subject: [PATCH 3/3] remove unused import --- .../azure/cli/telemetry/__init__.py | 2 -- .../components/records_collection.py | 1 - .../azure/cli/telemetry/util.py | 33 ------------------- 3 files changed, 36 deletions(-) diff --git a/src/azure-cli-telemetry/azure/cli/telemetry/__init__.py b/src/azure-cli-telemetry/azure/cli/telemetry/__init__.py index cb71183cbb3..271f3b826a1 100644 --- a/src/azure-cli-telemetry/azure/cli/telemetry/__init__.py +++ b/src/azure-cli-telemetry/azure/cli/telemetry/__init__.py @@ -47,7 +47,6 @@ def _start(config_dir): def save(config_dir, payload): - from azure.cli.telemetry.util import should_upload from azure.cli.telemetry.components.telemetry_client import CliTelemetryClient from azure.cli.telemetry.components.telemetry_logging import get_logger @@ -82,7 +81,6 @@ def save(config_dir, payload): def main(): - from azure.cli.telemetry.util import should_upload from azure.cli.telemetry.components.telemetry_note import TelemetryNote from azure.cli.telemetry.components.records_collection import RecordsCollection from azure.cli.telemetry.components.telemetry_client import CliTelemetryClient diff --git a/src/azure-cli-telemetry/azure/cli/telemetry/components/records_collection.py b/src/azure-cli-telemetry/azure/cli/telemetry/components/records_collection.py index 8f04a668c76..bcf4fd10add 100644 --- a/src/azure-cli-telemetry/azure/cli/telemetry/components/records_collection.py +++ b/src/azure-cli-telemetry/azure/cli/telemetry/components/records_collection.py @@ -8,7 +8,6 @@ import shutil import stat import tempfile -from knack.config import CLIConfig class RecordsCollection: diff --git a/src/azure-cli-telemetry/azure/cli/telemetry/util.py b/src/azure-cli-telemetry/azure/cli/telemetry/util.py index 1224287ceae..5786fb0f3a7 100644 --- a/src/azure-cli-telemetry/azure/cli/telemetry/util.py +++ b/src/azure-cli-telemetry/azure/cli/telemetry/util.py @@ -4,41 +4,8 @@ # -------------------------------------------------------------------------------------------- import os -import stat import logging import logging.handlers -from datetime import datetime - -from azure.cli.telemetry.const import TELEMETRY_NOTE_NAME, MANDATORY_WAIT_PERIOD - - -def should_upload(config_dir): - """Returns True if it is the right moment to add telemetry. - Before the client request a telemetry add process, it can invoke this method to test if it is the right moment. - The conditions are: - 1. The telemetry.txt file doesn't exist; OR - 2. The telemetry.txt file is a regular file AND there have been enough time passed since last add. - """ - logger = logging.getLogger('telemetry.check') - - telemetry_note_path = os.path.join(config_dir, TELEMETRY_NOTE_NAME) - if not os.path.exists(telemetry_note_path): - logger.info('Positive: The %s does not exist.', telemetry_note_path) - return True - - file_stat = os.stat(telemetry_note_path) - if not stat.S_ISREG(file_stat.st_mode): - logger.warning('Negative: The %s is not a regular file.', telemetry_note_path) - return False - - modify_time = datetime.fromtimestamp(file_stat.st_mtime) - if datetime.now() - modify_time < MANDATORY_WAIT_PERIOD: - logger.warning('Negative: The %s was modified at %s, which in less than %f s', - telemetry_note_path, modify_time, MANDATORY_WAIT_PERIOD.total_seconds()) - return False - - logger.info('Returns Positive.') - return True def save_payload(config_dir, payload):