diff options
author | CoprDistGit <infra@openeuler.org> | 2023-05-15 05:46:51 +0000 |
---|---|---|
committer | CoprDistGit <infra@openeuler.org> | 2023-05-15 05:46:51 +0000 |
commit | 888e7d18cbe3b3c51f0ecf410edcb13760df3836 (patch) | |
tree | 587f78dec755121b1ec8924c01a115b8284b3bd8 | |
parent | 3f980b7719cb0e277835476e324d00be19cab748 (diff) |
automatic import of python-thinknet-observer
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | python-thinknet-observer.spec | 484 | ||||
-rw-r--r-- | sources | 1 |
3 files changed, 486 insertions, 0 deletions
@@ -0,0 +1 @@ +/thinknet-observer-0.4.21.tar.gz diff --git a/python-thinknet-observer.spec b/python-thinknet-observer.spec new file mode 100644 index 0000000..ceb37c0 --- /dev/null +++ b/python-thinknet-observer.spec @@ -0,0 +1,484 @@ +%global _empty_manifest_terminate_build 0 +Name: python-thinknet-observer +Version: 0.4.21 +Release: 1 +Summary: lib in development +License: MIT +URL: https://gitlab.thinknet.co.th/big-data/thinknet-observer-python +Source0: https://mirrors.nju.edu.cn/pypi/web/packages/6e/fe/b1fa3a3fc816b2e2c64e6088de14d8e851da8928ddff2cd4f1c96059c82f/thinknet-observer-0.4.21.tar.gz +BuildArch: noarch + +Requires: python3-numpy +Requires: python3-prometheus-client +Requires: python3-Flask +Requires: python3-fastapi + +%description +เป็น library ที่รวบรวมเครื่องมือการทำ observaibility ตาม format ของบริษัท ด้วยภาษา python โดยมีเครื่องมือดังนี้ +* metrics +* log +* tracing +## Installation +``` +pip install thinknet-observer +``` +## Metrics +การเรียกใช้ metrics เพื่อให้ [prometheus](https://prometheus.io/) มาเก็บ (pull) โดยมีวิธีการใช้งานดังนี้: +### PrometheusMiddleware() +> เป็น Class ที่ return middleware สำหรับเก็บ default metrics +Example +```python +from thinknet_observer import PrometheusMiddleware +# Flask +app = Flask(__name__) +# FastAPI +app = FastAPI() +''' use middleware to collect default metrics ''' +# singleprocess mode +middleware = PrometheusMiddleware(app) +# multiprocess mode +middleware = PrometheusMiddleware(app, is_multiprocessing = True) +# add exclude (optional) +list_exclude = [{"route": "/healthz"}] +middleware.add_exclude(list_exclude) +``` +### extension +Module สำหรับสร้าง custom metrics โดยมีการเรียกใช้งานดังนี้ +```python +from thinknet_observer import MetricCollector +``` +โดย custom metrics มีฟังก์ชั่นการทำงาน 4 ประเภทดังนี้ +#### MetricCollector.counter(name, description, label) +> เป็น class method สำหรับสร้าง metrics ประเภท counter ซึ่งสามารถเพิ่มค่าได้อย่างเดียว +Parameter +| name | type | description | +| ---- | ---- | ---- | +| name | String | ชื่อของ metrics +| description | String | description ของ metrics +| labels | Array | array of string labels ของ metrics [optional] +Example +```python +# no label +custom_counter = MetricCollector.counter("CUSTOM_COUNTER", "desc of CUSTOM_COUNTER") +custom_counter.inc(1) #เพิ่มค่า 1 +# label +custom_counter_label = MetricCollector.counter("CUSTOM_COUNTER", "desc of CUSTOM_COUNTER", ["key1","key2"]) +custom_counter_label.labels('value1', 'value2').inc(1) +``` +#### MetricCollector.gauge(name, description, label) +> เป็น class method สำหรับสร้าง metric ประเภท gauge ซึ่งสามารถเพิ่ม/ลดค่าได้ +Parameter +| name | type | description | +| ---- | ---- | ---- | +| name | String | ชื่อของ metrics +| description | String | description ของ metrics +| labels | Array | array of string labels ของ metrics [optional] +Example +```python +# no labels +custom_gauge = MetricCollector.gauge( + "CUSTOM_GAUGE", "desc of CUSTOM_GAUGE", +) +custom_gauge.inc(1) #เพิ่มค่า 1 +custom_gauge.dec(5) #ลดค่าลง 5 +#labels +custom_gauge_label = MetricCollector.gauge( + "CUSTOM_GAUGE", "desc of CUSTOM_GAUGE", ["key1", "key2"] +) +custom_gauge_label.labels('value1', 'value2').inc(1) +custom_gauge_label.labels('value1', 'value2').dec(5) +``` +#### MetricCollector.histogram(name, description,label, bucket) +> เป็น class method สำหรับสร้าง metric ประเภท histogram +Parameter +| name | type | description | +| ---- | ---- | ---- | +| name | String | ชื่อของ metrics +| description | String | description ของ metrics +| labels | Array | array of string labels ของ metrics [optional] +| bucket | Array | array of bucket for histogram [optional] +Example +```python +# no labels +custom_histogram = MetricCollector.histogram( + "CUSTOM_HISTOGRAM", "desc of CUSTOM_HISTOGRAM", +) +custom_histogram.observe(20) +# labels +custom_histogram = MetricCollector.histogram( + "CUSTOM_HISTOGRAM", "desc of CUSTOM_HISTOGRAM", ["key1", "key2"] +) +custom_histogram.labels('value1', 'value2').observe(20) +``` +#### MetricCollector.summary(name, description, label) +> เป็น class method สำหรับสร้าง metric ประเภท summary +Parameter +| name | type | description | +| ---- | ---- | ---- | +| name | String | ชื่อของ metrics +| description | String | description ของ metrics +| labels | Array | array of string labels ของ metrics [optional] +Example +```python +# no labels +custom_summary = MetricCollector.summary( + "CUSTOM_SUMMARY", "desc of CUSTOM_SUMMARY" +) +custom_summary.observe(10) +# labels +custom_summary_label = MetricCollector.summary( + "CUSTOM_SUMMARY", "desc of CUSTOM_SUMMARY", ["key1", "key2"] +) +custom_summary_label.labels('value1', 'value2').observe(10) +``` +### multiprocess mode +กรณีรันเป็น multiprocess mode ให้เพิ่ม environment: PROMETHEUS_MULTIPROC_DIR ด้วย +``` +PROMETHEUS_MULTIPROC_DIR=./prometheus_multiproc/ (folder for multiprocess metrics) +``` +### using gunicorn (Flask) +กรณีรันด้วย gunicorn แบบ multiprocess mode ให้เพิ่ม file: gunicorn.config.py ที่ root path ด้วย +```python +import os +from pathlib import Path +from multiprocessing import cpu_count +from os import environ +from prometheus_client import multiprocess +from thinknet_observer import clear_multiproc_dir +def child_exit(server, worker): + multiprocess.mark_process_dead(worker.pid) +def max_workers(): + return cpu_count() +clear_multiproc_dir() +``` + +%package -n python3-thinknet-observer +Summary: lib in development +Provides: python-thinknet-observer +BuildRequires: python3-devel +BuildRequires: python3-setuptools +BuildRequires: python3-pip +%description -n python3-thinknet-observer +เป็น library ที่รวบรวมเครื่องมือการทำ observaibility ตาม format ของบริษัท ด้วยภาษา python โดยมีเครื่องมือดังนี้ +* metrics +* log +* tracing +## Installation +``` +pip install thinknet-observer +``` +## Metrics +การเรียกใช้ metrics เพื่อให้ [prometheus](https://prometheus.io/) มาเก็บ (pull) โดยมีวิธีการใช้งานดังนี้: +### PrometheusMiddleware() +> เป็น Class ที่ return middleware สำหรับเก็บ default metrics +Example +```python +from thinknet_observer import PrometheusMiddleware +# Flask +app = Flask(__name__) +# FastAPI +app = FastAPI() +''' use middleware to collect default metrics ''' +# singleprocess mode +middleware = PrometheusMiddleware(app) +# multiprocess mode +middleware = PrometheusMiddleware(app, is_multiprocessing = True) +# add exclude (optional) +list_exclude = [{"route": "/healthz"}] +middleware.add_exclude(list_exclude) +``` +### extension +Module สำหรับสร้าง custom metrics โดยมีการเรียกใช้งานดังนี้ +```python +from thinknet_observer import MetricCollector +``` +โดย custom metrics มีฟังก์ชั่นการทำงาน 4 ประเภทดังนี้ +#### MetricCollector.counter(name, description, label) +> เป็น class method สำหรับสร้าง metrics ประเภท counter ซึ่งสามารถเพิ่มค่าได้อย่างเดียว +Parameter +| name | type | description | +| ---- | ---- | ---- | +| name | String | ชื่อของ metrics +| description | String | description ของ metrics +| labels | Array | array of string labels ของ metrics [optional] +Example +```python +# no label +custom_counter = MetricCollector.counter("CUSTOM_COUNTER", "desc of CUSTOM_COUNTER") +custom_counter.inc(1) #เพิ่มค่า 1 +# label +custom_counter_label = MetricCollector.counter("CUSTOM_COUNTER", "desc of CUSTOM_COUNTER", ["key1","key2"]) +custom_counter_label.labels('value1', 'value2').inc(1) +``` +#### MetricCollector.gauge(name, description, label) +> เป็น class method สำหรับสร้าง metric ประเภท gauge ซึ่งสามารถเพิ่ม/ลดค่าได้ +Parameter +| name | type | description | +| ---- | ---- | ---- | +| name | String | ชื่อของ metrics +| description | String | description ของ metrics +| labels | Array | array of string labels ของ metrics [optional] +Example +```python +# no labels +custom_gauge = MetricCollector.gauge( + "CUSTOM_GAUGE", "desc of CUSTOM_GAUGE", +) +custom_gauge.inc(1) #เพิ่มค่า 1 +custom_gauge.dec(5) #ลดค่าลง 5 +#labels +custom_gauge_label = MetricCollector.gauge( + "CUSTOM_GAUGE", "desc of CUSTOM_GAUGE", ["key1", "key2"] +) +custom_gauge_label.labels('value1', 'value2').inc(1) +custom_gauge_label.labels('value1', 'value2').dec(5) +``` +#### MetricCollector.histogram(name, description,label, bucket) +> เป็น class method สำหรับสร้าง metric ประเภท histogram +Parameter +| name | type | description | +| ---- | ---- | ---- | +| name | String | ชื่อของ metrics +| description | String | description ของ metrics +| labels | Array | array of string labels ของ metrics [optional] +| bucket | Array | array of bucket for histogram [optional] +Example +```python +# no labels +custom_histogram = MetricCollector.histogram( + "CUSTOM_HISTOGRAM", "desc of CUSTOM_HISTOGRAM", +) +custom_histogram.observe(20) +# labels +custom_histogram = MetricCollector.histogram( + "CUSTOM_HISTOGRAM", "desc of CUSTOM_HISTOGRAM", ["key1", "key2"] +) +custom_histogram.labels('value1', 'value2').observe(20) +``` +#### MetricCollector.summary(name, description, label) +> เป็น class method สำหรับสร้าง metric ประเภท summary +Parameter +| name | type | description | +| ---- | ---- | ---- | +| name | String | ชื่อของ metrics +| description | String | description ของ metrics +| labels | Array | array of string labels ของ metrics [optional] +Example +```python +# no labels +custom_summary = MetricCollector.summary( + "CUSTOM_SUMMARY", "desc of CUSTOM_SUMMARY" +) +custom_summary.observe(10) +# labels +custom_summary_label = MetricCollector.summary( + "CUSTOM_SUMMARY", "desc of CUSTOM_SUMMARY", ["key1", "key2"] +) +custom_summary_label.labels('value1', 'value2').observe(10) +``` +### multiprocess mode +กรณีรันเป็น multiprocess mode ให้เพิ่ม environment: PROMETHEUS_MULTIPROC_DIR ด้วย +``` +PROMETHEUS_MULTIPROC_DIR=./prometheus_multiproc/ (folder for multiprocess metrics) +``` +### using gunicorn (Flask) +กรณีรันด้วย gunicorn แบบ multiprocess mode ให้เพิ่ม file: gunicorn.config.py ที่ root path ด้วย +```python +import os +from pathlib import Path +from multiprocessing import cpu_count +from os import environ +from prometheus_client import multiprocess +from thinknet_observer import clear_multiproc_dir +def child_exit(server, worker): + multiprocess.mark_process_dead(worker.pid) +def max_workers(): + return cpu_count() +clear_multiproc_dir() +``` + +%package help +Summary: Development documents and examples for thinknet-observer +Provides: python3-thinknet-observer-doc +%description help +เป็น library ที่รวบรวมเครื่องมือการทำ observaibility ตาม format ของบริษัท ด้วยภาษา python โดยมีเครื่องมือดังนี้ +* metrics +* log +* tracing +## Installation +``` +pip install thinknet-observer +``` +## Metrics +การเรียกใช้ metrics เพื่อให้ [prometheus](https://prometheus.io/) มาเก็บ (pull) โดยมีวิธีการใช้งานดังนี้: +### PrometheusMiddleware() +> เป็น Class ที่ return middleware สำหรับเก็บ default metrics +Example +```python +from thinknet_observer import PrometheusMiddleware +# Flask +app = Flask(__name__) +# FastAPI +app = FastAPI() +''' use middleware to collect default metrics ''' +# singleprocess mode +middleware = PrometheusMiddleware(app) +# multiprocess mode +middleware = PrometheusMiddleware(app, is_multiprocessing = True) +# add exclude (optional) +list_exclude = [{"route": "/healthz"}] +middleware.add_exclude(list_exclude) +``` +### extension +Module สำหรับสร้าง custom metrics โดยมีการเรียกใช้งานดังนี้ +```python +from thinknet_observer import MetricCollector +``` +โดย custom metrics มีฟังก์ชั่นการทำงาน 4 ประเภทดังนี้ +#### MetricCollector.counter(name, description, label) +> เป็น class method สำหรับสร้าง metrics ประเภท counter ซึ่งสามารถเพิ่มค่าได้อย่างเดียว +Parameter +| name | type | description | +| ---- | ---- | ---- | +| name | String | ชื่อของ metrics +| description | String | description ของ metrics +| labels | Array | array of string labels ของ metrics [optional] +Example +```python +# no label +custom_counter = MetricCollector.counter("CUSTOM_COUNTER", "desc of CUSTOM_COUNTER") +custom_counter.inc(1) #เพิ่มค่า 1 +# label +custom_counter_label = MetricCollector.counter("CUSTOM_COUNTER", "desc of CUSTOM_COUNTER", ["key1","key2"]) +custom_counter_label.labels('value1', 'value2').inc(1) +``` +#### MetricCollector.gauge(name, description, label) +> เป็น class method สำหรับสร้าง metric ประเภท gauge ซึ่งสามารถเพิ่ม/ลดค่าได้ +Parameter +| name | type | description | +| ---- | ---- | ---- | +| name | String | ชื่อของ metrics +| description | String | description ของ metrics +| labels | Array | array of string labels ของ metrics [optional] +Example +```python +# no labels +custom_gauge = MetricCollector.gauge( + "CUSTOM_GAUGE", "desc of CUSTOM_GAUGE", +) +custom_gauge.inc(1) #เพิ่มค่า 1 +custom_gauge.dec(5) #ลดค่าลง 5 +#labels +custom_gauge_label = MetricCollector.gauge( + "CUSTOM_GAUGE", "desc of CUSTOM_GAUGE", ["key1", "key2"] +) +custom_gauge_label.labels('value1', 'value2').inc(1) +custom_gauge_label.labels('value1', 'value2').dec(5) +``` +#### MetricCollector.histogram(name, description,label, bucket) +> เป็น class method สำหรับสร้าง metric ประเภท histogram +Parameter +| name | type | description | +| ---- | ---- | ---- | +| name | String | ชื่อของ metrics +| description | String | description ของ metrics +| labels | Array | array of string labels ของ metrics [optional] +| bucket | Array | array of bucket for histogram [optional] +Example +```python +# no labels +custom_histogram = MetricCollector.histogram( + "CUSTOM_HISTOGRAM", "desc of CUSTOM_HISTOGRAM", +) +custom_histogram.observe(20) +# labels +custom_histogram = MetricCollector.histogram( + "CUSTOM_HISTOGRAM", "desc of CUSTOM_HISTOGRAM", ["key1", "key2"] +) +custom_histogram.labels('value1', 'value2').observe(20) +``` +#### MetricCollector.summary(name, description, label) +> เป็น class method สำหรับสร้าง metric ประเภท summary +Parameter +| name | type | description | +| ---- | ---- | ---- | +| name | String | ชื่อของ metrics +| description | String | description ของ metrics +| labels | Array | array of string labels ของ metrics [optional] +Example +```python +# no labels +custom_summary = MetricCollector.summary( + "CUSTOM_SUMMARY", "desc of CUSTOM_SUMMARY" +) +custom_summary.observe(10) +# labels +custom_summary_label = MetricCollector.summary( + "CUSTOM_SUMMARY", "desc of CUSTOM_SUMMARY", ["key1", "key2"] +) +custom_summary_label.labels('value1', 'value2').observe(10) +``` +### multiprocess mode +กรณีรันเป็น multiprocess mode ให้เพิ่ม environment: PROMETHEUS_MULTIPROC_DIR ด้วย +``` +PROMETHEUS_MULTIPROC_DIR=./prometheus_multiproc/ (folder for multiprocess metrics) +``` +### using gunicorn (Flask) +กรณีรันด้วย gunicorn แบบ multiprocess mode ให้เพิ่ม file: gunicorn.config.py ที่ root path ด้วย +```python +import os +from pathlib import Path +from multiprocessing import cpu_count +from os import environ +from prometheus_client import multiprocess +from thinknet_observer import clear_multiproc_dir +def child_exit(server, worker): + multiprocess.mark_process_dead(worker.pid) +def max_workers(): + return cpu_count() +clear_multiproc_dir() +``` + +%prep +%autosetup -n thinknet-observer-0.4.21 + +%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-thinknet-observer -f filelist.lst +%dir %{python3_sitelib}/* + +%files help -f doclist.lst +%{_docdir}/* + +%changelog +* Mon May 15 2023 Python_Bot <Python_Bot@openeuler.org> - 0.4.21-1 +- Package Spec generated @@ -0,0 +1 @@ +c82e91572b1d0249bc500b6ffe79074e thinknet-observer-0.4.21.tar.gz |