Mercurial > hg
annotate hgdemandimport/tracing.py @ 43062:28002d25eb54
contrib: black manages whitespace after Python keywords now
Differential Revision: https://phab.mercurial-scm.org/D6978
author | Augie Fackler <augie@google.com> |
---|---|
date | Sat, 05 Oct 2019 10:48:10 -0400 |
parents | 978c9a0c5974 |
children | 2372284d9457 |
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 from __future__ import absolute_import |
284440041141
tracing: new module to make tracing events in hg easier
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
9 |
284440041141
tracing: new module to make tracing events in hg easier
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
10 import contextlib |
284440041141
tracing: new module to make tracing events in hg easier
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
11 import os |
284440041141
tracing: new module to make tracing events in hg easier
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
12 |
284440041141
tracing: new module to make tracing events in hg easier
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
13 _pipe = None |
284440041141
tracing: new module to make tracing events in hg easier
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
14 _checked = False |
42709
978c9a0c5974
demandimport: explicitly declare `_session` at the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42477
diff
changeset
|
15 _session = 'none' |
39254
284440041141
tracing: new module to make tracing events in hg easier
Augie Fackler <augie@google.com>
parents:
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 |
d0b8a3cfd732
tracing: extract tracing-active logic to separate function
Augie Fackler <augie@google.com>
parents:
39397
diff
changeset
|
29 @contextlib.contextmanager |
d0b8a3cfd732
tracing: extract tracing-active logic to separate function
Augie Fackler <augie@google.com>
parents:
39397
diff
changeset
|
30 def log(whencefmt, *whenceargs): |
d0b8a3cfd732
tracing: extract tracing-active logic to separate function
Augie Fackler <augie@google.com>
parents:
39397
diff
changeset
|
31 if not _isactive(): |
d0b8a3cfd732
tracing: extract tracing-active logic to separate function
Augie Fackler <augie@google.com>
parents:
39397
diff
changeset
|
32 yield |
d0b8a3cfd732
tracing: extract tracing-active logic to separate function
Augie Fackler <augie@google.com>
parents:
39397
diff
changeset
|
33 return |
39254
284440041141
tracing: new module to make tracing events in hg easier
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
34 whence = whencefmt % whenceargs |
284440041141
tracing: new module to make tracing events in hg easier
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
35 try: |
39397
452790284a15
tracing: ignore any IOErrors when writing to pipe
Augie Fackler <augie@google.com>
parents:
39254
diff
changeset
|
36 # 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
|
37 # 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
|
38 # 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
|
39 # problems too. |
452790284a15
tracing: ignore any IOErrors when writing to pipe
Augie Fackler <augie@google.com>
parents:
39254
diff
changeset
|
40 try: |
452790284a15
tracing: ignore any IOErrors when writing to pipe
Augie Fackler <augie@google.com>
parents:
39254
diff
changeset
|
41 _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
|
42 except IOError: |
452790284a15
tracing: ignore any IOErrors when writing to pipe
Augie Fackler <augie@google.com>
parents:
39254
diff
changeset
|
43 pass |
39254
284440041141
tracing: new module to make tracing events in hg easier
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
44 yield |
284440041141
tracing: new module to make tracing events in hg easier
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
45 finally: |
39397
452790284a15
tracing: ignore any IOErrors when writing to pipe
Augie Fackler <augie@google.com>
parents:
39254
diff
changeset
|
46 try: |
452790284a15
tracing: ignore any IOErrors when writing to pipe
Augie Fackler <augie@google.com>
parents:
39254
diff
changeset
|
47 _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
|
48 except IOError: |
452790284a15
tracing: ignore any IOErrors when writing to pipe
Augie Fackler <augie@google.com>
parents:
39254
diff
changeset
|
49 pass |
42477
e658ac39fe41
tracing: add support for emitting counters
Augie Fackler <augie@google.com>
parents:
42476
diff
changeset
|
50 |
e658ac39fe41
tracing: add support for emitting counters
Augie Fackler <augie@google.com>
parents:
42476
diff
changeset
|
51 def counter(label, amount, *labelargs): |
e658ac39fe41
tracing: add support for emitting counters
Augie Fackler <augie@google.com>
parents:
42476
diff
changeset
|
52 if not _isactive(): |
e658ac39fe41
tracing: add support for emitting counters
Augie Fackler <augie@google.com>
parents:
42476
diff
changeset
|
53 return |
e658ac39fe41
tracing: add support for emitting counters
Augie Fackler <augie@google.com>
parents:
42476
diff
changeset
|
54 l = label % labelargs |
e658ac39fe41
tracing: add support for emitting counters
Augie Fackler <augie@google.com>
parents:
42476
diff
changeset
|
55 # 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
|
56 try: |
e658ac39fe41
tracing: add support for emitting counters
Augie Fackler <augie@google.com>
parents:
42476
diff
changeset
|
57 _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
|
58 except IOError: |
e658ac39fe41
tracing: add support for emitting counters
Augie Fackler <augie@google.com>
parents:
42476
diff
changeset
|
59 pass |