From 6448a4f2af53c241594b5d12eb0d03b18f889eda Mon Sep 17 00:00:00 2001 From: Raman Tenneti Date: Mon, 13 Sep 2021 17:40:07 -0700 Subject: sync: Log repo sync state events as 'data' events. git_trace2_event_log.py: + Added LogDataConfigEvents method to log 'data' events. Sync's current_sync_state and previous_sync_state are logged as 'data' events in the current log. It logs are key/value in the |config| argument. Each key is prefixed with |prefix| argument. The following are sample events that are logged during repo sync. {"event":"data", "sid":"repo-20210914T181545Z-P000330c0/repo-20210914T181545Z-P000330c0", "thread":"MainThread", "time":"2021-09-14T18:16:19.935846Z", "key":"previous_sync_state/repo.syncstate.main.synctime", "value":"2021-09-14T17:27:11.573717Z"} {"event":"data", "sid":"repo-20210914T181545Z-P000330c0/repo-20210914T181545Z-P000330c0", "thread":"MainThread", "time":"2021-09-14T18:16:19.955546Z", "key":"current_sync_state/repo.syncstate.main.synctime", "value":"2021-09-14T18:16:19.935979Z"} tests/test_git_trace2_event_log.py: + Added unit tests sync.py: + Changed logging calls to LogDataConfigEvents. Tested: $ ./run_tests Tested it by running the following command multiple times. $ repo_dev sync -j 20 repo sync has finished successfully Verified config data is looged in trace2 event logs. Bug: [google internal] b/199758376 Change-Id: I75fd830e90c1811ec28510538c99a2632b104e85 Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/317823 Reviewed-by: Josh Steadmon Reviewed-by: Xin Li Tested-by: Raman Tenneti --- tests/test_git_trace2_event_log.py | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) (limited to 'tests/test_git_trace2_event_log.py') diff --git a/tests/test_git_trace2_event_log.py b/tests/test_git_trace2_event_log.py index bee5865b..a5a6cbba 100644 --- a/tests/test_git_trace2_event_log.py +++ b/tests/test_git_trace2_event_log.py @@ -234,6 +234,39 @@ class EventLogTestCase(unittest.TestCase): self.assertEqual(len(self._log_data), 1) self.verifyCommonKeys(self._log_data[0], expected_event_name='version') + def test_data_event_config(self): + """Test 'data' event data outputs all config keys. + + Expected event log: + + + + """ + config = { + 'git.foo': 'bar', + 'repo.partialclone': 'false', + 'repo.syncstate.superproject.hassuperprojecttag': 'true', + } + prefix_value = 'prefix' + self._event_log_module.LogDataConfigEvents(config, prefix_value) + + with tempfile.TemporaryDirectory(prefix='event_log_tests') as tempdir: + log_path = self._event_log_module.Write(path=tempdir) + self._log_data = self.readLog(log_path) + + self.assertEqual(len(self._log_data), 4) + data_events = self._log_data[1:] + self.verifyCommonKeys(self._log_data[0], expected_event_name='version') + + for event in data_events: + self.verifyCommonKeys(event, expected_event_name='data') + # Check for 'data' event specific fields. + self.assertIn('key', event) + self.assertIn('value', event) + key = event['key'].removeprefix(f'{prefix_value}/') + value = event['value'] + self.assertTrue(key in config and value == config[key]) + def test_error_event(self): """Test and validate 'error' event data is valid. -- cgit v1.2.3-54-g00ecf