From e0b80e8964fa5103ead454f1f45497591f8b2bbf Mon Sep 17 00:00:00 2001 From: Monty Taylor Date: Sat, 17 Oct 2015 16:05:02 -0400 Subject: [PATCH] Retire stackforge/tomograph --- .gitreview | 4 - LICENSE.txt | 209 ------ README.md | 123 ---- README.rst | 7 + doc/openstack-patches/README.md | 74 --- .../glance-client-stable-folsom.patch | 30 - .../glance-stable-folsom.patch | 135 ---- .../keystone-stable-folsom.patch | 77 --- .../nova-stable-folsom.patch | 600 ------------------ doc/screenshots/client-server-graphite.png | Bin 115116 -> 0 bytes doc/screenshots/client-server-zipkin.png | Bin 72812 -> 0 bytes doc/screenshots/zipkin-glance-image-list.png | Bin 170009 -> 0 bytes doc/source/conf.py | 75 --- doc/source/index.rst | 11 - py33-requirements.txt | 3 - py33-test-requirements.txt | 9 - requirements.txt | 5 - setup.cfg | 39 -- setup.py | 23 - test-requirements.txt | 11 - tests/basic.py | 38 -- tests/bench.py | 40 -- tomograph/__init__.py | 43 -- tomograph/backends/__init__.py | 10 - tomograph/backends/log/__init__.py | 19 - tomograph/backends/statsd/__init__.py | 13 - tomograph/backends/statsd/statsd.py | 57 -- tomograph/backends/zipkin/__init__.py | 12 - .../backends/zipkin/generated/__init__.py | 0 .../zipkin/generated/scribe/__init__.py | 1 - .../zipkin/generated/scribe/constants.py | 11 - .../zipkin/generated/scribe/scribe-remote | 88 --- .../zipkin/generated/scribe/scribe.py | 228 ------- .../zipkin/generated/scribe/ttypes.py | 104 --- .../zipkin/generated/zipkinCore/__init__.py | 1 - .../zipkin/generated/zipkinCore/constants.py | 15 - .../zipkin/generated/zipkinCore/ttypes.py | 477 -------------- tomograph/backends/zipkin/sender.py | 118 ---- tomograph/backends/zipkin/zipkin.py | 114 ---- tomograph/backends/zipkin/zipkin_thrift.py | 12 - tomograph/cache.py | 31 - tomograph/config.py | 62 -- tomograph/tomograph.py | 232 ------- tomograph/types.py | 18 - tomograph/version.py | 25 - tox.ini | 50 -- 46 files changed, 7 insertions(+), 3247 deletions(-) delete mode 100644 .gitreview delete mode 100644 LICENSE.txt delete mode 100644 README.md create mode 100644 README.rst delete mode 100644 doc/openstack-patches/README.md delete mode 100644 doc/openstack-patches/glance-client-stable-folsom.patch delete mode 100644 doc/openstack-patches/glance-stable-folsom.patch delete mode 100644 doc/openstack-patches/keystone-stable-folsom.patch delete mode 100644 doc/openstack-patches/nova-stable-folsom.patch delete mode 100644 doc/screenshots/client-server-graphite.png delete mode 100644 doc/screenshots/client-server-zipkin.png delete mode 100644 doc/screenshots/zipkin-glance-image-list.png delete mode 100644 doc/source/conf.py delete mode 100644 doc/source/index.rst delete mode 100644 py33-requirements.txt delete mode 100644 py33-test-requirements.txt delete mode 100644 requirements.txt delete mode 100644 setup.cfg delete mode 100755 setup.py delete mode 100644 test-requirements.txt delete mode 100755 tests/basic.py delete mode 100644 tests/bench.py delete mode 100644 tomograph/__init__.py delete mode 100644 tomograph/backends/__init__.py delete mode 100644 tomograph/backends/log/__init__.py delete mode 100644 tomograph/backends/statsd/__init__.py delete mode 100644 tomograph/backends/statsd/statsd.py delete mode 100644 tomograph/backends/zipkin/__init__.py delete mode 100644 tomograph/backends/zipkin/generated/__init__.py delete mode 100644 tomograph/backends/zipkin/generated/scribe/__init__.py delete mode 100644 tomograph/backends/zipkin/generated/scribe/constants.py delete mode 100755 tomograph/backends/zipkin/generated/scribe/scribe-remote delete mode 100644 tomograph/backends/zipkin/generated/scribe/scribe.py delete mode 100644 tomograph/backends/zipkin/generated/scribe/ttypes.py delete mode 100644 tomograph/backends/zipkin/generated/zipkinCore/__init__.py delete mode 100644 tomograph/backends/zipkin/generated/zipkinCore/constants.py delete mode 100644 tomograph/backends/zipkin/generated/zipkinCore/ttypes.py delete mode 100644 tomograph/backends/zipkin/sender.py delete mode 100644 tomograph/backends/zipkin/zipkin.py delete mode 100644 tomograph/backends/zipkin/zipkin_thrift.py delete mode 100644 tomograph/cache.py delete mode 100644 tomograph/config.py delete mode 100644 tomograph/tomograph.py delete mode 100644 tomograph/types.py delete mode 100644 tomograph/version.py delete mode 100644 tox.ini diff --git a/.gitreview b/.gitreview deleted file mode 100644 index add0bf0..0000000 --- a/.gitreview +++ /dev/null @@ -1,4 +0,0 @@ -[gerrit] -host=review.openstack.org -port=29418 -project=stackforge/tomograph.git diff --git a/LICENSE.txt b/LICENSE.txt deleted file mode 100644 index d5c4984..0000000 --- a/LICENSE.txt +++ /dev/null @@ -1,209 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - -THIRD-PARTY DEPENDENCIES -======================== -Convenience copies of some third-party dependencies are distributed with -Apache Cassandra as Java jar files in lib/. Licensing information for -these files can be found in the lib/licenses directory. diff --git a/README.md b/README.md deleted file mode 100644 index 0b4c588..0000000 --- a/README.md +++ /dev/null @@ -1,123 +0,0 @@ -tomograph -========= - -A library to help distributed applications send trace information to -metrics backends like [Zipkin][zipkin] and [Statsd][statsd]. - -Data Model ----------- - -A request to a distributed application is modeled as a trace. Each -trace consists of a set of spans, and a span is a set of notes. - -Each span's extent is defined by its first and last notes. Any number -of additional notes can be added in between -- for example in a -handler for ERROR-level logging. - -The tomograph data model is basically the Dapper/Zipkin data model. -For translation to statsd, we emit the length of the span as a timer -metric, and each note gets emitted individually as a counter metric. - -For example, here is a basic client/server interaction. It is one -trace, with two spans, each with two notes -- their beginning and end: - -![zipkin client server](https://raw.github.com/timjr/tomograph/master/doc/screenshots/client-server-zipkin.png) - -This is the same data as it would be viewed in using the statsd -backend with graphite: - -![graphite client server](https://raw.github.com/timjr/tomograph/master/doc/screenshots/client-server-graphite.png) - - -Tracing Your Application ------------------------- - -There are a few basic ways to add tracing to your application. The -lowest level one is to call start, stop, and annotate yourself: - - import tomograph - - tomograph.start('my service', 'a query', '127.0.0.1', 80) - (...) - tomograph.annotate('something happened') - tomograph.tag('key', 'value') - (...) - tomograph.stop('a query') - -Each start/stop pair defines a span. Spans can be arbitrarily nested -using this interface as long they stay on a single thread: tomograph -keeps the current span stack in thread local storage. - -When continuing a trace from one thread to another, you must grab the -trace token from tomograph and pass it: - - token = tomograph.get_trace_info() - (...) - tomograph.start('my service', 'a query', '127.0.0.1', 80, token) - (...) - -That will enable tomograph to connect all of the spans into one trace. - -Helpers -------- - -There are some slightly higher level interfaces to help you add -tracing. For HTTP, add_trace_info_header() will add an X-Trace-Info -header to a dict on the client side, and start_http() will consume -that header on the server side: - - def traced_http_client(url, body, headers): - tomograph.start('client', 'http request', socket.gethostname(), 0) - tomograph.add_trace_info_header(headers) - http_request(url, body, headers) - tomograph.stop('http request') - - - def traced_http_server(request): - tomograph.start_http('server', 'http response', request) - (...) - tomograph.stop('http response') - -There's no need to call start and stop yourself -- you can use the -@tomograph.traced decorator: - - @tomograph.traced('My Server', 'myfunc') - def myfunc(yadda): - dosomething() - -For WSGI pipelines, there's the class tomograph.Middleware that will -consume the X-Trace-Info header. It can be added to a paste pipeline -like so: - - [pipeline:foo] - pipeline = tomo foo bar baz... - - [filter:tomo] - paste.filter_factory = tomograph:Middleware.factory - service_name = glance-registry - -If you use [SQL Alchemy][sql alchemy] in your application, there are -some event listeners available that will trace SQL statement -execution: - - _ENGINE = sqlalchemy.create_engine(FLAGS.sql_connection, **engine_args) - - sqlalchemy.event.listen(_ENGINE, 'before_execute', tomograph.before_execute('my app')) - sqlalchemy.event.listen(_ENGINE, 'after_execute', tomograph.after_execute('my app')) - sqlalchemy.event.listen(_ENGINE, 'dbapi_error', tomograph.dbapi_error('my app')) - - -Screenshots ------------ - -Here is a slightly more involved example -- a glance image list -command in [Openstack][openstack]. It uses SQL statement tracing and -the tomograph middleware: - -![zipkin glance image list](https://raw.github.com/timjr/tomograph/master/doc/screenshots/zipkin-glance-image-list.png) - - -[openstack]: http://www.openstack.org/ -[statsd]: https://github.com/etsy/statsd -[zipkin]: http://twitter.github.com/zipkin/ -[sql alchemy]: http://www.sqlalchemy.org/ diff --git a/README.rst b/README.rst new file mode 100644 index 0000000..9006052 --- /dev/null +++ b/README.rst @@ -0,0 +1,7 @@ +This project is no longer maintained. + +The contents of this repository are still available in the Git source code +management system. To see the contents of this repository before it reached +its end of life, please check out the previous commit with +"git checkout HEAD^1". + diff --git a/doc/openstack-patches/README.md b/doc/openstack-patches/README.md deleted file mode 100644 index e8dfca1..0000000 --- a/doc/openstack-patches/README.md +++ /dev/null @@ -1,74 +0,0 @@ -Tracing Openstack with Tomograph -================================ - - -1. Install Openstack using your preferred method. - -2. Git clone tomograph - - git clone git@github.com:timjr/tomograph.git - cd tomograph - sudo python setup.py develop - -3. Apply tomograph patches to Openstack: - - cd nova; patch -p1 < tomograph/doc/openstack-patches/nova-stable-folsom.patch - cd keystone; patch -p1 < tomograph/doc/openstack-patches/keystone-stable-folsom.patch - cd glance; patch -p1 < tomograph/doc/openstack-patches/glance-stable-folsom.patch - cd glance-client; patch -p1 < tomograph/doc/openstack-patches/glance-client-stable-folsom.patch - -4. Modify the paste config for glance-registry to include the tomograph middleware: - - # in glance-registry-paste.ini: - [pipeline:glance-registry] - pipeline = tomo unauthenticated-context registryapp - - [pipeline:glance-registry-keystone] - pipeline = tomo authtoken context registryapp - - [filter:tomo] - paste.filter_factory = tomograph:Middleware.factory - service_name = glance-registry - -5. Restart Openstack and boot a VM. You should see log messages from the tomograph logging backend: - - 2013-04-18 02:02:08,797 INFO tomograph.backends.log Span(trace_id=5731049070570866, parent_id=None, ... - - -Viewing Traces in Zipkin -==================== - -1. Set up cassandra, (something like the following): - - wget http://mirror.metrocast.net/apache/cassandra/1.2.3/apache-cassandra-1.2.3-bin.tar.gz - tar xvzf apache-cassandra-1.2.3-bin.tar.gz - sudo mkdir /var/lib/cassandra - sudo chmod a+rw /var/lib/cassandra - sudo mkdir /var/log/cassandra - sudo chmod a+rw /var/log/cassandra - apache-cassandra-1.2.3/bin/cassandra &> cassandra-out - -2. Get zipkin and set up its schema: - - git clone git://github.com/twitter/zipkin.git - apache-cassandra-1.2.3/bin/cassandra-cli -host localhost -port 9160 -f zipkin/zipkin-cassandra/src/schema/cassandra-schema.txt - -3. Start the zipkin components. Note, you should wait until the build for each component is done before starting the next one, because sbt does not seem to handle multiple builds running in the same directory very well. We use setsid instead of nohup because sbt seems to try to frob the terminal so it gets a SIGTTOU and stops otherwise: - - cd zipkin - setsid bin/collector &> collector-out - setsid bin/query &> query-out - setsid bin/web &> web-out - -3. Restart Openstack - -4. Boot a VM - -5. View the trace: - - visit http://localhost:8080 - select rpcrun_instance from the service menu - make sure the time is set to now or later than now - "find traces" - click on the rpcrun_instance trace - diff --git a/doc/openstack-patches/glance-client-stable-folsom.patch b/doc/openstack-patches/glance-client-stable-folsom.patch deleted file mode 100644 index 6a8e3c3..0000000 --- a/doc/openstack-patches/glance-client-stable-folsom.patch +++ /dev/null @@ -1,30 +0,0 @@ -diff --git a/glanceclient/common/http.py b/glanceclient/common/http.py -index 7146ace..52cc409 100644 ---- a/glanceclient/common/http.py -+++ b/glanceclient/common/http.py -@@ -20,6 +20,7 @@ import posixpath - import socket - import StringIO - import struct -+import tomograph - import urlparse - - try: -@@ -154,6 +155,9 @@ class HTTPClient(object): - if self.auth_token: - kwargs['headers'].setdefault('X-Auth-Token', self.auth_token) - -+ tomograph.start('glanceclient', 'http', socket.gethostname(), 0) -+ tomograph.add_trace_info_header(kwargs['headers']) -+ - self.log_curl_request(method, url, kwargs) - conn = self.get_connection() - -@@ -201,6 +205,7 @@ class HTTPClient(object): - else: - self.log_http_response(resp) - -+ tomograph.stop('http') - if 400 <= resp.status < 600: - LOG.error("Request returned failure status.") - raise exc.from_response(resp, body_str) diff --git a/doc/openstack-patches/glance-stable-folsom.patch b/doc/openstack-patches/glance-stable-folsom.patch deleted file mode 100644 index d95640e..0000000 --- a/doc/openstack-patches/glance-stable-folsom.patch +++ /dev/null @@ -1,135 +0,0 @@ -diff --git a/glance/api/middleware/tomo.py b/glance/api/middleware/tomo.py -new file mode 100644 -index 0000000..c4814bf ---- /dev/null -+++ b/glance/api/middleware/tomo.py -@@ -0,0 +1,16 @@ -+from glance.common import wsgi -+ -+import tomograph -+ -+class Tomo(wsgi.Middleware): -+ -+ def __init__(self, app): -+ super(Tomo, self).__init__(app) -+ -+ def process_request(self, req): -+ """Try to find a version first in the accept header, then the URL""" -+ tomograph.start_http('glanceregistry', 'WSGI', req) -+ -+ def process_response(self, resp): -+ tomograph.stop('WSGI') -+ return resp -diff --git a/glance/api/middleware/version_negotiation.py b/glance/api/middleware/version_negotiation.py -index 74cc3bf..fa54253 100644 ---- a/glance/api/middleware/version_negotiation.py -+++ b/glance/api/middleware/version_negotiation.py -@@ -26,6 +26,8 @@ from glance.common import wsgi - import glance.openstack.common.log as logging - from glance.openstack.common import cfg - -+import tomograph -+ - CONF = cfg.CONF - - LOG = logging.getLogger(__name__) -@@ -39,6 +41,8 @@ class VersionNegotiationFilter(wsgi.Middleware): - - def process_request(self, req): - """Try to find a version first in the accept header, then the URL""" -+ tomograph.start_http('glanceapi', 'WSGI', req) -+ - msg = _("Determining version of request: %(method)s %(path)s" - " Accept: %(accept)s") - args = {'method': req.method, 'path': req.path, 'accept': req.accept} -@@ -71,6 +75,10 @@ class VersionNegotiationFilter(wsgi.Middleware): - LOG.debug('new uri %s' % req.path_info) - return None - -+ def process_response(self, resp): -+ tomograph.stop('WSGI') -+ return resp -+ - def _match_version_string(self, subject): - """ - Given a string, tries to match a major and/or -diff --git a/glance/common/client.py b/glance/common/client.py -index 88dbda7..5e03a15 100644 ---- a/glance/common/client.py -+++ b/glance/common/client.py -@@ -28,6 +28,8 @@ import re - import select - import urllib - import urlparse -+import socket -+import tomograph - - try: - from eventlet.green import socket, ssl -@@ -496,6 +498,9 @@ class BaseClient(object): - connection_type = self.get_connection_type() - headers = headers or {} - -+ tomograph.start('registryclient', 'http', socket.gethostname(), 0) -+ tomograph.add_trace_info_header(headers) -+ - if 'x-auth-token' not in headers and self.auth_tok: - headers['x-auth-token'] = self.auth_tok - -@@ -557,6 +562,7 @@ class BaseClient(object): - def _retry(res): - return res.getheader('Retry-After') - -+ tomograph.stop('http') - status_code = self.get_status_code(res) - if status_code in self.OK_RESPONSE_CODES: - return res -diff --git a/glance/common/wsgi.py b/glance/common/wsgi.py -index d324861..e8bd023 100644 ---- a/glance/common/wsgi.py -+++ b/glance/common/wsgi.py -@@ -29,6 +29,7 @@ import os - import signal - import sys - import time -+import tomograph - - import eventlet - from eventlet.green import socket, ssl -@@ -365,6 +366,14 @@ class Debug(Middleware): - print - - -+class Tomo(Middleware): -+ def process_request(self, req): -+ tomograph.start_http('glance', 'WSGI', req) -+ -+ def process_response(self, req): -+ tomograph.stop('WSGI') -+ -+ - class Router(object): - """ - WSGI middleware that maps incoming requests to WSGI apps. -diff --git a/glance/db/sqlalchemy/api.py b/glance/db/sqlalchemy/api.py -index 779a434..1e8b824 100644 ---- a/glance/db/sqlalchemy/api.py -+++ b/glance/db/sqlalchemy/api.py -@@ -36,6 +36,7 @@ from glance.openstack.common import cfg - import glance.openstack.common.log as os_logging - from glance.openstack.common import timeutils - -+import tomograph - - _ENGINE = None - _MAKER = None -@@ -100,6 +101,9 @@ def configure_db(): - try: - _ENGINE = sqlalchemy.create_engine(sql_connection, **engine_args) - -+ sqlalchemy.event.listen(_ENGINE, 'before_execute', tomograph.before_execute('glance')) -+ sqlalchemy.event.listen(_ENGINE, 'after_execute', tomograph.after_execute('glance')) -+ - if 'mysql' in connection_dict.drivername: - sqlalchemy.event.listen(_ENGINE, 'checkout', ping_listener) - diff --git a/doc/openstack-patches/keystone-stable-folsom.patch b/doc/openstack-patches/keystone-stable-folsom.patch deleted file mode 100644 index 661a63b..0000000 --- a/doc/openstack-patches/keystone-stable-folsom.patch +++ /dev/null @@ -1,77 +0,0 @@ -diff --git a/keystone/common/sql/core.py b/keystone/common/sql/core.py -index e9b780a..4dcf4dc 100644 ---- a/keystone/common/sql/core.py -+++ b/keystone/common/sql/core.py -@@ -28,6 +28,7 @@ from keystone.common import logging - from keystone import config - from keystone.openstack.common import jsonutils - -+import tomograph - - CONF = config.CONF - -@@ -137,6 +138,9 @@ class Base(object): - """Return a SQLAlchemy session.""" - if self._MAKER is None or self._ENGINE is None: - self._ENGINE = self.get_engine() -+ sqlalchemy.event.listen(self._ENGINE, 'before_execute', tomograph.before_execute('keystone')) -+ sqlalchemy.event.listen(self._ENGINE, 'after_execute', tomograph.after_execute('keystone')) -+ - self._MAKER = self.get_maker(self._ENGINE, - autocommit, - expire_on_commit) -diff --git a/keystone/contrib/stats/core.py b/keystone/contrib/stats/core.py -index a479ee3..efa9dc1 100644 ---- a/keystone/contrib/stats/core.py -+++ b/keystone/contrib/stats/core.py -@@ -23,6 +23,7 @@ from keystone.common import logging - from keystone.common import manager - from keystone.common import wsgi - -+import tomograph - - CONF = config.CONF - LOG = logging.getLogger(__name__) -@@ -141,9 +142,11 @@ class StatsMiddleware(wsgi.Middleware): - - def process_request(self, request): - """Monitor incoming request attributes.""" -+ tomograph.start_http('keystone', 'WSGI', request) - self.capture_stats(request.host, request, self.request_attributes) - - def process_response(self, request, response): - """Monitor outgoing response attributes.""" -+ tomograph.stop('WSGI') - self.capture_stats(request.host, response, self.response_attributes) - return response -diff --git a/keystone/middleware/auth_token.py b/keystone/middleware/auth_token.py -index ddadf9f..3ee86cd 100644 ---- a/keystone/middleware/auth_token.py -+++ b/keystone/middleware/auth_token.py -@@ -108,6 +108,8 @@ from keystone.common import cms - from keystone.common import utils - from keystone.openstack.common import timeutils - -+import tomograph -+ - CONF = None - try: - from openstack.common import cfg -@@ -398,6 +400,8 @@ class AuthProtocol(object): - - while True: - try: -+ headers = kwargs.setdefault('headers', {}) -+ tomograph.add_trace_info_header(headers) - conn.request(method, path, **kwargs) - response = conn.getresponse() - body = response.read() -@@ -437,6 +441,8 @@ class AuthProtocol(object): - if additional_headers: - kwargs['headers'].update(additional_headers) - -+ tomograph.add_trace_info_header(kwargs['headers']) -+ - if body: - kwargs['body'] = jsonutils.dumps(body) - diff --git a/doc/openstack-patches/nova-stable-folsom.patch b/doc/openstack-patches/nova-stable-folsom.patch deleted file mode 100644 index 21d6dd4..0000000 --- a/doc/openstack-patches/nova-stable-folsom.patch +++ /dev/null @@ -1,600 +0,0 @@ -diff --git a/nova/api/ec2/__init__.py b/nova/api/ec2/__init__.py -index 2ae685c..7863db2 100644 ---- a/nova/api/ec2/__init__.py -+++ b/nova/api/ec2/__init__.py -@@ -42,6 +42,7 @@ from nova.openstack.common import timeutils - from nova import utils - from nova import wsgi - -+import tomograph - - LOG = logging.getLogger(__name__) - -@@ -95,6 +96,7 @@ class FaultWrapper(wsgi.Middleware): - """Calls the middleware stack, captures any exceptions into faults.""" - - @webob.dec.wsgify(RequestClass=wsgi.Request) -+ @tomograph.traced('FaultWrapper', 'middleware') - def __call__(self, req): - try: - return req.get_response(self.application) -@@ -107,6 +109,7 @@ class RequestLogging(wsgi.Middleware): - """Access-Log akin logging for all EC2 API requests.""" - - @webob.dec.wsgify(RequestClass=wsgi.Request) -+ @tomograph.traced('RequestLogging', 'middleware') - def __call__(self, req): - start = timeutils.utcnow() - rv = req.get_response(self.application) -@@ -169,6 +172,7 @@ class Lockout(wsgi.Middleware): - super(Lockout, self).__init__(application) - - @webob.dec.wsgify(RequestClass=wsgi.Request) -+ @tomograph.traced('Lockout', 'middleware') - def __call__(self, req): - access_key = str(req.params['AWSAccessKeyId']) - failures_key = "authfailures-%s" % access_key -@@ -197,6 +201,7 @@ class EC2KeystoneAuth(wsgi.Middleware): - """Authenticate an EC2 request with keystone and convert to context.""" - - @webob.dec.wsgify(RequestClass=wsgi.Request) -+ @tomograph.traced('EC2KeystoneAuth', 'middleware') - def __call__(self, req): - request_id = context.generate_request_id() - signature = req.params.get('Signature') -@@ -225,8 +230,11 @@ class EC2KeystoneAuth(wsgi.Middleware): - creds = {'ec2Credentials': cred_dict} - else: - creds = {'auth': {'OS-KSEC2:ec2Credentials': cred_dict}} -+ - creds_json = jsonutils.dumps(creds) -+ - headers = {'Content-Type': 'application/json'} -+ tomograph.add_trace_info_header(headers) - - o = urlparse.urlparse(FLAGS.keystone_ec2_url) - if o.scheme == "http": -@@ -282,6 +290,7 @@ class NoAuth(wsgi.Middleware): - """Add user:project as 'nova.context' to WSGI environ.""" - - @webob.dec.wsgify(RequestClass=wsgi.Request) -+ @tomograph.traced('NoAuth', 'middleware') - def __call__(self, req): - if 'AWSAccessKeyId' not in req.params: - raise webob.exc.HTTPBadRequest() -@@ -306,6 +315,7 @@ class Requestify(wsgi.Middleware): - self.controller = importutils.import_object(controller) - - @webob.dec.wsgify(RequestClass=wsgi.Request) -+ @tomograph.traced('Requestify', 'middleware') - def __call__(self, req): - non_args = ['Action', 'Signature', 'AWSAccessKeyId', 'SignatureMethod', - 'SignatureVersion', 'Version', 'Timestamp'] -@@ -394,6 +404,7 @@ class Authorizer(wsgi.Middleware): - } - - @webob.dec.wsgify(RequestClass=wsgi.Request) -+ @tomograph.traced('Authorizer', 'middleware') - def __call__(self, req): - context = req.environ['nova.context'] - controller = req.environ['ec2.request'].controller.__class__.__name__ -@@ -448,6 +459,7 @@ class Validator(wsgi.Middleware): - super(Validator, self).__init__(application) - - @webob.dec.wsgify(RequestClass=wsgi.Request) -+ @tomograph.traced('Validator', 'middleware') - def __call__(self, req): - if validator.validate(req.environ['ec2.request'].args, - validator.DEFAULT_VALIDATOR): -@@ -466,6 +478,7 @@ class Executor(wsgi.Application): - """ - - @webob.dec.wsgify(RequestClass=wsgi.Request) -+ @tomograph.traced('Executor', 'application') - def __call__(self, req): - context = req.environ['nova.context'] - request_id = context.request_id -diff --git a/nova/api/ec2/cloud.py b/nova/api/ec2/cloud.py -index 6afb05a..e2fc7f8 100644 ---- a/nova/api/ec2/cloud.py -+++ b/nova/api/ec2/cloud.py -@@ -43,6 +43,7 @@ from nova import quota - from nova import utils - from nova import volume - -+import tomograph - - FLAGS = flags.FLAGS - -diff --git a/nova/api/openstack/__init__.py b/nova/api/openstack/__init__.py -index ac7021f..f391eb8 100644 ---- a/nova/api/openstack/__init__.py -+++ b/nova/api/openstack/__init__.py -@@ -23,6 +23,7 @@ WSGI middleware for OpenStack API controllers. - import routes - import webob.dec - import webob.exc -+import tomograph - - from nova.api.openstack import wsgi - from nova.openstack.common import log as logging -diff --git a/nova/api/openstack/wsgi.py b/nova/api/openstack/wsgi.py -index e440889..f4554fa 100644 ---- a/nova/api/openstack/wsgi.py -+++ b/nova/api/openstack/wsgi.py -@@ -30,6 +30,8 @@ from nova.openstack.common import log as logging - from nova import utils - from nova import wsgi - -+import tomograph -+ - - XMLNS_V10 = 'http://docs.rackspacecloud.com/servers/api/v1.0' - XMLNS_V11 = 'http://docs.openstack.org/compute/api/v1.1' -diff --git a/nova/compute/instance_types.py b/nova/compute/instance_types.py -index 6869672..e1052be 100644 ---- a/nova/compute/instance_types.py -+++ b/nova/compute/instance_types.py -@@ -102,7 +102,8 @@ def destroy(name): - LOG.exception(_('Instance type %s not found for deletion') % name) - raise exception.InstanceTypeNotFoundByName(instance_type_name=name) - -- -+import tomograph -+@tomograph.traced('get_all_types', 'foo') - def get_all_types(ctxt=None, inactive=False, filters=None): - """Get all non-deleted instance_types. - -diff --git a/nova/compute/manager.py b/nova/compute/manager.py -index bbb71dd..9c92cce 100644 ---- a/nova/compute/manager.py -+++ b/nova/compute/manager.py -@@ -2650,6 +2650,13 @@ class ComputeManager(manager.SchedulerDependentManager): - usage['bw_in'], usage['bw_out'], - last_refreshed=refreshed) - -+ @manager.periodic_task(fast_task=True) -+ def _driver_metrics(self, context): -+ capabilities = self.driver.get_host_stats(refresh=True) -+ capabilities['host_ip'] = FLAGS.my_ip -+ capabilities['num_instances'] = self.driver.get_num_instances() -+ LOG.audit("driver_metrics", extra=capabilities) -+ - @manager.periodic_task - def _report_driver_status(self, context): - curr_time = time.time() -diff --git a/nova/compute/rpcapi.py b/nova/compute/rpcapi.py -index afec290..744a9c1 100644 ---- a/nova/compute/rpcapi.py -+++ b/nova/compute/rpcapi.py -@@ -24,7 +24,7 @@ from nova.openstack.common import jsonutils - from nova.openstack.common import rpc - import nova.openstack.common.rpc.proxy - -- -+import tomograph - FLAGS = flags.FLAGS - - -@@ -501,8 +501,9 @@ class ComputeAPI(nova.openstack.common.rpc.proxy.RpcProxy): - - def terminate_instance(self, ctxt, instance): - instance_p = jsonutils.to_primitive(instance) -- self.cast(ctxt, self.make_msg('terminate_instance', -- instance=instance_p), -+ msg = self.make_msg('terminate_instance', instance=instance_p) -+ msg['trace_info'] = tomograph.get_trace_info() -+ self.cast(ctxt, msg, - topic=_compute_topic(self.topic, ctxt, None, instance)) - - def unpause_instance(self, ctxt, instance): -diff --git a/nova/db/sqlalchemy/session.py b/nova/db/sqlalchemy/session.py -index 6e754be..92ea58b 100644 ---- a/nova/db/sqlalchemy/session.py -+++ b/nova/db/sqlalchemy/session.py -@@ -25,6 +25,7 @@ from sqlalchemy.exc import DisconnectionError, OperationalError - import sqlalchemy.interfaces - import sqlalchemy.orm - from sqlalchemy.pool import NullPool, StaticPool -+import tomograph - - import nova.exception - import nova.flags as flags -@@ -122,6 +123,8 @@ def get_engine(): - - _ENGINE = sqlalchemy.create_engine(FLAGS.sql_connection, **engine_args) - -+ sqlalchemy.event.listen(_ENGINE, 'before_execute', tomograph.before_execute('nova')) -+ sqlalchemy.event.listen(_ENGINE, 'after_execute', tomograph.after_execute('nova')) - if 'mysql' in connection_dict.drivername: - sqlalchemy.event.listen(_ENGINE, 'checkout', ping_listener) - elif "sqlite" in connection_dict.drivername: -@@ -158,6 +161,7 @@ def get_engine(): - if (remaining != 'infinite' and remaining == 0) or \ - not is_db_connection_error(e.args[0]): - raise -+ - return _ENGINE - - -@@ -207,3 +211,5 @@ def debug_mysql_do_query(): - - # return the new _do_query method - return _do_query -+ -+ -diff --git a/nova/image/s3.py b/nova/image/s3.py -index 80f9448..1597864 100644 ---- a/nova/image/s3.py -+++ b/nova/image/s3.py -@@ -38,6 +38,7 @@ from nova.openstack.common import cfg - from nova.openstack.common import log as logging - from nova import utils - -+#import tomograph - - LOG = logging.getLogger(__name__) - -@@ -72,6 +73,7 @@ class S3ImageService(object): - self.service = service or glance.get_default_image_service() - self.service.__init__(*args, **kwargs) - -+ #@tomograph.traced('uuidxlate1', 'foo') - def _translate_uuids_to_ids(self, context, images): - return [self._translate_uuid_to_id(context, img) for img in images] - -@@ -136,6 +138,7 @@ class S3ImageService(object): - image = self.service.update(context, image_uuid, metadata, data) - return self._translate_uuid_to_id(context, image) - -+ #@tomograph.traced('s3details', 'foo') - def detail(self, context, **kwargs): - #NOTE(bcwaldon): sort asc to make sure we assign lower ids - # to older images -diff --git a/nova/manager.py b/nova/manager.py -index 275d98b..9a5efb1 100644 ---- a/nova/manager.py -+++ b/nova/manager.py -@@ -84,6 +84,7 @@ def periodic_task(*args, **kwargs): - def decorator(f): - f._periodic_task = True - f._ticks_between_runs = kwargs.pop('ticks_between_runs', 0) -+ f._fast_task = kwargs.pop('fast_task', False) - return f - - # NOTE(sirp): The `if` is necessary to allow the decorator to be used with -@@ -115,8 +116,10 @@ class ManagerMeta(type): - # parent's toes. - try: - cls._periodic_tasks = cls._periodic_tasks[:] -+ cls._fast_tasks = cls._fast_tasks[:] - except AttributeError: - cls._periodic_tasks = [] -+ cls._fast_tasks = [] - - try: - cls._ticks_to_skip = cls._ticks_to_skip.copy() -@@ -127,8 +130,11 @@ class ManagerMeta(type): - if getattr(value, '_periodic_task', False): - task = value - name = task.__name__ -- cls._periodic_tasks.append((name, task)) -- cls._ticks_to_skip[name] = task._ticks_between_runs -+ if getattr(value, '_fast_task', False): -+ cls._fast_tasks.append((name, task)) -+ else: -+ cls._periodic_tasks.append((name, task)) -+ cls._ticks_to_skip[name] = task._ticks_between_runs - - - class Manager(base.Base): -@@ -156,6 +162,16 @@ class Manager(base.Base): - ''' - return rpc_dispatcher.RpcDispatcher([self]) - -+ def fast_tasks(self, context): -+ for task_name, task in self._fast_tasks: -+ full_task_name = '.'.join([self.__class__.__name__, task_name]) -+ #LOG.debug(_("Running fast task %(full_task_name)s"), locals()) -+ try: -+ task(self, context) -+ except Exception as e: -+ LOG.exception(_("Error during %(full_task_name)s: %(e)s"), -+ locals()) -+ - def periodic_tasks(self, context, raise_on_error=False): - """Tasks to be run at a periodic interval.""" - for task_name, task in self._periodic_tasks: -diff --git a/nova/network/manager.py b/nova/network/manager.py -index 6a51f05..d59a883 100644 ---- a/nova/network/manager.py -+++ b/nova/network/manager.py -@@ -1,5 +1,5 @@ - # vim: tabstop=4 shiftwidth=4 softtabstop=4 -- -+# $Id$ - # Copyright (c) 2011 X.commerce, a business unit of eBay Inc. - # Copyright 2010 United States Government as represented by the - # Administrator of the National Aeronautics and Space Administration. -diff --git a/nova/openstack/common/rpc/__init__.py b/nova/openstack/common/rpc/__init__.py -index 0f82c47..d08c154 100644 ---- a/nova/openstack/common/rpc/__init__.py -+++ b/nova/openstack/common/rpc/__init__.py -@@ -27,7 +27,7 @@ For some wrappers that add message versioning to rpc, see: - - from nova.openstack.common import cfg - from nova.openstack.common import importutils -- -+import tomograph - - rpc_opts = [ - cfg.StrOpt('rpc_backend', -@@ -105,6 +105,7 @@ def call(context, topic, msg, timeout=None): - :raises: openstack.common.rpc.common.Timeout if a complete response - is not received before the timeout is reached. - """ -+ msg['trace_info'] = tomograph.get_trace_info() - return _get_impl().call(cfg.CONF, context, topic, msg, timeout) - - -@@ -123,6 +124,10 @@ def cast(context, topic, msg): - - :returns: None - """ -+ try: -+ msg['trace_info'] = tomograph.get_trace_info() -+ except: -+ pass - return _get_impl().cast(cfg.CONF, context, topic, msg) - - -@@ -144,6 +149,10 @@ def fanout_cast(context, topic, msg): - - :returns: None - """ -+ try: -+ msg['trace_info'] = tomograph.get_trace_info() -+ except: -+ pass - return _get_impl().fanout_cast(cfg.CONF, context, topic, msg) - - -@@ -174,6 +183,7 @@ def multicall(context, topic, msg, timeout=None): - :raises: openstack.common.rpc.common.Timeout if a complete response - is not received before the timeout is reached. - """ -+ msg['trace_info'] = tomograph.get_trace_info() - return _get_impl().multicall(cfg.CONF, context, topic, msg, timeout) - - -@@ -215,6 +225,10 @@ def cast_to_server(context, server_params, topic, msg): - - :returns: None - """ -+ try: -+ msg['trace_info'] = tomograph.get_trace_info() -+ except: -+ pass - return _get_impl().cast_to_server(cfg.CONF, context, server_params, topic, - msg) - -@@ -231,6 +245,10 @@ def fanout_cast_to_server(context, server_params, topic, msg): - - :returns: None - """ -+ try: -+ msg['trace_info'] = tomograph.get_trace_info() -+ except: -+ pass - return _get_impl().fanout_cast_to_server(cfg.CONF, context, server_params, - topic, msg) - -diff --git a/nova/openstack/common/rpc/amqp.py b/nova/openstack/common/rpc/amqp.py -index a884084..9fcff67 100644 ---- a/nova/openstack/common/rpc/amqp.py -+++ b/nova/openstack/common/rpc/amqp.py -@@ -40,6 +40,8 @@ from nova.openstack.common.gettextutils import _ - from nova.openstack.common import local - from nova.openstack.common.rpc import common as rpc_common - -+import socket -+import tomograph - - LOG = logging.getLogger(__name__) - -@@ -255,14 +257,15 @@ class ProxyCallback(object): - method = message_data.get('method') - args = message_data.get('args', {}) - version = message_data.get('version', None) -+ trace_info = message_data.get('trace_info') - if not method: - LOG.warn(_('no method for message: %s') % message_data) - ctxt.reply(_('No method for message: %s') % message_data, - connection_pool=self.connection_pool) - return -- self.pool.spawn_n(self._process_data, ctxt, version, method, args) -+ self.pool.spawn_n(self._process_data, ctxt, version, trace_info, method, args) - -- def _process_data(self, ctxt, version, method, args): -+ def _process_data(self, ctxt, version, trace_info, method, args): - """Process a message in a new thread. - - If the proxy object we have has a dispatch method -@@ -271,6 +274,10 @@ class ProxyCallback(object): - the old behavior of magically calling the specified method on the - proxy we have here. - """ -+ moo = method -+ if isinstance(moo, unicode): -+ moo = moo.encode('ascii', 'ignore') -+ tomograph.start("rpc" + moo, 'proxy', socket.gethostname(), 1000, trace_info) - ctxt.update_store() - try: - rval = self.proxy.dispatch(ctxt, version, method, **args) -@@ -286,6 +293,7 @@ class ProxyCallback(object): - LOG.exception('Exception during message handling') - ctxt.reply(None, sys.exc_info(), - connection_pool=self.connection_pool) -+ tomograph.stop('proxy') - - - class MulticallWaiter(object): -@@ -301,6 +309,7 @@ class MulticallWaiter(object): - def done(self): - if self._done: - return -+ #tomograph.stop('rpc') - self._done = True - self._iterator.close() - self._iterator = None -diff --git a/nova/openstack/common/rpc/proxy.py b/nova/openstack/common/rpc/proxy.py -index a077552..b0f48e1 100644 ---- a/nova/openstack/common/rpc/proxy.py -+++ b/nova/openstack/common/rpc/proxy.py -@@ -21,6 +21,8 @@ For more information about rpc API version numbers, see: - rpc/dispatcher.py - """ - -+import socket -+import tomograph - - from nova.openstack.common import rpc - -@@ -77,6 +79,7 @@ class RpcProxy(object): - :returns: The return value from the remote method. - """ - self._set_version(msg, version) -+ msg['trace_info'] = tomograph.get_trace_info() - return rpc.call(context, self._get_topic(topic), msg, timeout) - - def multicall(self, context, msg, topic=None, version=None, timeout=None): -@@ -95,6 +98,7 @@ class RpcProxy(object): - from the remote method as they arrive. - """ - self._set_version(msg, version) -+ msg['trace_info'] = tomograph.get_trace_info() - return rpc.multicall(context, self._get_topic(topic), msg, timeout) - - def cast(self, context, msg, topic=None, version=None): -@@ -110,6 +114,10 @@ class RpcProxy(object): - remote method. - """ - self._set_version(msg, version) -+ try: -+ msg['trace_info'] = tomograph.get_trace_info() -+ except: -+ pass - rpc.cast(context, self._get_topic(topic), msg) - - def fanout_cast(self, context, msg, topic=None, version=None): -@@ -125,6 +133,10 @@ class RpcProxy(object): - from the remote method. - """ - self._set_version(msg, version) -+ try: -+ msg['trace_info'] = tomograph.get_trace_info() -+ except: -+ pass - rpc.fanout_cast(context, self._get_topic(topic), msg) - - def cast_to_server(self, context, server_params, msg, topic=None, -@@ -143,6 +155,10 @@ class RpcProxy(object): - return values. - """ - self._set_version(msg, version) -+ try: -+ msg['trace_info'] = tomograph.get_trace_info() -+ except: -+ pass - rpc.cast_to_server(context, server_params, self._get_topic(topic), msg) - - def fanout_cast_to_server(self, context, server_params, msg, topic=None, -@@ -161,5 +177,9 @@ class RpcProxy(object): - return values. - """ - self._set_version(msg, version) -+ try: -+ msg['trace_info'] = tomograph.get_trace_info() -+ except: -+ pass - rpc.fanout_cast_to_server(context, server_params, - self._get_topic(topic), msg) -diff --git a/nova/service.py b/nova/service.py -index 6f350c6..9ff1815 100644 ---- a/nova/service.py -+++ b/nova/service.py -@@ -24,11 +24,13 @@ import inspect - import os - import random - import signal -+import socket - import sys - import time - - import eventlet - import greenlet -+import tomograph - - from nova.common import eventlet_backdoor - from nova import context -@@ -443,6 +445,10 @@ class Service(object): - initial_delay=initial_delay) - self.timers.append(periodic) - -+ fast_periodic = utils.LoopingCall(self.fast_tasks) -+ fast_periodic.start(interval=5) -+ self.timers.append(fast_periodic) -+ - def _create_service_ref(self, context): - zone = FLAGS.node_availability_zone - service_ref = db.service_create(context, -@@ -527,6 +533,10 @@ class Service(object): - ctxt = context.get_admin_context() - self.manager.periodic_tasks(ctxt, raise_on_error=raise_on_error) - -+ def fast_tasks(self): -+ ctxt = context.get_admin_context() -+ self.manager.fast_tasks(ctxt) -+ - def report_state(self): - """Update the state of this service in the datastore.""" - ctxt = context.get_admin_context() -@@ -572,11 +582,12 @@ class WSGIService(object): - - """ - self.name = name -+ LOG.error('wsgi server named {0} coming online...'.format(name)) - self.manager = self._get_manager() - self.loader = loader or wsgi.Loader() -- self.app = self.loader.load_app(name) - self.host = getattr(FLAGS, '%s_listen' % name, "0.0.0.0") - self.port = getattr(FLAGS, '%s_listen_port' % name, 0) -+ self.app = tomograph.tracewrap(self.loader.load_app(name), self.name, "WSGI", self.host, self.port) - self.workers = getattr(FLAGS, '%s_workers' % name, None) - self.server = wsgi.Server(name, - self.app, -diff --git a/nova/wsgi.py b/nova/wsgi.py -index afb5303..07a3b37 100644 ---- a/nova/wsgi.py -+++ b/nova/wsgi.py -@@ -34,6 +34,7 @@ from nova import exception - from nova import flags - from nova.openstack.common import log as logging - -+import tomograph - - FLAGS = flags.FLAGS - LOG = logging.getLogger(__name__) -@@ -238,6 +239,7 @@ class Middleware(Application): - """Do whatever you'd like to the response.""" - return response - -+ @tomograph.traced(None, 'middleware') - @webob.dec.wsgify(RequestClass=Request) - def __call__(self, req): - response = self.process_request(req) -@@ -373,3 +375,4 @@ class Loader(object): - except LookupError as err: - LOG.error(err) - raise exception.PasteAppNotFound(name=name, path=self.config_path) -+ diff --git a/doc/screenshots/client-server-graphite.png b/doc/screenshots/client-server-graphite.png deleted file mode 100644 index 592967ce01a3d33edf615edd449bb0132a4f222c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 115116 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 z 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

