diff options
| author | CoprDistGit <infra@openeuler.org> | 2023-05-29 11:36:58 +0000 |
|---|---|---|
| committer | CoprDistGit <infra@openeuler.org> | 2023-05-29 11:36:58 +0000 |
| commit | 01d8c7d6be641a3da3a3ed3cff5b8d1125daa503 (patch) | |
| tree | 08d4f931455e76f14517ce92905e0f5974ed9e89 /python-django-elasticsearch-metrics.spec | |
| parent | 1ceabab682946cec7f710564c718774ccda4b2dd (diff) | |
automatic import of python-django-elasticsearch-metrics
Diffstat (limited to 'python-django-elasticsearch-metrics.spec')
| -rw-r--r-- | python-django-elasticsearch-metrics.spec | 806 |
1 files changed, 806 insertions, 0 deletions
diff --git a/python-django-elasticsearch-metrics.spec b/python-django-elasticsearch-metrics.spec new file mode 100644 index 0000000..af3eca3 --- /dev/null +++ b/python-django-elasticsearch-metrics.spec @@ -0,0 +1,806 @@ +%global _empty_manifest_terminate_build 0 +Name: python-django-elasticsearch-metrics +Version: 5.0.0 +Release: 1 +Summary: Django app for storing time-series metrics in Elasticsearch. +License: MIT +URL: http://github.com/CenterForOpenScience/django-elasticsearch-metrics +Source0: https://mirrors.nju.edu.cn/pypi/web/packages/8f/82/e3af99016c697fdea2925a9c81513b7ff320117915f1017cd341ac87e4b0/django-elasticsearch-metrics-5.0.0.tar.gz +BuildArch: noarch + +Requires: python3-elasticsearch-dsl +Requires: python3-pytest +Requires: python3-mock +Requires: python3-pytest-django +Requires: python3-factory-boy +Requires: python3-flake8 +Requires: python3-pre-commit +Requires: python3-konch +Requires: python3-tox +Requires: python3-flake8-bugbear +Requires: python3-flake8 +Requires: python3-pre-commit +Requires: python3-flake8-bugbear +Requires: python3-pytest +Requires: python3-mock +Requires: python3-pytest-django +Requires: python3-factory-boy + +%description +# django-elasticsearch-metrics + +[](https://badge.fury.io/py/django-elasticsearch-metrics) +[](https://travis-ci.org/CenterForOpenScience/django-elasticsearch-metrics) +[](https://github.com/ambv/black) + +Django app for storing time-series metrics in Elasticsearch. + +## Pre-requisites + +* Python 2.7 or >=3.6 +* Django 1.11 or 2.0 +* Elasticsearch 6 + +## Install + +``` +pip install django-elasticsearch-metrics +``` + +## Quickstart + +Add `"elasticseach_metrics"` to `INSTALLED_APPS`. + +```python +INSTALLED_APPS += ["elasticsearch_metrics"] +``` + +Define the `ELASTICSEARCH_DSL` setting. + +```python +ELASTICSEARCH_DSL = {"default": {"hosts": "localhost:9200"}} +``` + +This setting is passed to [`elasticsearch_dsl.connections.configure`](http://elasticsearch-dsl.readthedocs.io/en/stable/configuration.html#multiple-clusters) so +it takes the same parameters. + + +In one of your apps, define a new metric in `metrics.py`. + +A `Metric` is a subclass of [`elasticsearch_dsl.Document`](https://elasticsearch-dsl.readthedocs.io/en/stable/api.html#document). + + +```python +# myapp/metrics.py + +from elasticsearch_metrics import metrics + + +class PageView(metrics.Metric): + user_id = metrics.Integer(index=True, doc_values=True) +``` + +Use the `sync_metrics` management command to ensure that the [index template](https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-templates.html) +for your metric is created in Elasticsearch. + +```shell +# This will create an index template called myapp_pageview +python manage.py sync_metrics +``` + +Now add some data: + +```python +from myapp.metrics import PageView + +user = User.objects.latest() + +# By default we create an index for each day. +# Therefore, this will persist the document +# to an index called, e.g. "myapp_pageview_2020.02.04" +PageView.record(user_id=user.id) +``` + +Go forth and search! + +```python +# perform a search across all page views +PageView.search() +``` + +## Per-month or per-year indices + +By default, an index is created for every day that a metric is saved. +You can change this to create an index per month or per year by changing +the `ELASTICSEARCH_METRICS_DATE_FORMAT` setting. + + +```python +# settings.py + +# Monthly: +ELASTICSEARCH_METRICS_DATE_FORMAT = "%Y.%m" + +# Yearly: +ELASTICSEARCH_METRICS_DATE_FORMAT = "%Y" +``` + +## Index settings + +You can configure the index template settings by setting +`Metric.Index.settings`. + +```python +class PageView(metrics.Metric): + user_id = metrics.Integer() + + class Index: + settings = {"number_of_shards": 2, "refresh_interval": "5s"} +``` + +## Index templates + +Each `Metric` will have its own [index template](https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-templates.html). +The index template name and glob pattern are computed from the app label +for the containing app and the class's name. For example, a `PageView` +class defined in `myapp/metrics.py` will have an index template with the +name `myapp_pageview` and a template glob pattern of `myapp_pageview_*`. + +If you declare a `Metric` outside of an app, you will need to set +`app_label`. + + +```python +class PageView(metrics.Metric): + class Meta: + app_label = "myapp" +``` + +Alternatively, you can set `template_name` and/or `template` explicitly. + +```python +class PageView(metrics.Metric): + user_id = metrics.Integer() + + class Meta: + template_name = "myapp_pviews" + template = "myapp_pviews_*" +``` + +## Abstract metrics + +```python +from elasticsearch_metrics import metrics + + +class MyBaseMetric(metrics.Metric): + user_id = metrics.Integer() + + class Meta: + abstract = True + + +class PageView(MyBaseMetric): + class Meta: + app_label = "myapp" +``` + +## Optional factory_boy integration + +```python +import factory +from elasticsearch_metrics.factory import MetricFactory + +from ..myapp.metrics import MyMetric + + +class MyMetricFactory(MetricFactory): + my_int = factory.Faker("pyint") + + class Meta: + model = MyMetric + + +def test_something(): + metric = MyMetricFactory() # index metric in ES + assert isinstance(metric.my_int, int) +``` + +## Configuration + +* `ELASTICSEARCH_DSL`: Required. Connection settings passed to + [`elasticsearch_dsl.connections.configure`](http://elasticsearch-dsl.readthedocs.io/en/stable/configuration.html#multiple-clusters). +* `ELASTICSEARCH_METRICS_DATE_FORMAT`: Date format to use when creating + indexes. Default: `%Y.%m.%d` (same date format Elasticsearch uses for + [date math](https://www.elastic.co/guide/en/elasticsearch/reference/current/date-math-index-names.html)) + +## Management commands + +* `sync_metrics`: Ensure that index templates have been created for + your metrics. +* `show_metrics`: Pretty-print a listing of all registered metrics. +* `check_metrics`: Check if index templates are in sync. Exits + with an error code if any metrics are out of sync. + +<!-- * `clean_metrics` : Clean old data using [curator](https://curator.readthedocs.io/en/latest/). --> +<!-- --> +<!-- ``` --> +<!-- python manage.py clean_metrics myapp.PageView --older-than 45 --time-unit days --> +<!-- ``` --> + +## Signals + +Signals are located in the `elasticsearch_metrics.signals` module. + +* `pre_index_template_create(Metric, index_template, using)`: Sent before `PUT`ting a new index + template into Elasticsearch. +* `post_index_template_create(Metric, index_template, using)`: Sent after `PUT`ting a new index + template into Elasticsearch. +* `pre_save(Metric, instance, using, index)`: Sent at the beginning of a + Metric's `save()` method. +* `post_save(Metric, instance, using, index)`: Sent at the end of a + Metric's `save()` method. + +## Caveats + +* `_source` is disabled by default on metric indices in order to save + disk space. For most metrics use cases, Users will not need to retrieve the source + JSON documents. Be sure to understand the consequences of + this: https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-source-field.html#_disabling_source . + To enable `_source`, you can override it in `class Meta`. + +```python +class MyMetric(metrics.Metric): + class Meta: + source = metrics.MetaField(enabled=True) +``` + +## Resources + +* [Elasticsearch as a Time Series Data Store](https://www.elastic.co/blog/elasticsearch-as-a-time-series-data-store) +* [Pythonic Analytics with Elasticsearch](https://www.elastic.co/blog/pythonic-analytics-with-elasticsearch) +* [In Search of Agile Time Series Database](https://taowen.gitbooks.io/tsdb/content/index.html) + +## License + +MIT Licensed. + + + + +%package -n python3-django-elasticsearch-metrics +Summary: Django app for storing time-series metrics in Elasticsearch. +Provides: python-django-elasticsearch-metrics +BuildRequires: python3-devel +BuildRequires: python3-setuptools +BuildRequires: python3-pip +%description -n python3-django-elasticsearch-metrics +# django-elasticsearch-metrics + +[](https://badge.fury.io/py/django-elasticsearch-metrics) +[](https://travis-ci.org/CenterForOpenScience/django-elasticsearch-metrics) +[](https://github.com/ambv/black) + +Django app for storing time-series metrics in Elasticsearch. + +## Pre-requisites + +* Python 2.7 or >=3.6 +* Django 1.11 or 2.0 +* Elasticsearch 6 + +## Install + +``` +pip install django-elasticsearch-metrics +``` + +## Quickstart + +Add `"elasticseach_metrics"` to `INSTALLED_APPS`. + +```python +INSTALLED_APPS += ["elasticsearch_metrics"] +``` + +Define the `ELASTICSEARCH_DSL` setting. + +```python +ELASTICSEARCH_DSL = {"default": {"hosts": "localhost:9200"}} +``` + +This setting is passed to [`elasticsearch_dsl.connections.configure`](http://elasticsearch-dsl.readthedocs.io/en/stable/configuration.html#multiple-clusters) so +it takes the same parameters. + + +In one of your apps, define a new metric in `metrics.py`. + +A `Metric` is a subclass of [`elasticsearch_dsl.Document`](https://elasticsearch-dsl.readthedocs.io/en/stable/api.html#document). + + +```python +# myapp/metrics.py + +from elasticsearch_metrics import metrics + + +class PageView(metrics.Metric): + user_id = metrics.Integer(index=True, doc_values=True) +``` + +Use the `sync_metrics` management command to ensure that the [index template](https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-templates.html) +for your metric is created in Elasticsearch. + +```shell +# This will create an index template called myapp_pageview +python manage.py sync_metrics +``` + +Now add some data: + +```python +from myapp.metrics import PageView + +user = User.objects.latest() + +# By default we create an index for each day. +# Therefore, this will persist the document +# to an index called, e.g. "myapp_pageview_2020.02.04" +PageView.record(user_id=user.id) +``` + +Go forth and search! + +```python +# perform a search across all page views +PageView.search() +``` + +## Per-month or per-year indices + +By default, an index is created for every day that a metric is saved. +You can change this to create an index per month or per year by changing +the `ELASTICSEARCH_METRICS_DATE_FORMAT` setting. + + +```python +# settings.py + +# Monthly: +ELASTICSEARCH_METRICS_DATE_FORMAT = "%Y.%m" + +# Yearly: +ELASTICSEARCH_METRICS_DATE_FORMAT = "%Y" +``` + +## Index settings + +You can configure the index template settings by setting +`Metric.Index.settings`. + +```python +class PageView(metrics.Metric): + user_id = metrics.Integer() + + class Index: + settings = {"number_of_shards": 2, "refresh_interval": "5s"} +``` + +## Index templates + +Each `Metric` will have its own [index template](https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-templates.html). +The index template name and glob pattern are computed from the app label +for the containing app and the class's name. For example, a `PageView` +class defined in `myapp/metrics.py` will have an index template with the +name `myapp_pageview` and a template glob pattern of `myapp_pageview_*`. + +If you declare a `Metric` outside of an app, you will need to set +`app_label`. + + +```python +class PageView(metrics.Metric): + class Meta: + app_label = "myapp" +``` + +Alternatively, you can set `template_name` and/or `template` explicitly. + +```python +class PageView(metrics.Metric): + user_id = metrics.Integer() + + class Meta: + template_name = "myapp_pviews" + template = "myapp_pviews_*" +``` + +## Abstract metrics + +```python +from elasticsearch_metrics import metrics + + +class MyBaseMetric(metrics.Metric): + user_id = metrics.Integer() + + class Meta: + abstract = True + + +class PageView(MyBaseMetric): + class Meta: + app_label = "myapp" +``` + +## Optional factory_boy integration + +```python +import factory +from elasticsearch_metrics.factory import MetricFactory + +from ..myapp.metrics import MyMetric + + +class MyMetricFactory(MetricFactory): + my_int = factory.Faker("pyint") + + class Meta: + model = MyMetric + + +def test_something(): + metric = MyMetricFactory() # index metric in ES + assert isinstance(metric.my_int, int) +``` + +## Configuration + +* `ELASTICSEARCH_DSL`: Required. Connection settings passed to + [`elasticsearch_dsl.connections.configure`](http://elasticsearch-dsl.readthedocs.io/en/stable/configuration.html#multiple-clusters). +* `ELASTICSEARCH_METRICS_DATE_FORMAT`: Date format to use when creating + indexes. Default: `%Y.%m.%d` (same date format Elasticsearch uses for + [date math](https://www.elastic.co/guide/en/elasticsearch/reference/current/date-math-index-names.html)) + +## Management commands + +* `sync_metrics`: Ensure that index templates have been created for + your metrics. +* `show_metrics`: Pretty-print a listing of all registered metrics. +* `check_metrics`: Check if index templates are in sync. Exits + with an error code if any metrics are out of sync. + +<!-- * `clean_metrics` : Clean old data using [curator](https://curator.readthedocs.io/en/latest/). --> +<!-- --> +<!-- ``` --> +<!-- python manage.py clean_metrics myapp.PageView --older-than 45 --time-unit days --> +<!-- ``` --> + +## Signals + +Signals are located in the `elasticsearch_metrics.signals` module. + +* `pre_index_template_create(Metric, index_template, using)`: Sent before `PUT`ting a new index + template into Elasticsearch. +* `post_index_template_create(Metric, index_template, using)`: Sent after `PUT`ting a new index + template into Elasticsearch. +* `pre_save(Metric, instance, using, index)`: Sent at the beginning of a + Metric's `save()` method. +* `post_save(Metric, instance, using, index)`: Sent at the end of a + Metric's `save()` method. + +## Caveats + +* `_source` is disabled by default on metric indices in order to save + disk space. For most metrics use cases, Users will not need to retrieve the source + JSON documents. Be sure to understand the consequences of + this: https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-source-field.html#_disabling_source . + To enable `_source`, you can override it in `class Meta`. + +```python +class MyMetric(metrics.Metric): + class Meta: + source = metrics.MetaField(enabled=True) +``` + +## Resources + +* [Elasticsearch as a Time Series Data Store](https://www.elastic.co/blog/elasticsearch-as-a-time-series-data-store) +* [Pythonic Analytics with Elasticsearch](https://www.elastic.co/blog/pythonic-analytics-with-elasticsearch) +* [In Search of Agile Time Series Database](https://taowen.gitbooks.io/tsdb/content/index.html) + +## License + +MIT Licensed. + + + + +%package help +Summary: Development documents and examples for django-elasticsearch-metrics +Provides: python3-django-elasticsearch-metrics-doc +%description help +# django-elasticsearch-metrics + +[](https://badge.fury.io/py/django-elasticsearch-metrics) +[](https://travis-ci.org/CenterForOpenScience/django-elasticsearch-metrics) +[](https://github.com/ambv/black) + +Django app for storing time-series metrics in Elasticsearch. + +## Pre-requisites + +* Python 2.7 or >=3.6 +* Django 1.11 or 2.0 +* Elasticsearch 6 + +## Install + +``` +pip install django-elasticsearch-metrics +``` + +## Quickstart + +Add `"elasticseach_metrics"` to `INSTALLED_APPS`. + +```python +INSTALLED_APPS += ["elasticsearch_metrics"] +``` + +Define the `ELASTICSEARCH_DSL` setting. + +```python +ELASTICSEARCH_DSL = {"default": {"hosts": "localhost:9200"}} +``` + +This setting is passed to [`elasticsearch_dsl.connections.configure`](http://elasticsearch-dsl.readthedocs.io/en/stable/configuration.html#multiple-clusters) so +it takes the same parameters. + + +In one of your apps, define a new metric in `metrics.py`. + +A `Metric` is a subclass of [`elasticsearch_dsl.Document`](https://elasticsearch-dsl.readthedocs.io/en/stable/api.html#document). + + +```python +# myapp/metrics.py + +from elasticsearch_metrics import metrics + + +class PageView(metrics.Metric): + user_id = metrics.Integer(index=True, doc_values=True) +``` + +Use the `sync_metrics` management command to ensure that the [index template](https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-templates.html) +for your metric is created in Elasticsearch. + +```shell +# This will create an index template called myapp_pageview +python manage.py sync_metrics +``` + +Now add some data: + +```python +from myapp.metrics import PageView + +user = User.objects.latest() + +# By default we create an index for each day. +# Therefore, this will persist the document +# to an index called, e.g. "myapp_pageview_2020.02.04" +PageView.record(user_id=user.id) +``` + +Go forth and search! + +```python +# perform a search across all page views +PageView.search() +``` + +## Per-month or per-year indices + +By default, an index is created for every day that a metric is saved. +You can change this to create an index per month or per year by changing +the `ELASTICSEARCH_METRICS_DATE_FORMAT` setting. + + +```python +# settings.py + +# Monthly: +ELASTICSEARCH_METRICS_DATE_FORMAT = "%Y.%m" + +# Yearly: +ELASTICSEARCH_METRICS_DATE_FORMAT = "%Y" +``` + +## Index settings + +You can configure the index template settings by setting +`Metric.Index.settings`. + +```python +class PageView(metrics.Metric): + user_id = metrics.Integer() + + class Index: + settings = {"number_of_shards": 2, "refresh_interval": "5s"} +``` + +## Index templates + +Each `Metric` will have its own [index template](https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-templates.html). +The index template name and glob pattern are computed from the app label +for the containing app and the class's name. For example, a `PageView` +class defined in `myapp/metrics.py` will have an index template with the +name `myapp_pageview` and a template glob pattern of `myapp_pageview_*`. + +If you declare a `Metric` outside of an app, you will need to set +`app_label`. + + +```python +class PageView(metrics.Metric): + class Meta: + app_label = "myapp" +``` + +Alternatively, you can set `template_name` and/or `template` explicitly. + +```python +class PageView(metrics.Metric): + user_id = metrics.Integer() + + class Meta: + template_name = "myapp_pviews" + template = "myapp_pviews_*" +``` + +## Abstract metrics + +```python +from elasticsearch_metrics import metrics + + +class MyBaseMetric(metrics.Metric): + user_id = metrics.Integer() + + class Meta: + abstract = True + + +class PageView(MyBaseMetric): + class Meta: + app_label = "myapp" +``` + +## Optional factory_boy integration + +```python +import factory +from elasticsearch_metrics.factory import MetricFactory + +from ..myapp.metrics import MyMetric + + +class MyMetricFactory(MetricFactory): + my_int = factory.Faker("pyint") + + class Meta: + model = MyMetric + + +def test_something(): + metric = MyMetricFactory() # index metric in ES + assert isinstance(metric.my_int, int) +``` + +## Configuration + +* `ELASTICSEARCH_DSL`: Required. Connection settings passed to + [`elasticsearch_dsl.connections.configure`](http://elasticsearch-dsl.readthedocs.io/en/stable/configuration.html#multiple-clusters). +* `ELASTICSEARCH_METRICS_DATE_FORMAT`: Date format to use when creating + indexes. Default: `%Y.%m.%d` (same date format Elasticsearch uses for + [date math](https://www.elastic.co/guide/en/elasticsearch/reference/current/date-math-index-names.html)) + +## Management commands + +* `sync_metrics`: Ensure that index templates have been created for + your metrics. +* `show_metrics`: Pretty-print a listing of all registered metrics. +* `check_metrics`: Check if index templates are in sync. Exits + with an error code if any metrics are out of sync. + +<!-- * `clean_metrics` : Clean old data using [curator](https://curator.readthedocs.io/en/latest/). --> +<!-- --> +<!-- ``` --> +<!-- python manage.py clean_metrics myapp.PageView --older-than 45 --time-unit days --> +<!-- ``` --> + +## Signals + +Signals are located in the `elasticsearch_metrics.signals` module. + +* `pre_index_template_create(Metric, index_template, using)`: Sent before `PUT`ting a new index + template into Elasticsearch. +* `post_index_template_create(Metric, index_template, using)`: Sent after `PUT`ting a new index + template into Elasticsearch. +* `pre_save(Metric, instance, using, index)`: Sent at the beginning of a + Metric's `save()` method. +* `post_save(Metric, instance, using, index)`: Sent at the end of a + Metric's `save()` method. + +## Caveats + +* `_source` is disabled by default on metric indices in order to save + disk space. For most metrics use cases, Users will not need to retrieve the source + JSON documents. Be sure to understand the consequences of + this: https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-source-field.html#_disabling_source . + To enable `_source`, you can override it in `class Meta`. + +```python +class MyMetric(metrics.Metric): + class Meta: + source = metrics.MetaField(enabled=True) +``` + +## Resources + +* [Elasticsearch as a Time Series Data Store](https://www.elastic.co/blog/elasticsearch-as-a-time-series-data-store) +* [Pythonic Analytics with Elasticsearch](https://www.elastic.co/blog/pythonic-analytics-with-elasticsearch) +* [In Search of Agile Time Series Database](https://taowen.gitbooks.io/tsdb/content/index.html) + +## License + +MIT Licensed. + + + + +%prep +%autosetup -n django-elasticsearch-metrics-5.0.0 + +%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-django-elasticsearch-metrics -f filelist.lst +%dir %{python3_sitelib}/* + +%files help -f doclist.lst +%{_docdir}/* + +%changelog +* Mon May 29 2023 Python_Bot <Python_Bot@openeuler.org> - 5.0.0-1 +- Package Spec generated |
