%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.aliyun.com/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 * Thu Jun 08 2023 Python_Bot - 0.4.21-1 - Package Spec generated