summaryrefslogtreecommitdiff
path: root/python-xraysink.spec
diff options
context:
space:
mode:
authorCoprDistGit <infra@openeuler.org>2023-05-31 04:30:35 +0000
committerCoprDistGit <infra@openeuler.org>2023-05-31 04:30:35 +0000
commitaa8bf0855b5a1e925b7f9e5d9a13ce801490262c (patch)
treeb21a134ca4c3ae2daca9fb335c740bb79157cbf7 /python-xraysink.spec
parent5cb9b382790c3b5bda9bcfbae216cae201c6fe20 (diff)
automatic import of python-xraysink
Diffstat (limited to 'python-xraysink.spec')
-rw-r--r--python-xraysink.spec523
1 files changed, 523 insertions, 0 deletions
diff --git a/python-xraysink.spec b/python-xraysink.spec
new file mode 100644
index 0000000..e682444
--- /dev/null
+++ b/python-xraysink.spec
@@ -0,0 +1,523 @@
+%global _empty_manifest_terminate_build 0
+Name: python-xraysink
+Version: 1.6.1
+Release: 1
+Summary: Instrument asyncio Python for distributed tracing with AWS X-Ray.
+License: Apache 2.0
+URL: https://github.com/garyd203/xraysink
+Source0: https://mirrors.nju.edu.cn/pypi/web/packages/cb/1e/3772d5ca59f3841fbc15cf8da520217ac4ddd7fc6a3feec89efacb7dbf64/xraysink-1.6.1.tar.gz
+BuildArch: noarch
+
+Requires: python3-aiohttp
+Requires: python3-async-asgi-testclient
+Requires: python3-aws_xray_sdk
+Requires: python3-black
+Requires: python3-coverage[toml]
+Requires: python3-coverage[toml]
+Requires: python3-fastapi
+Requires: python3-flake8
+Requires: python3-flake8-bugbear
+Requires: python3-flake8-builtins
+Requires: python3-flake8-comprehensions
+Requires: python3-flake8-eradicate
+Requires: python3-flake8-executable
+Requires: python3-flake8-implicit-str-concat
+Requires: python3-flake8-import-order
+Requires: python3-flake8-logging-format
+Requires: python3-flake8-print
+Requires: python3-flake8-pytest-style
+Requires: python3-flake8-simplify
+Requires: python3-flake8-string-format
+Requires: python3-flake8-use-fstring
+Requires: python3-pytest
+Requires: python3-pytest-asyncio
+Requires: python3-pytest-cov
+Requires: python3-setuptools
+Requires: python3-wrapt
+Requires: python3-yamllint
+Requires: python3-zimports
+
+%description
+# xraysink
+
+<div align="center">
+ <a href="https://pypi.org/project/xraysink/">
+ <img src="https://img.shields.io/pypi/v/xraysink.svg" alt="Package version">
+ </a>
+ <a href="https://pypi.org/project/xraysink/">
+ <img src="https://img.shields.io/pypi/pyversions/xraysink.svg" alt="Python versions">
+ </a>
+ <a href="https://pypi.org/project/xraysink/">
+ <img src="https://img.shields.io/pypi/dm/xraysink.svg" alt="Monthly downloads">
+ </a>
+</div>
+<div align="center">
+ <!-- Coverage badge stored in our wiki by the python-coverage-comment-action plugin -->
+ <a href="https://github.com/garyd203/xraysink/">
+ <img src="https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/wiki/garyd203/xraysink/python-coverage-comment-action-badge.json" alt="Coverage">
+ </a>
+</div>
+
+Extra AWS X-Ray instrumentation to use distributed tracing with asyncio Python
+libraries that are not (yet) supported by the official
+[aws_xray_sdk](https://github.com/aws/aws-xray-sdk-python) library.
+
+
+## Integrations Supported
+* Generic ASGI-compatible tracing middleware for *any* ASGI-compliant web
+ framework. This has been tested with:
+ - [aiohttp server](https://docs.aiohttp.org/en/stable/)
+ - [FastAPI](https://fastapi.tiangolo.com/)
+* asyncio [Task's](https://docs.python.org/3/library/asyncio-task.html)
+* Background jobs/tasks
+
+## Installation
+xraysink is distributed as a standard python package through
+[pypi](https://pypi.org/), so you can install it with your favourite Python
+package manager. For example:
+
+ pip install xraysink
+
+
+## How to use
+`xraysink` augments the functionality provided by `aws_xray_sdk`. Before
+using the tools in `xraysink`, you first need to configure `aws_xray_sdk` -
+this will probably involve calling `xray_recorder.configure()` when your
+process starts, and optionally `aws_xray_sdk.core.patch()`.
+
+Extra instrumentation provided by `xraysink` is described below.
+
+### FastAPI
+Instrument incoming requests in your FastAPI web server by adding the
+`xray_middleware` to your app. For example, you could do:
+
+ from starlette.middleware.base import BaseHTTPMiddleware
+ from xraysink.asgi.middleware import xray_middleware
+
+ # Standard asyncio X-Ray configuration, customise as you choose
+ xray_recorder.configure(context=AsyncContext(), service="my-cute-little-service")
+
+ # Create a FastAPI app with various middleware
+ app = FastAPI()
+ app.add_middleware(MyTracingDependentMiddleware) # Any middleware that is added earlier will have the X-Ray tracing context available to it
+ app.add_middleware(BaseHTTPMiddleware, dispatch=xray_middleware)
+
+
+### Asyncio Tasks
+If you start asyncio [Task's](https://docs.python.org/3/library/asyncio-task.html)
+from a standard request handler, then the AWS X-Ray SDK will not correctly
+instrument any outgoing requests made inside those Tasks.
+
+Use the fixed `AsyncContext` from `xraysink` as a drop-in replacement, like so:
+
+ from aws_xray_sdk.core import xray_recorder
+ from xraysink.context import AsyncContext # NB: Use the AsyncContext from xraysink
+
+ # Use the fixed AsyncContext when configuring X-Ray,
+ # and customise other configuration as you choose.
+ xray_recorder.configure(context=AsyncContext(use_task_factory=True))
+
+
+### Background Jobs/Tasks
+If your process starts background tasks that make network calls (eg. to the
+database or an API in another service), then each execution of one of those
+tasks should be treated as a new X-Ray trace. Indeed, if you don't do so then
+you will likely get `context_missing` errors.
+
+An async function that implements a background task can be easily instrumented
+using the `@xray_task_async()` decorator, like so:
+
+ from aws_xray_sdk.core import xray_recorder
+ from xraysink.tasks import xray_task_async
+
+ # Standard asyncio X-Ray configuration, customise as you choose
+ xray_recorder.configure(context=AsyncContext(), service="my-cute-little-service")
+
+ # Any call to this function will start a new X-Ray trace
+ @xray_task_async()
+ async def cleanup_stale_tokens():
+ await database.get_table("tokens").delete(age__gt=1)
+
+ # Start your background task using your scheduling system of choice :)
+ schedule_recurring_task(cleanup_stale_tokens)
+
+If your background task functions are called from a function that is already
+instrumented (eg. send an email immediately after handling a request), then
+the background task will appear as a child segment of that trace. In this case,
+you must ensure you use the non-buggy `AsyncContext` when configuring the recorder
+(ie. `from xraysink.context import AsyncContext`)
+
+
+### CloudWatch Logs integration
+You can link your X-Ray traces to your CloudWatch Logs log records, which
+enhances the integration with AWS CloudWatch ServiceLens. Take the following
+steps:
+
+1. Put the X-Ray trace ID into every log message. There is no convention for
+ how to do this (it just has to appear verbatim in the log message
+ somewhere), but if you are using structured logging then the convention is
+ to use a field called `traceId`. Here's an example
+
+ trace_id = xray_recorder.get_trace_entity().trace_id
+ logging.getLogger("example").info("Hello World!", extra={"traceId": trace_id})
+
+1. Explicitly set the name of the CloudWatch Logs log group associated with
+ your process. There is no general way to detect the Log Group from inside
+ the process, hence it requires manual configuration as part of your process
+ initialisation (eg. in the same place where you call
+ `xray_recorder.configure`).
+
+ set_xray_log_group("/example/service-name")
+
+Note that this feature relies on undocumented functionality, and is
+[not yet](https://github.com/aws/aws-xray-sdk-python/issues/188)
+supported by the official Python SDK.
+
+
+## Licence
+This project uses the Apache 2.0 licence, to make it compatible with
+[aws_xray_sdk](https://github.com/aws/aws-xray-sdk-python), the
+primary library for integrating with AWS X-Ray.
+
+
+
+%package -n python3-xraysink
+Summary: Instrument asyncio Python for distributed tracing with AWS X-Ray.
+Provides: python-xraysink
+BuildRequires: python3-devel
+BuildRequires: python3-setuptools
+BuildRequires: python3-pip
+%description -n python3-xraysink
+# xraysink
+
+<div align="center">
+ <a href="https://pypi.org/project/xraysink/">
+ <img src="https://img.shields.io/pypi/v/xraysink.svg" alt="Package version">
+ </a>
+ <a href="https://pypi.org/project/xraysink/">
+ <img src="https://img.shields.io/pypi/pyversions/xraysink.svg" alt="Python versions">
+ </a>
+ <a href="https://pypi.org/project/xraysink/">
+ <img src="https://img.shields.io/pypi/dm/xraysink.svg" alt="Monthly downloads">
+ </a>
+</div>
+<div align="center">
+ <!-- Coverage badge stored in our wiki by the python-coverage-comment-action plugin -->
+ <a href="https://github.com/garyd203/xraysink/">
+ <img src="https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/wiki/garyd203/xraysink/python-coverage-comment-action-badge.json" alt="Coverage">
+ </a>
+</div>
+
+Extra AWS X-Ray instrumentation to use distributed tracing with asyncio Python
+libraries that are not (yet) supported by the official
+[aws_xray_sdk](https://github.com/aws/aws-xray-sdk-python) library.
+
+
+## Integrations Supported
+* Generic ASGI-compatible tracing middleware for *any* ASGI-compliant web
+ framework. This has been tested with:
+ - [aiohttp server](https://docs.aiohttp.org/en/stable/)
+ - [FastAPI](https://fastapi.tiangolo.com/)
+* asyncio [Task's](https://docs.python.org/3/library/asyncio-task.html)
+* Background jobs/tasks
+
+## Installation
+xraysink is distributed as a standard python package through
+[pypi](https://pypi.org/), so you can install it with your favourite Python
+package manager. For example:
+
+ pip install xraysink
+
+
+## How to use
+`xraysink` augments the functionality provided by `aws_xray_sdk`. Before
+using the tools in `xraysink`, you first need to configure `aws_xray_sdk` -
+this will probably involve calling `xray_recorder.configure()` when your
+process starts, and optionally `aws_xray_sdk.core.patch()`.
+
+Extra instrumentation provided by `xraysink` is described below.
+
+### FastAPI
+Instrument incoming requests in your FastAPI web server by adding the
+`xray_middleware` to your app. For example, you could do:
+
+ from starlette.middleware.base import BaseHTTPMiddleware
+ from xraysink.asgi.middleware import xray_middleware
+
+ # Standard asyncio X-Ray configuration, customise as you choose
+ xray_recorder.configure(context=AsyncContext(), service="my-cute-little-service")
+
+ # Create a FastAPI app with various middleware
+ app = FastAPI()
+ app.add_middleware(MyTracingDependentMiddleware) # Any middleware that is added earlier will have the X-Ray tracing context available to it
+ app.add_middleware(BaseHTTPMiddleware, dispatch=xray_middleware)
+
+
+### Asyncio Tasks
+If you start asyncio [Task's](https://docs.python.org/3/library/asyncio-task.html)
+from a standard request handler, then the AWS X-Ray SDK will not correctly
+instrument any outgoing requests made inside those Tasks.
+
+Use the fixed `AsyncContext` from `xraysink` as a drop-in replacement, like so:
+
+ from aws_xray_sdk.core import xray_recorder
+ from xraysink.context import AsyncContext # NB: Use the AsyncContext from xraysink
+
+ # Use the fixed AsyncContext when configuring X-Ray,
+ # and customise other configuration as you choose.
+ xray_recorder.configure(context=AsyncContext(use_task_factory=True))
+
+
+### Background Jobs/Tasks
+If your process starts background tasks that make network calls (eg. to the
+database or an API in another service), then each execution of one of those
+tasks should be treated as a new X-Ray trace. Indeed, if you don't do so then
+you will likely get `context_missing` errors.
+
+An async function that implements a background task can be easily instrumented
+using the `@xray_task_async()` decorator, like so:
+
+ from aws_xray_sdk.core import xray_recorder
+ from xraysink.tasks import xray_task_async
+
+ # Standard asyncio X-Ray configuration, customise as you choose
+ xray_recorder.configure(context=AsyncContext(), service="my-cute-little-service")
+
+ # Any call to this function will start a new X-Ray trace
+ @xray_task_async()
+ async def cleanup_stale_tokens():
+ await database.get_table("tokens").delete(age__gt=1)
+
+ # Start your background task using your scheduling system of choice :)
+ schedule_recurring_task(cleanup_stale_tokens)
+
+If your background task functions are called from a function that is already
+instrumented (eg. send an email immediately after handling a request), then
+the background task will appear as a child segment of that trace. In this case,
+you must ensure you use the non-buggy `AsyncContext` when configuring the recorder
+(ie. `from xraysink.context import AsyncContext`)
+
+
+### CloudWatch Logs integration
+You can link your X-Ray traces to your CloudWatch Logs log records, which
+enhances the integration with AWS CloudWatch ServiceLens. Take the following
+steps:
+
+1. Put the X-Ray trace ID into every log message. There is no convention for
+ how to do this (it just has to appear verbatim in the log message
+ somewhere), but if you are using structured logging then the convention is
+ to use a field called `traceId`. Here's an example
+
+ trace_id = xray_recorder.get_trace_entity().trace_id
+ logging.getLogger("example").info("Hello World!", extra={"traceId": trace_id})
+
+1. Explicitly set the name of the CloudWatch Logs log group associated with
+ your process. There is no general way to detect the Log Group from inside
+ the process, hence it requires manual configuration as part of your process
+ initialisation (eg. in the same place where you call
+ `xray_recorder.configure`).
+
+ set_xray_log_group("/example/service-name")
+
+Note that this feature relies on undocumented functionality, and is
+[not yet](https://github.com/aws/aws-xray-sdk-python/issues/188)
+supported by the official Python SDK.
+
+
+## Licence
+This project uses the Apache 2.0 licence, to make it compatible with
+[aws_xray_sdk](https://github.com/aws/aws-xray-sdk-python), the
+primary library for integrating with AWS X-Ray.
+
+
+
+%package help
+Summary: Development documents and examples for xraysink
+Provides: python3-xraysink-doc
+%description help
+# xraysink
+
+<div align="center">
+ <a href="https://pypi.org/project/xraysink/">
+ <img src="https://img.shields.io/pypi/v/xraysink.svg" alt="Package version">
+ </a>
+ <a href="https://pypi.org/project/xraysink/">
+ <img src="https://img.shields.io/pypi/pyversions/xraysink.svg" alt="Python versions">
+ </a>
+ <a href="https://pypi.org/project/xraysink/">
+ <img src="https://img.shields.io/pypi/dm/xraysink.svg" alt="Monthly downloads">
+ </a>
+</div>
+<div align="center">
+ <!-- Coverage badge stored in our wiki by the python-coverage-comment-action plugin -->
+ <a href="https://github.com/garyd203/xraysink/">
+ <img src="https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/wiki/garyd203/xraysink/python-coverage-comment-action-badge.json" alt="Coverage">
+ </a>
+</div>
+
+Extra AWS X-Ray instrumentation to use distributed tracing with asyncio Python
+libraries that are not (yet) supported by the official
+[aws_xray_sdk](https://github.com/aws/aws-xray-sdk-python) library.
+
+
+## Integrations Supported
+* Generic ASGI-compatible tracing middleware for *any* ASGI-compliant web
+ framework. This has been tested with:
+ - [aiohttp server](https://docs.aiohttp.org/en/stable/)
+ - [FastAPI](https://fastapi.tiangolo.com/)
+* asyncio [Task's](https://docs.python.org/3/library/asyncio-task.html)
+* Background jobs/tasks
+
+## Installation
+xraysink is distributed as a standard python package through
+[pypi](https://pypi.org/), so you can install it with your favourite Python
+package manager. For example:
+
+ pip install xraysink
+
+
+## How to use
+`xraysink` augments the functionality provided by `aws_xray_sdk`. Before
+using the tools in `xraysink`, you first need to configure `aws_xray_sdk` -
+this will probably involve calling `xray_recorder.configure()` when your
+process starts, and optionally `aws_xray_sdk.core.patch()`.
+
+Extra instrumentation provided by `xraysink` is described below.
+
+### FastAPI
+Instrument incoming requests in your FastAPI web server by adding the
+`xray_middleware` to your app. For example, you could do:
+
+ from starlette.middleware.base import BaseHTTPMiddleware
+ from xraysink.asgi.middleware import xray_middleware
+
+ # Standard asyncio X-Ray configuration, customise as you choose
+ xray_recorder.configure(context=AsyncContext(), service="my-cute-little-service")
+
+ # Create a FastAPI app with various middleware
+ app = FastAPI()
+ app.add_middleware(MyTracingDependentMiddleware) # Any middleware that is added earlier will have the X-Ray tracing context available to it
+ app.add_middleware(BaseHTTPMiddleware, dispatch=xray_middleware)
+
+
+### Asyncio Tasks
+If you start asyncio [Task's](https://docs.python.org/3/library/asyncio-task.html)
+from a standard request handler, then the AWS X-Ray SDK will not correctly
+instrument any outgoing requests made inside those Tasks.
+
+Use the fixed `AsyncContext` from `xraysink` as a drop-in replacement, like so:
+
+ from aws_xray_sdk.core import xray_recorder
+ from xraysink.context import AsyncContext # NB: Use the AsyncContext from xraysink
+
+ # Use the fixed AsyncContext when configuring X-Ray,
+ # and customise other configuration as you choose.
+ xray_recorder.configure(context=AsyncContext(use_task_factory=True))
+
+
+### Background Jobs/Tasks
+If your process starts background tasks that make network calls (eg. to the
+database or an API in another service), then each execution of one of those
+tasks should be treated as a new X-Ray trace. Indeed, if you don't do so then
+you will likely get `context_missing` errors.
+
+An async function that implements a background task can be easily instrumented
+using the `@xray_task_async()` decorator, like so:
+
+ from aws_xray_sdk.core import xray_recorder
+ from xraysink.tasks import xray_task_async
+
+ # Standard asyncio X-Ray configuration, customise as you choose
+ xray_recorder.configure(context=AsyncContext(), service="my-cute-little-service")
+
+ # Any call to this function will start a new X-Ray trace
+ @xray_task_async()
+ async def cleanup_stale_tokens():
+ await database.get_table("tokens").delete(age__gt=1)
+
+ # Start your background task using your scheduling system of choice :)
+ schedule_recurring_task(cleanup_stale_tokens)
+
+If your background task functions are called from a function that is already
+instrumented (eg. send an email immediately after handling a request), then
+the background task will appear as a child segment of that trace. In this case,
+you must ensure you use the non-buggy `AsyncContext` when configuring the recorder
+(ie. `from xraysink.context import AsyncContext`)
+
+
+### CloudWatch Logs integration
+You can link your X-Ray traces to your CloudWatch Logs log records, which
+enhances the integration with AWS CloudWatch ServiceLens. Take the following
+steps:
+
+1. Put the X-Ray trace ID into every log message. There is no convention for
+ how to do this (it just has to appear verbatim in the log message
+ somewhere), but if you are using structured logging then the convention is
+ to use a field called `traceId`. Here's an example
+
+ trace_id = xray_recorder.get_trace_entity().trace_id
+ logging.getLogger("example").info("Hello World!", extra={"traceId": trace_id})
+
+1. Explicitly set the name of the CloudWatch Logs log group associated with
+ your process. There is no general way to detect the Log Group from inside
+ the process, hence it requires manual configuration as part of your process
+ initialisation (eg. in the same place where you call
+ `xray_recorder.configure`).
+
+ set_xray_log_group("/example/service-name")
+
+Note that this feature relies on undocumented functionality, and is
+[not yet](https://github.com/aws/aws-xray-sdk-python/issues/188)
+supported by the official Python SDK.
+
+
+## Licence
+This project uses the Apache 2.0 licence, to make it compatible with
+[aws_xray_sdk](https://github.com/aws/aws-xray-sdk-python), the
+primary library for integrating with AWS X-Ray.
+
+
+
+%prep
+%autosetup -n xraysink-1.6.1
+
+%build
+%py3_build
+
+%install
+%py3_install
+install -d -m755 %{buildroot}/%{_pkgdocdir}
+if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi
+if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi
+if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi
+if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi
+pushd %{buildroot}
+if [ -d usr/lib ]; then
+ find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/lib64 ]; then
+ find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/bin ]; then
+ find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+if [ -d usr/sbin ]; then
+ find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst
+fi
+touch doclist.lst
+if [ -d usr/share/man ]; then
+ find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst
+fi
+popd
+mv %{buildroot}/filelist.lst .
+mv %{buildroot}/doclist.lst .
+
+%files -n python3-xraysink -f filelist.lst
+%dir %{python3_sitelib}/*
+
+%files help -f doclist.lst
+%{_docdir}/*
+
+%changelog
+* Wed May 31 2023 Python_Bot <Python_Bot@openeuler.org> - 1.6.1-1
+- Package Spec generated