annotate hgdemandimport/tracing.py @ 51711:832a1aeb576f

pytype: only try the hacky way of finding PYTHON if not provided This allows us to work in more environments, like when using pyenv. This syntax is compatible with all POSIX shells.
author Raphaël Gomès <rgomes@octobus.net>
date Tue, 23 Jul 2024 12:10:31 +0200
parents 6000f5b25c9b
children f4733654f144
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
39254
284440041141 tracing: new module to make tracing events in hg easier
Augie Fackler <augie@google.com>
parents:
diff changeset
1 # Support code for event tracing in Mercurial. Lives in demandimport
284440041141 tracing: new module to make tracing events in hg easier
Augie Fackler <augie@google.com>
parents:
diff changeset
2 # so it can also be used in demandimport.
284440041141 tracing: new module to make tracing events in hg easier
Augie Fackler <augie@google.com>
parents:
diff changeset
3 #
284440041141 tracing: new module to make tracing events in hg easier
Augie Fackler <augie@google.com>
parents:
diff changeset
4 # Copyright 2018 Google LLC.
284440041141 tracing: new module to make tracing events in hg easier
Augie Fackler <augie@google.com>
parents:
diff changeset
5 #
284440041141 tracing: new module to make tracing events in hg easier
Augie Fackler <augie@google.com>
parents:
diff changeset
6 # This software may be used and distributed according to the terms of the
284440041141 tracing: new module to make tracing events in hg easier
Augie Fackler <augie@google.com>
parents:
diff changeset
7 # GNU General Public License version 2 or any later version.
284440041141 tracing: new module to make tracing events in hg easier
Augie Fackler <augie@google.com>
parents:
diff changeset
8
284440041141 tracing: new module to make tracing events in hg easier
Augie Fackler <augie@google.com>
parents:
diff changeset
9 import contextlib
284440041141 tracing: new module to make tracing events in hg easier
Augie Fackler <augie@google.com>
parents:
diff changeset
10 import os
284440041141 tracing: new module to make tracing events in hg easier
Augie Fackler <augie@google.com>
parents:
diff changeset
11
284440041141 tracing: new module to make tracing events in hg easier
Augie Fackler <augie@google.com>
parents:
diff changeset
12 _pipe = None
284440041141 tracing: new module to make tracing events in hg easier
Augie Fackler <augie@google.com>
parents:
diff changeset
13 _checked = False
42709
978c9a0c5974 demandimport: explicitly declare `_session` at the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42477
diff changeset
14 _session = 'none'
39254
284440041141 tracing: new module to make tracing events in hg easier
Augie Fackler <augie@google.com>
parents:
diff changeset
15
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42709
diff changeset
16
42476
d0b8a3cfd732 tracing: extract tracing-active logic to separate function
Augie Fackler <augie@google.com>
parents: 39397
diff changeset
17 def _isactive():
39254
284440041141 tracing: new module to make tracing events in hg easier
Augie Fackler <augie@google.com>
parents:
diff changeset
18 global _pipe, _session, _checked
284440041141 tracing: new module to make tracing events in hg easier
Augie Fackler <augie@google.com>
parents:
diff changeset
19 if _pipe is None:
284440041141 tracing: new module to make tracing events in hg easier
Augie Fackler <augie@google.com>
parents:
diff changeset
20 if _checked:
42476
d0b8a3cfd732 tracing: extract tracing-active logic to separate function
Augie Fackler <augie@google.com>
parents: 39397
diff changeset
21 return False
39254
284440041141 tracing: new module to make tracing events in hg easier
Augie Fackler <augie@google.com>
parents:
diff changeset
22 _checked = True
284440041141 tracing: new module to make tracing events in hg easier
Augie Fackler <augie@google.com>
parents:
diff changeset
23 if 'HGCATAPULTSERVERPIPE' not in os.environ:
42476
d0b8a3cfd732 tracing: extract tracing-active logic to separate function
Augie Fackler <augie@google.com>
parents: 39397
diff changeset
24 return False
39254
284440041141 tracing: new module to make tracing events in hg easier
Augie Fackler <augie@google.com>
parents:
diff changeset
25 _pipe = open(os.environ['HGCATAPULTSERVERPIPE'], 'w', 1)
284440041141 tracing: new module to make tracing events in hg easier
Augie Fackler <augie@google.com>
parents:
diff changeset
26 _session = os.environ.get('HGCATAPULTSESSION', 'none')
42476
d0b8a3cfd732 tracing: extract tracing-active logic to separate function
Augie Fackler <augie@google.com>
parents: 39397
diff changeset
27 return True
d0b8a3cfd732 tracing: extract tracing-active logic to separate function
Augie Fackler <augie@google.com>
parents: 39397
diff changeset
28
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42709
diff changeset
29
42476
d0b8a3cfd732 tracing: extract tracing-active logic to separate function
Augie Fackler <augie@google.com>
parents: 39397
diff changeset
30 @contextlib.contextmanager
d0b8a3cfd732 tracing: extract tracing-active logic to separate function
Augie Fackler <augie@google.com>
parents: 39397
diff changeset
31 def log(whencefmt, *whenceargs):
d0b8a3cfd732 tracing: extract tracing-active logic to separate function
Augie Fackler <augie@google.com>
parents: 39397
diff changeset
32 if not _isactive():
d0b8a3cfd732 tracing: extract tracing-active logic to separate function
Augie Fackler <augie@google.com>
parents: 39397
diff changeset
33 yield
d0b8a3cfd732 tracing: extract tracing-active logic to separate function
Augie Fackler <augie@google.com>
parents: 39397
diff changeset
34 return
39254
284440041141 tracing: new module to make tracing events in hg easier
Augie Fackler <augie@google.com>
parents:
diff changeset
35 whence = whencefmt % whenceargs
284440041141 tracing: new module to make tracing events in hg easier
Augie Fackler <augie@google.com>
parents:
diff changeset
36 try:
39397
452790284a15 tracing: ignore any IOErrors when writing to pipe
Augie Fackler <augie@google.com>
parents: 39254
diff changeset
37 # Both writes to the pipe are wrapped in try/except to ignore
452790284a15 tracing: ignore any IOErrors when writing to pipe
Augie Fackler <augie@google.com>
parents: 39254
diff changeset
38 # errors, as we can see mysterious errors in here if the pager
452790284a15 tracing: ignore any IOErrors when writing to pipe
Augie Fackler <augie@google.com>
parents: 39254
diff changeset
39 # is active. Presumably other conditions could trigger
452790284a15 tracing: ignore any IOErrors when writing to pipe
Augie Fackler <augie@google.com>
parents: 39254
diff changeset
40 # problems too.
452790284a15 tracing: ignore any IOErrors when writing to pipe
Augie Fackler <augie@google.com>
parents: 39254
diff changeset
41 try:
452790284a15 tracing: ignore any IOErrors when writing to pipe
Augie Fackler <augie@google.com>
parents: 39254
diff changeset
42 _pipe.write('START %s %s\n' % (_session, whence))
452790284a15 tracing: ignore any IOErrors when writing to pipe
Augie Fackler <augie@google.com>
parents: 39254
diff changeset
43 except IOError:
452790284a15 tracing: ignore any IOErrors when writing to pipe
Augie Fackler <augie@google.com>
parents: 39254
diff changeset
44 pass
39254
284440041141 tracing: new module to make tracing events in hg easier
Augie Fackler <augie@google.com>
parents:
diff changeset
45 yield
284440041141 tracing: new module to make tracing events in hg easier
Augie Fackler <augie@google.com>
parents:
diff changeset
46 finally:
39397
452790284a15 tracing: ignore any IOErrors when writing to pipe
Augie Fackler <augie@google.com>
parents: 39254
diff changeset
47 try:
452790284a15 tracing: ignore any IOErrors when writing to pipe
Augie Fackler <augie@google.com>
parents: 39254
diff changeset
48 _pipe.write('END %s %s\n' % (_session, whence))
452790284a15 tracing: ignore any IOErrors when writing to pipe
Augie Fackler <augie@google.com>
parents: 39254
diff changeset
49 except IOError:
452790284a15 tracing: ignore any IOErrors when writing to pipe
Augie Fackler <augie@google.com>
parents: 39254
diff changeset
50 pass
42477
e658ac39fe41 tracing: add support for emitting counters
Augie Fackler <augie@google.com>
parents: 42476
diff changeset
51
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42709
diff changeset
52
42477
e658ac39fe41 tracing: add support for emitting counters
Augie Fackler <augie@google.com>
parents: 42476
diff changeset
53 def counter(label, amount, *labelargs):
e658ac39fe41 tracing: add support for emitting counters
Augie Fackler <augie@google.com>
parents: 42476
diff changeset
54 if not _isactive():
e658ac39fe41 tracing: add support for emitting counters
Augie Fackler <augie@google.com>
parents: 42476
diff changeset
55 return
e658ac39fe41 tracing: add support for emitting counters
Augie Fackler <augie@google.com>
parents: 42476
diff changeset
56 l = label % labelargs
e658ac39fe41 tracing: add support for emitting counters
Augie Fackler <augie@google.com>
parents: 42476
diff changeset
57 # See above in log() for why this is in a try/except.
e658ac39fe41 tracing: add support for emitting counters
Augie Fackler <augie@google.com>
parents: 42476
diff changeset
58 try:
e658ac39fe41 tracing: add support for emitting counters
Augie Fackler <augie@google.com>
parents: 42476
diff changeset
59 _pipe.write('COUNTER %s %d %s\n' % (_session, amount, l))
e658ac39fe41 tracing: add support for emitting counters
Augie Fackler <augie@google.com>
parents: 42476
diff changeset
60 except IOError:
e658ac39fe41 tracing: add support for emitting counters
Augie Fackler <augie@google.com>
parents: 42476
diff changeset
61 pass