summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--python-pptop.spec480
-rw-r--r--sources1
3 files changed, 482 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index e69de29..3c74139 100644
--- a/.gitignore
+++ b/.gitignore
@@ -0,0 +1 @@
+/pptop-0.6.15.tar.gz
diff --git a/python-pptop.spec b/python-pptop.spec
new file mode 100644
index 0000000..b49215b
--- /dev/null
+++ b/python-pptop.spec
@@ -0,0 +1,480 @@
+%global _empty_manifest_terminate_build 0
+Name: python-pptop
+Version: 0.6.15
+Release: 1
+Summary: Open, extensible Python injector/profiler/analyzer
+License: MIT
+URL: https://pptop.bma.ai/
+Source0: https://mirrors.nju.edu.cn/pypi/web/packages/1e/2b/ce8f10cd8d7d7e892aa56a4e0e78cbcebe8a160c363825192a7f1f6f3e0a/pptop-0.6.15.tar.gz
+BuildArch: noarch
+
+
+%description
+# ppTOP
+
+Project home: https://pptop.bma.ai/
+
+<img src="https://github.com/alttch/pptop/blob/master/media/logo.png?raw=true" align="right" width="200" /> ppTOP is open, extensible Python injector/profiler/analyzer.
+
+The main idea is to inject a custom code inside Python process (already running
+or going to be launched) and analyze its behavior with no any code
+modifications.
+
+<img src="https://img.shields.io/pypi/v/pptop.svg" /> <img src="https://img.shields.io/badge/license-MIT-green" /> <img src="https://img.shields.io/badge/python-3.5%20%7C%203.6%20%7C%203.7-blue.svg" /> <img src="https://img.shields.io/badge/-beta-orange.svg" />
+
+Say no to "prints" and garbage in debug logs - now you have ppTOP. A modern MRI
+scanner for Python.
+
+## Installation
+
+```
+ pip3 install pptop
+```
+
+* Python: 3.5+ is required, as ppTOP uses asyncio
+* Can be injected into any Python version (tested: 2.7+)
+* Injection into running processes requires *gdb* (present in almost
+ all Linux distributions)
+* Only Linux systems are currently supported
+
+<img src="https://github.com/alttch/pptop/blob/master/media/demo.gif?raw=true" width="750" />
+
+## Features
+
+ppTOP can be injected into any running Python process
+
+[![asciicast](https://asciinema.org/a/265309.svg)](https://asciinema.org/a/265309)
+
+or you can load Python program manually and profile its launch
+
+[![asciicast](https://asciinema.org/a/265310.svg)](https://asciinema.org/a/265310)
+
+To launch a program, press *Ctrl+L* or specify *-w sec* param in command line
+args to start it automatically after the specified delay.
+
+Data from connected process is collected in real-time and displayed in
+table-based console UI, which can be easily extended with custom plugins.
+
+All data tables can be scrolled, filtered, new data collection can be paused.
+In case of problems, any plugin can be re-injected at any time.
+
+## Usage
+
+To start ppTOP, type
+
+```shell
+ pptop
+```
+
+and then select Python process you want to inject to from the list.
+
+Alternatively, you can start it with
+
+```shell
+ pptop PID
+ # or
+ pptop PID-FILE
+```
+
+and specify the process from the command line.
+
+If you want to analyze program startup, just type
+
+```shell
+ pptop /path/to/program.py
+```
+
+The program will be loaded in waiting state, press *Ctrl+L* when you are ready.
+
+To get a help for the current plugin, press *F1* to display module
+documentation.
+
+## Configuration
+
+Plugins and keyboard shortcuts are configured by default in
+*~/.pptop/pptop.yml* file (created automatically at first launch).
+
+## Standard plugins
+
+* **asyncio** asyncio loop monitor
+* **atasker** [atasker](https://github.com/alttch/atasker) monitor
+* **env** view process OS environment variables
+* **log** inject into all Python loggers and collect log messages
+* **malloc** trace object memory allocations
+* **neotasker** [neotasker](https://github.com/alttch/neotasker) monitor
+* **open_files** view process open files
+* **script_runner** launch a custom scripts inside process
+* **threads** view process threads
+* **vars** variable/function watcher
+* **yappi** [yappi](https://github.com/sumerc/yappi) profiler plugin
+
+Most of plugins contain 2 parts of code: one collects data inside profiling
+process, other display it in ppTOP UI. For the profiling process all plug-ins
+are invisible, safe and unloadable (at least they try their best :)
+
+## Console mode
+
+With "`" button, remote Python console can be opened. It has no full
+functionality like a standard Python console, but supports all frequently used
+features, like importing modules, defining functions and variables,
+executing functions and loops etc.
+
+[![asciicast](https://asciinema.org/a/265307.svg)](https://asciinema.org/a/265307)
+
+Console has own remote *globals*, which are preserved until ppTOP quit and
+injected server is terminated.
+
+## Grab stdout/stderr
+
+If launched with "-g" option, ppTOP will grab stdout/stderr of injected process
+and print it to local console. You can view local console without entering
+console mode, by pressing *Ctrl+O*.
+
+## Documentation
+
+Configuration, troubleshooting, advanced usage, plugin development:
+https://pptop.bma.ai/doc/
+
+## TODO
+
+* [ ] More plugins
+* [ ] Advanced filtering
+* [ ] Data snapshots
+* [ ] Step-by-step debugger
+* [ ] JSON API, web interface
+* [ ] Charts
+
+Enjoy! :)
+
+p.s. Code in **master** can be completely broken, install with *pip* only.
+
+%package -n python3-pptop
+Summary: Open, extensible Python injector/profiler/analyzer
+Provides: python-pptop
+BuildRequires: python3-devel
+BuildRequires: python3-setuptools
+BuildRequires: python3-pip
+%description -n python3-pptop
+# ppTOP
+
+Project home: https://pptop.bma.ai/
+
+<img src="https://github.com/alttch/pptop/blob/master/media/logo.png?raw=true" align="right" width="200" /> ppTOP is open, extensible Python injector/profiler/analyzer.
+
+The main idea is to inject a custom code inside Python process (already running
+or going to be launched) and analyze its behavior with no any code
+modifications.
+
+<img src="https://img.shields.io/pypi/v/pptop.svg" /> <img src="https://img.shields.io/badge/license-MIT-green" /> <img src="https://img.shields.io/badge/python-3.5%20%7C%203.6%20%7C%203.7-blue.svg" /> <img src="https://img.shields.io/badge/-beta-orange.svg" />
+
+Say no to "prints" and garbage in debug logs - now you have ppTOP. A modern MRI
+scanner for Python.
+
+## Installation
+
+```
+ pip3 install pptop
+```
+
+* Python: 3.5+ is required, as ppTOP uses asyncio
+* Can be injected into any Python version (tested: 2.7+)
+* Injection into running processes requires *gdb* (present in almost
+ all Linux distributions)
+* Only Linux systems are currently supported
+
+<img src="https://github.com/alttch/pptop/blob/master/media/demo.gif?raw=true" width="750" />
+
+## Features
+
+ppTOP can be injected into any running Python process
+
+[![asciicast](https://asciinema.org/a/265309.svg)](https://asciinema.org/a/265309)
+
+or you can load Python program manually and profile its launch
+
+[![asciicast](https://asciinema.org/a/265310.svg)](https://asciinema.org/a/265310)
+
+To launch a program, press *Ctrl+L* or specify *-w sec* param in command line
+args to start it automatically after the specified delay.
+
+Data from connected process is collected in real-time and displayed in
+table-based console UI, which can be easily extended with custom plugins.
+
+All data tables can be scrolled, filtered, new data collection can be paused.
+In case of problems, any plugin can be re-injected at any time.
+
+## Usage
+
+To start ppTOP, type
+
+```shell
+ pptop
+```
+
+and then select Python process you want to inject to from the list.
+
+Alternatively, you can start it with
+
+```shell
+ pptop PID
+ # or
+ pptop PID-FILE
+```
+
+and specify the process from the command line.
+
+If you want to analyze program startup, just type
+
+```shell
+ pptop /path/to/program.py
+```
+
+The program will be loaded in waiting state, press *Ctrl+L* when you are ready.
+
+To get a help for the current plugin, press *F1* to display module
+documentation.
+
+## Configuration
+
+Plugins and keyboard shortcuts are configured by default in
+*~/.pptop/pptop.yml* file (created automatically at first launch).
+
+## Standard plugins
+
+* **asyncio** asyncio loop monitor
+* **atasker** [atasker](https://github.com/alttch/atasker) monitor
+* **env** view process OS environment variables
+* **log** inject into all Python loggers and collect log messages
+* **malloc** trace object memory allocations
+* **neotasker** [neotasker](https://github.com/alttch/neotasker) monitor
+* **open_files** view process open files
+* **script_runner** launch a custom scripts inside process
+* **threads** view process threads
+* **vars** variable/function watcher
+* **yappi** [yappi](https://github.com/sumerc/yappi) profiler plugin
+
+Most of plugins contain 2 parts of code: one collects data inside profiling
+process, other display it in ppTOP UI. For the profiling process all plug-ins
+are invisible, safe and unloadable (at least they try their best :)
+
+## Console mode
+
+With "`" button, remote Python console can be opened. It has no full
+functionality like a standard Python console, but supports all frequently used
+features, like importing modules, defining functions and variables,
+executing functions and loops etc.
+
+[![asciicast](https://asciinema.org/a/265307.svg)](https://asciinema.org/a/265307)
+
+Console has own remote *globals*, which are preserved until ppTOP quit and
+injected server is terminated.
+
+## Grab stdout/stderr
+
+If launched with "-g" option, ppTOP will grab stdout/stderr of injected process
+and print it to local console. You can view local console without entering
+console mode, by pressing *Ctrl+O*.
+
+## Documentation
+
+Configuration, troubleshooting, advanced usage, plugin development:
+https://pptop.bma.ai/doc/
+
+## TODO
+
+* [ ] More plugins
+* [ ] Advanced filtering
+* [ ] Data snapshots
+* [ ] Step-by-step debugger
+* [ ] JSON API, web interface
+* [ ] Charts
+
+Enjoy! :)
+
+p.s. Code in **master** can be completely broken, install with *pip* only.
+
+%package help
+Summary: Development documents and examples for pptop
+Provides: python3-pptop-doc
+%description help
+# ppTOP
+
+Project home: https://pptop.bma.ai/
+
+<img src="https://github.com/alttch/pptop/blob/master/media/logo.png?raw=true" align="right" width="200" /> ppTOP is open, extensible Python injector/profiler/analyzer.
+
+The main idea is to inject a custom code inside Python process (already running
+or going to be launched) and analyze its behavior with no any code
+modifications.
+
+<img src="https://img.shields.io/pypi/v/pptop.svg" /> <img src="https://img.shields.io/badge/license-MIT-green" /> <img src="https://img.shields.io/badge/python-3.5%20%7C%203.6%20%7C%203.7-blue.svg" /> <img src="https://img.shields.io/badge/-beta-orange.svg" />
+
+Say no to "prints" and garbage in debug logs - now you have ppTOP. A modern MRI
+scanner for Python.
+
+## Installation
+
+```
+ pip3 install pptop
+```
+
+* Python: 3.5+ is required, as ppTOP uses asyncio
+* Can be injected into any Python version (tested: 2.7+)
+* Injection into running processes requires *gdb* (present in almost
+ all Linux distributions)
+* Only Linux systems are currently supported
+
+<img src="https://github.com/alttch/pptop/blob/master/media/demo.gif?raw=true" width="750" />
+
+## Features
+
+ppTOP can be injected into any running Python process
+
+[![asciicast](https://asciinema.org/a/265309.svg)](https://asciinema.org/a/265309)
+
+or you can load Python program manually and profile its launch
+
+[![asciicast](https://asciinema.org/a/265310.svg)](https://asciinema.org/a/265310)
+
+To launch a program, press *Ctrl+L* or specify *-w sec* param in command line
+args to start it automatically after the specified delay.
+
+Data from connected process is collected in real-time and displayed in
+table-based console UI, which can be easily extended with custom plugins.
+
+All data tables can be scrolled, filtered, new data collection can be paused.
+In case of problems, any plugin can be re-injected at any time.
+
+## Usage
+
+To start ppTOP, type
+
+```shell
+ pptop
+```
+
+and then select Python process you want to inject to from the list.
+
+Alternatively, you can start it with
+
+```shell
+ pptop PID
+ # or
+ pptop PID-FILE
+```
+
+and specify the process from the command line.
+
+If you want to analyze program startup, just type
+
+```shell
+ pptop /path/to/program.py
+```
+
+The program will be loaded in waiting state, press *Ctrl+L* when you are ready.
+
+To get a help for the current plugin, press *F1* to display module
+documentation.
+
+## Configuration
+
+Plugins and keyboard shortcuts are configured by default in
+*~/.pptop/pptop.yml* file (created automatically at first launch).
+
+## Standard plugins
+
+* **asyncio** asyncio loop monitor
+* **atasker** [atasker](https://github.com/alttch/atasker) monitor
+* **env** view process OS environment variables
+* **log** inject into all Python loggers and collect log messages
+* **malloc** trace object memory allocations
+* **neotasker** [neotasker](https://github.com/alttch/neotasker) monitor
+* **open_files** view process open files
+* **script_runner** launch a custom scripts inside process
+* **threads** view process threads
+* **vars** variable/function watcher
+* **yappi** [yappi](https://github.com/sumerc/yappi) profiler plugin
+
+Most of plugins contain 2 parts of code: one collects data inside profiling
+process, other display it in ppTOP UI. For the profiling process all plug-ins
+are invisible, safe and unloadable (at least they try their best :)
+
+## Console mode
+
+With "`" button, remote Python console can be opened. It has no full
+functionality like a standard Python console, but supports all frequently used
+features, like importing modules, defining functions and variables,
+executing functions and loops etc.
+
+[![asciicast](https://asciinema.org/a/265307.svg)](https://asciinema.org/a/265307)
+
+Console has own remote *globals*, which are preserved until ppTOP quit and
+injected server is terminated.
+
+## Grab stdout/stderr
+
+If launched with "-g" option, ppTOP will grab stdout/stderr of injected process
+and print it to local console. You can view local console without entering
+console mode, by pressing *Ctrl+O*.
+
+## Documentation
+
+Configuration, troubleshooting, advanced usage, plugin development:
+https://pptop.bma.ai/doc/
+
+## TODO
+
+* [ ] More plugins
+* [ ] Advanced filtering
+* [ ] Data snapshots
+* [ ] Step-by-step debugger
+* [ ] JSON API, web interface
+* [ ] Charts
+
+Enjoy! :)
+
+p.s. Code in **master** can be completely broken, install with *pip* only.
+
+%prep
+%autosetup -n pptop-0.6.15
+
+%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-pptop -f filelist.lst
+%dir %{python3_sitelib}/*
+
+%files help -f doclist.lst
+%{_docdir}/*
+
+%changelog
+* Mon May 29 2023 Python_Bot <Python_Bot@openeuler.org> - 0.6.15-1
+- Package Spec generated
diff --git a/sources b/sources
new file mode 100644
index 0000000..64fb604
--- /dev/null
+++ b/sources
@@ -0,0 +1 @@
+dfcfd6bc5ef2c5bc4c5bb831c4e3f03e pptop-0.6.15.tar.gz