Как мы делаем раскладку Календаря@mail.ru

Post on 22-May-2015

803 Views

Category:

Technology

2 Downloads

Preview:

Click to see full reader

DESCRIPTION

Moscow Django MeetUp №7 21 ноября 2012 http://moscowdjango.ru/meetup/7/calendar-layout/

TRANSCRIPT

Как мы делаемраскладку Календаря

Владимир Рудных

Moscow Django MeetUp №7

Обо мне

• тимлид Календаря Mail.Ru

• pythonista

• бывший перловик

• ленивый программист

Moscow Django MeetUp №7

Календарь Mail.Ru

• calendar.mail.ru

• написан на Python

• Django framework

• PostgreSQL

• Rich Internet Application

• RESTful API

• шаблонизация на клиенте (Fest)

Moscow Django MeetUp №7

calendar.mail.ru

Moscow Django MeetUp №7

Разработка в Mail.Ru

Тестовое окружение

Production

Офисная сеть(разработчики)

Moscow Django MeetUp №7

как?

Раскладка проекта

серверысерверырепозиторий

gitмного

серверов

Moscow Django MeetUp №7

Ахаха, мы же не перловики!

Раскладка проекта

серверысерверырепозиторий

gitмного

серверов"rsync"

?

Moscow Django MeetUp №7

Раскладка проекта

Moscow Django MeetUp №7

Вся мощь Python

с нами!

Раскладка проекта

Moscow Django MeetUp №7

• setuptools

• distribute

• easy_install

• pip

Раскладка проекта

Moscow Django MeetUp №7

Раскладка проекта

• python setup.py install

• pip install package

• pip install -r requirements.txt

Moscow Django MeetUp №7

NO WAY!

Раскладка проекта

Moscow Django MeetUp №7

Загаживать систему пакетами?

Что делать с зависимостями?

Как отслеживать их версии?

Раскладка проекта

Moscow Django MeetUp №7

А если нужна другая версия Python?

А что делать, еслинужно откатиться?

Что делать с зависимостямипри откате?

Раскладка проекта

Moscow Django MeetUp №7

АД

Раскладка проекта

Moscow Django MeetUp №7

Вспоминаем про

virtualenv

Раскладка проекта

Moscow Django MeetUp №7

Vitrualenv

• весь проект в одном месте

• со всеми зависимостями

• любые версии Python и модулей

• не засоряет систему

Moscow Django MeetUp №7

Но как раскладывать?

Makefile? Fabric?

RPM*!

Раскладка проекта

* RPM, DEB или любой другой формат пакетов

Moscow Django MeetUp №7

RPM

• весь проект со всеми зависимостями

• в одном пакете

• накатить/откатить - без проблем

• версионность пакетов

• версионность отдельных модулей

• не засоряет систему

• админы умеют (привет, CPAN!)

Moscow Django MeetUp №7

Как собирать?

Jenkins CI

RPM

Moscow Django MeetUp №7

сборка RPM

• пишем fabfile для запуска сборки

• пишем SPEC-файл для RPM

• заводим задачу в Jenkins CI

• ...

• пушим ветку в git, получаем RPM:

- git master -> RPM stable

- git prerelease -> RPM testing

Moscow Django MeetUp №7

Jenkins CI

Задачи в Jenkins:

• development - все ветки

• prerelease - ветка prerelease

• release - ветка master

Moscow Django MeetUp №7

плюшки Jenkins

• автоматическая сборка RPM

• continuous integration

• тесты

• lint

• coverage

• change log

• мгновенная обратная связь

Moscow Django MeetUp №7

Jenkins CI

Moscow Django MeetUp №7

Jenkins CI: report

Moscow Django MeetUp №7

Jenkins jobs

dev prerelease release

pylint ✔

flake8 ✔ ✔

coverage ✔ ✔

tests ✔ ✔ ✔

RPM ✔ ✔

Moscow Django MeetUp №7

Разложили, что дальше?

Как узнать, что всё хорошо?

Нужен мониторинг!

Раскладка проекта

Moscow Django MeetUp №7

Мониторинг

• метрики в Graphite (+Statsd)

• ошибки в Sentry

• дежурные администраторы

• обращения пользователей

в службу поддержки

Moscow Django MeetUp №7

Что будем мониторить?

Да всё будем мониторить!

Graphite

Moscow Django MeetUp №7

Graphite

• количество запросов

• тип запросов

• время выполнения

• время ожидания

• таймауты

• количество ошибок

• выкладки и рестарты

Moscow Django MeetUp №7

Где будем мониторить?

Да везде будем мониторить!

Graphite

Moscow Django MeetUp №7

Graphite

• клиент (браузер)

• сервер (cpu, memory, hardware)

• nginx

• uwsgi

• приложение

• БД

• обвязка (очереди, рассыльщики)

Moscow Django MeetUp №7

Разложились.

Есть ошибки.

Что делать?

Раскладка проекта

Moscow Django MeetUp №7

Просить админов

погрепать логи?

Раскладка проекта

Moscow Django MeetUp №7

Раскладка проекта

Moscow Django MeetUp №7

Sentry!

Раскладка проекта

Moscow Django MeetUp №7

Получаем все ошибки

Frontend + Backend

в удобном виде.

Realtime!

Sentry

Moscow Django MeetUp №7

Sentry

• url ошибки

• данные запроса (request)

• полный stacktrace ошибки

• версии модулей

• информация о пользователе

(email, браузер, ОС)

Для каждой ошибки!

Moscow Django MeetUp №7

За исключением

приватных данных

пользователя =)

“password”: “********”

Sentry

Moscow Django MeetUp №7

Sentry

Moscow Django MeetUp №7

Sentry

Moscow Django MeetUp №7

Но как

избежать ошибок?

Раскладка проекта

Moscow Django MeetUp №7

Тестирование+

Code review

Раскладка проекта

Moscow Django MeetUp №7

Тестирование

• nose

• factory_boy

• mock

• Selenium (coming soon...)

Moscow Django MeetUp №7

Тестирование

• модульное

• функциональное

• регрессионное

• альфа (тестировщики)

• бета (пользователи)

Moscow Django MeetUp №7

Phabricator

Code review

Moscow Django MeetUp №7

Code review

• подписка на коммиты (с фильтрами)

• аудит и рецензирование коммитов

• просмотр кода и diff’ов

Moscow Django MeetUp №7

Подведём итоги

Moscow Django MeetUp №7

Best practice• пишем на Python

• используем virtualenv

• менеджеры пакетов ОС (RPM)

• автоматизируем процесс (Jenkins)

• мониторим всё и вся

• тесты, тесты, тесты!

• обратная совместимость кода

• code review, code style + lint

Moscow Django MeetUp №7

Ссылки

• Virtualenv: virtualenv.org

• Jenkins: jenkins-ci.org

• Graphite: graphite.wikidot.com

• Statsd: github.com/etsy/statsd

• Sentry: getsentry.com

• Phabricator: phabricator.org

Moscow Django MeetUp №7

Контакты

•Владимир Рудных

• rudnyh@corp.mail.ru

• github.com/dreadatour

• dreadatour.habrahabr.ru

top related