Skip to content

Instantly share code, notes, and snippets.

@sancau
Last active December 18, 2018 21:52
Show Gist options
  • Save sancau/6546228cf7ea98c6491438230f038faa to your computer and use it in GitHub Desktop.
Save sancau/6546228cf7ea98c6491438230f038faa to your computer and use it in GitHub Desktop.
Test task (Python)

Тестовое задание (разработчик Python)

Есть файл Excel содержащий следующий набор данных:

  • Список URL, колонка "url"
  • Текстовые метки, колонка "label"
  • Сооветствующие каждой URL флаги, колонка "fetch" (ИСТИНА или ЛОЖЬ)

Требуется реализовать скрипт который:

Этап 1

  • берёт данные из файла
  • выбирает такой пул URL для которых fetch - ИСТИНА
  • опрашивает выбранный пул URL методом GET

Этап 2

  • полученные на этапе 1 данные требуется записать в БД (дана принципиальная схема таблицы):

Таблица MONITORING

TS              timestamp not null
URL             string not null
LABEL           string not null
RESPONSE_TIME   float (единица измерения - ms)
STATUS_CODE     integer default null
CONTENT_LENGTH  integer default null  (записываем если код ответа 200, иначе NULL)
  • случаи когда, запрос к URL закончился ошибкой, необходимо залогировать в отдельный файл .json по структуре:

    {
      "timestamp": "...",
      "url": "...",
      "error": {
          "exception_type": "...",
          "exception_value": "...",
          "stack_info": "..."
      }
    }

    Ошибкой считаются случаи, когда возникает исключение в любом слое кода. Иными словами - когда не удалось получить HTTP response.

Требования к реализации:

  • Python 3.5+ (любые библиотеки)
  • PEP8
  • Переносимость (не забыть requirements.txt)
  • БД - SQLite3
  • Логирование важно (достаточно дефолтного логирования в файл + stdout, но не через print() )
  • Производительность важна
  • Путь к входному excel файлу передаётся как аргумент скрипту при запуске, например python main.py /data/monitoring/input/urls.xlsx
  • Лаконичность приветствуется
  • Если что-то кажется не до конца уточнённым в ТЗ - не стесняйтесь делать то, что вам кажется правильным
  • Результат в виде публичного репозитория на github.com

Примечание

  • Если файл БД по указанному в настройках пути существует - считаем, что таблицы там - нужной структуры (эту проверку можно не делать)

Требуется иметь возможность настраивать через settings:

  • timeout запроса
  • количество потоков (если используется многопоточность)
  • путь к файлу с дампом ошибок
  • путь к файлу логов
  • путь к файлу SQLite3
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment