Skip to content

dimk00z/airflow_project

Repository files navigation

Airflow 101

Project

Challenge

Нужно узнавать просмотры для каждого элемента в списке.

  1. Элементы добавляются. Вот ссылка: (ссылка в TG)
  2. Нужно распарсить каждую из ссылок, вытащить из неё количество просмотром и записать обратно в эксельку.
  3. Это должен делать Airflow DAG, который выполняется каждую ночь. Каждое выполнение он проверяет, парсил ли он уже каждую ссылку за последние два дня. Это нужно, чтобы не парсить одну и ту же ссылку несколько раз.
  4. После своего выполнения он должен писать репорт в телеграм-чат: сколько ссылок обработаны удачно, у скольких ошибка и у каких именно ошибка (номера строк в документе и сама ссылка).
  5. Ещё нужен мониторинг: пусть DAG пишет в Prometeus стандартные метрики для дага.
  6. Для мониторинга бизнес-метрик вы можете использовать поднятый для вас statsd и экспортер

Решение

  1. Датасет из google-таблицы скачивается локально. Результат парсинга тоже хранится локально - для проверки времени прошлой обработки.

  2. Для части сайтов получалось много ложно-негативного результата при попытке парсить BeautifulSoup-ом. Пришлось подключить Selenium.

  3. Отрепетировали переезд на новый, более мощный, сервер. Т.к. один из наших серверов под грузом Selenium парсил часов 12, а второй - в GoogleCloud, откуда не доступен Vimeo.

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

    Файл с ДАГом air101_project_with_parts содержит сделующие таски:

  • load_links_from_gsheet - загружает данные стобца из заданной таблицы и сохраняет их в cvs файл.
  • parse_links_watchers_list - список тасок, которые параллельно парсят часть полученных ссылок. Количество параллельных задач задается переменной PARTS_NUMBER( по умолчанию 4). При проверке учитываются предыдущие выполнения, пересканируются только ссылки которые проверялись свыше двух суток назад.
  • write_to_gsheet - пишет результат парсинга в гугл-таблицу.
  • send_report - шлет репорт в телеграм-чат и в statsd: сколько ссылок обработаны удачно, у скольких ошибка и у каких именно ошибка (список ошибок прикрепляется файлом)
Мониторинг
  • Grafana получает как стандартные метрики с exportr-а, так и метрики от statsd

Grafana screenshot


Цель проекта

Код написан в образовательных целях на онлайн-курсе Airflow 101.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages