-
Notifications
You must be signed in to change notification settings - Fork 132
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merge pynipap to single file #1396
base: master
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -208,8 +208,8 @@ | |
import logging | ||
import xmlrpc.client as xmlrpclib | ||
import urllib.parse | ||
|
||
from tracing import create_span | ||
import inspect | ||
from functools import wraps | ||
|
||
__version__ = "0.32.5" | ||
__author__ = "Kristian Larsson, Lukas Garberg" | ||
|
@@ -229,6 +229,154 @@ | |
# disable for long running applications. | ||
CACHE = True | ||
|
||
|
||
# Try to initiate tracing | ||
try: | ||
from opentelemetry import trace, context | ||
from opentelemetry.trace import SpanKind, INVALID_SPAN | ||
from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter | ||
from opentelemetry.sdk.resources import SERVICE_NAME, Resource | ||
from opentelemetry.sdk.trace import TracerProvider | ||
from opentelemetry.sdk.trace.export import BatchSpanProcessor | ||
from opentelemetry.sdk.trace.sampling import DEFAULT_ON | ||
import opentelemetry.exporter.otlp.proto.http.trace_exporter | ||
|
||
tracer = trace.get_tracer("pynipap") | ||
|
||
|
||
def init_tracing(service_name, endpoint, sampler, use_grpc=True): | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. too many blank lines (2) |
||
resource = Resource(attributes={ | ||
SERVICE_NAME: service_name | ||
}) | ||
|
||
if sampler is None: | ||
sampler = DEFAULT_ON | ||
|
||
provider = TracerProvider(sampler=sampler, resource=resource) | ||
if use_grpc: | ||
processor = BatchSpanProcessor(OTLPSpanExporter(endpoint=endpoint)) | ||
else: | ||
processor = BatchSpanProcessor( | ||
opentelemetry.exporter.otlp.proto.http.trace_exporter.OTLPSpanExporter(endpoint=endpoint)) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. line too long (106 > 79 characters) |
||
provider.add_span_processor(processor) | ||
trace.set_tracer_provider(provider) | ||
|
||
|
||
def create_span(f): | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. too many blank lines (2) |
||
""" Class decorator creating a opentelemetry span | ||
""" | ||
|
||
@wraps(f) | ||
def decorated(*args, **kwargs): | ||
""" | ||
""" | ||
|
||
signature = inspect.signature(f) | ||
|
||
if args[0].__class__ == type: | ||
span_name = args[0].__name__ + " " + f.__name__ | ||
else: | ||
span_name = str(args[0].__class__.__name__) + " " + f.__name__ | ||
|
||
with tracer.start_as_current_span(span_name, | ||
context.get_current(), | ||
SpanKind.CLIENT): | ||
index = 0 | ||
span = trace.get_current_span() | ||
for parameter in signature.parameters: | ||
if index > 0: | ||
try: | ||
span.set_attribute("argument." + parameter, str(args[index])) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. line too long (89 > 79 characters) |
||
except IndexError: | ||
break | ||
index += 1 | ||
try: | ||
span.set_attribute("username", AuthOptions().options['username']) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. line too long (85 > 79 characters) |
||
span.set_attribute("authoritative_source", AuthOptions().options['authoritative_source']) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. line too long (109 > 79 characters) |
||
except BaseException: | ||
pass | ||
return f(*args, **kwargs) | ||
|
||
return decorated | ||
|
||
|
||
class TracingXMLTransport(xmlrpclib.Transport): | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. too many blank lines (2) |
||
|
||
def __init__(self, use_datetime=False, use_builtin_types=False, | ||
*, headers=()): | ||
super().__init__(use_datetime=use_datetime, | ||
use_builtin_types=use_builtin_types, | ||
headers=headers) | ||
|
||
def request(self, host, handler, request_body, verbose=False): | ||
with tracer.start_as_current_span("POST XML request", context.get_current(), SpanKind.CLIENT): | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. line too long (106 > 79 characters) |
||
current_span = trace.get_current_span() | ||
try: | ||
result = super().request(host, handler, request_body, verbose) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. line too long (82 > 79 characters) |
||
current_span.set_attribute("http.status_code", 200) | ||
except xmlrpclib.ProtocolError as protocolError: | ||
current_span.set_attribute("http.status_code", protocolError.errcode) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. line too long (89 > 79 characters) |
||
current_span.record_exception(protocolError) | ||
raise protocolError | ||
return result | ||
|
||
def send_content(self, connection, request_body): | ||
current_span = trace.get_current_span() | ||
if current_span != INVALID_SPAN: | ||
current_span.set_attribute("net.peer.ip", connection.host) | ||
current_span.set_attribute("net.peer.port", connection.port) | ||
current_span.set_attribute("net.peer.transport", "ip_tcp") | ||
connection.putheader("traceparent", | ||
"00-" + hex(current_span.get_span_context().trace_id)[2:].zfill(32) + "-" + hex( | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. line too long (117 > 79 characters) |
||
current_span.get_span_context().span_id)[2:].zfill(16) + "-0" + ("1" if current_span.is_recording() else "0")) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. line too long (151 > 79 characters) |
||
|
||
super().send_content(connection, request_body) | ||
|
||
|
||
class TracingXMLSafeTransport(xmlrpclib.SafeTransport): | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. too many blank lines (2) |
||
|
||
def __init__(self, use_datetime=False, use_builtin_types=False, | ||
*, headers=(), context=None): | ||
super().__init__(use_datetime=use_datetime, | ||
use_builtin_types=use_builtin_types, | ||
headers=headers, context=context) | ||
|
||
def request(self, host, handler, request_body, verbose=False): | ||
with tracer.start_as_current_span("POST XML request", context.get_current(), SpanKind.CLIENT): | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. line too long (106 > 79 characters) |
||
current_span = trace.get_current_span() | ||
try: | ||
result = super().request(host, handler, request_body, verbose) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. line too long (82 > 79 characters) |
||
current_span.set_attribute("http.status_code", 200) | ||
except xmlrpclib.ProtocolError as protocolError: | ||
current_span.set_attribute("http.status_code", protocolError.errcode) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. line too long (89 > 79 characters) |
||
current_span.record_exception(protocolError) | ||
raise protocolError | ||
return result | ||
|
||
def send_content(self, connection, request_body): | ||
current_span = trace.get_current_span() | ||
if current_span != INVALID_SPAN: | ||
current_span.set_attribute("net.peer.ip", connection.host) | ||
current_span.set_attribute("net.peer.port", connection.port) | ||
current_span.set_attribute("net.peer.transport", "ip_tcp") | ||
connection.putheader("traceparent", | ||
"00-" + hex(current_span.get_span_context().trace_id)[2:].zfill(32) + "-" + hex( | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. line too long (117 > 79 characters) |
||
current_span.get_span_context().span_id)[2:].zfill(16) + "-0" + ("1" if current_span.is_recording() else "0")) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. line too long (151 > 79 characters) |
||
|
||
super().send_content(connection, request_body) | ||
|
||
except ImportError: | ||
def create_span(f): | ||
@wraps(f) | ||
def decorated(*args, **kwargs): | ||
return f(*args, **kwargs) | ||
|
||
return decorated | ||
|
||
def init_tracing(service_name, endpoint, sampler, use_grpc=True): | ||
raise ImportError("Opentelemetry dependencies are missing") | ||
|
||
|
||
class AuthOptions: | ||
""" A global-ish authentication option container. | ||
|
||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -17,7 +17,7 @@ | |
author_email = pynipap.__author_email__, | ||
license = pynipap.__license__, | ||
url = pynipap.__url__, | ||
py_modules = ['pynipap','tracing'], | ||
py_modules = ['pynipap'], | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. unexpected spaces around keyword / parameter equals |
||
keywords = ['nipap'], | ||
classifiers = [ | ||
'Development Status :: 4 - Beta', | ||
|
This file was deleted.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
line too long (86 > 79 characters)