Commit 4d3c5bbb authored by Никита Копылов's avatar Никита Копылов
Browse files

Merge branch 'main' into 'nikita'

# Conflicts:
#   SimulateExample/manage.py
1 merge request!8Nikita
Pipeline #582 failed with stages
in 0 seconds
Showing with 627 additions and 47 deletions
+627 -47
# Сообщаем Gitlab CI, что мы будем использовать Docker при сборке.
image: docker:latest
services:
- docker:dind
# Описываем, из каких ступеней будет состоять наша непрерывная интеграция:
# - сборка Docker-образа,
# - прогон тестов Django,
# - выкат на боевой сервер.
stages:
- build
- test
- deploy
# Описываем инициализационные команды, которые необходимо запускать
# перед запуском каждой ступени.
# Изменения, внесённые на каждой ступени, не переносятся на другие, так как запуск
# ступеней осуществляется в чистом Docker-контейнере, который пересоздаётся каждый раз.
before_script:
# установка pip
- DEBIAN_FRONTEND=noninteractive
# - sudo apt install -y python3-pip
- pip3 install --upgrade pip
- pip3 install --upgrade setuptools --no-cache
- pip3 install --no-cache-dir -r requirements.txt
- echo docker login -u $DOCKERHUB_USER -p$DOCKERHUB_PASSWORD
# - docker login -u $DOCKERHUB_USER -p'$DOCKERHUB_PASSWORD'
- docker login
# Сборка Docker-образа
build:
stage: build
script:
# собственно сборка
- docker-compose build
- docker-compose push
tags:
- "dev-build"
# Прогон тестов
test:
stage: test
script:
# вместо повторной сборки, забираем собранный на предыдущей ступени
# готовый образ из registry
- docker-compose pull test
# запускаем тесты
- docker-compose run test
- python manage.py test
tags:
- "dev-test"
# Выкат на сервер
deploy:
stage: deploy
# выкатываем только ветку main
only:
- main
# для этой ступени другие команды инициализации
before_script:
# устанавливаем зависимости Fabric, bash и rsync
- DEBIAN_FRONTEND=noninteractive
# - sudo apt install -y python3-pip openssh-client py-crypto bash rsync
# устанавливаем Fabric
- pip install fabric==1.12.0
# добавляем приватный ключ для выката
- eval $(ssh-agent -s)
- bash -c 'ssh-add <(echo "$DEPLOY_KEY")'
- mkdir -p ~/.ssh
- echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config
script:
- fab -H $DEPLOY_ADDR deploy
tags:
- "dev-deploy"
# Описываем, из каких ступеней будет состоять наша непрерывная интеграция:
# - сборка Docker-образа,
# - прогон тестов Django,
# - выкат на боевой сервер.
stages:
- build
- test
- deploy
# Описываем инициализационные команды, которые необходимо запускать
# перед запуском каждой ступени.
# Изменения, внесённые на каждой ступени, не переносятся на другие, так как запуск
# ступеней осуществляется в чистом Docker-контейнере, который пересоздаётся каждый раз.
before_script:
# установка pip
- pip install --upgrade pip
- pip install --upgrade setuptools --no-cache
- pip install --no-cache-dir -r requirements.txt
build:
stage: build
script:
- echo "Copying to "$HOME_PATH
- mkdir -p /opt/simulate_example
- cp config -rf /opt/simulate_example/
- cp invertor -rf /opt/simulate_example/
- cp nginx -rf /opt/simulate_example/
- cp SimulateExample -rf /opt/simulate_example/
- cp static -rf /opt/simulate_example/
- cp Tests -rf /opt/simulate_example/
- cp templates -rf /opt/simulate_example/
- cp manage.py /opt/simulate_example/
tags:
- "dev-build"
# Прогон тестов
test:
stage: test
script:
- mkdir -p /opt/simulate_example/log
- touch /opt/simulate_example/log/application.log
# - python manage.py test
tags:
- "dev-test"
# Выкат на сервер
deploy:
stage: deploy
# выкатываем только ветку main
only:
- main
# для этой ступени другие команды инициализации
before_script:
- ln -s $HOME_PATH/nginx/nginx.conf /etc/nginx/sites-enabled/simulate_example.devops-03.hse.perm.ru
script:
- echo "Restart service..."
tags:
- "dev-deploy"
default:
image: alpine:3.16
cache:
paths:
- ~/.cache/pip/
before_script:
- export DEBIAN_FRONTEND=noninteractive
- export PYTHONUNBUFFERED=1
- export PYTHON_VERSION=3.7
- env
- apk add --update --no-cache python3 && ln -sf python3 /usr/bin/python
- apk add --update --no-cache mysql-client
- apk add --no-cache libmysqlclient-dev
- python3 -m ensurepip
- pip3 install --no-cache --upgrade pip setuptools
- pip3 install --no-cache-dir -r requirements.txt
tags:
- "prod-build"
migrations:
stage: build
script:
# - python3 manage.py makemigrations invertor
- echo "Environment:"
- env
- echo "Migrate data from configuration ${DJANGO_CONFIG}" > $HOME_PATH/$CI_JOB_NAME_SLUG.log
- python3 manage.py migrate
- python3 manage.py check
- echo docker login -u $DOCKERHUB_USER -p$DOCKERHUB_PASSWORD
# - docker login -u $DOCKERHUB_USER -p'$DOCKERHUB_PASSWORD'
- docker login
tags:
- "prod-build"
django-tests:
stage: test
script:
- echo "Testing SimulateExample Django project..."
- docker-compose pull test
# запускаем тесты
- docker-compose run test
- python3 manage.py test -v 2
tags:
- "prod-test"
deploy:
image: docker:latest
variables:
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_ROOT_PASSWORD: ${MYSQL_ADMIN_PASSWORD}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
HOME: ${HOME_PATH}
stage: deploy
# environment: production_vps
script:
- docker-compose build
- docker-compose push
tags:
- "prod-deploy"
stages:
- build
- test
- deploy
default:
cache:
paths:
- ~/.cache/pip/
before_script:
- export DEBIAN_FRONTEND=noninteractive
- export PYTHONUNBUFFERED=1
- export PYTHON_VERSION=3.7
- export DJANGO_CONFIG='production_devops_03'
- export SECRET_KEY='django-insecure-rl#f4j4qzpn^o-1t_vtdg9)#iz%s#2*&)!qa-7qmch8cgpl)=z'
# - sudo apt-get -y update
# - ln -sf python3 /usr/bin/python
# - sudo apt-get install -y mysql-client libmysqlclient-dev python3-pip
# - python3 -m ensurepip
# - pip install --upgrade pip
# - pip install setuptools
- pip install --no-cache-dir -r requirements.txt
migrations:
stage: build
script:
# - python3 manage.py makemigrations invertor
- echo "Environment:"
- env
- echo "Migrate data from configuration ${DJANGO_CONFIG}" > $HOME_PATH/$CI_JOB_NAME_SLUG.log
- python manage.py makemigrations
- python manage.py migrate
- python manage.py check
tags:
- "dev-build"
django-tests:
stage: test
script:
- echo "Testing SimulateExample Django project..."
# - docker-compose pull test
# запускаем тесты
# - docker-compose run test
- python manage.py test -v 2
tags:
- "dev-test"
deploy:
variables:
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_ROOT_PASSWORD: ${MYSQL_ADMIN_PASSWORD}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
APP_PATH: ${HOME_PATH}
image: docker:latest
stage: build
services:
- docker:dind
script:
# - echo docker login -u $DOCKERHUB_USER -p$DOCKERHUB_PASSWORD
# - docker login -u $DOCKERHUB_USER -p'$DOCKERHUB_PASSWORD'
# - docker login
- |
if [[ "$CI_COMMIT_BRANCH" == "$CI_DEFAULT_BRANCH" ]]; then
tag=""
echo "Running on default branch '$CI_DEFAULT_BRANCH': tag = 'latest'"
else
tag=":$CI_COMMIT_REF_SLUG"
echo "Running on branch '$CI_COMMIT_BRANCH': tag = $tag"
fi
- docker build --pull -t "$CI_REGISTRY_IMAGE${tag}" .
# Run this job in a branch where a Dockerfile exists
rules:
- if: $CI_COMMIT_BRANCH
exists:
- Dockerfile
tags:
- "dev-deploy"
stages:
- build
- test
- deploy
variables:
# DJANGO_CONFIG: "test"
MYSQL_DATABASE: 'calculate'
MYSQL_ROOT_PASSWORD: 'root'
MYSQL_USER: 'root'
MYSQL_PASSWORD: 'root'
APP_PATH: '/opt/simulate_example'
default:
image: ubuntu:20.04
services:
- mysql:8.0
cache:
paths:
- ~/.cache/pip/
before_script:
- export DEBIAN_FRONTEND=noninteractive
- export PYTHONUNBUFFERED=1
- export PYTHON_VERSION=3.7
- export DJANGO_CONFIG='production_devops_03'
- export SECRET_KEY='django-insecure-rl#f4j4qzpn^o-1t_vtdg9)#iz%s#2*&)!qa-7qmch8cgpl)=z'
# - apt -y update
# - apt -y install apt-utils
# - apt -y install net-tools python3.8 python3-pip mysql-client libmysqlclient-dev
# - apt -y upgrade
- pip3 install -r requirements.txt
migrations:
stage: build
script:
# - python3 manage.py makemigrations invertor
- echo "Environment:"
- env
# - echo "Migrate data from configuration ${DJANGO_CONFIG}" > $HOME_PATH/$CI_JOB_NAME_SLUG.log
# - python manage.py makemigrations
- python manage.py migrate
- python manage.py check
# - echo docker login -u $DOCKERHUB_USER -p$DOCKERHUB_PASSWORD
# - docker login -u $DOCKERHUB_USER -p'$DOCKERHUB_PASSWORD'
# - docker login
tags:
- "dev-build"
django-tests:
stage: test
script:
- echo "Testing SimulateExample Django project..."
# - echo "GRANT ALL on *.* to '${MYSQL_USER}';"| mysql -u root --password="${MYSQL_ROOT_PASSWORD}" -h devops-03.hse.perm.ru
- python manage.py test -v 2
tags:
- "dev-test"
deploy:
stage: deploy
environment: production_devops-03
script:
- echo "Deployment application:"
- mkdir -p $APP_PATH/\
&& mkdir -p $APP_PATH/config\
&& mkdir -p $APP_PATH/invertor\
&& mkdir -p $APP_PATH/invertor/templates\
&& mkdir -p $APP_PATH/invertor/templates/invertor\
&& mkdir -p $APP_PATH/SimulateExample\
&& mkdir -p $APP_PATH/log\
&& mkdir -p $APP_PATH/SimulateExample/settings\
&& mkdir -p $APP_PATH/static\
&& mkdir -p $APP_PATH/Tests\
&& mkdir -p $APP_PATH/templates
- cp -rf manage.py $APP_PATH/\
&& cp -rf config $APP_PATH/config/\
&& cp -rf invertor $APP_PATH/invertor/\
&& cp -rf SimulateExample $APP_PATH/SimulateExample/\
&& cp -rf static $APP_PATH/static/\
&& cp -rf Tests $APP_PATH/Tests/\
&& cp -rf templates $APP_PATH/templates/\
&& touch $APP_PATH/log/application.log\
&& ls -laR $APP_PATH >> $APP_PATH/deploy.log
tags:
- "dev-deploy"
stages:
- build
- test
- deploy
variables:
DJANGO_CONFIG: "local_sqlite"
APP_PATH: '/Users/nikitakopylov/My_Folder/GDK/material/SimulateExample'
default:
before_script:
- Set-Variable -Name "PYTHONUNBUFFERED" -Value "1"
- Set-Variable -Name "PYTHON_VERSION" -Value "3.11"
- Set-Variable -Name "DJANGO_CONFIG" -Value "local_sqlite"
- Set-Variable -Name "SECRET_KEY" -Value "django-insecure-rl#f4j4qzpn^o-1t_vtdg9)#iz%s#2*&)!qa-7qmch8cgpl)=z"
# - pip3 install -r requirements.txt
migrations:
stage: build
script:
- /Users/nikitakopylov/My_Folder/GDK/material/SimulateExample/venv/bin/Activate.ps1
- python manage.py makemigrations invertor
- python manage.py migrate
- python manage.py check
- deactivate
tags:
- "dev-build"
django-tests:
stage: test
script:
- echo "Testing SimulateExample Django project..."
tags:
- "dev-test"
deploy:
stage: deploy
environment: production_devops-03
script:
- echo "Deployment application:"
- /Users/nikitakopylov/My_Folder/GDK/material/SimulateExample/venv/bin/Activate.ps1
- pip install -r /Users/nikitakopylov/My_Folder/GDK/material/SimulateExample/requirements.txt
- deactivate
tags:
- "dev-deploy"
stages:
- build
- test
- deploy
variables:
# DJANGO_CONFIG: "test"
MYSQL_DATABASE: 'calculate'
MYSQL_ROOT_PASSWORD: 'root'
MYSQL_USER: 'planner'
MYSQL_PASSWORD: 'planner'
APP_PATH: '/opt/simulate_example_new'
default:
image: ubuntu:20.04
services:
- mysql:8.0
cache:
paths:
- ~/.cache/pip/
before_script:
- export DEBIAN_FRONTEND=noninteractive
- export PYTHONUNBUFFERED=1
- export PYTHON_VERSION=3.7
- export DJANGO_CONFIG=production_devops_03
- export SECRET_KEY='django-insecure-rl#f4j4qzpn^o-1t_vtdg9)#iz%s#2*&)!qa-7qmch8cgpl)=z'
# - apt -y update
# - apt -y install apt-utils
# - apt -y install net-tools python3.8 python3-pip mysql-client libmysqlclient-dev
# - apt -y upgrade
- pip3 install -r requirements.txt
migrations:
stage: build
script:
# - python3 manage.py makemigrations invertor
- echo "Environment:"
- env
# - echo "Migrate data from configuration ${DJANGO_CONFIG}" > $HOME_PATH/$CI_JOB_NAME_SLUG.log
# - python manage.py makemigrations
- python manage.py migrate
- python manage.py check
# - echo docker login -u $DOCKERHUB_USER -p$DOCKERHUB_PASSWORD
# - docker login -u $DOCKERHUB_USER -p'$DOCKERHUB_PASSWORD'
# - docker login
tags:
- "dev-build"
django-tests:
stage: test
script:
- echo "Testing SimulateExample Django project..."
# - echo "GRANT ALL on *.* to '${MYSQL_USER}';"| mysql -u root --password="${MYSQL_ROOT_PASSWORD}" -h devops-03.hse.perm.ru
# - python manage.py test -v 2
tags:
- "dev-test"
deploy:
stage: deploy
environment: production_devops-03
script:
- echo "Deployment application:"$APP_PATH
# - rm -fR $APP_PATH
- mkdir -p $APP_PATH
- mkdir -p $APP_PATH/config
- mkdir -p $APP_PATH/invertor
- mkdir -p $APP_PATH/exponenta
- mkdir -p $APP_PATH/SimulateExample
- mkdir -p $APP_PATH/log
- mkdir -p $APP_PATH/static
- mkdir -p $APP_PATH/Tests
- mkdir -p $APP_PATH/templates
- mkdir -p $APP_PATH/venv
- mkdir -p $APP_PATH/dump
- cp -rf manage.py $APP_PATH/
- cp -rf config/ $APP_PATH/config/
- cp -rf invertor/ $APP_PATH/invertor/
- cp -rf exponenta/ $APP_PATH/exponenta/
- cp -rf SimulateExample/ $APP_PATH/SimulateExample/
- cp -rf static/ $APP_PATH/static/
- cp -rf Tests/ $APP_PATH/Tests/
- cp -rf dump/ $APP_PATH/dump/
- cp -rf templates $APP_PATH/templates/
- touch $APP_PATH/log/application.log
- cp start_service.sh $APP_PATH/
- cp requirements.txt $APP_PATH/
- chmod a+x $APP_PATH/start_service.sh
# - cd $APP_PATH/venv
# - pipenv --python 3.8
- pip install -r $APP_PATH/requirements.txt
- ls -laR $APP_PATH >> $APP_PATH/deploy.log
tags:
- "dev-deploy"
......@@ -38,7 +38,7 @@ INSTALLED_APPS = [
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'invertor'
'invertor.apps.InvertorConfig'
]
MIDDLEWARE = [
......@@ -123,47 +123,48 @@ USE_TZ = True
STATIC_URL = '/static/'
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static'), ]
STATIC_ROOT = BASE_DIR.joinpath('staticfiles')
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'filters': {
'require_debug_true': {
'()': 'django.utils.log.RequireDebugTrue',
}
},
'formatters': {
'verbose': {
'format':
'{levelname} {asctime} {module} {message}',
'style':
'{',
},
},
'handlers': {
'console': {
'level': 'DEBUG',
'filters': ['require_debug_true'],
'class': 'logging.StreamHandler',
},
'file': {
'level': 'DEBUG',
'class': 'logging.FileHandler',
'filename': BASE_DIR.joinpath('log/application.log'),
'formatter': 'verbose',
}
},
'loggers': {
'django.request': {
'handlers': ['file'],
'level': 'DEBUG',
'propagate': False,
},
'django.db.backends': {
'level': 'DEBUG',
'handlers': ['file'],
},
}
}
# LOGGING = {
# 'version': 1,
# 'disable_existing_loggers': False,
# 'filters': {
# 'require_debug_true': {
# '()': 'django.utils.log.RequireDebugTrue',
# }
# },
# 'formatters': {
# 'verbose': {
# 'format':
# '{levelname} {asctime} {module} {message}',
# 'style':
# '{',
# },
# },
# 'handlers': {
# 'console': {
# 'level': 'DEBUG',
# 'filters': ['require_debug_true'],
# 'class': 'logging.StreamHandler',
# },
# 'file': {
# 'level': 'DEBUG',
# 'class': 'logging.FileHandler',
# 'filename': BASE_DIR.joinpath('log/application.log'),
# 'formatter': 'verbose',
# }
# }
# # ,
# # 'loggers': {
# # 'django.request': {
# # 'handlers': ['file'],
# # 'level': 'DEBUG',
# # 'propagate': False,
# # },
# # 'django.db.backends': {
# # 'level': 'DEBUG',
# # 'handlers': ['file'],
# # },
# # }
# }
# Default primary key field type
# https://docs.djangoproject.com/en/3.2/ref/settings/#default-auto-field
......
import influxdb_client
from influxdb_client import InfluxDBClient, Point
from influxdb_client.client.write_api import SYNCHRONOUS
import math
from config.config import Config
def ctg(x):
return 1 / math.tan(x)
class invertor():
def __init__(self):
config = Config()
self.username = config.user_name
self.password = config.password
self.url = config.url
self.database = config.db
self.measurement = config.measurement
self.MEASUREMENT = 'invertor'
self.client = influxdb_client.InfluxDBClient(
url=self.url,
token=self.password,
org=self.username
)
def write(self, signal):
retention_policy = 'autogen'
bucket = f'{self.database}/{retention_policy}'
with InfluxDBClient(url=self.url, token=f'{self.username}:{self.password}', org='-'):
with self.client.write_api() as write_api:
print('*** Write Points ***')
point = Point(self.MEASUREMENT).tag("signal", signal).field("function", 25.43234543)
print(point.to_line_protocol())
write_api.write(bucket=bucket, record=point)
def read(self,signal):
print('*** Query Points ***')
query_api = self.client.query_api()
query = f'from(bucket: \"{self.database}\")\
|> range(start: -10m)\
|> filter(fn:(r) => r._measurement == "' + self.MEASUREMENT + '")\
|> filter(fn:(r) => r.signal == "' + signal + '")'
tables = query_api.query(query)
for record in tables[0].records:
print(f'#{record.get_time()} #{record.get_measurement()}: #{record.get_field()} #{record.get_value()}')
def read_write(self, signal):
query_api = self.client.query_api()
query = 'from(bucket:"' + self.database + '")\
|> range(start: -10m)\
|> filter(fn:(r) => r._measurement == "' + self.measurement + '")\
|> filter(fn:(r) => r.signal == "' + signal + '")'
result = query_api.query(org=self.username, query=query)
_points = []
for table in result:
index = 0
for record in table.records:
index = index + 1
if record.get_field() == 'function':
value = 0 - record.get_value()
else:
value = 2*record.get_value()
_point = Point("Calculate") \
.tag("signal", signal) \
.field(record.get_field(), value) \
.time(record.get_time())
_points.append(_point)
print(f'#{index}: {_point}')
write_api = self.client.write_api(write_options=SYNCHRONOUS)
write_api.write(bucket=self.database, org=self.username, record=_points)
......@@ -2,7 +2,7 @@
from django.shortcuts import get_object_or_404, render
from invertor.invertor_calculate import Invertor
from .models import Signal
from invertor.models import Signal
__all__ = {
'index', 'calculate'
......
......@@ -4,6 +4,7 @@ import influxdb_client
from influxdb_client import InfluxDBClient, Point
from influxdb_client.client.write_api import SYNCHRONOUS
a = 123
class Square:
def __init__(self):
......
# объявим путь к конфигурации
default_app_config = 'invertor.apps.InvertorConfig'
......@@ -3,6 +3,6 @@ from django.apps import AppConfig
class InvertorConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
app_label='invertor'
name = 'invertor'
app_label = 'invertor'
name ='invertor'
verbose_name = 'Расчетные сигналы'
......@@ -21,8 +21,8 @@ def main():
# if os.environ.get('DJANGO_CONFIG') == 'production_testedo':
# os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'SimulateExample.settings.production_testedo')
print("DJANGO_SETTINGS_MODULE:{0};{1}", os.environ.get('DJANGO_SETTINGS_MODULE'),
os.environ.__getitem__('DJANGO_SETTINGS_MODULE'))
print("DJANGO_SETTINGS_MODULE:{0};{1}",os.environ.get('DJANGO_SETTINGS_MODULE'), os.environ.__getitem__('DJANGO_SETTINGS_MODULE'))
try:
from django.core.management import execute_from_command_line
except ImportError as exc:
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment