Mercurial > public > mercurial-scm > hg-stable
annotate hgdemandimport/tracing.py @ 43013:198b51d453fe
automation: use LSB_RELEASE instead of DEBIAN_VERSION
This should be more robust since I believe the minor version can
change mid release.
Differential Revision: https://phab.mercurial-scm.org/D6910
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Sun, 29 Sep 2019 10:17:20 -0700 |
parents | 978c9a0c5974 |
children | 2372284d9457 |
rev | line source |
---|---|
39282
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 |
42661
978c9a0c5974
demandimport: explicitly declare `_session` at the module level
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42493
diff
changeset
|
15 _session = 'none' |
39282
284440041141
tracing: new module to make tracing events in hg easier
Augie Fackler <augie@google.com>
parents:
diff
changeset
|
16 |
42492
d0b8a3cfd732
tracing: extract tracing-active logic to separate function
Augie Fackler <augie@google.com>
parents:
39424
diff
changeset
|
17 def _isactive(): |
39282
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: |
42492
d0b8a3cfd732
tracing: extract tracing-active logic to separate function
Augie Fackler <augie@google.com>
parents:
39424
diff
changeset
|
21 return False |
39282
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: |
42492
d0b8a3cfd732
tracing: extract tracing-active logic to separate function
Augie Fackler <augie@google.com>
parents:
39424
diff
changeset
|
24 return False |
39282
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') |
42492
d0b8a3cfd732
tracing: extract tracing-active logic to separate function
Augie Fackler <augie@google.com>
parents:
39424
diff
changeset
|
27 return True |
d0b8a3cfd732
tracing: extract tracing-active logic to separate function
Augie Fackler <augie@google.com>
parents:
39424
diff
changeset
|
28 |
d0b8a3cfd732
tracing: extract tracing-active logic to separate function
Augie Fackler <augie@google.com>
parents:
39424
diff
changeset
|
29 @contextlib.contextmanager |
d0b8a3cfd732
tracing: extract tracing-active logic to separate function
Augie Fackler <augie@google.com>
parents:
39424
diff
changeset
|
30 def log(whencefmt, *whenceargs): |
d0b8a3cfd732
tracing: extract tracing-active logic to separate function
Augie Fackler <augie@google.com>
parents:
39424
diff
changeset
|
31 if not _isactive(): |
d0b8a3cfd732
tracing: extract tracing-active logic to separate function
Augie Fackler <augie@google.com>
parents:
39424
diff
changeset
|
32 yield |
d0b8a3cfd732
tracing: extract tracing-active logic to separate function
Augie Fackler <augie@google.com>
parents:
39424
diff
changeset
|
33 return |
39282
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: |
39424
452790284a15
tracing: ignore any IOErrors when writing to pipe
Augie Fackler <augie@google.com>
parents:
39282
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:
39282
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:
39282
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:
39282
diff
changeset
|
39 # problems too. |
452790284a15
tracing: ignore any IOErrors when writing to pipe
Augie Fackler <augie@google.com>
parents:
39282
diff
changeset
|
40 try: |
452790284a15
tracing: ignore any IOErrors when writing to pipe
Augie Fackler <augie@google.com>
parents:
39282
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:
39282
diff
changeset
|
42 except IOError: |
452790284a15
tracing: ignore any IOErrors when writing to pipe
Augie Fackler <augie@google.com>
parents:
39282
diff
changeset
|
43 pass |
39282
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: |
39424
452790284a15
tracing: ignore any IOErrors when writing to pipe
Augie Fackler <augie@google.com>
parents:
39282
diff
changeset
|
46 try: |
452790284a15
tracing: ignore any IOErrors when writing to pipe
Augie Fackler <augie@google.com>
parents:
39282
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:
39282
diff
changeset
|
48 except IOError: |
452790284a15
tracing: ignore any IOErrors when writing to pipe
Augie Fackler <augie@google.com>
parents:
39282
diff
changeset
|
49 pass |
42493
e658ac39fe41
tracing: add support for emitting counters
Augie Fackler <augie@google.com>
parents:
42492
diff
changeset
|
50 |
e658ac39fe41
tracing: add support for emitting counters
Augie Fackler <augie@google.com>
parents:
42492
diff
changeset
|
51 def counter(label, amount, *labelargs): |
e658ac39fe41
tracing: add support for emitting counters
Augie Fackler <augie@google.com>
parents:
42492
diff
changeset
|
52 if not _isactive(): |
e658ac39fe41
tracing: add support for emitting counters
Augie Fackler <augie@google.com>
parents:
42492
diff
changeset
|
53 return |
e658ac39fe41
tracing: add support for emitting counters
Augie Fackler <augie@google.com>
parents:
42492
diff
changeset
|
54 l = label % labelargs |
e658ac39fe41
tracing: add support for emitting counters
Augie Fackler <augie@google.com>
parents:
42492
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:
42492
diff
changeset
|
56 try: |
e658ac39fe41
tracing: add support for emitting counters
Augie Fackler <augie@google.com>
parents:
42492
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:
42492
diff
changeset
|
58 except IOError: |
e658ac39fe41
tracing: add support for emitting counters
Augie Fackler <augie@google.com>
parents:
42492
diff
changeset
|
59 pass |