summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--python-thinknet-observer.spec484
-rw-r--r--sources1
3 files changed, 486 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index e69de29..186c633 100644
--- a/.gitignore
+++ b/.gitignore
@@ -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
diff --git a/sources b/sources
new file mode 100644
index 0000000..a2d8ac6
--- /dev/null
+++ b/sources
@@ -0,0 +1 @@
+c82e91572b1d0249bc500b6ffe79074e thinknet-observer-0.4.21.tar.gz