sync: Add support to dump a JSON event log of all sync events.
Change-Id: Id4852968ac1b2bf0093007cf2e5ca951ddab8b3b
diff --git a/subcmds/sync.py b/subcmds/sync.py
index 82056f3..ef02327 100644
--- a/subcmds/sync.py
+++ b/subcmds/sync.py
@@ -64,6 +64,7 @@
except ImportError:
multiprocessing = None
+import event_log
from git_command import GIT, git_require
from git_config import GetUrlCookieFile
from git_refs import R_HEADS, HEAD
@@ -304,9 +305,10 @@
# - We always set err_event in the case of an exception.
# - We always make sure we call sem.release().
# - We always make sure we unlock the lock if we locked it.
+ start = time.time()
+ success = False
try:
try:
- start = time.time()
success = project.Sync_NetworkHalf(
quiet=opt.quiet,
current_branch_only=opt.current_branch_only,
@@ -345,6 +347,9 @@
finally:
if did_lock:
lock.release()
+ finish = time.time()
+ self.event_log.AddSync(project, event_log.TASK_SYNC_NETWORK,
+ start, finish, success)
return success
@@ -720,16 +725,24 @@
_PostRepoUpgrade(self.manifest, quiet=opt.quiet)
if not opt.local_only:
- mp.Sync_NetworkHalf(quiet=opt.quiet,
- current_branch_only=opt.current_branch_only,
- no_tags=opt.no_tags,
- optimized_fetch=opt.optimized_fetch,
- submodules=self.manifest.HasSubmodules)
+ start = time.time()
+ success = mp.Sync_NetworkHalf(quiet=opt.quiet,
+ current_branch_only=opt.current_branch_only,
+ no_tags=opt.no_tags,
+ optimized_fetch=opt.optimized_fetch,
+ submodules=self.manifest.HasSubmodules)
+ finish = time.time()
+ self.event_log.AddSync(mp, event_log.TASK_SYNC_NETWORK,
+ start, finish, success)
if mp.HasChanges:
syncbuf = SyncBuffer(mp.config)
+ start = time.time()
mp.Sync_LocalHalf(syncbuf, submodules=self.manifest.HasSubmodules)
- if not syncbuf.Finish():
+ clean = syncbuf.Finish()
+ self.event_log.AddSync(mp, event_log.TASK_SYNC_LOCAL,
+ start, time.time(), clean)
+ if not clean:
sys.exit(1)
self._ReloadManifest(manifest_name)
if opt.jobs is None:
@@ -823,7 +836,10 @@
for project in all_projects:
pm.update()
if project.worktree:
+ start = time.time()
project.Sync_LocalHalf(syncbuf, force_sync=opt.force_sync)
+ self.event_log.AddSync(project, event_log.TASK_SYNC_LOCAL,
+ start, time.time(), syncbuf.Recently())
pm.end()
print(file=sys.stderr)
if not syncbuf.Finish():
@@ -907,6 +923,7 @@
return False
return True
+
class _FetchTimes(object):
_ALPHA = 0.5