CK{_;`n}LZ1dMh%eiQ_+zE} zGX34F38Vg6q{4W^?Gx(5K_601#J`>Iw`S6QH@G=?7d-33nuUHRwWu(j3xIa{4P=m_ zdU^0rI4yn?tJv{Tw3VL!uB!i~QDtR~tSM)X(?wI8492c-VhfJ?$_;lRYKylR?^_au#^4B$5THtqrK(_t_Khm6 z50fmJBezy&d?(#iJJP<1g~H{qkFI+q8xM4YRy-ni?c7E8oXBNivQxpf|DMIHfeW(? z-~`L;Lgx}5+Vi${ZMH#d^i|K&MwE`#v#_vmU$G>mA+qvfz@wNJoYDn+h9?sRd3$sA z-gozs!i>eny-t>|PFg`Fp}tO;ZRckUFJgEo=&yYsP*bC7xbOLlI4UD)!&-~Vq&vCV zrq?}oCSM^!+|`n{4-t$ddU9N{Wef$Q%{IeBV-FU#TV zBZho^{wYC^N%t<8)(!DRS3VHW^XXR&vbex_a({}iR&1KT_oBzA7@aP{-G-v2{37AP z>Ybqe^~JSvuhn_}x$eW`n<<{-6L&Uzo7Z@B-S*W}W=Ax{pBnZsn$?Z?5XQayw8_2R z=x1@8Y!y?emnjC@{#oN@lTYufeS_YI<^iQ`^nvmEY!q9#Ns@&KA`dXtB`%A_2kB2iXgRf|KHOH+k? zk-^L35*0a)D&8PGbg7r<2;D{2)35Yzq6&!X)|{&K)sI;fbW?MaL@x61eSO1L|0ScI z`(_T!MHL2(yZ8K!4n1W%a*3ufu@AEx_DblC^u0hcIe{!ak@fid?cQi7;XtQppTr1t zAKtA7!|Cqd2DvYrtO`sDbk1{eu?h%;ZM$Nt^m`2JQ*EyIg>Fh%FIIn`Pwc~HRj_>; z?)E(YpnU);hvP?GeD9Ax{;_zY#ZTJet}m^hIDSXO<9c=Tq)44Be_7^w+xPO7MVVRXQ+nw0nLcZ86GJ8eezB)DBHb zp04Xypsuam2pMA0{?-5k-=F4|8%|^UXHXaDJl;v7PRmtv&K}}Ur0x(5rn)s7fw!>^ zO)1Y$N%RPwoHS#kBn5iEDPU13&=NlhQ^D^;#ts!ophcboh%a3`=LrC-1cJ_Uw;@AN z1V9~u&Y_&iE-RY=(bLLU5R0&NH!nzk)C{?fw1Ir!!<^E~bt%L

jh8v>;jX%mJ- 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%0Dx5eOF^9GrO+01&eb*i7E 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ⅆ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

HVVKr$@5lEp3+O*Wg= zOKqGt9rEqA$P!hYof4$Sd5dkn1DmM}vdfb4FwJ?^K0_vZZEb}nQzH&5=NLBS(LL-s z!9kUwNnYE(2P~)%?7ruh@+I!4xtLjN-8XWroXnZ5amfEcnY5~Ax~o>bmL?TD4HaQJ zkQIZ-BZlr2OwYO+2!L&FZJj<^h)>JNXmP%Wi+c@Gv;p~-{3)_ffrBVH1pDc;Y2DDVmVvUEkE~SRxbBApO-=^#2*euuojXB$vFSz`1khUtx?f zA>AJIv&hJq%mX-*E)}WsGHJ+5X|JXv_ji8WoVT6^q1nj=$(;L3%fwPe_$-k81ChI zz>^a(DesNAy3)bn1RsVAy@mHRoI{9Ve}kkXO`q&=KxcZL=X85Prffww`me$yoKYSx ztc`W^gKzQ`2B}F{E%|=pL0f!|uJup=E@ja;zqzh_1XM=m#=Rd3bINz0%LkJRMt<&# z9T}f!qouxUccD-6ylrk==wL@aKN?y)KhtN{3Uzy5T75D60DT-b@q8SVla&lQ`}eHWT7h`Ugk28N->>rkX?61(q+8s6KFMw;d|IO za{gf47|}@ru-LMT=OE8wf)|~b_qmG;FO=DnLtGNj5^#Q4KQ910LO|d$A^;ju3l8b7ARRBXnrmfUSb%)i-KAcTq)kETw*h30K2|DlgT}nu zI5=)1Nm>vF{e80*_5K>Cc7c$%&Yr_sH6I=%xWH_MMM$}5Dul6eLzi)SN8}{=EBTx2 zK*~q3G5Z5fU07G&T8;X=!h7Dj9%9PT-47jjj(IUGGuQL%9PXpX+{Q@Sg@V>Ok;t9GTd*=%`E6Huv5Bvsh)eq3AU_h-S;2+SpO$c;}s$$j#y+40GxOwm(y2Asu!9tIH{!Rc@uAq837TymL{ax+mHX8QBCgFQWZ6*)G zlYIPi7c<*r?4(mEH-YacTLG#7Ha%|2+0eqgX;7^pFE3xQM#mE$9li3J+hNx*a0ZK1 z#NN!V81_Yw#zcnpZKe49O!ZHVQ|7BbG)@GhYLkv`Bnwwq!{qWal3Sfmn$+<8a}ROP zt4u5Uvi%5={z>Ar*AS;fis$q?OO59y4X?>d+wzstc@4gpIrz0lm1)YjwdLJ4^2@B- zHD#kddcNO`>mvw-#70#i6Gu5)9^^Hk5<)z%K4oTPJcUWMmS+uSC^b(sz4p(p*0c3W zwyv(hkr?VOR(a*+1eNOa-oH+OOc4?mhCfpgcf8RByYhe1LnULelOU8b2o3y=tC!pq zgKpm#eu}b`a0#)4$%j;m$Yi>AWU@}BKyKW{#qA^U7Ro^e)>3~5O%6~7l(_+HOU`TX z|51$)Qz5=g4wiOO?P4@VtoL=q>l3SbA5}`s+ljhD1rhG$>VFeK&73AT+Cl79R8$lh z!^iaAB>-ZXDOz>~lME?d!*pI7%E}hKUx^HCAA*3$+nm&4^j_7CW^ZN<9QmiN?>QUJctD{$ayxIQU1Ryd1AbcCHo&Jo^D{a z4|9HFHM!Xx*P#F8P$d9y^-tWGQ+H3`!}tG-p8iqvRK!o5`FooY{UmvZARXGjfjmWd{`?^2oy*YG^f35Em^M%#{H^H976oiY{Qag&aez?F3 z4>H+Afgwf)PnC%YRQ`0?nvkK4tU4W#4X7=5x(JtaWQ zyEV?`R6c2RX0?n49Tadx?F>|(;lA6bK92($qehJvw(R3B$7V1m;ImskND}ea-kNTJ ztNAH1vIW-rT*Bw6lF^X3_&kbv$)LDUIh*}nfK<0lHdga#>Hm$ACwZjSyU}lR7tt_w z#S(IcT9;4txJUWC-#nvn-Cs~EuJ)6rxb?-ptKk)W`Ew6hlB8}^>u{bywxCzXZ9i31 z_2NVOtprRG6jtfmaO_#4ay=FoY0@rZ;9M+RFb+UciFxOahrpLj#J>>`P!lAvd}=b@ zi&L}dAQ11%p)YrykuL@J^Gf%GrPFD({o33>%cA2Ia0w8DVg`=$e3Jn>`7Fh!ppGct zs5-V^D;}^1b%f~i=d=AP7Ko@z>-p#FWi#jiRn}N%eSCeDs+>4b+&_R(48ryi$*rJ= z%~yn0*gbZ>x7)hVFUSI!{W^_)U!a%)^7)wze?Fji9>H&F`WP}dq3`DO*p-{RiMol2P==A(7e&UC) znBHg(i|=KLA^7)e$6K!-2!B^er@4`0BPI z%Rnq8Gw*#pAu>jK^MZWp3?b^U$0{X$kUa}2SxAR#7OoO6K{$W%9{K*HJD&OjM#kXA zMiCJ|{F;~2Ji89Tnzaa!^Sv5S(QhwW16>`!Jeg>ujHeSILzHP4(8j7(e z8&n*a-oPKPN?3>)7qXgduxVwS+#9i&-058ySv2dIs|sl|f)un5{FL9HJxXJ9c_%sH z)?rAN{;EBq&NyZ2msp(2Z^ka}CQ6&#^J>^sG?(bHMV>OWxFI4z`rMBl|beRD$`j z${MN-A#5qwU#vRt{Mx)o8BUfD0*=VxtO&-Q$UZv?nV+9$EnIvrezC*sM{F};LkYf< z%Wt!6%c+qIFv!r3?{pE)l}*DPPkDUK&c0~&^Gs7M>Jbtx%C1gut>WOJfJ|I z+iD_SfWl}4=vy@F?1JB3>P=&U!VZ|$@L5gqB|bl%iZqBLp`yCsFH#2qJk4EQ2ZjT2 zBNl&?RNX`z5dU(&n*VU%zr>9sWz9xrB<1NjNUG97A9O?#>7+li!*^cSTO*D>D z+e@<~>$sJar9@x)7bDxJ|AZifbN|~R2twg^m79@3@bjtr^efkt`RFlILcZ(evfhul zWBfeR@;AG39qKzSjoOZwfz-F6BZbv$c=ojuoXsT}Az@*{T3S=M2VXTet7TlHM-0~e0sr|5NFbD$fAVm$t| zjZ8siD%eIa?>X(!)DLiS#&)jV!CMs7%Tj)P$3yyU*z4-n=|F4OH4BbdpBhbAorpc0 z^1cwyK!c>jL-}%Y6HC~s9EV*ak^*ds;(obYb={>!w*bAGc>JW9xcq#b>nB0>AQ2r` z@o?T+ny!QCrT5a2?nnPZN(I~{4BHoO z1H>Rcr%sB{=K`LAC1BR6_@#G4rd1T95zbE`5}T_~J>jK{3`r!iR)*gzVE-1s5X|mM zZq{+a>R^WK|`^oo{=2kAjAaCOK%B8 zs$9lMTzs<2;bU7k9|=hfe9AvS<&Mxc#yePwwA8;8)60Uc>r%pnavhDEl`p4r90lp< z=zzONcpd*RK_IMM7ccVPT|WOC45158lFdM9u0%<$sH4iFl!U{j1Zc%zp3E$t(&MTJ z!A>sWA3oIUlq6UOH8N-OTjGKX1VNyH@Gf}Be!!4foMKQttyheK!2{T;25k^hAy!Gy z@CDQG#l~i-8r@Tnk)ajJ)fvT1uby3W*>TA!I8G$+`~;P}VR4V;&Hg2uVCb^T$Ow8~ za67}V4-PgO-dzT57n47~ za%H{a`2#Kn9}w}spq_Qw)nv7B){p{ax(dboi^R$@l;HCvneD=tLmGX}QCH@23S#77 zKdJaV$&GEJHPOHZ|EU#0{F!2#FPHRYznT){t}-N;kTn%wZ@1;LF1i0jAu9@o=RA%W z(8b4{p5Qw|C+<(SAUxN;==T;b?tN2aB-{~@VLB;YA!Xl}B>(8pQh>Dyl5TKN0{WKT zYMWpI?RwZ2LCD^xN%mN@=1UZX{+;`&d!y%|k%{0NEiNzl@0d8~{lmxsIvdugYIK!$ zouQ8fQkK(*d^Bx)U2-~s*Wv`Fe78YG7l*)moKWQP|1D*eF5IYHa60(=_&kJmF3BT1 zR99(hNftp3wfFj#tVp&Y-r#e(OKAg zK5UQVJ66&5>#rP$4=t66>3n4(6E{$8-}GrR55l)B&&m3UvQLKM?fT9bc_W$Krg`ub zDnUUf?(QeD)8J1}{Ldta{AuCD?XpKu9?Xx~yhziUx4dUlZsaxMb>)Sdn`Ljjy4FVR zgf$gSn*Z@G?06T)E4e^Af=0v{3hi|H+6^cU`>QR^2V+ejjX;n|ACWN-%|{54Rk^Cv z|7MX@T^3?j1e&#f2S4mB#Qz09?CpkC{WmF#zrzpKxBEaF&qgjHGho_aYL_>gIrE*l z0K>QHyZtQ-2fCDTU2=iB)`x> zo27%E*eI^(3q#+G^S;Yjt#NVBuU}-|1VX^WK<#q&nO+FW0HXL5vQvezRWRXE%gV;4 z!y4@!5MUb~X<{Pd=8hfpX)x6VJkPeV0TZX|c24_42KN^bNCGn514WW9cD$fP0Ynai zuZX<-9ZIPf%e02TfB*n;m{?c{_T#_EbcBXGN*Vq=*AW&T9`fna1MkP4pg>@az6Fa# zRaMpFuv}~4sGyG+gomyYSXZeKJ{LgejnEgu{(Y6a%JGcg1B==Xl)xWfOdacn>`LCZ z5Mpc()zvkF&9Kx!?Ro$k^x0+BwNwZjAmwQ^v$Oqo92s^0qdJl`CiWj3zC~vtozu89RWT9 z>uJMFUQ*$}GZZ$6aK+*8Ptk0S?9gAetpL?`tOuwb-eslX$yPezv3`tmIohEbeN!O$ zS2G97`u%z@JG)XxwahUly+hDliKH|i##i!b|D*B>B*0aV26{9Lg6|Qu7G~+@z)>B9Xd21i?YW)0MyeHYQ zH@K%k7NyAaGLcZf?bq~oUg?VoA5bUpUe{3br3Ioq;%4*=7gvBJ-vRN-`lf249e_5zbA)$#FFWMtGrX30=QAFuLi?j7ur$g-Nc^xx+6 zP2jI*=m+r?32I|1j1CE@L%<>E%+siLLDZmvh3SQi%u{o7bKeu_^MLzbL{#(! zqW=xy=8NZxSFd!y0?I`yO$Rnvh)xmpJqQTEENpoob&P99%ptR0jeY*0G5Wb<(hJP^ z$UR@5JN*%m7)@pXUUPP(4kDhJAqJMZkn`o78B^|guB%(E8xo2PpaVtzG~h%eG+Mp~<>p1_9v?YiKH&Rc=Ti5hC!=?S9&Z_`L@J<9B34_ zG$OH^HK?(gu^>^`z+B3<@EP}lLae=d3G0t=sG$jLPBfX{#$Zgs!lK=9y%OjAKFL+1 zbL&7s=I|hl>VuqHLxc6{3G@OQqa^2pMi~jT(Jk%mS0_CP&C3?|qL80)Jacg11m!4R z_Q8t*^Nqh~0d`LO{Lpe|WRgVQ5*g^}9c59XBo=8DE7P_+LzGYJ1UA{FfW#w_e4kXU zE7v5C+cG-OZgC!WBN<;P!en2nHGKL~H~idhWNrU(3;V%q&R7ujmJYGdh5Z?x%VZGH zH8anB9#8ssxX(&n%IZztW-4!ci|Ae{nzzuya^2L*P3ij;Y`%Ugvz5;u26>4Ax_K0a zk|MiwM1|wS8c%+@Cg?gH$7SB2Su$h8GQ=S1I;Lofu1aU;yDJq`vpQ7hOJ3NR;Jb!q ziD!wQ2VuC^**jfS-|ehwlvYG;Q8YSS^PXj-qN6jfe1W7{teorhG$bG)HMMaj?e=2m z=g%mh3Zrs{QZSUlFIIq`^{ty8CmpcCRe<1sBO{54GyZzbCoe7>Nx?`WblIVz$~D?X z$Dj%mQl-OVjn3ZtaOvHcIbNeh4LpOK=0FuDt^tMy=-6^?Tf{^hFITYO%axA!_YE_C zvwQGI0m#{BlAD^zB$Po#0z1u?@1KLITe>=$pX~8tv@mhVSs@aTlM8(!l1b&f7cQhq z#8Jeym9J3kDrIkP@B4%9y${tISg}!NxbED$_qd(kt)5R*Fo($Nrc6lKy+e}GD`8ar zcBPmk_n4VE5_~}s<~8?@PQYu!+N(!FP*CvZty`6bkw&*g4xi^{v+Z;R+HHAeBstA% z7r225Cr{4aDC>i$F6ISJ+-B)L? zbehG;u)Sw%n>8u1#c068^jk&1^Cw8Y#KgR-^=xi{%X4v08?6M~M>l7ZNW?X=b92+O zvf3vYIo%2h82v<&5dRlkA%GwM5!y)m$IrL|ASj! zUbwmpiS8SCw%i}}cb?nJ8k{Iy%fGL_hf6AjWV)tjH!Oui2u7IOow{xH`ufFD9AK^`z40c(aS?`V`KS}=?dYzm(q1ed02e`wNO1W3u;TV%CJAFAwG6HCwEdTw~@a4YSdhqb|IA_Ir9Utb|NGJ%hYDC|@Tv zJ!sERwFbzFLweetC2Jz?r+rM&vw(Si*{v(8y? zF&p*Z*M!YEX53&*7xhQ?-7>1UF438O*R_;RZAxLn*2ZHG%N=A#q#LkVGqz;=yv{TA z#!SP(gHpI~%J7=BX(#fedpq;llOp76EF$A=^g8f{;`~^^KuZdzi>bYP8!3Z9YZh&# zhL+grWB0tKQy2T0fvyFxLe||Az2P3?-)_W5IXfSefDsX_%RTc8l|7c_sxbMHh*Wp2 zk=jug-c=xkkZ*8Z)!(_Axce%t*Sl@*cZ1f^3Toh|>e*L`4#|wG{?&<`$Ao>W=K(w% z)dsW2ChSVGwQxp(b=qG+t#qUV!~^9!om?C+!e}_};UYQiuWCW()pw9SL$gRvsf7ku zEXGPSLQ|{0!9flNDKMKD@9b!ZdG)xAnX|D*OWq)DnzBT?v6U5ch&)s<{LXnt|2Esh z+h)r2wg!CYOd2~%>%}U+U&xv0&mG`lP|4_(+e4)S{x*{a-d`Vdpus(*Z~{W4p+v&2$W#(0XW!}-m2ie`HOj2sVX-D8La2OH*@VG zG)i(Kq$zKuXdWCX(Wii&Athmac{6!zge^$#*oR>_s)v{M>vY7pP?uCVYpnxE6ul<| zi9`R?*q4D_WRTjzC;OZ2+Oh@pniRO^;A82P0&&GDHXBgvo01GyHmTdI+mMWUDZC^3 zbax8bFtJGWpr`FVl<2V;J{cZ&WPcl z_0DLED#Y0U%*qx%qW&B9*jJ(c8-|FnZ*NGU{yU__twWy_v|BW;+p{fy)_(&tASfnw zbEYZKVDiWN=MhidgJ=c_>qQWPfq^B?!Q%Ut2>-1Y@LsIha=|wZ-}sS=cm*_WL8`3H z`smPvEZHR==2^OrkT#GH(j4=~P7{fVtCNd-;{rydB~-`!)h6ufCi9lBJ}UfPGkR_6 zXkP{k0h$FhE2;h4Dc!c&RBq9UCrr=uHoP!mE9nfoVt{;YHM=!v?#wS)99Qyn~#Puj4^vAyf@dOlU4 zrAo!NLRlGm*&%L~>$3f~W3@G@BU2Mvs-hk}cdPAOC$yUYn{@tJMuJ@?SWU8}j1Og+TptCUDa}@HF z>9=%Q(o&Zp55!n*ofOJe81C9jZnQtXE$o?Yl*i)E#8+B`ty$w=8Nrx@TvFf12N?ASX|$%bAk~eYTjW;ZY)<*P_k0cXwN=@xcI9 z3t{gmxgtVBCy)5Ln$5@Z`}$-REF%`HPQP#OB3DzAtcb+#@gB`W#MLcN3}OmUF@qE) z4?g~2GVubh6qFy20wQt(j|Ai}+yxQ~-#%j&_}0!ocawNcqf%`V_k1$B z(i8tS&PR>QGQw}St&_x}Y3q)jk8wxY`$&~-r8iCd1><9V%Wv1DHbkE(wZxWD3)jRS zoVfKZP5X8G)Xg~>%~c%fJ+3xG(g#_EK+!XHz%xJ6#9&KZ@cEYk1o_J)1Sz~Z1 z>fTS`&A=-z`4%z{9(*8f23BiCvla_a2paDp`oOZjP@%L_=PJYC|CL-!cc>0n1AP}I2 zen*t>pW?5nT6aV&fR7J~m9@3X?85Bq6SHAvh@8adabQO5st`Qcavy53vLx`ezIgQW zDdFndU-1k-GQe}vU4W$BS?qVC*f8Nx?eJx&$ZOBikSoe-6oOlhqt0Qop~ZN8k)SIe zgCOoi!H&paCjYYt_K*KQ3^DPMUzCsz8)|hMN2tEYgi?|d8k_yTe}u6?XZanS-}CM- za_>5pv}>cB_qN8q>}JOrTpr_mtEl=zDDL2 z%gf7didA51%Ts(TAe6%#-2sj%5_JlQAucq(Viq9)?6*PJ-OGY7l8tNi-<6p@jUal6lmor{DC-Z`$9d%~}@hCMhqzzJWG zo*KVkpsQ<76nK{f1qlvk5Ys_n9`DLEY`B)tp$3(6+9j>V#nZMG?hHNTM1hFe4cd8+ z%JN37Ptu4MKm?X@UZq(%*8w81!m*aR_!G;T?HRt4efTDthA(fV2U%Bf_k4|WOHolt zR$DyjINEILbvm3e$}IwKKy-j}cj79?Dc-T9laaZ4DNlNOI_C5g*gL>tCxCASpC)+p zyOAg;DT&$JmtodO!957F0C16L;70KkJbT2J^Se6q^8n+TyX$rXm#g73ce7_|YD6F* z^HQ>r83rG8LP3G-4Z%)bM&L(NNGOfi>MdhF{cXBM66l0cI{SeDyWu++W=Tr!Be~sN zzI+2~`uH9^7PI9EE#LFf)zgn@lVD<|oEkIV)moQ$X!@FTi{45^3NavKKlQqCOaH|G z$_cF?;?5mZGm693t{BqyGPOHC4)gH^d+03C|l>sga>asm+F>4}oC z5s(t#<&suajj2v4;)43T@HSzHm#Iz>y^LejTzsYY4%djp9>AV*p~jTAe5#21>uni4 z{((IKiHk@Q7TEIe(cs+dN4<^&KktR!(75*pK5pOjk~P}z(`XzaEkb~kz(P*7HZW(U z^#tGT$t*mMq|#pAwFozQ*}yn&8>hvJ486_XsoRe$#Rrxw5^(uWV-1}Uy$ zYWL6IgIn=87GZkj74;Z_rOaD7}aHuO|YteyYe%zSv#< zc)PfLOx{Z*Wj4eSd1oJk9A|*7V5^D*XW2ilU?`r5!qJj#KWv~-+g0r4@F#OJVUH&k zDkK(TaZ(41PdYt8|%q+7m)|Mt}NFeBWcS4Ucy7()>KZ`Yzn=-cAOkYW8%J_eYMeY_P3(o!r=b zJ9>v8`YvQ(skV7@GHE@1gf7RrsW|?0w4>^H<2TvnsFxg)A1ft>#o_y>H)YVIeY9Y# zmM%9ResRWG!nae+yZlnnLd{LO17?e^jWeC%pb}8sD|!XVX7-7LqX)Cl3RbXSRV5LT zfPWxn30wPZ)CJzwW{n=vEm@xZU5xX%t6|N`TKeF=6U&^7z|3ueg3UJ{a*EsYZ^=t>-A9A7Ev&S~Z=SIo8VBM-o!b9h?z|>Q=r{Rcru627L-n`M1n)^rseUIYq zj{2uKO53ZAgvU*R#hqQb1}^F)dlDvpKD4!`PyJzzZi}eM#=N$9bfs=F1vM?N@hZRZ zb9{INShgWgXclqcPcQ|X6AVSadDf}Ad$61GrIfBVON(J>j_F^>SR zf7vs@DX2n^j|8_Tn9Xb}P7AtT=38?K6K6f#|4o8+)|*Ks_Xr7|i;bm)=lt`nu2$3a zHxb_LC>9g$J)l_XHeAmgdwO~Rqic013aif{<~T%93qm3WJx9_oj*y!ajjX|09{-lu z^@IUj6HqU!wtbXKCS+7?UP_qR2Wc%tAVmMMWb<3agX~?9hbm#7#klFTh;E|fO2hhU zlh(WmZ(F6U1TjnzStnJqi3^#GBZ?)}5ep*8(>4_?r~72rGq3p8wfs1w`rRmEnLON_ zymy?>;mkLgno5~(setw7bE>EFYiH7px%g>2@Vpxp6*_4!VC+k4?@bkGoH~cE(aiUX z2~rO_yYx$BK$0JIdMPKj(ZRl??ogGsUrB0_wC`8;RJQKI-V|Y!@Ao>w1yw{mDuN;N z2)l8E0+ua(L*f1Wl#d>X<0riets0icQt*|}6_~QM9`kkG#eaKnIr%?1~|P<2lHxPu6M9a=z^&g?JlzyEYuK9ydc+t*d|Q? zc<}6m!C|pKn-ESG2v{*?B_tpqP(K0_iaxvn2<5r$sv_7e@WF%vUtf2+-rHvR*G)K4 zq0Ad082jZ2&?cvqm0tW9q`v}L9`7h7c2I8#!72a#-vb;L96h`L6To3o!ky0{7DRF{ zm&Gv!w=b%kS4KiIi72zT;UqV3yS16O{dD<+!)fV=13o@MQK_D1bytE9&8*OdHCYV& z!T9u&wnSn!a`hv^RG4lIU1Gz}KM z-GVNi?40XiJ`adRwCt@EYSriv9;*`bvE{IE=oRES82t!)U!cPfxdZBRQt`ZNN)Pdg zF6>+&25a!e17hW!NYa;tgm-Uu=7VBm5#%C5*aV(p+Us-ku(qI$N>}=6KJK^h#b2$klU0g0t6dNBYtvcg17l7m1%~n=%h4Ul7zh zB5yNa=@Pv14F=j2+U0N-#YL>!jbHRVbOINjwBGHcAA>dZ?AB8?IJEY}kIUnJ;ag0& zEkeIQNovaFh0pSrAD89hy}WKS67MAFo4XKn z86;y7^%M=fu#%&C*;|oU@?(T=t-9n6Vs~6UYvS;4@B>>$@wGYbH_mJiStMt!{fQnb zb?Ah5=3XcczAkh8bBc4`S3+cDE!kwLS4OR_n&vtv%oK>jr~*SabPb-+CJ92|mfWjX5O@PeEt8em zdx57;`u+5elofRz!m}+#i|24!m&I<^&!FiSn)F#_ML^+}q6Fzp&A9{eEPS?iJiUys zr{)d)z4^@f<_lNfqg=^d=j}8I@pRDNjT^S|dQ@ol#8>Ax1&_0hWR*pP>;}D5o8;qf&$QoM6P?0myZW+G~0WKdzJW-Q6YKr`k z%jig2Ut(xFddJ}&`||8L8I?s`>=;fQU`xiZ+s8Iot$ANVstOqgMb7vZwVhze zxZQ>LySbwx6OHgCp7uVEU0$6?C?vj>a2=uKqGaiNg+{=c)lm<3Y}dArH8Ch`fDVaP zn~??hLCVJ$4=cGtZu8EabB@}?cmm?!Oiy>VJuNAbuM1^4IqP3{OAm`-8wkp5%uCV` z*YGIJXL7PFo}{V=f{5bCP2UH=RCAFDIr8gVf8d}=sa&7y+(}P4I<}A&s4rkXe;F4e zM&rNYnOcP-)nAB=tbSC9VMIn2h*iZ?dUj-}aLmrQPyT1Thrujausr5e4a&4|HqJFH z_0OGfzyi&2!N4wJ3Ly^MV_aI}6rr9tQDP47WL%-4k!LVC-$Q@4a_tIId7$cKxBPLl z+AUR6;&Oh$(0v+6$x7rlA%oOd#GDPWgQee+a~mD z8#rd*f9bdq^x9~gFf49lkoD(HbaV<5k}n8u1|mBj9wPHwSrt&8I3@r&~XsJX&-^(wRPA}344^MMb2Lb7-Brw1|SZ06ypX@sM6Y$V3y z=5{ahLgtsu<~ASPy0~oKtSNGj+;1j45V-o?+H2O7UR(pzbG7(v5BFXH>=XEcIbQ|# zdW}NisU-jSqq%Pd?g*48E^1hQ%CGsbl=uesu+H&&8eDieNm5Gu>FV9mHMz33oPQ=pPX!3x6u?zHw{#%B_mA0CoDtU`_DbwCHY^`k{XTY#E_R2|Ngh zp#fWQ&MHg!x+nDL47zf9v|)4~An=yAC6)Lw_-M@TXDx^~=rVRAqPz%z*6IWy(`^UJ zC+sq9qh{`ga^k$@c26wMUkJeLMYusI@MV0FI{I`-s{q+fN8>FIn0%R2ZY_zxE^?;? zce{UW$tDn;R5W91?+hIHVB%| z{Z>1^ks8qbcKqFQaUBYCH^%#S*PZ9wXU#Fda<(*FoOwaSU43&&R6=5>)D2w_SpPm_ z2xVP!@F%sPO|lw5_oyrh9jp<2pE^{oR_*GyIh#W^&g^rWQtAn$L-l7V&15XtR#f&J z{3FCbY}kRL2Uj)r{rjB=@?TxCbV1LF1Q9ik&<5d7I~o zorw{Cy1Y?gs=*L1byvJ*eWy@e-2HN~_|wY0lb&ct$kv755>a_MoF@G0UT^f`&{EF{ zC*89`#GT~A(XcYm^Y-vYAQo~0%1td;eI3n5Dy1W%>B1h1_Op(Hf`VfTF}vkE(7l2C zqy@U#2J>~0LGPX7c(6VSVlQZ=OX@TJ&jG{y-hc-9sX=#-|DOT|w@th-Q8MiZh!GYx z_E~BbpQH14hI`m9vHuP%eQ`}BOzbaOfMJ!K1=oZL78v%e%UT_?cmKQe#NW`u-ndY4 zdVl+#x3clwHN{xEc~|F91#pV2D=c(PNpy9=r@{LdGlw-V_XF<x-@`S2S&yX|0y#*8e${)K^UrO zu?Y!jE@(N#>6ayMQgOY}a)yFCL&A6W(_rV|^2*X^ITOUWF{_lC@3o%4bpS2b!KgI` zXKX-s(z8Oy$^|YTHnez#UAON@p? zgo0el%*Stx>@q81`_?=e4CBYR7c2+IC2k3tOLs;GeW?MEbSm)}_}vLk>U?G_i)7(f z^_gBuzVzov4C*NbUeD zVHEhMHCJeRRs!$*X5OT$e}4tJY$kx~#iKAVomp;9K0P}-sNR8@xI0sUUYaAktpRvZ zF-b{1a6H6`W)>G0Lmk(hqj=Y|as&Mi%_sJqQ*f$Wt~vRx?np0Ic@M5G>_k4+Jh@8Nlg9Q+k};1qChJPOTNQd3l!T#Mh=P(f9+e;Kc_&BD|Eo!9-= zGZm2m#tZ7=UqTPdjSJ#}+%(VdxY@g)TH4Yw?}tKGgT6iV<2q2za!SbPH49E7!NRTDbl45d@H>>MZ6xz?+dt_gA(KZT6S*Q?Kk zY~oG+fux}Au_&9mZVmuMJ~uorPD))}-FKJJ;(PbbdDjjTBjfjgXa0BR-o%83%@vM^ zA%r;D@~GAt*jl;V-mWrbV+#gOIFf>|P@?pghAKxXz8n~jsE?FlC*Dv5uvj2 z(VUA~+m){H0KJs646wF5e{If-3l#WbxD$C4t{!9ELii!Ddd1u(Klal4Wps$jLLWqG z8VW?Uj5}SiWn&tj?GcBG9}J2r^f*Y0+5I%yKa)w}_S!n^yUGc?cCG0RI&ls7sMngN ztN!!QzPpAY1Y{$8PA_Cke|)vhBg?Ct7puyChZ>|G=A|0lRg7ldkbZd7>dP+@TD5G$ z2}Rnecl-L|?hQ*!$U1}>_$K=`GkL?DvX4gc3w7>7FalhV_h5iejB`07;s`me4*& z84K9tSO3O=czHwSC|gXsIRp^wcqSE^UW0vZiOYR6$Aw~7N)z-u7h5={eYthSCx=J!8>Vu{=ULr95jVE@!Tk9${uG9WYT+|ZcnYEE# zu@#)gcbzi#`l9nVW7|iayy9YO-;yxh@@(_(UDMykdp4*h-&SAc{kZH4UiI4*lT|vl zn^-jnE}4FVeg36%nR3Ik+sM{(7C>%Ji~0w_UY?1S1rewF`Su(A+7EK~(oHAxzkg(| z);rCSzTD++I4sm}XuZAZL5v@Y*|3?6KX1-e?U(%Tf`KtxiPu7}OYi^>Q+eSG3d7*r zZJ1*}lWNr^RdwF$I#a~Fef~yTZy}_&W=?z2M8bP@tBvgr9<`zy+;c_gVc24h|1V}C z9>adR=;&=OGfYY7o-;nKPfbxfK@|0>-B^|4pF~mLwClE`#U&sg^2p65fO4m!^d={l zrL5iTv#PhYcSt8R1Y07l{$wM*FMk^|M_3|b?Z#VRxH{}|J^Lu|WfJr|h-L|G2vh;~ z2vQ6WcjC`S>3$=!4jDf5=0eOh%K+v3C=sr<1Kb_Wb2542vpw{kwtd_kXa~Sq z<>gyRk)wK%iStW^D6Z&VLIx2<`e(41R8@TrdUmeesIwp7bbIwm7-C+bhG-0Gh#(8- zMt*2fQBf!?zfki-hK-ShK#;lh((OB5YP{4y`Hie^-DI4y3Lr?#-SzYh7^V^4^yFkWgf|^h=@F@?kOKv)NQAx{Vzi_y*~aaY z)R2YXFt@FU?dg#PRtZwR#$YQ3vU^Uu^;HY%U?kzYR^c^ZidBS+R5qQ3;uMR^mb=6j zUy4*zLY@DDIlk7=obDH~m+)|pT03ogJC%zx`+hVg208!r>sCR<#%xG1@pe3O<~uT%=zAYo6*~x$!i)<$UeYlpxG0{TM&E`)*jIG6_K&xI!HU^+{8Uu-? zfo(uw3lb8L5D0=n9V{iJTwKwR(++6@H8A?B%;rKh0=%v|*>1bj?a<^;=-Hr+5C*F6 zEw8M&E1gjViRPdulh_d;GErewX=%Ad<8&}xcy&elrjJ*Big~%J=Ef2yMeccAHU_#u zGfTIV7RP2yi+HQvg(Me!?Q{#*N$;05W`G(j-mma$W_} zvR+mYF{5dHi2Z|O&oSid@|wkYo+h5b6DmFG^*s0c^65md)c_Cgit~00CG0H`F;4J2 z1MBW2I6~MCCS3V|z5s**MifU~Qqk&vaFx^7ZlV!yi?Ka=} ziM8}O+u!jPya?W6q^gSu&JpEo3J#8;i>I#BCGs;66PWS;W&&Q-1Q|Uf$YqFQc8z^J z@wrSk0oxO63Es?ge9``j3T2+$u_dAo zx?gsF$%jv=2?O=Kd2`@gT&_!f($-pg&68RF6*k-By3CW#SS}9x%?H3{T$x-eouFW4 z{d{<6&uTjO16Yl#{Gi!`q_&3;lm*;`qk6Ell~n|b$sLHiLVV=iQSlH)b%;|1PSPwW z9-JG{5efNvTENGl5%b0z?JV>HsQZJ=K;$ljt2?x0sykwwf#?hu#r??v`4SB=i*UjmM0l-bEU?)rdNJjVJ8eMW)4P@chRWzfocyX+S_>M z0sRq&Gy6KcZTHikY%Z_QII+G>HxSv#p!G~QF4@JJjHnWmCRTe{B%tB&wOyWKHz3Vb zm5k&OImm+bXNh!8jqklgw$ak{K~K4CDus8ue|6^fAvcJluFi zH5_v;139l!sLSWHA#YzK7Y*8253N#$Ohr;;Z*DPy5`~)y=Wi51 z?x0t|ax)cUcxBxI>U_bB_xZ=RIe`q>;7=^USQ6uIg=Vh-njz`x>jy`^b(vr9enz}^ zaz5or>@aK&rAa_c(B=U2SZAu_;OpvY-ejft8{|-Td;JB(Rp(QXFZ zzY4NA3i_-W&|OGBe|br zTR{X7R{*>L`5Q9BDj+N@%+1qNqnnA{%pC}|{CupWZu^G2R!CE7!AEPYuYM5{670Et z-dsC(oC@xQOXvv`gZ3S@(ESxl_VlbQ9MJtlK8J?|Otr(e817LbCT9eDiS14H?i166 zrUw)KE~0J^)I3O9AHE?8xE=C(QaQt}zQl3TpT?c$jj#JYf9QT@x1n1(y*FfH)mJwY zaQyLQ);@?3)sH3R>|8ibZi<2|hYK>XC}@-dYE`p^jJ{VuL-jQ%s&bL-ef^KyrLQ!@ zP3hV2J(97q%6rk?_(Spqcqy|s{t>fc2WsHhJX3DTczda*G$X~#Flv8pW+o|oqc>dT z;Yg{Q0`vZDJiGFT?aW; zW}i>*Qm98v^4KSj7@;1NM4@PGgePkM0M6h$+AEhZ({jO0OOnVg@KOU;is5%j{ zvs+IUrittALxM!gjs|ZZ@A-Co`eC9L%cU;%+(wPL%74R>`{X*eKFvJ2@uW`fk zyG^g!h(|3q`#EFxfiHE~Gyw%=)sJ32p1>ow_ks++M5hZcy<`D(p11cER@NrG`+}F? z76asHNy!UuMaYG8>zKXDz)<^#0{#E1?hO5XOI06GB^mKVA=?UsnqQ6qH+=u%>00qG z>s7&3gLORF%!Ldb)lBc5;UN^aMibrb4le$}rQ^{e6OLA)bsQKC`CaCGEx24l2s219 z^X|;0WT5nB>*67XMFkL6gKhvGZXMvu$T$FdL0%)3)j!lwxx0m+d;Gsv3#B5`%6U`R z$D{b|muzm~h5z#2f*|5wHX*bassU4tqXvOE+tU9KL;bV!%pjn^VIpmECY^i&8jbe` zH*b@aw#YwS(rsKSZHf^LLz4RpI+EGN{C97sk8 zM6kfi&31kz1aBB{v4Q{_`E?t<%L^M(!lXl>2-3*i77JM}Y@FN|en_j2jnv8zVfGfV zL>62&s>*u|D0hxmFWq-+4ElU-Po-*AiOVa6tfbvk##gJqs!F(SJG~!7)U{E=G1@&j z4;I)+6jN-_GAHebW5jQ=7JbDN)~p0!j<#y{q)+p`w>YDAX?-kd|M8Ne6kYV+E;*cB zq!|BI$6@J62f|-H3o#PFVc|ET9vY~)*fRg+*W1kZlTP@)hGTyFPR?EVJ5r;W3jEG{ zIlA^5R#w~wxxWcV0l}CB@qTh?N*+(XLQ>r;LUaRq4K_N@qN4|7#Z?BQ38ag~c zVO0)TTPQBDxp*wAI)$pMu->{DRM2_7YHmqbrEX$#ID4~V z6sM3O(o}|*l&>uG;+b9*lc8o&4De@WeYxeM1SXfUH@9D+r@Ut^P7}q$ov9SP@ILR0 zTDLl4dhv=R4G>PKVlw0_x1s})OWir^mu3mwEQ`|)Pqa#$AuF(xyEifvD_U6zGjpU? z^#SQG58IYGeyyB$6xJfqS^v(daq4uTlt|i2*z*cSbFXdJIip+mMM{j zB1CBEk-(-5Bb}{B>kTmR4E$)izB>U?fl7UQ1USVV{)6^I`Sj3F1Ri|G{>3e5U8`4P z{)&0ucD>O~gwB8F-RDxz;6(9=$RUqhjG-g_~P^#?Gt94X0%|Gom%Sn(ds+ha- z%(?7d8rUkn&KF<&s!zs#IqcFM&FaZzN=s(2WK~uML>;a(f`I+HR2BUQ$u2 zbg0eNGVo+P?oz4ivrA0^#MRn9ft(-tk68VP0yE2;+G^^2>UG5}F^^aBw$#(v^|yt& z9Au37B|h{ChS!|#Fc^lJ{>OWZ(|N-M5Ip5TrlH4p$YuR4+x1P03%48D`Llbdah=cPIkjgpc?e-8AuLVV;vD^m5iGmL zHvZD|?CgPn&6{e97+){oZ#|wq@9U!DbT^&q(om-tKk3)laVS}7qJL2$=@^pUZj7)M zgd=3N6cae>Z*=(;5w%TjpHc7PR?5)v=bVyIJYLsEu0X#+b;N%sl?bRx+mAPnL3Z;; zL*w+JRTB3CCZ>LA=BH-ld6o18vSNj)J;d9lTB~5QQRTKV{IOfl<@uFd)AGKmo#G`a zl77+=wh<0>j0HDbv*^PDlAtJW>Dr zeT715c}Mo?({Z1>Bqzr5bz0Vw6$-4U_mpd25?&;G;IPa_a{cMaKBY`ALJYn+qG-Qv zOlmBM4+FE#?(S11wKPjVP_Aw&)@v@*5qnGMYv+SaBzTKKio7=5&(L}5`hK~ZdBKbo zHg#d@yradj@f*P>pOFIl`@a@MMgJ*?`g8gsv2wz?%5cs-LwZ6Mkod7bBQVSMrxw8e z$Wb0ODxcaQDE-MbwC;Cs#DWq84(dY?BI4JO$c~Agc-LPuwS9*C7!Fh-32!&s3qfEj zK6PeEN`<_j{Ilav`gmnG^18lS_2thWptXRT25Bt-9r(wZBfF2)FT1ot9iO4s=g&3= zKFIC0@B%7qVH_e2aw*TlukgTZ_vE5qyXIv2i%JiAHQ1qqqLbsC)lhYZ(%1vjhW5Ui zv5^tZOqh$ZGv(vYWY6sI#J&u&RnD`+zGHY74B=|DO7ZG91qV z+GEUTtXZIy` z+|Mm$(o_*EGPk<)`TJAfR6vp>1O0E#woM`m&j7FcP?4F;;lpjbQLwv5-%z+4=sULS z$8B=hqdIrwy44~q^lfh7I4+|80UKBS#A_NFcXR>*e1eNr^!HZZGF`?~YJ1&KlR#@X zBF~TYMV2Y;$=#dJ93~RF-aK<~aKB&UZPEEA!HtOto$So5yW&?!ETWnoOo^0>ihJUa z-u1YOrZ~SYwC-NIt>oyct6;c%n7&!IoYi~p*SYM?c#VOhB`TEHpu}pqt35eHsM@oY zq^tdckD4NF;;S(RO3AyJCa$Xe#|m27w{P)d+Y-g2_gxW zdAY^_ITaYS;e6&}l?0#$Jky~chP}L!LlppncIJR2dTHTzFw4KZEm9P~BzoGWnKH~9!T*HTf zT7Bu7bJv@FYeTuYzsHXd;o*44f39zdbfy=&!584~)#$pmtx}rd9>{PZ+3X*N^9l!- z(Z+MYgm* zo*a;zN}vZP`N!o}>V)Ir;qmVuSPG}(y}~)Q&cZAi7Em_;;ahgJXJ}G5dFc!qS|6OU zb;bvk_IERFL!5KUq?`9U5Udk9DNghhyjg~jC? z+UE%w9w3NX==_nOL)d``ZK^tNKG(Q0b^mH`%N;Tc`5$|m^YDEL^R;wq8hSvOwMEXf zXdJ>MB=m)(ZoY{keQWDO86$rrWyl?eJnDgxID>5eo^rwZbp5_w6*j4~VcZ{ebtyhL z-7EY3XMeHNx*v>PyOe7oWAyNa9)8_?3CZK@>0FjiQ)43;1m%)_>D8zvCza1-uK2D` zuOv;2&#~Hw-)tuBU`Vc6&E7e`@yY;{_|Z4}g(fwvZ!Iv3QrC@I6f=L*AAVOH4$jae zBd`e0LPUAkA7U(Wa*sd7SUJBN$)6R3e);w-0aA;_S#Mo|$FYF{z_~#8w`9sp>6ujY z_Fb>4@m9+1Dp`y#vO7Q9Nq-Ac88$1z4j-C8_gKs99HlfQ#T-gVu+QvvWw_KN$GOaX z?b)-#1`j?6h(5OIF|o30gKY+2pX6zBjlXjZBSf4XqQ;|mO{G%0)*y`JsnVRVn4rl3 zA1n*uO;gF~f=c70y}k{0_Q|8dAU;*f_bC^U&v0Vvy$mF$YjqFR?28s2B*_ zU8BeLjg2U*$XIExG_FNoZfq9BNJcS>ZRF$S zmTQG~!hTzp|J616l)4L3Z8<|F&L2}B9}dRVaVz|U`a#_k0RYUogK<$L&Q>qo7mi5@$d>$C5Pf27!|w(2sr=0V_y zFKDtLa0E1i*#AP4<^A?8h=SQ}fukunH%pMzqDTaj=+NFc>aaG8z=%hX=Qdho=K8jC ze#bqPwu|BpHEq4UGhJcFYhmRa8kO$87gToymMjX9FmEu1Ai3RO^CZIZV1#8qZ;Z)8%lg;bQZ;whdT~o%P4#^RUO|AbcA{hQ$LQ(o zU`#v%RdyB;*6^>hrG3w4DC4%M<1WGe3iY_5XMTVIx-tY zfZ4?zNa80Qz#wNkX;}9nV2b6|`&?%UWso{-I>Tq%!+eq;2?n9xO!6-!@RZ^G-myE{ z-7_qRX-4yy;!57t?tXAoN7T&775hU;{+wHf=IDM{*vjpY4~nfqRXeNWeWi}P@Ju~B z0!6s)LhpBy($I`?2pM_V63zc0PJ}YC?I(GoFp>az#>%Nf-kHm^~rmCf@h2kt()RkF1Iq&q-bt2M{yMFGE())=o~;4Z7< z$Mzpui2uhqn-}~J7cCy4vv&@!rZZE z-}o4$L|J>P5?!NZ7JVXFv$H>QF_o74ne=d+=+6?8P`knxI=Z@OE3hlcNQ`r7h+0#xL4ekPE01zhO{;%yECl^rT{t4KXym9ytN0Fg3kypane-;;s0Q>%X`h0N#qZmO^yt zt1+*vfL-;wLUVQ}cQ#$>lwEcBdJqM&G$7FsWLl7DX!|#r7R{_WjC_#kX0EZ#@{%_= zJ?+`1p3=_ZoRt2zZ5wcGna`X#Q}lAcpB>DNF2Va%xepW+!cVAG&)xk}Y;|xy$>&gk zk^6qq+D1<*d2vR6@u^0OQ1H^_%S?WEPQg`#-shiiT`Sv9Hd{`2hlPyC`Pq;0{3t5! zN$12;QLHW^At+!E1WyMaUoWg^KSU6k!lht|Z5*t|mILc5@=0$yhrYb}}-Y$uAa$whWN`9qcqK0`YpLA(3)r#7Ig1OZUB zt1KP{F-#Hw{YFYKVq)UX?zf!1PhPxWec*@K#bB%kvl0M%5kO!VC^DcRqlYd9#t?v+ zM}7lm%M%rqMQ~M^_;H_zz)n|L6J)oG5OC6!`vb4_I4u&c3Id2y>MM~})1&ugWRU7E z=5{%78Ftv*WX<%A;Vdn`dQ{&emEde!YpD9Vt4YH*k@N-Rm0@PJsQ2pC6|U{1+IJUI zbVmbdfm?NK$MJ^Ol_}{{yiXb)ZsM1%lK!6yG8ec6>4KbzaZ?9}7p8a|6===lZ?XP< zTur|Hse@O@9VO|tj7zG{Y>QTjy^KJ85X~nQlG-*Uq+?O+ztAT7q!GKX{?xCrE-F~L zv?joS1I_e7$VoJVYC`-Iz- z!cv%VuGt;^3!iM)&yd}7`p%6G>S8$SH=?ou!~clEbp`FVR^??o>A|}Mn-vGM zOBJlUYhPq=zdja-i)@WF7AfBsZMBJJ31Et-mVg*TEL!?MuvIqxQA?Fc!IGVn*G7sx z)`47dkZ#JYdz2GBPMl17kTN~v+*82ztdA49eDIY)Rt#`gpe*?N6PdmUtkR~P9c3oD zp8Sl-j)gI1+xJ?p)2G*d3c|ZJ&xK-L5i^J2+g^TpUw_2RG2!q0Q?=YT`bZdD;1PKm zyjUY|ygY-*k~TY!S4gVt43trmaW1tdR@sTLL=+ztg*o`fpgVIYQ#<(Zc0cyF9Lf*4%tBlx)E+mbc!=I-o87sHrM_Q9ch{%=$uq4pS0JVy z9`)vR#fVq@=PY%zbpGe8-JcQCN3mtxpQL7;47N501rgXgjCQ@^whdrJ32}z*cDIZa z?>ur>#D(n$m?|_ef#~oJf(0in;^k66Y19E?%rDQr@nko2|5hqf=EHMa$TcPGW-lys zN_>@}a}@ke)x6X2Hj+KIT)G{bJOp|GghdNKpj)}2QHhSY7GY=#U=Ns}u0jOHMKZDm zT;72n<;VNwwhi0AvtD9@Z`_BF(P7KyU*oF;+?;)<2xB7rMfg1ivvq%@5{opZ6=|nH&zc1d!x&G7$YL7 z>atX7I+Y_y{IBclY2L12rn-!O`(a4T&Hej!+GZ5wc*h%VyIuSDp|du_vW<(|d~%KG z%X2KU)C;X;|Du_gm`oZkC1{ox2O<=RvQ!)%x&lA&YkE4!)kKa$+h;pFJE0VHH>1DK z!jcGa&*BBaZ`|{=LQl2q>XFchyaSX_RE*{lyThp1Q{i3SO&R~oLaTAN=o-Z4u0Dc z2Z}pP0F6CSR&E63jY6&gF&G(vqzZ7HMHA5(7;`bRumB&c@UXIn53nG~9re~dDzLx~ zHUX?vIx^VJ1~8FHUCY}K8E9r3i@dVG(~KKL{%loDHh#OxSa1t61a26K7TAlz+n3>L z8?4fi^}YCopHexwTVS9(A!+L9c0TS$HHq`^Nn`yzD%kk^q*ZBB-G4jZG(eP+{J9?J z-kSAcckFk&QCSbh5SMx3I|1Jq*@x@WqZ2uNE|;iZiO3=vu51KrmCEKVJh>Tb3>vP- z5BEI>YCx}XGE=Rte4^s##=O*=mu%^({G@wYCMNP{AH^6u>= ztZ)JAYY>(^qQ2A!A}&jGsm&{5ByXh$yH!BM<-kySEF33tBUq!fa(Bxr`_*_OWT%6O z>rn-WxTep%^s1fP-Lbp5Om&S>Hc5N4w?ZhgJ1QUVeePGaA-#CGs9s8>0f&{hnM{S2 z9l{~;!Y|(Wr+1g*VzI2u6L(vo$9C@`rIamCgAJ4NKXK5f@tVefQB#jbWT7O=`;6UY z%lz)bL?4fXvgP;T2~8j^hk7~LGIDUd10pYS_(2j&(cu?cY*0;9UPb6upzYQe6N21b z=N5+fy{nq6!uM1vZtYDBOk1aJjo{4??C%K;OS6|&gANh+GLvQdOF(m_0?YYZNYsQN zdpJvxtdZVc1u)yR%}2%E{6onFHVBBgIFE}f`KOZ0H~`63w+w`d>8S&KUK!Uc@7s3V z@orq~ytOW@BH{0KaxxQ~qOImp+T)yK8&uRrIY>#l9ocr(C{3S!E@%Ny`ldPR{4!LLhDUjumTwyA4d?$;qcH#mfO^# zu>fCR-{_Dbq@ZX5Z-LO8D}Qt-&`5JY+7QSXYYAn9ZUOofLfZ{2oq%A0d?Y@8ys}iX z{zxi-0#u07zzLzba>WhaDiD_{me_rl7ruBl92!E9bCHrW&KhZB&z~p4a?lCf3wwL1 zEBq&Wy5^F%i<8Y7>-N@iz5LT`p}MeTftGG9WB;pe*27_0HZRBkwL5--+AZ(1M^L*T zASqp>1yW`m!I6HngWrWjt_O7S%#-4GQMiss%jEVoIDZu;rJ%h3?*2Uukb$q^SwM~P zw8O#DP@L$*lD_0<8kcNh9^+F2z7c-<5QbArdfK@HPKGA1r0eQmH{1@hLwqC5fT;%X z9DX_*IJJChXeFlZ1Bd8-62aKZO0XR1;1vm;Qiujk%C)8HmSAEG+4DJ^Gw;c86_0n% zVidAl&ID$dU9lzoCWc!i;(U3v!4Q4hXp3zJqFzvu1*@PSxt>ji(ZhLdreD$C6XFQ$ zsZ7r?oB=F?q2&QOj@yfpFFDw zO~7j1GA$P{b=rKfTTYUe|M`PCntGmK#6ci6o07=1>9Fcr(RHJ18!cpoBkOdFb3Tf@ z`ccj#g06-~Tdf@ji*d=NTOW9pc2;_IjT`c2$~#TRq%G%*V&JV$!e{pa^)8}L!9kQH zCorazZ{NgIy0AFkz!C=;;s7F7<0shL5_{&ITbeK=H`RNW)iAE;bXq#?w_sP-Nm%7p zgJtwY)%EQg!QWI}0=S%K{-)~sL{5Xa({1o+V)(_t8ig;7hf)c{PWQX3gReo=mC=J8 zM1+Q~>Em$;8W12vAt+jD1VtMibP9vDc*wOoEcFq4=_tJ&W_|5s{B%8-66jw^iP`UH zq(86Z9vV!@$_j>X;k|ngdo=R<^^J^(G|}7CIX)sJC{8$*|9L=#by4QIni@E@%!*f2 z3tJz~aO2v~izd|@OnWfa<*Dsp0dY%!;sW^8p>E%Tu#!5!cv%#}b7>P0M7%HG z5cQQSKQerLL=F;A-hBVsfy)o#p2kVI5#ehT)8rr_5xR*OPxud9IQstgdh_5cE0clN z8ZMt3pYwANB4%GoP)fU`d8+41`@5bi-3{;puyi3n#vb=h^;}L)C7|abg?k*4JVCR~+&5a9T8bV)2%&(gS7XvdR_1+Rv-S z8Gz4Ce4eti?~W7DO@{g81fL5d`hggtX6m{Ztv(K1G^jwhy1Ax(bZa23Y#$9xGdwH; z-K}j(d+nSk2RDOXkoiT{fyWcfVPEj3WNh(tpa5|;xa;4(+v(J8w7xrdY~OwN&f_Of zXshpjg^oEr{gJm~VPqtNcEC?edinBYbxjTCXe`6Y;xD{e2Naq}2{>y7QWvXP>*nOf zzU_Go1w(^~c3EjXO@iWSA&(mz@8W&c#Cwv*`y*gK1rbA#j#Hf)U7-$SC4!6Qi)_!> z3yXlRbWYvW=#$;J0|f)&Jv^C0J^m!|3T6J;618U)Q*^}I)pPai>0_%0CkvOy)h*15 zMnbS~VKiO1y|t$@v9Wv)?#~?D;>Re|Lfn3xOliqSUgei-pY~(%z07<^MOnM9SU<4Y zQ`)J#aCPQQ-yYPcuC{n66$ZpIx>vI-mN7F7_uIK{utme^w$_<<21WJfqp66|L#9;D ztoV=79)fRWQTnN=Zry($ngG1r|K#FBftAv=CFLRz{+e~xVPsihl8;T84~4dQ@!%rK z!dXxvoFJ|Shi??21NESBa<1L5DCQAZNiI0o9+D^9IyIy%m)-fne>-c*3{`MisD_;F z=EWWrP?=6b(ToJmE-KzFY}4iAfM&sx~Yvrx2V6` z7V0f}+=oU?d^K=ee$mg$)=|R@#0k(EA6<((aF$Devt*RK{zL5rdPq=|zoWSw&Y^JztSB%|xdBBAXqqO!Zi6;Ym3aG1 z(i3KPUUcrdSldl8cL`PydSRrhmB&7e;xQMrkxO-=bW1cXf7L!@^J#YURwVJpFcuC$L>uylQst4WhuqF!HB5ZaG-aU`~&eFOQMj!)lMS z<|Qo)xfum5O%K027(_0Bn?2OY{(YD!<&R4Cmbj|0SZo*vz^J(#UFMPRxbEu38MH1i z0Pq`%h$a%IU~9_Qm+JOU+B|*MQAT6SiHi*Fz299Ri$wb+so;Q8jU`4>ahMKOpMjYf z2PB6h@6t{cpDDzi@-c*ZCWwnWY#O9|H5G*m2^|O|e#7~T3d=e4K+z+<{6QOXBr5|X zHR$N*nUJvFouSqmM0W?7I6s0IaoZt#M%zJa5=fH-w~nT!CSq#8bSVpTIpDzZmrHrM z_&XPd)uqj=kV6Off!%}kR_5z|kFaw7)BM*W`K^y(! zvoEe9RtfnZonN0Sg39NdrP>tmvFJFyokJ~>eKCiGBF3icw(k$G&jK#3nHLz z7jj>#T~8;6p0VljZ!bTE(w;Kx&8w1jbqwz3!1Z&p7%K-NN?1$jJ(%Ik=c8k}q_9^t zraPEf+~k)_Vp|`@8Ykx81i~lV=My|uFwD-rvnPw}o>vi9o4Y{#i%zScXEpm=neKWZ zLWYmeuJHpzYkSC%9X5v`iEe%1-#DoW zh%p$3d^Z^s0Hy|zd|>`MU}76J4yo+hO{sADxAG5|@NRCVot0t#(xYhxOTeYu+kr02 zXOI?U$NX4oV#F#-E^Slsul^*Z7DqhIXt=au$x6#MHqe-qn7UqzcjIiN?kO|t#>?YJ zxAFEw>;3_&3nAhRDRgRN-O@8&uQ%q;7tXJBV-ls&9&jh`wq{E3HH zZe`=4kGnx+9d<4K9m162wOlQ>JL?~0pLJRz%q$psH2*ZQO-e|34V59%_JP{P!v}Gz z@^Ev@st)C{O&ukalu#so9}kv4WO2u%a2Joi!Xyw$?Q*P)Qx|xX+N_xQX#Ol#`F?xmjs}J>bqq z*M_rwGBmu33J?4Dx#R8NOd&sY zrZl&lI8(SYowm&(D{6o%5pZi>Uw9lDv-#xuQ+36jSsJ}(7w*zw*-qNhHnU>7b&Ve8 zez8AAe-7Sjd+>0+ISunM6S2BwQNeO4;CgGU8P*^+WcvMsND4MTo^u^}R3o+F95TXg zF-f_pgKA?)Y)BF}LPL^h55iI2Iv0@YOsN|ZK^Z7>>#J-+n}JW^t{he0+QkkwZ^kl! zFrXl5k-tyOCP&Ty^tObb`Gs;253;+v3nTEL$jG^;tsc|O|Flej%6kx75~32{PK}ab zG=q%H(iN@68Ih5ppG7_X!mr$%IZDSSH2o40l9`}iM-W?}&GS+jw}7T68DM-6mbf!u z(!73b>prZe4ni`@&_NzI48?n~iy$#gp-umo4S7Bate0pAVxf2f9M-E>@*=mLa)GZd zl&&;L3B57oDME#C(G_N0@F-J>UHNp=_TUEIo9{lR$I~8Qrzq{CPy7i9h$R)u6h^Sz?x zB5XhGmooYX8|*?58;YR!iaN$>mfYLd=h>y9QkK6-2Kf3~q%gVY*M;;d2`^#AB0xw= z2eBS+m<*r#!1}IgRIgl}S1g^b=kVS9Piq)RT4uBz zON|TK&k@Z8ZsDW&7EN8Sa?>mDfz)-3X3p5DgclMEwai z>)ywaRvbGO|GO1i(1?7vZ{2*ESN`o?=jR|ik!1oi4+i?r9;18Hw6z>*5*8S+?%szL z&4?Lak<+M(D_jf@%sg=PoerT++bLvm!w_;WyqfKVv_}8HFRROdn8C*%$w&dTfLFu) zVeA}R-US=M++59qKjdRjr@P-fk&hV|5KJYNmz5nwUbX_RuR=rP%&3WYkAi>cYBKpX zculV=ng>}R{gBYog6NXFMVuBb`Pc>QH$7o9|^i_mTQ6r0A(H9<@(7R}uJN<7&1A&<+(a#*~fHpfeFWt!dqqwxt?xc5H`0Tbjip zj)3k+#4-Qd#``Ep3F__I(-e{8K1dPi;nYxPl{S4e>d9LM23f*HZ0+V=ZkO#Ypl9V6 z5WB{`t7ucAyLC#>%1v`C4oTP@51;3MY|3y|tmf4>sn{mbyYt_V&z-I2V9&NUN9b7- zcrNOC4=&S<(<&4s{(Q>zn7S!$iK;1>9q3u_$dcB-?xvp5v({5Db4eq2%qntxdRN{| z5lhmso=~hzePkoT?++3WoWo7iHupO_$_Wy*v!4-fS|%^glM-`bkc)ltN`8@p$i>p4 zt%lgYsjmlN-O${eAdz3SJGzx&!M?<#IsKlMhe`nVM+om0jpHGk#oqQOxG{fw4l=pn zQISa*yzhQ`T&0FH4(;8ET3goKimlvONQ_p>y%tfGBxb5DP z>pV+JO44%f4vRgkYEam<8P}UuTwu}NCo9`hNh!(Xwul#ah5o+u`H?mUq=k39AR zY|AV3EZ=pAMuwR@e7PRP6?P!(tbfuGF3cC(a>E%(>C%!CG%|v~MIm4YZt{C7C?`tE z_(nJ>=QbTS91vwSrn$NKQK;FyxeJt^cG!<4E1mJwg;wc!+4io#wOsW@F5~gOYqo-J z4zfl0@d^!Dyr6*Joel|71YpZ47!ihVoWc$pVjy#YvlImXYdo6*k^g8~lB0)7PDUnA zv_Cbev(3H$gcj<8GI!ielhH;!^FpjJnoin^qDc)U8dEw~_R@a4bS%svv^I|jrd~3P zS`{m9{uvQMBV2X4_jX-SwiH8IIdxP=eq(3n24Cpnwa-KC6w0#gzp6c7KNaG*;t9GU z!>tc1KS%g@sMwC{hix~@2msy|T?s6d()U;x1|MFZo!|9fr~Vh+%I`R*ha+$QIKbKt zcJlo{iEf`6KHlmX*bCc6x{>ALTJwnvR~plL&9QUIoIt$_ytTDApOO8K1qp1jQePAX zmpSiSKn1Z5`k!_91B8^6i_bGo+YmTQz`XEJZOEjx6C_NQtTnIzV*tti(AQ^%N*ags zhC38^0O`7CY<&IASzJvZXT>^XlixSwyQ$Py$S$NfBwg!4In}|g*A!$-h^RJ4 ziN0S2<(An>eUu{iw`0lNnv<@>@nRQf>Q*%>Q2x<#tgz4OKLkkJm(RNzH~FszfFx{f za3fA5ub9s;&%U8%?loVRor`DFq>ZD_JX;O21+mnngO#&i(0uIA%Y{o`enG_!nbBzs zSMx{!YWN}Wf#2i9U_B<5Nq~|v0{trc82sq5lV?GXWxw#f4l-~6TN)f2+XDH6fUz{5 zo1B_zPrQSN1XO}jF+#}x2B@xdrdwhTKs;n*=>)Q@186>U5PH8ZFF4uj;9~x4Y+V1= z^Xu0y%yK!d8vv`H<(q)Sfd4bO)nc>LzuSYX-|h_~r*RvcoQiq<6os$#Wi&Zi%Jlen zSBc}7Xt58$U0UbX^^{D9L}a@^yVxgsxLl;6_$K0tHjC)3SgNjpVutkgKCH~Qf7`~# zemcLr`L^;6gxf@;Q1#q*`{y-?lfX-imAROnbx_zCZ{$sBme<#C+w#CfZv$orjp@_u zN>B)lU;)J(Fe-YvVZ4G)*TDw-Z-iGjgoFl$p9oOGQ6VPw<9SrNYS_EGgYjpcRa7Xn z$Pspq7p&s$IZD8a$O3XrZ6A0H1nATl<;u>+AE30HP^FmpSsgMprP7L6^n zCnCKVf)8O$)6eeY4~Zav&T{wk+*5x0DGCn%3s(*S=sK_olHQgy+rWuDbPU(tbvn=#o~X6_a>}2|wnTo{cT!Z6F0Faw zq`>jC!_l&?*s*|q^gw#>-)~9sD0g`jDA7||W!6kUv&BB{m6`M<7(h?v^=;L2=?5B4 z{E->xkGr=n8dLH=?%u}4!6B-Zybo$v7~?9cJxr5R>%#t>EVPBL*6I*lhWAKw*|J=7 z=dIA|bl=*S`IdSw+46e%T=*T47#bv9)wKLD6!JiB7yZ`l-61=KK5_r-TuHy^eRzgW!XsSwt>99taxT9mcQZi+kZ!4B_xR8;iY&8q{B z)W@w@fnA;BS02rS^*iq}9cv-6**4Z%d?GUS=7%Nxs4ChVeqvcS{Fmax_n0YYYB@FvOv6ai8pcUGAO-v_F>U$m>bKK z+_i-)ya(ahKyHQLE2alo-jI*gG?i}tR|uh^Vt?<^l6Qsr$Mp1;llkK;!h3pC)4poh zq2hnyg;n0iC`JV@Yg_W9u0kk0I1ti+LkPGQhw`+1B{4jr^v zFv>XTcTakdH|HZpKk_pvzb}Xa9&y~nk=b>^OP3h@+OFMKBc>m}<|da?szXpb^BOJU zNQ{T{4Iz6<+24g+e%QsI-{;St2X^k&1~=boSEwKfzhw9JDKgYnHVg)t*J}!?BTcV`^;5aF z1Gcsp9FTIgoB!Xd)WFLZEg~BVKAb0}RRkxSt<7bXT#@btqUJ)@tKg-^p?Ormqv5XRC z4J!C`<1EMPl84565lQDA&KGv4opC;%5N1WiU~H@Fu71r7#qK_7Tm#hUEW6C09!>k&!FCcWCYt zB8mG8a7O@{8X+dr`|1t492YteGY;>w+xVMQUSK5 zi=0+JhI;R=)^0-NM=({aMH>?Nk#Es%U;gEF^POvOMML1}I=*|Zw4t;h(L3g8R<9il zDZ2h2=_vd$-9CBaPX)}>Q7*ec{@|5lS8n#f$c8B(^6mnW_oTP#>#<$d1HC#Fs+2B6 zDY&o`sT#!}!}$J^lK-O4O+bAhVR`fjg#wt?VU5EGB=*!54JhfI2)2 zgR$x7Y+PI+U>fd#@(z$X8KqlF$xeZPwH67j;~)l&YG!Z`f>bCJcf0Pp2XBlN|CfG{ zaw~Bka4U4}OT(hg9awK&`HY+jlnNA&JU4K()bS|qw2(#Y93gz(d0=h*hkg)OhaU&9 z?{MNa=kq9TZFPXi$2V{1!}h#cp5|hhCg)X z`r`J_C`0d-rY#U~efxODlf6}|l}lz_oko5qREd`WSW6BH2<)rZ=dp2LtS1SK{!?cephmRaRN zS_&`VxXAJ!TTR$KLORBF6rIrb#E_JbmPq4Ri|<8Ow%+$R=Bb$QO5R)~w;<^Nt|u~J z2(luHW}y2$v}(L{PKCt3`PUEq9({oGy6MAnwS0n-F=Q_s7bDa!WopQ_6@|2Y9cxz> zme9|hB_Je3<`PJrFn+ox3P_{G3zA-eV&KoI-Sujt8_}law|XR>I*xep)RDi%!u0W{ zV@o{;s5jbc*WLnCS%yLb6hhLWtTZ4(gnWwh@*{@~3&uy$Bd}xD8Y;1e%Ga)C{@+_h zFhE3@-#<9Dv$fbSye;#lVuatTfAKSn*Ak|UIVm89aCOxfw`eL8bz=( zqW3cD5U^Y72zKkC2l2tn1N=Oq=k0oy9BllN3WFc^tJM(eh-UTrd8j%b5w0U1J zE{@46!FUHSIvRfDL3;+$`=uHcv|B>!+>)kgbT5C8Grhm>mqhQhzCa;$FnV*0`&LsF zZy>CR00`F#NDKtQ#XIbD0;PtvACfHtYdePz%HK6H7(#qtS8`?r*m49!MAZX@mau2N zz{$ypL<_;ndbOHR2BH+||L!QEV`B0Kj!6i-NESrdK%yB`Pgmg0gS8*zaxOg2sM&eS zLA6ac}(gvwRC@^gp*82e1C;w;U(^w|K#uKXN#}GoAR&>8l&vE7Vu~GHq?)WaNp0 zYy>t5sXHeI^NW=q4fV?}zUe5OB8#N}nPj8SGfM_n_1n`Adh8&meyP8{C z&PEdY=X|yktbg^`H5UM zV!yO%zQ;q4Aw@b8Cznqu!kjFk#@Wl7)27YCNA{8BhwC{#W#AU0rrJ+^*mvnLY!AsJ zRLSQ;NLgc(zd#o^ z+tJ)OV6I7X>cr@p-;AxkI7kU1Aw4j$|B2nI2J99xVn2D2iECFyq{z+yvv>@t-A^1I zszXj0|4nrkp2CSbD-(Y;we0uu$WiH0Qc=qBKK2EYxG5QIMr+TU3pJx=kkc-0WtCG7 zXZvXap`PBCKhC~?@`5ZJntjd4Ab~47YNig`B8~|Nb%FW{*jwrxuqy0wsWADAxpjJ_ zP*G6v>fh4!gT8Xm~o;lBH*nv=v{~%8L{2jUF^NC!Oi~A#QOj2^c`>s`C`6Ms{*d+e9 zC0Z;^hH)q;R73Y9Zaw?|kz8v>`F`^H)BcRyJkP^&Meo&T%y^w$Tp*R+ztmD^a>JtP zwWP$L-BZSIrA|d_AUfUU4eCUl>|JH4Fm+&K z_$WgVP{H8R7PbxAX@62YxP)v&22JWFEs#I8^0a?>$i6&bdvJSgeE6txro2?{lwz*>Cmf zw#`}rK@kkwO&5-1P4c7gL=WD<0Sk=U-qGpuNVC7sIR2-0Alqmr1`ZUBHpEX&^<8?y z{GEGQIAzV3}@GZXMjGfDLagMS7XfUXqH!dPfE<^(af_o%e z8l3(yGc$U~zQfx3=D+J*{+qrMSfn60ug=cuQ(wu4XKg5eYNirf=y zAvrnRq3mic|Dpvs{@-aqzI<@hG#nFu18T3W-|{bXr#>qP-+XA3`iMljOsJtT|AP7` z$w~BxN2lTfC|=ZFGyYq*dt6+bPZ!4b-=J)lv( z$;THCD?daNBf;4+nw+cF*k_PaI{v-8J7KY_xY=CAiTcb1%B#G*VH+D((CDFP)djr# zouiK^)nIF+(-K_|`mLYf9F_s)MY2rXR)MXjmlvoSKv7H&Uj{}Chy#cIkX0$i8yvwP z%~Aw-a!0a^sihMDgyDlC0zBLM(ye&vEJRpTb|a{Nv$_{`9Tzg8u_4R$!p2WBaUw|O zI?BK6T|RdWIu^y=TXt_fG{P|zvzdJzF*Iew? zfccDBQP_qf@bl)>BHByixiDU(8Ip^Y@p7J8kcA<_Idt8-7gk+3s1A+?n;RFFa}lLPVp|Cw3)j= zeO1#evS&5&jp#~!*`ZLu*mEdxh4$4PX6Ydr@;(G`Zyz3SEdeNGtp#moJGyXEgocLX zJZ2dBYcbi2pfOgc`6gMhsr1$Rr3!nRNlmxrVs~S(OZb#GuCv(yqL!5gwtf)6&!@Iu%?ReLCbzw zxotC8Zd^X(hwyzSy|VgtqOKBM?;+2_Qu#@lGISo&n**o)@*xn-j zSbv0%>@N}sT%Bx1 zZ}&^` z;Z;bAms$wBKX?uGV@e9PY6b~d!j-(lncw;h=)Jp2bX{5G)5H0+3!U7GndYlFCDt40 z>EVj*rM&F8X|4-{biHktqpqU<$d1byiD*p8G(Ehr^DzOUs;V5x#!VbQR(aM93BKkn zD`e_S*pBHDl}zT!3YXLh6OHZLJrWIG9h`k2H5_cqETxH*_h zA|ocsiD@fD%cI#=zTmM+p`1lwK(RzM%8#9?-u1l{sKoK@n`h+A8{eLJNk_;1FO*sZ zFsXww-WT+|^aEQ*<&?FpL;l7e5?4ptuywUM+Sh)q$HvCKpUW1-mwf!Ir-!jR#uO$Q zF^|rL=ucd)))k0qzBG6C!<EdjxKC!R1b${wC|$irwps3lCz6Tze7)7PLQg1d zh@HBu94|#q&Evoa10|E}2Mr1v3Kfb8%6;`!)RnVT&u_BYYxz<JnkkOSw33hAca?AdR;Ru5Ud+OF?lc|1d;9SePLYuHU9zf3a zOTfLOdwy%|TQM67b%L0ij{urtgNg=nsYc}(d#|n)5*yp za(+uvK4`5lZzk2XR#ZS`4?Yg%pFn;kY%qoJhp8xm0M&ap-xMh&j)JR{PLSlM{_Tp@dt?uBsi zF0=!@4M~xc6zqA2QFV*&mMCL zC49ttZS98a^LKAN+0MOCWnXeyeClKaSYsM^t^_G;9Z^TR>|Sn~GK2X(eTY zct^-MxH}$KI&ZAHG$5aYPFk{UsCA{=w_L36Ti2HXv#9R)Ae8W*xNoLAnYl}M9GNbh zYcPF5l3nH`e%2++iJ|N$8BcxDI+3ZvJ-__9zeo9?;E3Z?GI`MFFwTrC zZOL5H?1<`22EVZ4Dm#m^5@Y1?B%d;v6Z==x$Edvz-qU*xreeDb#A5BY+R5YNYzM=g zsFqh{%*qd#)17x*9u)4(AN3Mp?7L=R-chs1>_{)tc@Q8?R4rk0dF!|z?{R@PX%lhw z%8*Jvs_l`G=HYL9`kl%BxT@dt)Ia-2%`{e*k1pifjx0TtZ@E^}*#TvrTx0YRB$))zQ zOQ-lhYP#}xD7!B{LkJ-xdl-t)SfW9;>>*2KNn?vd_OXi)gE3R~?QIegQ796Xb&P#2 zuYEU`k)04pzdQWi`}xctb3e~>pXZ!=pL@^u-gCZZ0;*1RTOe<2F~^~>;F+e&zJy>~ zf-kKe_nvz2x$G*4Sp?pK^@B}T*~y7!>+pAxNCmowo}9BYW zpMj_kEP1a|vpDQl4$3CJl4+4aX#$U2G~k84H%&kX2CYrXkoGGwLcX2v%`{9GRDefO^Ms$ld%N%T0Vbtc*0^+*N{2_9bR}8ilU7rk`|G`{vKy6aee-mD1$1DaR7_R$puf_2cq9ajh_XnRK7cvJZnRa zE6NVpVNe!0q(!aDktHmy6^=5$_Ls>1sjSSynb0zhc zi_-3wt@8#}ev8-9Atl6v`kZ)#K$4ASd&=N|uh_w>-b=FN8dgHb!n_vfO~yn?Td zW1n92ruV`9#s{&I zYk%enRXba|>T5rptG*q;C)Lm2LgIW$lMH`6;dW*5Lm&#C^|_iM_zqzVGc4Wu#|POj zcgJh=iLB%)ktZ!Hp<-Q&Qnw_bzvkK%1E>2wRgLp>h-!5sQl2~2U##SWXjn@?rxF>R z?5+FHCkm2K!E;*OxK{Y2`|n+n zk1cb`J`Y#g*otSwXeD>jABCUgrBNwqjJvD4LW_M+NKrA9e&6%no-b!^nwxg|^fahZ zNBct9L~7_ws1fD2Ilj1b2;Dzh|Hv0163PRiHwlKy``46`68?6uK>GW5e>Kplqknkk zT6e2kxG(SWFKkHV^mGDpvnRl^^7r4#IC#V+lgJyrH(4jZzqX2=dGD}l&1+h|t4G{d zXw&Rb|Pa&6|GibHU+m=)qTai%v6@r^oUjp<`#%4h&y6hbU=W^(@ui`MB76 z^*0it-cd5RvGEMCJ`uH)EpaR7-$U-+0!{s%NW2Pn7PXZ6ckUdCIAFm%#WOwN&8j`A2my@B&q zzpUdZw?S;N1@5TPwbHhteFTj&ps!cWT8Fj6C0~iU!zNt!=<*L|WF&u0=(N&O<6G*8 zbi1J}K5Mm{!8JA+lXZDaGPP~EE7vu?mCaF?c#u&bP0d6UVi2xVI-?mgj_wkWj~SRm z%F{?tVMemj;GNw)L}PzM)Ii+`dCg{Tz|@so(F~`1_>W}9i@eb#vnC*d2Sueu+$6wA|jy9C*boxMXfW+O1* zHZCv{kWIqhr7YoDdsTn8ny^AhN-yLay(scKdEH(%GwLE0OrMbhl9HD8kYD3Fuwk6; z-xrc_4LLaEDis+{7e;Xk6++C6manmhMHW`2G5OC+r}0RMMRF{!17me4X=8 zBQWRY6p4qZ+B$Cp*EoB63RF1Y(7*rsbE#qV&7BW|e-eg=K7K?lNrTTj?8aOM85v{%bB*I2=1WN;PlF{EBU#)u`VY$OrFnAt7Ne^tW7gIh zi~22u!tOyK?`XYFhBJoKh4Y59S%yHWBXrG}3?_)=Qgu11uC6W&LLUlGU&7V7$XWp( z4Um{%z+Ob#)%C4(lMw(RAUFdgjR#ferh5^6imG3x<5Pf%+CsVpE}>L+IcWw2R1Vmi zFgOhA=bqT#@2>v5()^@nA#!xZsM?-kJy4l|y9*p~Pp$lJ*wRcLYa@a0|2*)x7D~nb2%Q*XP;zlT4H7@UP7hr ziB%PqarOCJX7kh| z5pvrS!whfL@cAZygO7VZp!F}uVm0#au>$L6ad8pQP#?{U=RZSLhZ@)>XJ!3nX-~m2p`j{(RkDKFp>um@C%3$u9R$Bv#mLT& zjE>ra!x`rYH$XrD9Fx&xeew2+;LX|Vz|#Tb25_eAHMqJ)4!fPr9jye47+ujZFkl3{ zZET*(-5?aEVQD)zJ6nCp#Q9VOzo+h~w|iU@&<-#%U@)G1fr-EB&OGv9Jne@Z>b@~i z)}QjT9SY_EnSz&C1=2A9#es$Nv^x%e^3v__FdSYIE7OM)8+-^1JU~5s7_u-w4|owC z0vHgBI*g7_H1GptNQB!=7oz6t%^T+%&CLXmaEmd&SJ!ZLC$xkG+wC5GD>9GM$OGsC z`4*faX3XkPbce5NC`yF^&|(#%e$faw`jK+&m}+j9aDiAH=xLgTL<1GPE?gdiI*hv# zj~5Gb)#IfgA!iSd0i~!sFglz)2c6z~lmV^)fJgw!j2jp*2fzf2Djr$!2QgI?;E8Rb zD(EZpJ?N`V^yZ$cJom2XkDC`hLKFyqP~>0>i;+6Wam*dgf|C zZS?v6eh|Vcz`N~0fo|YKj*WH3wUyy6Jx4fzoPa}RbAuo^0ex2B%!bS&f8$xjqaMvQ zg>}eYQQH$qyJQ{rw#14W;vj4D;u1>hsJzlkyFV64LbUkemDvA(gMESseN9bGK}G!F zTlJ(oR)I%V7(7=p+tJ`;Wvb5}BsK0%UM&t)z3O|CHk5d>(tZx`qqP>A#veCIutHit z1un(eJ5x|_{&B5x8_Y=_igEeEH!P9X{5AU@eTp06UJxH$mUpArwlEmm0LWxvY9=p0 z*+&Q)-)_#$`JuP-)t{g6)<|j|D_qAV^<3Q z@5O|JL+(mj++@w{rMdfqkX*Gs>)GoFzmUl2TY3VR+4owKz>W7tm99RVbPT|w}Z_VFv}o%nVM)zCsN zq|Z$!dt_28jng+orb>{uf1g^@;FiKT$O1QbPzvE+Ea|1am{Z>v%!Rk%&lIF~*TH)0 z*gmvb`V!7&Re2+iwV7yJy+LV@cxgfzCDSh+NozP8E+pzxKSj@%eEe0h-S{b85lBD& zK1o6F8jOx8;`1$@+V6#<>v0RF%Yl_uTSRR&<}@NyQ*SoBstx(82V-+QE3@6Hmhq&n zO%uaVM`yG`S=*50*U-o3mgSE|J1miCP&ISj_fS;Rus0gts=X{1c=K2QEoxr#&9fes z7-Z*j;syUBp|sAlc(GMFze+mpRaVo@Rt)0!Gt9kA|KB9wJ^vTFB86sLT=q(ZfO1{i LNUKD{?#cfEDzlP- diff --git a/doc/source/conf.py b/doc/source/conf.py deleted file mode 100644 index 0c3686f..0000000 --- a/doc/source/conf.py +++ /dev/null @@ -1,75 +0,0 @@ -import os -import sys - -# If extensions (or modules to document with autodoc) are in another directory, -# add these directories to sys.path here. If the directory is relative to the -# documentation root, use os.path.abspath to make it absolute, like shown here. -sys.path.insert(0, os.path.abspath('../../')) -sys.path.insert(0, os.path.abspath('../')) -sys.path.insert(0, os.path.abspath('./')) -sys.path.insert(0, os.path.abspath('.')) - -from tomograph import version as tomograph_version - -# Supress warnings for docs that aren't used yet -#unused_docs = [ -#] - -# -- General configuration ----------------------------------------------------- - -# If your documentation needs a minimal Sphinx version, state it here. -#needs_sphinx = '1.0' - -# Add any Sphinx extension module names here, as strings. They can be extensions -# coming with Sphinx (named 'sphinx.ext.*') or your custom ones. -extensions = [ - 'sphinx.ext.intersphinx', -] - -intersphinx_mapping = { - 'sphinx': ('http://sphinx.pocoo.org', None) -} - -# The suffix of source filenames. -source_suffix = '.rst' - -# The master toctree document. -master_doc = 'index' - -# General information about the project. -project = 'TOMOGRAPH' - -# The version info for the project you're documenting, acts as replacement for -# |version| and |release|, also used in various other places throughout the -# built documents. -release = tomograph_version.version_string() -version = tomograph_version.canonical_version_string() - -# Set the default Pygments syntax -highlight_language = 'python' - -# List of patterns, relative to source directory, that match files and -# directories to ignore when looking for source files. -exclude_patterns = [] - -# If true, sectionauthor and moduleauthor directives will be shown in the -# output. They are ignored by default. -show_authors = False - -# -- Options for HTML output --------------------------------------------------- - -# The theme to use for HTML and HTML Help pages. See the documentation for -# a list of builtin themes. -html_theme = 'default' - -# Theme options are theme-specific and customize the look and feel of a theme -# further. For a list of options available for each theme, see the -# documentation. -html_theme_options = { - "bodyfont": "Arial, sans-serif", - "headfont": "Arial, sans-serif" -} - -# The name of an image file (relative to this directory) to place at the top -# of the sidebar. -#html_logo = 'img/tomograph-tiny.png' diff --git a/doc/source/index.rst b/doc/source/index.rst deleted file mode 100644 index 12de5b0..0000000 --- a/doc/source/index.rst +++ /dev/null @@ -1,11 +0,0 @@ -.. _index: - -===================== -Tomograph -===================== - -.. rubric:: A library to help distributed applications send trace information to -metrics backends like [Zipkin][zipkin] and [Statsd][statsd]. - - ----- diff --git a/py33-requirements.txt b/py33-requirements.txt deleted file mode 100644 index 2f4e3a1..0000000 --- a/py33-requirements.txt +++ /dev/null @@ -1,3 +0,0 @@ -webob -statsd - diff --git a/py33-test-requirements.txt b/py33-test-requirements.txt deleted file mode 100644 index edb54da..0000000 --- a/py33-test-requirements.txt +++ /dev/null @@ -1,9 +0,0 @@ -# Install bounded pep8/pyflakes first, then let flake8 install -pep8==1.4.5 -pyflakes>=0.7.2,<0.7.4 -flake8==2.0 -hacking>=0.5.6,<0.8 - -nose -nose-exclude -sphinx>=1.1.2 diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index c53d103..0000000 --- a/requirements.txt +++ /dev/null @@ -1,5 +0,0 @@ -webob -statsd -eventlet -thrift - diff --git a/setup.cfg b/setup.cfg deleted file mode 100644 index 12d346f..0000000 --- a/setup.cfg +++ /dev/null @@ -1,39 +0,0 @@ -[metadata] -name = tomograph -summary = Tiny tims tracing tomograph -description-file = - README.md -author = Tomograph Developers -author-email = timjr@yahoo-inc.com -classifier = - Development Status :: 3 - Alpha Development Status - Environment :: OpenStack - Intended Audience :: Information Technology - Intended Audience :: Developers - License :: OSI Approved :: Apache Software License - Operating System :: POSIX :: Linux - Programming Language :: Python - Programming Language :: Python :: 2 - Programming Language :: Python :: 2.6 - Programming Language :: Python :: 2.7 - Programming Language :: Python :: 3.3 - -[global] -setup-hooks = - pbr.hooks.setup_hook - -[files] -packages = - tomograph - -[nosetests] -cover-erase = true -verbosity = 2 - -[build_sphinx] -source-dir = doc/source -build-dir = doc/build -all_files = 1 - -[upload_sphinx] -upload-dir = docs/build/html diff --git a/setup.py b/setup.py deleted file mode 100755 index 1139d8f..0000000 --- a/setup.py +++ /dev/null @@ -1,23 +0,0 @@ -#!/usr/bin/env python - -# Copyright (c) 2013 Hewlett-Packard Development Company, L.P. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# THIS FILE IS MANAGED BY THE GLOBAL REQUIREMENTS REPO - DO NOT EDIT -import setuptools - -setuptools.setup( - setup_requires=['pbr'], - pbr=True) diff --git a/test-requirements.txt b/test-requirements.txt deleted file mode 100644 index 9d57fa1..0000000 --- a/test-requirements.txt +++ /dev/null @@ -1,11 +0,0 @@ -# Install bounded pep8/pyflakes first, then let flake8 install -pep8==1.4.5 -pyflakes>=0.7.2,<0.7.4 -flake8==2.0 -hacking>=0.5.6,<0.8 - -nose -nose-exclude -openstack.nose_plugin>=0.7 -pylint==0.25.2 -sphinx>=1.1.2 diff --git a/tests/basic.py b/tests/basic.py deleted file mode 100755 index 182a9f7..0000000 --- a/tests/basic.py +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/env python - -# Copyright (c) 2012 Yahoo! Inc. All rights reserved. -# Licensed under the Apache License, Version 2.0 (the "License"); you -# may not use this file except in compliance with the License. You may -# obtain a copy of the License at -# http://www.apache.org/licenses/LICENSE-2.0 Unless required by -# applicable law or agreed to in writing, software distributed under -# the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES -# OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and -# limitations under the License. See accompanying LICENSE file. - -import tomograph - -import sys -import time - - -@tomograph.traced('test server', 'server response', port=80) -def server(latency): - tomograph.annotate('this is an annotation') - time.sleep(latency) - tomograph.tag('this is double', 1.1) - tomograph.tag('this is a string', 'foo') - tomograph.tag('this is an int', 42) - - -@tomograph.traced('test client', 'client request') -def client(client_overhead, server_latency): - time.sleep(client_overhead) - server(server_latency) - - -if __name__ == '__main__': - if len(sys.argv) > 1: - tomograph.config.set_backends(sys.argv[1:]) - client(0.1, 2.4) diff --git a/tests/bench.py b/tests/bench.py deleted file mode 100644 index 1c9a64c..0000000 --- a/tests/bench.py +++ /dev/null @@ -1,40 +0,0 @@ -#!/usr/bin/env python - -# Copyright (c) 2012 Yahoo! Inc. All rights reserved. -# Licensed under the Apache License, Version 2.0 (the "License"); you -# may not use this file except in compliance with the License. You may -# obtain a copy of the License at -# http://www.apache.org/licenses/LICENSE-2.0 Unless required by -# applicable law or agreed to in writing, software distributed under -# the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES -# OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and -# limitations under the License. See accompanying LICENSE file. - -import sys -import time - -import tomograph - - -@tomograph.traced('test server', 'server response', port=80) -def server(latency): - time.sleep(latency) - - -@tomograph.traced('test client', 'client request') -def client(client_overhead, server_latency): - time.sleep(client_overhead) - server(server_latency) - - -def clientloop(): - for i in xrange(10000): - client(0, 0) - - -if __name__ == '__main__': - if len(sys.argv) > 1: - tomograph.config.set_backends(sys.argv[1:]) - #cProfile.run('clientloop()', 'tomo-bench') - clientloop() diff --git a/tomograph/__init__.py b/tomograph/__init__.py deleted file mode 100644 index 4e7bd36..0000000 --- a/tomograph/__init__.py +++ /dev/null @@ -1,43 +0,0 @@ -# Copyright (c) 2012 Yahoo! Inc. All rights reserved. -# Licensed under the Apache License, Version 2.0 (the "License"); you -# may not use this file except in compliance with the License. You may -# obtain a copy of the License at -# http://www.apache.org/licenses/LICENSE-2.0 Unless required by -# applicable law or agreed to in writing, software distributed under -# the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES -# OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and -# limitations under the License. See accompanying LICENSE file. - -### Initialize logging in case it hasn't been done. We need two -### versions of this, one for the eventlet logging module and one for -### the non-eventlet one... - -from __future__ import absolute_import - -import logging -import sys - -import eventlet -eventlet_logging = eventlet.import_patched('logging') -eventlet_sys = eventlet.import_patched('sys') - - -def _initLogging(logging, sys): - """Set up some default stuff, in case nobody configured logging yet.""" - logger = logging.getLogger('tomograph') - - if logger.level == logging.NOTSET: - logger.setLevel(logging.INFO) - if not logger.handlers: - handler = logging.StreamHandler(sys.stdout) - handler.setFormatter(logging.Formatter('%(asctime)s %(levelname)s ' - '%(name)s %(message)s')) - logger.addHandler(handler) - - -_initLogging(logging, sys) -_initLogging(eventlet_logging, eventlet_sys) - - -from tomograph.tomograph import * diff --git a/tomograph/backends/__init__.py b/tomograph/backends/__init__.py deleted file mode 100644 index acd7346..0000000 --- a/tomograph/backends/__init__.py +++ /dev/null @@ -1,10 +0,0 @@ -# Copyright (c) 2012 Yahoo! Inc. All rights reserved. -# Licensed under the Apache License, Version 2.0 (the "License"); you -# may not use this file except in compliance with the License. You may -# obtain a copy of the License at -# http://www.apache.org/licenses/LICENSE-2.0 Unless required by -# applicable law or agreed to in writing, software distributed under -# the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES -# OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and -# limitations under the License. See accompanying LICENSE file. diff --git a/tomograph/backends/log/__init__.py b/tomograph/backends/log/__init__.py deleted file mode 100644 index d2cf4b1..0000000 --- a/tomograph/backends/log/__init__.py +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2012 Yahoo! Inc. All rights reserved. -# Licensed under the Apache License, Version 2.0 (the "License"); you -# may not use this file except in compliance with the License. You may -# obtain a copy of the License at -# http://www.apache.org/licenses/LICENSE-2.0 Unless required by -# applicable law or agreed to in writing, software distributed under -# the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES -# OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and -# limitations under the License. See accompanying LICENSE file. - -import logging -import sys - -logger = logging.getLogger(__name__) - - -def send(span): - logger.info(span) diff --git a/tomograph/backends/statsd/__init__.py b/tomograph/backends/statsd/__init__.py deleted file mode 100644 index ff5fec4..0000000 --- a/tomograph/backends/statsd/__init__.py +++ /dev/null @@ -1,13 +0,0 @@ -# Copyright (c) 2012 Yahoo! Inc. All rights reserved. -# Licensed under the Apache License, Version 2.0 (the "License"); you -# may not use this file except in compliance with the License. You may -# obtain a copy of the License at -# http://www.apache.org/licenses/LICENSE-2.0 Unless required by -# applicable law or agreed to in writing, software distributed under -# the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES -# OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and -# limitations under the License. See accompanying LICENSE file. - - -from statsd import * diff --git a/tomograph/backends/statsd/statsd.py b/tomograph/backends/statsd/statsd.py deleted file mode 100644 index 45db3a9..0000000 --- a/tomograph/backends/statsd/statsd.py +++ /dev/null @@ -1,57 +0,0 @@ -# Copyright (c) 2012 Yahoo! Inc. All rights reserved. -# Licensed under the Apache License, Version 2.0 (the "License"); you -# may not use this file except in compliance with the License. You may -# obtain a copy of the License at -# http://www.apache.org/licenses/LICENSE-2.0 Unless required by -# applicable law or agreed to in writing, software distributed under -# the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES -# OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and -# limitations under the License. See accompanying LICENSE file. -import eventlet - -from tomograph import cache -from tomograph import config - -logging = eventlet.import_patched('logging') -socket = eventlet.import_patched('socket') -threading = eventlet.import_patched('threading') - -logger = logging.getLogger(__name__) - -udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) - -hostname_cache = cache.Cache(socket.gethostbyname) - -lock = threading.Lock() - - -def send(span): - - def statsd_send(name, value, units): - stat = (str(name).replace(' ', '-') + ':' + str(int(value)) + - '|' + str(units)) - with lock: - try: - udp_socket.sendto(stat, - (hostname_cache.get(config.statsd_host), - config.statsd_port)) - except Exception: - if config.debug: - logger.warning("Error sending metric to statsd.", - exc_info=True) - - def server_name(note): - address = note.address.replace('.', '-') - return note.service_name + ' ' + address + ' ' + str(note.port) - - # the timing stat: - delta = span.notes[-1].time - span.notes[0].time - deltams = delta * 1000 - time_stat_name = server_name(span.notes[0]) + '.' + span.name - statsd_send(time_stat_name, deltams, 'ms') - - # a count stat for each note - for note in span.notes: - stat_name = server_name(note) + '.' + span.name + '.' + str(note.value) - statsd_send(stat_name, 1, 'c') diff --git a/tomograph/backends/zipkin/__init__.py b/tomograph/backends/zipkin/__init__.py deleted file mode 100644 index 0a383b4..0000000 --- a/tomograph/backends/zipkin/__init__.py +++ /dev/null @@ -1,12 +0,0 @@ -# Copyright (c) 2012 Yahoo! Inc. All rights reserved. -# Licensed under the Apache License, Version 2.0 (the "License"); you -# may not use this file except in compliance with the License. You may -# obtain a copy of the License at -# http://www.apache.org/licenses/LICENSE-2.0 Unless required by -# applicable law or agreed to in writing, software distributed under -# the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES -# OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and -# limitations under the License. See accompanying LICENSE file. - -from zipkin import * diff --git a/tomograph/backends/zipkin/generated/__init__.py b/tomograph/backends/zipkin/generated/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/tomograph/backends/zipkin/generated/scribe/__init__.py b/tomograph/backends/zipkin/generated/scribe/__init__.py deleted file mode 100644 index 5561d0f..0000000 --- a/tomograph/backends/zipkin/generated/scribe/__init__.py +++ /dev/null @@ -1 +0,0 @@ -__all__ = ['ttypes', 'constants', 'scribe'] diff --git a/tomograph/backends/zipkin/generated/scribe/constants.py b/tomograph/backends/zipkin/generated/scribe/constants.py deleted file mode 100644 index 9102045..0000000 --- a/tomograph/backends/zipkin/generated/scribe/constants.py +++ /dev/null @@ -1,11 +0,0 @@ -# -# Autogenerated by Thrift Compiler (0.9.0) -# -# DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING -# -# options string: py:new_style=true -# - -from thrift.Thrift import TType, TMessageType, TException, TApplicationException -from ttypes import * - diff --git a/tomograph/backends/zipkin/generated/scribe/scribe-remote b/tomograph/backends/zipkin/generated/scribe/scribe-remote deleted file mode 100755 index 6a4fdb6..0000000 --- a/tomograph/backends/zipkin/generated/scribe/scribe-remote +++ /dev/null @@ -1,88 +0,0 @@ -#!/usr/bin/env python -# -# Autogenerated by Thrift Compiler (0.9.0) -# -# DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING -# -# options string: py:new_style=true -# - -import sys -import pprint -from urlparse import urlparse -from thrift.transport import TTransport -from thrift.transport import TSocket -from thrift.transport import THttpClient -from thrift.protocol import TBinaryProtocol - -import scribe -from ttypes import * - -if len(sys.argv) <= 1 or sys.argv[1] == '--help': - print '' - print 'Usage: ' + sys.argv[0] + ' [-h host[:port]] [-u url] [-f[ramed]] function [arg1 [arg2...]]' - print '' - print 'Functions:' - print ' ResultCode Log( messages)' - print '' - sys.exit(0) - -pp = pprint.PrettyPrinter(indent = 2) -host = 'localhost' -port = 9090 -uri = '' -framed = False -http = False -argi = 1 - -if sys.argv[argi] == '-h': - parts = sys.argv[argi+1].split(':') - host = parts[0] - if len(parts) > 1: - port = int(parts[1]) - argi += 2 - -if sys.argv[argi] == '-u': - url = urlparse(sys.argv[argi+1]) - parts = url[1].split(':') - host = parts[0] - if len(parts) > 1: - port = int(parts[1]) - else: - port = 80 - uri = url[2] - if url[4]: - uri += '?%s' % url[4] - http = True - argi += 2 - -if sys.argv[argi] == '-f' or sys.argv[argi] == '-framed': - framed = True - argi += 1 - -cmd = sys.argv[argi] -args = sys.argv[argi+1:] - -if http: - transport = THttpClient.THttpClient(host, port, uri) -else: - socket = TSocket.TSocket(host, port) - if framed: - transport = TTransport.TFramedTransport(socket) - else: - transport = TTransport.TBufferedTransport(socket) -protocol = TBinaryProtocol.TBinaryProtocol(transport) -client = scribe.Client(protocol) -transport.open() - -if cmd == 'Log': - if len(args) != 1: - print 'Log requires 1 args' - sys.exit(1) - pp.pprint(client.Log(eval(args[0]),)) - -else: - print 'Unrecognized method %s' % cmd - sys.exit(1) - -transport.close() diff --git a/tomograph/backends/zipkin/generated/scribe/scribe.py b/tomograph/backends/zipkin/generated/scribe/scribe.py deleted file mode 100644 index 7d41194..0000000 --- a/tomograph/backends/zipkin/generated/scribe/scribe.py +++ /dev/null @@ -1,228 +0,0 @@ -# -# Autogenerated by Thrift Compiler (0.9.0) -# -# DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING -# -# options string: py:new_style=true -# - -from thrift.Thrift import TType, TMessageType, TException, TApplicationException -from ttypes import * -from thrift.Thrift import TProcessor -from thrift.transport import TTransport -from thrift.protocol import TBinaryProtocol, TProtocol -try: - from thrift.protocol import fastbinary -except: - fastbinary = None - - -class Iface(object): - def Log(self, messages): - """ - Parameters: - - messages - """ - pass - - -class Client(Iface): - def __init__(self, iprot, oprot=None): - self._iprot = self._oprot = iprot - if oprot is not None: - self._oprot = oprot - self._seqid = 0 - - def Log(self, messages): - """ - Parameters: - - messages - """ - self.send_Log(messages) - return self.recv_Log() - - def send_Log(self, messages): - self._oprot.writeMessageBegin('Log', TMessageType.CALL, self._seqid) - args = Log_args() - args.messages = messages - args.write(self._oprot) - self._oprot.writeMessageEnd() - self._oprot.trans.flush() - - def recv_Log(self, ): - (fname, mtype, rseqid) = self._iprot.readMessageBegin() - if mtype == TMessageType.EXCEPTION: - x = TApplicationException() - x.read(self._iprot) - self._iprot.readMessageEnd() - raise x - result = Log_result() - result.read(self._iprot) - self._iprot.readMessageEnd() - if result.success is not None: - return result.success - raise TApplicationException(TApplicationException.MISSING_RESULT, "Log failed: unknown result"); - - -class Processor(Iface, TProcessor): - def __init__(self, handler): - self._handler = handler - self._processMap = {} - self._processMap["Log"] = Processor.process_Log - - def process(self, iprot, oprot): - (name, type, seqid) = iprot.readMessageBegin() - if name not in self._processMap: - iprot.skip(TType.STRUCT) - iprot.readMessageEnd() - x = TApplicationException(TApplicationException.UNKNOWN_METHOD, 'Unknown function %s' % (name)) - oprot.writeMessageBegin(name, TMessageType.EXCEPTION, seqid) - x.write(oprot) - oprot.writeMessageEnd() - oprot.trans.flush() - return - else: - self._processMap[name](self, seqid, iprot, oprot) - return True - - def process_Log(self, seqid, iprot, oprot): - args = Log_args() - args.read(iprot) - iprot.readMessageEnd() - result = Log_result() - result.success = self._handler.Log(args.messages) - oprot.writeMessageBegin("Log", TMessageType.REPLY, seqid) - result.write(oprot) - oprot.writeMessageEnd() - oprot.trans.flush() - - -# HELPER FUNCTIONS AND STRUCTURES - -class Log_args(object): - """ - Attributes: - - messages - """ - - thrift_spec = ( - None, # 0 - (1, TType.LIST, 'messages', (TType.STRUCT,(LogEntry, LogEntry.thrift_spec)), None, ), # 1 - ) - - def __init__(self, messages=None,): - self.messages = messages - - def read(self, iprot): - if iprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None and fastbinary is not None: - fastbinary.decode_binary(self, iprot.trans, (self.__class__, self.thrift_spec)) - return - iprot.readStructBegin() - while True: - (fname, ftype, fid) = iprot.readFieldBegin() - if ftype == TType.STOP: - break - if fid == 1: - if ftype == TType.LIST: - self.messages = [] - (_etype3, _size0) = iprot.readListBegin() - for _i4 in xrange(_size0): - _elem5 = LogEntry() - _elem5.read(iprot) - self.messages.append(_elem5) - iprot.readListEnd() - else: - iprot.skip(ftype) - else: - iprot.skip(ftype) - iprot.readFieldEnd() - iprot.readStructEnd() - - def write(self, oprot): - if oprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and self.thrift_spec is not None and fastbinary is not None: - oprot.trans.write(fastbinary.encode_binary(self, (self.__class__, self.thrift_spec))) - return - oprot.writeStructBegin('Log_args') - if self.messages is not None: - oprot.writeFieldBegin('messages', TType.LIST, 1) - oprot.writeListBegin(TType.STRUCT, len(self.messages)) - for iter6 in self.messages: - iter6.write(oprot) - oprot.writeListEnd() - oprot.writeFieldEnd() - oprot.writeFieldStop() - oprot.writeStructEnd() - - def validate(self): - return - - - def __repr__(self): - L = ['%s=%r' % (key, value) - for key, value in self.__dict__.iteritems()] - return '%s(%s)' % (self.__class__.__name__, ', '.join(L)) - - def __eq__(self, other): - return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ - - def __ne__(self, other): - return not (self == other) - -class Log_result(object): - """ - Attributes: - - success - """ - - thrift_spec = ( - (0, TType.I32, 'success', None, None, ), # 0 - ) - - def __init__(self, success=None,): - self.success = success - - def read(self, iprot): - if iprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None and fastbinary is not None: - fastbinary.decode_binary(self, iprot.trans, (self.__class__, self.thrift_spec)) - return - iprot.readStructBegin() - while True: - (fname, ftype, fid) = iprot.readFieldBegin() - if ftype == TType.STOP: - break - if fid == 0: - if ftype == TType.I32: - self.success = iprot.readI32(); - else: - iprot.skip(ftype) - else: - iprot.skip(ftype) - iprot.readFieldEnd() - iprot.readStructEnd() - - def write(self, oprot): - if oprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and self.thrift_spec is not None and fastbinary is not None: - oprot.trans.write(fastbinary.encode_binary(self, (self.__class__, self.thrift_spec))) - return - oprot.writeStructBegin('Log_result') - if self.success is not None: - oprot.writeFieldBegin('success', TType.I32, 0) - oprot.writeI32(self.success) - oprot.writeFieldEnd() - oprot.writeFieldStop() - oprot.writeStructEnd() - - def validate(self): - return - - - def __repr__(self): - L = ['%s=%r' % (key, value) - for key, value in self.__dict__.iteritems()] - return '%s(%s)' % (self.__class__.__name__, ', '.join(L)) - - def __eq__(self, other): - return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ - - def __ne__(self, other): - return not (self == other) diff --git a/tomograph/backends/zipkin/generated/scribe/ttypes.py b/tomograph/backends/zipkin/generated/scribe/ttypes.py deleted file mode 100644 index 480e046..0000000 --- a/tomograph/backends/zipkin/generated/scribe/ttypes.py +++ /dev/null @@ -1,104 +0,0 @@ -# -# Autogenerated by Thrift Compiler (0.9.0) -# -# DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING -# -# options string: py:new_style=true -# - -from thrift.Thrift import TType, TMessageType, TException, TApplicationException - -from thrift.transport import TTransport -from thrift.protocol import TBinaryProtocol, TProtocol -try: - from thrift.protocol import fastbinary -except: - fastbinary = None - - -class ResultCode(object): - OK = 0 - TRY_LATER = 1 - - _VALUES_TO_NAMES = { - 0: "OK", - 1: "TRY_LATER", - } - - _NAMES_TO_VALUES = { - "OK": 0, - "TRY_LATER": 1, - } - - -class LogEntry(object): - """ - Attributes: - - category - - message - """ - - thrift_spec = ( - None, # 0 - (1, TType.STRING, 'category', None, None, ), # 1 - (2, TType.STRING, 'message', None, None, ), # 2 - ) - - def __init__(self, category=None, message=None,): - self.category = category - self.message = message - - def read(self, iprot): - if iprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None and fastbinary is not None: - fastbinary.decode_binary(self, iprot.trans, (self.__class__, self.thrift_spec)) - return - iprot.readStructBegin() - while True: - (fname, ftype, fid) = iprot.readFieldBegin() - if ftype == TType.STOP: - break - if fid == 1: - if ftype == TType.STRING: - self.category = iprot.readString(); - else: - iprot.skip(ftype) - elif fid == 2: - if ftype == TType.STRING: - self.message = iprot.readString(); - else: - iprot.skip(ftype) - else: - iprot.skip(ftype) - iprot.readFieldEnd() - iprot.readStructEnd() - - def write(self, oprot): - if oprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and self.thrift_spec is not None and fastbinary is not None: - oprot.trans.write(fastbinary.encode_binary(self, (self.__class__, self.thrift_spec))) - return - oprot.writeStructBegin('LogEntry') - if self.category is not None: - oprot.writeFieldBegin('category', TType.STRING, 1) - oprot.writeString(self.category) - oprot.writeFieldEnd() - if self.message is not None: - oprot.writeFieldBegin('message', TType.STRING, 2) - oprot.writeString(self.message) - oprot.writeFieldEnd() - oprot.writeFieldStop() - oprot.writeStructEnd() - - def validate(self): - return - - - def __repr__(self): - L = ['%s=%r' % (key, value) - for key, value in self.__dict__.iteritems()] - return '%s(%s)' % (self.__class__.__name__, ', '.join(L)) - - def __eq__(self, other): - return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ - - def __ne__(self, other): - return not (self == other) diff --git a/tomograph/backends/zipkin/generated/zipkinCore/__init__.py b/tomograph/backends/zipkin/generated/zipkinCore/__init__.py deleted file mode 100644 index adefd8e..0000000 --- a/tomograph/backends/zipkin/generated/zipkinCore/__init__.py +++ /dev/null @@ -1 +0,0 @@ -__all__ = ['ttypes', 'constants'] diff --git a/tomograph/backends/zipkin/generated/zipkinCore/constants.py b/tomograph/backends/zipkin/generated/zipkinCore/constants.py deleted file mode 100644 index 8a7859c..0000000 --- a/tomograph/backends/zipkin/generated/zipkinCore/constants.py +++ /dev/null @@ -1,15 +0,0 @@ -# -# Autogenerated by Thrift Compiler (0.9.0) -# -# DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING -# -# options string: py:new_style=true -# - -from thrift.Thrift import TType, TMessageType, TException, TApplicationException -from ttypes import * - -CLIENT_SEND = "cs" -CLIENT_RECV = "cr" -SERVER_SEND = "ss" -SERVER_RECV = "sr" diff --git a/tomograph/backends/zipkin/generated/zipkinCore/ttypes.py b/tomograph/backends/zipkin/generated/zipkinCore/ttypes.py deleted file mode 100644 index 7cf09f9..0000000 --- a/tomograph/backends/zipkin/generated/zipkinCore/ttypes.py +++ /dev/null @@ -1,477 +0,0 @@ -# -# Autogenerated by Thrift Compiler (0.9.0) -# -# DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING -# -# options string: py:new_style=true -# - -from thrift.Thrift import TType, TMessageType, TException, TApplicationException - -from thrift.transport import TTransport -from thrift.protocol import TBinaryProtocol, TProtocol -try: - from thrift.protocol import fastbinary -except: - fastbinary = None - - -class AnnotationType(object): - BOOL = 0 - BYTES = 1 - I16 = 2 - I32 = 3 - I64 = 4 - DOUBLE = 5 - STRING = 6 - - _VALUES_TO_NAMES = { - 0: "BOOL", - 1: "BYTES", - 2: "I16", - 3: "I32", - 4: "I64", - 5: "DOUBLE", - 6: "STRING", - } - - _NAMES_TO_VALUES = { - "BOOL": 0, - "BYTES": 1, - "I16": 2, - "I32": 3, - "I64": 4, - "DOUBLE": 5, - "STRING": 6, - } - - -class Endpoint(object): - """ - Attributes: - - ipv4 - - port - - service_name - """ - - thrift_spec = ( - None, # 0 - (1, TType.I32, 'ipv4', None, None, ), # 1 - (2, TType.I16, 'port', None, None, ), # 2 - (3, TType.STRING, 'service_name', None, None, ), # 3 - ) - - def __init__(self, ipv4=None, port=None, service_name=None,): - self.ipv4 = ipv4 - self.port = port - self.service_name = service_name - - def read(self, iprot): - if iprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None and fastbinary is not None: - fastbinary.decode_binary(self, iprot.trans, (self.__class__, self.thrift_spec)) - return - iprot.readStructBegin() - while True: - (fname, ftype, fid) = iprot.readFieldBegin() - if ftype == TType.STOP: - break - if fid == 1: - if ftype == TType.I32: - self.ipv4 = iprot.readI32(); - else: - iprot.skip(ftype) - elif fid == 2: - if ftype == TType.I16: - self.port = iprot.readI16(); - else: - iprot.skip(ftype) - elif fid == 3: - if ftype == TType.STRING: - self.service_name = iprot.readString(); - else: - iprot.skip(ftype) - else: - iprot.skip(ftype) - iprot.readFieldEnd() - iprot.readStructEnd() - - def write(self, oprot): - if oprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and self.thrift_spec is not None and fastbinary is not None: - oprot.trans.write(fastbinary.encode_binary(self, (self.__class__, self.thrift_spec))) - return - oprot.writeStructBegin('Endpoint') - if self.ipv4 is not None: - oprot.writeFieldBegin('ipv4', TType.I32, 1) - oprot.writeI32(self.ipv4) - oprot.writeFieldEnd() - if self.port is not None: - oprot.writeFieldBegin('port', TType.I16, 2) - oprot.writeI16(self.port) - oprot.writeFieldEnd() - if self.service_name is not None: - oprot.writeFieldBegin('service_name', TType.STRING, 3) - oprot.writeString(self.service_name) - oprot.writeFieldEnd() - oprot.writeFieldStop() - oprot.writeStructEnd() - - def validate(self): - return - - - def __repr__(self): - L = ['%s=%r' % (key, value) - for key, value in self.__dict__.iteritems()] - return '%s(%s)' % (self.__class__.__name__, ', '.join(L)) - - def __eq__(self, other): - return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ - - def __ne__(self, other): - return not (self == other) - -class Annotation(object): - """ - Attributes: - - timestamp - - value - - host - - duration - """ - - thrift_spec = ( - None, # 0 - (1, TType.I64, 'timestamp', None, None, ), # 1 - (2, TType.STRING, 'value', None, None, ), # 2 - (3, TType.STRUCT, 'host', (Endpoint, Endpoint.thrift_spec), None, ), # 3 - (4, TType.I32, 'duration', None, None, ), # 4 - ) - - def __init__(self, timestamp=None, value=None, host=None, duration=None,): - self.timestamp = timestamp - self.value = value - self.host = host - self.duration = duration - - def read(self, iprot): - if iprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None and fastbinary is not None: - fastbinary.decode_binary(self, iprot.trans, (self.__class__, self.thrift_spec)) - return - iprot.readStructBegin() - while True: - (fname, ftype, fid) = iprot.readFieldBegin() - if ftype == TType.STOP: - break - if fid == 1: - if ftype == TType.I64: - self.timestamp = iprot.readI64(); - else: - iprot.skip(ftype) - elif fid == 2: - if ftype == TType.STRING: - self.value = iprot.readString(); - else: - iprot.skip(ftype) - elif fid == 3: - if ftype == TType.STRUCT: - self.host = Endpoint() - self.host.read(iprot) - else: - iprot.skip(ftype) - elif fid == 4: - if ftype == TType.I32: - self.duration = iprot.readI32(); - else: - iprot.skip(ftype) - else: - iprot.skip(ftype) - iprot.readFieldEnd() - iprot.readStructEnd() - - def write(self, oprot): - if oprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and self.thrift_spec is not None and fastbinary is not None: - oprot.trans.write(fastbinary.encode_binary(self, (self.__class__, self.thrift_spec))) - return - oprot.writeStructBegin('Annotation') - if self.timestamp is not None: - oprot.writeFieldBegin('timestamp', TType.I64, 1) - oprot.writeI64(self.timestamp) - oprot.writeFieldEnd() - if self.value is not None: - oprot.writeFieldBegin('value', TType.STRING, 2) - oprot.writeString(self.value) - oprot.writeFieldEnd() - if self.host is not None: - oprot.writeFieldBegin('host', TType.STRUCT, 3) - self.host.write(oprot) - oprot.writeFieldEnd() - if self.duration is not None: - oprot.writeFieldBegin('duration', TType.I32, 4) - oprot.writeI32(self.duration) - oprot.writeFieldEnd() - oprot.writeFieldStop() - oprot.writeStructEnd() - - def validate(self): - return - - - def __repr__(self): - L = ['%s=%r' % (key, value) - for key, value in self.__dict__.iteritems()] - return '%s(%s)' % (self.__class__.__name__, ', '.join(L)) - - def __eq__(self, other): - return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ - - def __ne__(self, other): - return not (self == other) - -class BinaryAnnotation(object): - """ - Attributes: - - key - - value - - annotation_type - - host - """ - - thrift_spec = ( - None, # 0 - (1, TType.STRING, 'key', None, None, ), # 1 - (2, TType.STRING, 'value', None, None, ), # 2 - (3, TType.I32, 'annotation_type', None, None, ), # 3 - (4, TType.STRUCT, 'host', (Endpoint, Endpoint.thrift_spec), None, ), # 4 - ) - - def __init__(self, key=None, value=None, annotation_type=None, host=None,): - self.key = key - self.value = value - self.annotation_type = annotation_type - self.host = host - - def read(self, iprot): - if iprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None and fastbinary is not None: - fastbinary.decode_binary(self, iprot.trans, (self.__class__, self.thrift_spec)) - return - iprot.readStructBegin() - while True: - (fname, ftype, fid) = iprot.readFieldBegin() - if ftype == TType.STOP: - break - if fid == 1: - if ftype == TType.STRING: - self.key = iprot.readString(); - else: - iprot.skip(ftype) - elif fid == 2: - if ftype == TType.STRING: - self.value = iprot.readString(); - else: - iprot.skip(ftype) - elif fid == 3: - if ftype == TType.I32: - self.annotation_type = iprot.readI32(); - else: - iprot.skip(ftype) - elif fid == 4: - if ftype == TType.STRUCT: - self.host = Endpoint() - self.host.read(iprot) - else: - iprot.skip(ftype) - else: - iprot.skip(ftype) - iprot.readFieldEnd() - iprot.readStructEnd() - - def write(self, oprot): - if oprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and self.thrift_spec is not None and fastbinary is not None: - oprot.trans.write(fastbinary.encode_binary(self, (self.__class__, self.thrift_spec))) - return - oprot.writeStructBegin('BinaryAnnotation') - if self.key is not None: - oprot.writeFieldBegin('key', TType.STRING, 1) - oprot.writeString(self.key) - oprot.writeFieldEnd() - if self.value is not None: - oprot.writeFieldBegin('value', TType.STRING, 2) - oprot.writeString(self.value) - oprot.writeFieldEnd() - if self.annotation_type is not None: - oprot.writeFieldBegin('annotation_type', TType.I32, 3) - oprot.writeI32(self.annotation_type) - oprot.writeFieldEnd() - if self.host is not None: - oprot.writeFieldBegin('host', TType.STRUCT, 4) - self.host.write(oprot) - oprot.writeFieldEnd() - oprot.writeFieldStop() - oprot.writeStructEnd() - - def validate(self): - return - - - def __repr__(self): - L = ['%s=%r' % (key, value) - for key, value in self.__dict__.iteritems()] - return '%s(%s)' % (self.__class__.__name__, ', '.join(L)) - - def __eq__(self, other): - return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ - - def __ne__(self, other): - return not (self == other) - -class Span(object): - """ - Attributes: - - trace_id - - name - - id - - parent_id - - annotations - - binary_annotations - - debug - """ - - thrift_spec = ( - None, # 0 - (1, TType.I64, 'trace_id', None, None, ), # 1 - None, # 2 - (3, TType.STRING, 'name', None, None, ), # 3 - (4, TType.I64, 'id', None, None, ), # 4 - (5, TType.I64, 'parent_id', None, None, ), # 5 - (6, TType.LIST, 'annotations', (TType.STRUCT,(Annotation, Annotation.thrift_spec)), None, ), # 6 - None, # 7 - (8, TType.LIST, 'binary_annotations', (TType.STRUCT,(BinaryAnnotation, BinaryAnnotation.thrift_spec)), None, ), # 8 - (9, TType.BOOL, 'debug', None, False, ), # 9 - ) - - def __init__(self, trace_id=None, name=None, id=None, parent_id=None, annotations=None, binary_annotations=None, debug=thrift_spec[9][4],): - self.trace_id = trace_id - self.name = name - self.id = id - self.parent_id = parent_id - self.annotations = annotations - self.binary_annotations = binary_annotations - self.debug = debug - - def read(self, iprot): - if iprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None and fastbinary is not None: - fastbinary.decode_binary(self, iprot.trans, (self.__class__, self.thrift_spec)) - return - iprot.readStructBegin() - while True: - (fname, ftype, fid) = iprot.readFieldBegin() - if ftype == TType.STOP: - break - if fid == 1: - if ftype == TType.I64: - self.trace_id = iprot.readI64(); - else: - iprot.skip(ftype) - elif fid == 3: - if ftype == TType.STRING: - self.name = iprot.readString(); - else: - iprot.skip(ftype) - elif fid == 4: - if ftype == TType.I64: - self.id = iprot.readI64(); - else: - iprot.skip(ftype) - elif fid == 5: - if ftype == TType.I64: - self.parent_id = iprot.readI64(); - else: - iprot.skip(ftype) - elif fid == 6: - if ftype == TType.LIST: - self.annotations = [] - (_etype3, _size0) = iprot.readListBegin() - for _i4 in xrange(_size0): - _elem5 = Annotation() - _elem5.read(iprot) - self.annotations.append(_elem5) - iprot.readListEnd() - else: - iprot.skip(ftype) - elif fid == 8: - if ftype == TType.LIST: - self.binary_annotations = [] - (_etype9, _size6) = iprot.readListBegin() - for _i10 in xrange(_size6): - _elem11 = BinaryAnnotation() - _elem11.read(iprot) - self.binary_annotations.append(_elem11) - iprot.readListEnd() - else: - iprot.skip(ftype) - elif fid == 9: - if ftype == TType.BOOL: - self.debug = iprot.readBool(); - else: - iprot.skip(ftype) - else: - iprot.skip(ftype) - iprot.readFieldEnd() - iprot.readStructEnd() - - def write(self, oprot): - if oprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and self.thrift_spec is not None and fastbinary is not None: - oprot.trans.write(fastbinary.encode_binary(self, (self.__class__, self.thrift_spec))) - return - oprot.writeStructBegin('Span') - if self.trace_id is not None: - oprot.writeFieldBegin('trace_id', TType.I64, 1) - oprot.writeI64(self.trace_id) - oprot.writeFieldEnd() - if self.name is not None: - oprot.writeFieldBegin('name', TType.STRING, 3) - oprot.writeString(self.name) - oprot.writeFieldEnd() - if self.id is not None: - oprot.writeFieldBegin('id', TType.I64, 4) - oprot.writeI64(self.id) - oprot.writeFieldEnd() - if self.parent_id is not None: - oprot.writeFieldBegin('parent_id', TType.I64, 5) - oprot.writeI64(self.parent_id) - oprot.writeFieldEnd() - if self.annotations is not None: - oprot.writeFieldBegin('annotations', TType.LIST, 6) - oprot.writeListBegin(TType.STRUCT, len(self.annotations)) - for iter12 in self.annotations: - iter12.write(oprot) - oprot.writeListEnd() - oprot.writeFieldEnd() - if self.binary_annotations is not None: - oprot.writeFieldBegin('binary_annotations', TType.LIST, 8) - oprot.writeListBegin(TType.STRUCT, len(self.binary_annotations)) - for iter13 in self.binary_annotations: - iter13.write(oprot) - oprot.writeListEnd() - oprot.writeFieldEnd() - if self.debug is not None: - oprot.writeFieldBegin('debug', TType.BOOL, 9) - oprot.writeBool(self.debug) - oprot.writeFieldEnd() - oprot.writeFieldStop() - oprot.writeStructEnd() - - def validate(self): - return - - - def __repr__(self): - L = ['%s=%r' % (key, value) - for key, value in self.__dict__.iteritems()] - return '%s(%s)' % (self.__class__.__name__, ', '.join(L)) - - def __eq__(self, other): - return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ - - def __ne__(self, other): - return not (self == other) diff --git a/tomograph/backends/zipkin/sender.py b/tomograph/backends/zipkin/sender.py deleted file mode 100644 index 0f7750a..0000000 --- a/tomograph/backends/zipkin/sender.py +++ /dev/null @@ -1,118 +0,0 @@ -# Copyright (c) 2012 Yahoo! Inc. All rights reserved. -# Licensed under the Apache License, Version 2.0 (the "License"); you -# may not use this file except in compliance with the License. You may -# obtain a copy of the License at -# http://www.apache.org/licenses/LICENSE-2.0 Unless required by -# applicable law or agreed to in writing, software distributed under -# the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES -# OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and -# limitations under the License. See accompanying LICENSE file. - -import eventlet - -socket = eventlet.import_patched('socket') -time = eventlet.import_patched('time') -scribe = eventlet.import_patched('tomograph.backends.zipkin.' - 'generated.scribe.scribe') -TTransport = eventlet.import_patched('thrift.transport.TTransport') -TSocket = eventlet.import_patched('thrift.transport.TSocket') -collections = eventlet.import_patched('collections') -traceback = eventlet.import_patched('traceback') -threading = eventlet.import_patched('threading') - -from thrift.protocol import TBinaryProtocol - - -class ScribeSender(object): - def __init__(self, host='127.0.0.1', port=1463, debug=False, - target_write_size=1000, max_write_interval=1.0, - socket_timeout=5.0, max_queue_length=50000, must_yield=True): - self.dropped = 0 - self._remote_host = host - self._remote_port = port - self._socket_timeout = socket_timeout - self._hostname = socket.gethostname() - self._max_queue_length = max_queue_length - self._max_write_interval = max_write_interval - self._target_write_size = target_write_size - - self._debug = True - self._log_buffer = collections.deque() - self._last_write = 0 - self._must_yield = must_yield - self._lock = threading.Lock() - eventlet.spawn_after(max_write_interval, self.flush) - - def close(self): - self.flush() - - def send(self, category, msg): - """Send one record to scribe.""" - log_entry = scribe.LogEntry(category=category, message=msg) - self._log_buffer.append(log_entry) - self._dropMsgs() - - now = time.time() - if len(self._log_buffer) >= self._target_write_size or \ - now - self._last_write > self._max_write_interval: - self._last_write = now - eventlet.spawn_n(self.flush) - # We can't do a "looping call" or other permanent thread - # kind of thing because openstack creates new hubs. The - # spawn_after here (and in __init__) give us a simple way - # to ensure stuff doesn't sit in the buffer forever just - # because the app isn't logging stuff. - eventlet.spawn_after(self._max_write_interval, self.flush) - if self._must_yield: - # prevent the flushers from starving - eventlet.sleep() - - def flush(self): - dropped = 0 - try: - self._lock.acquire() - buf = [] - while self._log_buffer: - buf.append(self._log_buffer.popleft()) - if buf: - if self._debug: - print("ScribeSender: flushing {0} msgs".format(len(buf))) - try: - client = self._getClient() - result = client.Log(messages=buf) - if result == scribe.ResultCode.TRY_LATER: - dropped += len(buf) - except Exception: - if self._debug: - print("ScribeSender: caught exception writing " - "log message:") - traceback.print_exc() - dropped += len(buf) - finally: - self._lock.release() - self.dropped += dropped - if self._debug and dropped: - print("ScribeSender: dropped {0} messages for " - "communication problem.".format(dropped)) - - def _dropMsgs(self): - dropped = 0 - while len(self._log_buffer) > self._max_queue_length: - self._log_buffer.popleft() - dropped += 1 - self.dropped += dropped - if self._debug and dropped: - print("ScribeSender: dropped {0} messages for queue " - "length.".format(dropped)) - - def _getClient(self): - # We can't just keep a connection because the app might fork - # and we'll be left with the parent process's connection. - # More robust to just open one for each flush. - sock = TSocket.TSocket(host=self._remote_host, port=self._remote_port) - sock.setTimeout(self._socket_timeout * 1000) - transport = TTransport.TFramedTransport(sock) - transport.open() - protocol = TBinaryProtocol.TBinaryProtocolAccelerated(transport) - return scribe.Client(protocol) diff --git a/tomograph/backends/zipkin/zipkin.py b/tomograph/backends/zipkin/zipkin.py deleted file mode 100644 index 3388af5..0000000 --- a/tomograph/backends/zipkin/zipkin.py +++ /dev/null @@ -1,114 +0,0 @@ -# Copyright (c) 2012 Yahoo! Inc. All rights reserved. -# Licensed under the Apache License, Version 2.0 (the "License"); you -# may not use this file except in compliance with the License. You may -# obtain a copy of the License at -# http://www.apache.org/licenses/LICENSE-2.0 Unless required by -# applicable law or agreed to in writing, software distributed under -# the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES -# OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and -# limitations under the License. See accompanying LICENSE file. - -from __future__ import print_function - -from thrift.protocol import TBinaryProtocol -from thrift.transport import TSocket -from thrift.transport import TTransport - -from tomograph.backends.zipkin.generated.scribe import scribe -from tomograph.backends.zipkin import sender -from tomograph.backends.zipkin import zipkin_thrift - -from tomograph import cache -from tomograph import config - -import StringIO - -import atexit -import base64 -import random -import socket -import struct -import sys -import time -import traceback - -scribe_config = { - 'host': config.zipkin_host, - 'port': config.zipkin_port, - 'socket_timeout': config.zipkin_socket_timeout, - 'target_write_size': config.zipkin_target_write_size, - 'max_queue_length': config.zipkin_max_queue_length, - 'must_yield': config.zipkin_must_yield, - 'max_write_interval': config.zipkin_max_write_interval, - 'debug': config.zipkin_debug_scribe_sender, -} -scribe_sender = sender.ScribeSender(**scribe_config) -atexit.register(scribe_sender.close) - -hostname_cache = cache.Cache(socket.gethostbyname) - - -def send(span): - - def endpoint(note): - try: - ip = hostname_cache.get(note.address) - except Exception: - print('host resolution error: %s' % traceback.format_exc(), - file=sys.stderr) - ip = '0.0.0.0' - return zipkin_thrift.Endpoint(ipv4=ip_to_i32(ip), - port=port_to_i16(note.port), - service_name=note.service_name) - - def annotation(note): - return zipkin_thrift.Annotation(timestamp=int(note.time * 1e6), - value=note.value, - duration=note.duration, - host=endpoint(note)) - - def binary_annotation(dimension): - if isinstance(dimension.value, str): - tag_type = zipkin_thrift.AnnotationType.STRING - val = dimension.value - elif isinstance(dimension.value, float): - tag_type = zipkin_thrift.AnnotationType.DOUBLE - val = struct.pack('>d', dimension.value) - elif isinstance(dimension.value, int): - tag_type = zipkin_thrift.AnnotationType.I64 - val = struct.pack('>q', dimension.value) - else: - raise RuntimeError("unsupported tag type") - return zipkin_thrift.BinaryAnnotation(key=dimension.key, - value=val, - annotation_type=tag_type, - host=endpoint(dimension)) - - binary_annotations = [binary_annotation(d) for d in span.dimensions] - zspan = zipkin_thrift.Span(trace_id=span.trace_id, - id=span.id, - name=span.name, - parent_id=span.parent_id, - annotations=[annotation(n) for n in span.notes], - binary_annotations=binary_annotations) - out = StringIO.StringIO() - #raw = TBinaryProtocol.TBinaryProtocolAccelerated(out) - raw = TBinaryProtocol.TBinaryProtocol(out) - try: - zspan.write(raw) - except OverflowError: - traceback.print_exc() - scribe_sender.send('zipkin', base64.b64encode(out.getvalue())) - - -def ip_to_i32(ip_str): - """convert an ip address from a string to a signed 32-bit number""" - return struct.unpack('!i', socket.inet_aton(ip_str))[0] - - -def port_to_i16(port_num): - """conver a port number to a signed 16-bit int""" - if port_num > 2 ** 15: - port_num -= 2 ** 16 - return port_num diff --git a/tomograph/backends/zipkin/zipkin_thrift.py b/tomograph/backends/zipkin/zipkin_thrift.py deleted file mode 100644 index 41dd607..0000000 --- a/tomograph/backends/zipkin/zipkin_thrift.py +++ /dev/null @@ -1,12 +0,0 @@ -# Copyright (c) 2012 Yahoo! Inc. All rights reserved. -# Licensed under the Apache License, Version 2.0 (the "License"); you -# may not use this file except in compliance with the License. You may -# obtain a copy of the License at -# http://www.apache.org/licenses/LICENSE-2.0 Unless required by -# applicable law or agreed to in writing, software distributed under -# the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES -# OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and -# limitations under the License. See accompanying LICENSE file. - -from generated.zipkinCore.constants import * diff --git a/tomograph/cache.py b/tomograph/cache.py deleted file mode 100644 index df6342a..0000000 --- a/tomograph/cache.py +++ /dev/null @@ -1,31 +0,0 @@ -# Copyright (c) 2012 Yahoo! Inc. All rights reserved. -# Licensed under the Apache License, Version 2.0 (the "License"); you -# may not use this file except in compliance with the License. You may -# obtain a copy of the License at -# http://www.apache.org/licenses/LICENSE-2.0 Unless required by -# applicable law or agreed to in writing, software distributed under -# the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES -# OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and -# limitations under the License. See accompanying LICENSE file. - -import threading - - -class Cache(object): - def __init__(self, thunk, size_limit=1000): - self._map = {} - self._thunk = thunk - self._size_limit = size_limit - self._lock = threading.Lock() - - def get(self, k): - with self._lock: - if k in self._map: - return self._map[k] - else: - while len(self._map) >= self._size_limit: - self._map.popitem() - v = self._thunk(k) - self._map[k] = v - return v diff --git a/tomograph/config.py b/tomograph/config.py deleted file mode 100644 index f815d73..0000000 --- a/tomograph/config.py +++ /dev/null @@ -1,62 +0,0 @@ -# Copyright (c) 2012 Yahoo! Inc. All rights reserved. -# Licensed under the Apache License, Version 2.0 (the "License"); you -# may not use this file except in compliance with the License. You may -# obtain a copy of the License at -# http://www.apache.org/licenses/LICENSE-2.0 Unless required by -# applicable law or agreed to in writing, software distributed under -# the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES -# OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and -# limitations under the License. See accompanying LICENSE file. - -import logging - -logger = logging.getLogger(__name__) - -enabled_backends = ['tomograph.backends.zipkin', - 'tomograph.backends.statsd', - 'tomograph.backends.log'] -backend_modules = [] - -zipkin_host = '127.0.0.1' -zipkin_port = 9410 - -statsd_host = '127.0.0.1' -statsd_port = 8125 - -zipkin_socket_timeout = 5.0 -zipkin_max_queue_length = 50000 -zipkin_target_write_size = 1000 -zipkin_max_write_interval = 1 -zipkin_must_yield = True -zipkin_debug_scribe_sender = False - -debug = False -db_tracing_enabled = True -db_trace_as_spans = False - - -def set_backends(backends): - """Set the list of enabled backends. Backend name should be the full - module name of the backend. All backends must support a send(span) method. - """ - global enabled_backends - global backend_modules - enabled_backends = backends[:] - backend_modules = [] - for backend in enabled_backends: - try: - logger.info('loading backend {0}'.format(backend)) - module = __import__(backend) - for submodule in backend.split('.')[1:]: - module = getattr(module, submodule) - backend_modules.append(module) - except (ImportError, AttributeError, ValueError) as err: - raise RuntimeError('Could not load tomograph backend ' - '{0}: {1}'.format(backend, err)) - - -def get_backends(): - if not backend_modules: - set_backends(enabled_backends) - return backend_modules diff --git a/tomograph/tomograph.py b/tomograph/tomograph.py deleted file mode 100644 index 8566fc0..0000000 --- a/tomograph/tomograph.py +++ /dev/null @@ -1,232 +0,0 @@ -# Copyright (c) 2012 Yahoo! Inc. All rights reserved. -# Licensed under the Apache License, Version 2.0 (the "License"); you -# may not use this file except in compliance with the License. You may -# obtain a copy of the License at -# http://www.apache.org/licenses/LICENSE-2.0 Unless required by -# applicable law or agreed to in writing, software distributed under -# the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES -# OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and -# limitations under the License. See accompanying LICENSE file. - -from __future__ import absolute_import - -import base64 -import logging -import pickle -import random -import socket -import sys -import time - -from eventlet import corolocal - -from tomograph import config -from tomograph import types - -import webob.dec - - -span_stack = corolocal.local() - - -def start(service_name, name, address, port, trace_info=None): - parent_id = None - if tracing_started(): - trace_id = span_stack.trace_id - parent_id = cur_span().id - else: - if trace_info is None: - trace_id = span_stack.trace_id = getId() - else: - trace_id = span_stack.trace_id = trace_info[0] - parent_id = trace_info[1] - span_stack.spans = [] - - span = types.Span(trace_id, parent_id, getId(), name, [], []) - span_stack.spans.append(span) - annotate('start', service_name, address, port) - - -def tracing_started(): - return hasattr(span_stack, 'trace_id') - - -def cur_span(): - if not tracing_started(): - start('orphan', 'orphan', '127.0.0.1', '1') - return span_stack.spans[-1] - - -def get_trace_info(): - if tracing_started(): - return (span_stack.trace_id, cur_span().id) - else: - return None - - -def stop(name): - annotate('stop') - span = span_stack.spans.pop() - assert span.name == name, ('start span name {0} not equal ' - 'to end span name {1}'.format(span.name, name)) - if not span_stack.spans: - del(span_stack.trace_id) - for backend in config.get_backends(): - backend.send(span) - - -def annotate(value, service_name=None, address=None, port=None, duration=None): - """Add an annotation at a particular point in time, (with an optional - duration). - """ - # attempt to default some values - if service_name is None: - service_name = cur_span().notes[0].service_name - if address is None: - address = cur_span().notes[0].address - if port is None: - port = cur_span().notes[0].port - if duration is None: - duration = 0 - note = types.Note(time.time(), str(value), service_name, address, - int(port), int(duration)) - cur_span().notes.append(note) - - -def tag(key, value, service_name=None, address=None, port=None): - """Add a key/value tag to the current span. values can be int, - float, or string. - """ - assert (isinstance(value, str) or isinstance(value, int) - or isinstance(value, float)) - if service_name is None: - service_name = cur_span().notes[0].service_name - if address is None: - address = cur_span().notes[0].address - if port is None: - port = cur_span().notes[0].port - tag = types.Tag(str(key), value, service_name, address, port) - cur_span().dimensions.append(tag) - - -def getId(): - return random.randrange(sys.maxint >> 10) - - -## wrapper/decorators -def tracewrap(func, service_name, name, host='0.0.0.0', port=0): - if host == '0.0.0.0': - host = socket.gethostname() - - def trace_and_call(*args, **kwargs): - if service_name is None and len(args) > 0 \ - and isinstance(args[0], object): - s = args[0].__class__.__name__ - else: - s = service_name - start(s, name, host, port) - ret = func(*args, **kwargs) - stop(name) - return ret - - return trace_and_call - - -def traced(service_name, name, host='0.0.0.0', port=0): - - def t1(func): - return tracewrap(func, service_name, name, host, port) - - return t1 - - -## sqlalchemy event listeners -def before_execute(name): - - def handler(conn, clauseelement, multiparams, params): - if not config.db_tracing_enabled: - return - h = str(conn.connection.connection) - a = h.find("'") - b = h.find("'", a + 1) - if b > a: - h = h[a + 1:b] - else: - h = 'unknown' - port = conn.connection.connection.port - #print >>sys.stderr, 'connection is {0}:{1}'.format(h, port) - #print >>sys.stderr, 'sql statement is {0}'.format(clauseelement) - if config.db_trace_as_spans: - start(str(name) + 'db client', 'execute', h, port) - annotate(clauseelement) - - return handler - - -def after_execute(name): - # name isn't used, at least not yet... - def handler(conn, clauseelement, multiparams, params, result): - if not config.db_tracing_enabled: - return - annotate(clauseelement) - # fix up the duration on the annotation for the sql query - start_time = cur_span().notes[0].time - last_note = cur_span().notes.pop() - cur_span().notes.append(types.Note(last_note.time, last_note.value, - last_note.service_name, - last_note.address, - last_note.port, - time.time() - start_time)) - if config.db_trace_as_spans: - stop('execute') - return handler - - -def dbapi_error(name): - def handler(conn, cursor, statement, parameters, context, exception): - if not config.db_tracing_enabled: - return - annotate('database exception {0}'.format(exception)) - stop('execute') - return handler - - -## http helpers -def start_http(service_name, name, request): - trace_info_enc = request.headers.get('X-Trace-Info') - (host, port) = request.host.split(':') - if trace_info_enc: - trace_info = pickle.loads(base64.b64decode(trace_info_enc)) - else: - trace_info = None - start(service_name, name, host, port, trace_info) - - -def add_trace_info_header(headers): - trace_info = get_trace_info() - if trace_info: - headers['X-Trace-Info'] = base64.b64encode(pickle.dumps(trace_info)) - - -## WSGI middleware -class Middleware(object): - """WSGI Middleware that enables tomograph tracing for an application.""" - - def __init__(self, application, service_name='Server', name='WSGI'): - self.application = application - self.service_name = service_name - self.name = name - - @classmethod - def factory(cls, global_conf, **local_conf): - def filter(app): - return cls(app, **local_conf) - return filter - - @webob.dec.wsgify - def __call__(self, req): - start_http(self.service_name, self.name, req) - response = req.get_response(self.application) - stop(self.name) - return response diff --git a/tomograph/types.py b/tomograph/types.py deleted file mode 100644 index 7ed9a2b..0000000 --- a/tomograph/types.py +++ /dev/null @@ -1,18 +0,0 @@ -# Copyright (c) 2012 Yahoo! Inc. All rights reserved. -# Licensed under the Apache License, Version 2.0 (the "License"); you -# may not use this file except in compliance with the License. You may -# obtain a copy of the License at -# http://www.apache.org/licenses/LICENSE-2.0 Unless required by -# applicable law or agreed to in writing, software distributed under -# the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES -# OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and -# limitations under the License. See accompanying LICENSE file. - -import collections - -Span = collections.namedtuple('Span', 'trace_id parent_id id name notes' - ' dimensions') -Note = collections.namedtuple('Note', 'time value service_name' - ' address port duration') -Tag = collections.namedtuple('Tag', 'key value service_name address port') diff --git a/tomograph/version.py b/tomograph/version.py deleted file mode 100644 index 69fe974..0000000 --- a/tomograph/version.py +++ /dev/null @@ -1,25 +0,0 @@ -# Copyright (c) 2013 Yahoo! Inc. All rights reserved. -# Licensed under the Apache License, Version 2.0 (the "License"); you -# may not use this file except in compliance with the License. You may -# obtain a copy of the License at -# http://www.apache.org/licenses/LICENSE-2.0 Unless required by -# applicable law or agreed to in writing, software distributed under -# the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES -# OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and -# limitations under the License. See accompanying LICENSE file. - -TOMOGRAPH_VERSION = ['2013', '1', None] -YEAR, COUNT, REVISION = TOMOGRAPH_VERSION -FINAL = False # May never be final ;) - - -def canonical_version_string(): - return '.'.join(filter(None, TOMOGRAPH_VERSION)) - - -def version_string(): - if FINAL: - return canonical_version_string() - else: - return '%s-dev' % (canonical_version_string()) diff --git a/tox.ini b/tox.ini deleted file mode 100644 index 0c45174..0000000 --- a/tox.ini +++ /dev/null @@ -1,50 +0,0 @@ -[tox] -minversion = 1.6 -skipsdist = True -envlist = py26,py27,py33,pep8 - -[testenv] -usedevelop = True -install_command = pip install {opts} {packages} -setenv = VIRTUAL_ENV={envdir} - LANG=en_US.UTF-8 - LANGUAGE=en_US:en - LC_ALL=C - NOSE_WITH_OPENSTACK=1 - NOSE_OPENSTACK_COLOR=1 - NOSE_OPENSTACK_RED=0.05 - NOSE_OPENSTACK_YELLOW=0.025 - NOSE_OPENSTACK_SHOW_ELAPSED=1 - NOSE_OPENSTACK_STDOUT=1 -deps = -r{toxinidir}/requirements.txt - -r{toxinidir}/test-requirements.txt -commands = nosetests {posargs} - -[testenv:py33] -deps = -r{toxinidir}/py33-requirements.txt - -r{toxinidir}/py33-test-requirements.txt -commands = true - -[tox:jenkins] -downloadcache = ~/cache/pip - -[testenv:pep8] -commands = - flake8 {posargs} - -[testenv:pylint] -setenv = VIRTUAL_ENV={envdir} -deps = -r{toxinidir}/requirements.txt - pylint==0.26.0 -commands = pylint - -[testenv:cover] -setenv = NOSE_WITH_COVERAGE=1 - -[testenv:venv] -commands = {posargs} - -[flake8] -ignore = H202,H402,F401,F403,H303 -builtins = _ -exclude = .venv,.tox,dist,doc,*egg,.git,build,tools,./tomograph/backends/zipkin/generated

1EXv` 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