Джанго + Influxdb - PullRequest
       5

Джанго + Influxdb

0 голосов
/ 06 мая 2018

У меня есть данные tseries, которые были сохранены в influenxdb, я хотел бы предоставить эти данные через веб-API и, следовательно, рассматриваю платформу Django и ее структуру REST API в качестве решения.

В настоящее время нет никакой известной поддержки Influxdb в инфраструктуре Django, однако я видел, как кто-то подразумевал успешное создание этого стека в обсуждении здесь .

Буду признателен за любые четкие комментарии или мысли о том, как этого можно достичь, в частности, о том, как интегрировать influenxdb в структуру Django.

1 Ответ

0 голосов
/ 30 сентября 2018

Вы можете использовать Django и InfluxDB вместе в Docker. Сначала создайте проект и приложение.

mkdir django-influxdb-example
cd django-influxdb-example
django-admin startproject project
cd project
django-admin startapp app
cd ..

Создание виртуальной среды и установка django, postgres и influenxdb .

python3 -m venv venv
source venv/bin/activate
pip install django psycopg2 influxdb
pip install --upgrade pip
pip freeze > requirements.txt

Прямо сейчас мои требования выглядят так,

certifi==2018.8.24
chardet==3.0.4
Django==2.1.1
idna==2.7
influxdb==5.2.0
psycopg2==2.7.5
python-dateutil==2.7.3
pytz==2018.5
requests==2.19.1
six==1.11.0
urllib3==1.23

Создать Dockerfile,

FROM python:3.6-alpine3.7

ENV PYTHONUNBUFFERED 1

RUN apk update \
    && apk add libpq postgresql-dev \
    && apk add build-base

WORKDIR /usr/src/app

COPY requirements.txt ./
RUN pip install -r requirements.txt

COPY project ./

Создать файл docker-compose.yml,

version: '3'

services:

  db:
    image: postgres

  web:
    build: .
    command: python3 manage.py runserver 0.0.0.0:8000
    volumes:
      - ./project:/usr/web/app
    ports:
      - "8000:8000"
    depends_on:
      - db
      - influxdb
    links:
      - influxdb

  influxdb:
    image: influxdb
    ports:
      - "8083:8083"
      - "8086:8086"

Я добавил следующее в мой Django settings.py,

INFLUXDB_HOST = 'influxdb'
INFLUXDB_PORT = 8086
INFLUXDB_USERNAME = None
INFLUXDB_PASSWORD = None
INFLUXDB_DATABASE = 'example'
INFLUXDB_TIMEOUT = 10

На данный момент, вы можете попытаться построить все это и посмотреть, если это произойдет,

docker-compose build
docker-compose run web python3 manage.py makemigrations
docker-compose run web python3 manage.py migrate
docker-compose up

Если вы перейдете на localhost: 8000, то вы должны увидеть страницу-заставку Django по умолчанию. Если вы откроете интерактивный сеанс Python в веб-контейнере, вы сможете получить доступ к InfluxDB через модуль Python influenxdb ,

docker-compose run web python3
Starting django-influxdb-example_db_1 ... done
Starting django-influxdb-example_influxdb_1 ... done
Python 3.6.6 (default, Sep 12 2018, 02:19:14)
[GCC 6.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from influxdb import InfluxDBClient
>>> client = InfluxDBClient('influxdb', 8086)
>>> client.get_list_database()
[{'name': '_internal'}]
>>> client.create_database('example')
>>> client.get_list_database()
[{'name': '_internal'}, {'name': 'example'}]

Теперь все подключено и работает, вы можете сосредоточиться на записи в код для создания баз данных и добавлять точки. Я просмотрел код для django-influenxdb-metrics и нашел код ниже, который я поместил в файл utils.py в моем каталоге app/. Это создает клиент InfluxDB, используя константы, которые мы определили ранее в файле settings.py.

from django.conf import settings

from influxdb import InfluxDBClient

import logging
logger = logging.getLogger(__name__)


def get_influxdb_client():
    """Returns an ``InfluxDBClient`` instance."""
    client = InfluxDBClient(
    settings.INFLUXDB_HOST,
    settings.INFLUXDB_PORT,
    settings.INFLUXDB_USERNAME,
    settings.INFLUXDB_PASSWORD,
    settings.INFLUXDB_DATABASE,
    timeout=getattr(settings, 'INFLUXDB_TIMEOUT', 10),
    ssl=getattr(settings, 'INFLUXDB_SSL', False),
    verify_ssl=getattr(settings, 'INFLUXDB_VERIFY_SSL', False),
)
return client

Наконец, отсюда я могу создавать базы данных, добавлять точки и выполнять запросы через клиента.

...