コード例 #1
0
    def test_create_telemetry_note_file_from_scratch(self):
        with TelemetryNote(self.workDir) as note:
            self.assert_modify_time(note.path, datetime.timedelta(seconds=1))
            self.assertTrue(os.path.exists(note.path))
            self.assertEqual(datetime.datetime.min, note.get_last_sent())

            with self.assertRaises(portalocker.AlreadyLocked):
                with TelemetryNote(self.workDir):
                    self.assertFalse(True)

            self.set_modify_time(note.path)

            note.touch()
            self.assert_modify_time(note.path, datetime.timedelta(seconds=1))

            note.update_telemetry_note(self.SAMPLE_TIME_1)

            # newly create file is not readable
            self.assertEqual(datetime.datetime.min, note.get_last_sent())

        with TelemetryNote(self.workDir) as note:
            self.assertEqual(self.SAMPLE_TIME_1, note.get_last_sent())

            with self.assertRaises(portalocker.AlreadyLocked):
                with TelemetryNote(self.workDir):
                    self.assertFalse(True)
コード例 #2
0
    def test_open_telemetry_note_file(self):
        with open(TelemetryNote.get_file_path(self.workDir), mode='w') as fq:
            fq.write(self.SAMPLE_TIME_1.strftime('%Y-%m-%dT%H:%M:%S'))

        with TelemetryNote(self.workDir) as note:
            self.assertEqual(self.SAMPLE_TIME_1, note.get_last_sent())

            with self.assertRaises(portalocker.AlreadyLocked):
                with TelemetryNote(self.workDir):
                    self.assertFalse(True)

            note.update_telemetry_note(self.SAMPLE_TIME_2)

        with TelemetryNote(self.workDir) as note:
            self.assertEqual(self.SAMPLE_TIME_2, note.get_last_sent())
コード例 #3
0
ファイル: __init__.py プロジェクト: zzn2/azure-cli
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
    from azure.cli.telemetry.components.telemetry_logging import config_logging_for_upload, get_logger

    try:
        config_dir = sys.argv[1]
        config_logging_for_upload(config_dir)

        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()

                collection = RecordsCollection(telemetry_note.get_last_sent(),
                                               config_dir)
                collection.snapshot_and_read()

                client = CliTelemetryClient()
                for each in collection:
                    client.add(each, flush=True)
                client.flush(force=True)

                telemetry_note.update_telemetry_note(collection.next_send)
        except portalocker.AlreadyLocked:
            # another upload process is running.
            logger.info(
                'Lock out from note file under %s which means another process is running. Exit 0.',
                config_dir)
            sys.exit(0)
        except IOError as err:
            logger.warning('Unexpected IO Error %s. Exit 1.', err)
            sys.exit(1)
        except Exception as err:  # pylint: disable=broad-except
            logger.error('Unexpected Error %s. Exit 2.', err)
            logger.exception(err)
            sys.exit(2)
    except IndexError:
        sys.exit(1)
コード例 #4
0
    def test_open_telemetry_note_file(self):
        with open(TelemetryNote.get_file_path(self.workDir), mode='w') as fq:
            fq.write(self.SAMPLE_TIME_1.strftime('%Y-%m-%dT%H:%M:%S'))

        with TelemetryNote(self.workDir) as note:
            self.assertEqual(self.SAMPLE_TIME_1, note.get_last_sent())

            with self.assertRaises(portalocker.AlreadyLocked):
                with TelemetryNote(self.workDir):
                    self.assertFalse(True)

            note.update_telemetry_note(self.SAMPLE_TIME_2)

        with TelemetryNote(self.workDir) as note:
            self.assertEqual(self.SAMPLE_TIME_2, note.get_last_sent())