Skip to content

Instantly share code, notes, and snippets.

@aashestakov
Last active July 18, 2019 00:00
Show Gist options
  • Save aashestakov/a40f719023cc6e491c739616ec0dc126 to your computer and use it in GitHub Desktop.
Save aashestakov/a40f719023cc6e491c739616ec0dc126 to your computer and use it in GitHub Desktop.
tasks

Задача 1

Шаги по устранению неисправности:
  • Анализ логов с целью выявления системных ошибок различного уровня
  • Анализ истории версионного контроля в период от 10-дневной давности с целью установить вносились ли изменения, способные затронуть указаный функционал
  • При наличии функциональных тестов - принудительный запуск
  • Откатка к различным коммитам на dev-машине, с целью определить состояние, когда система работала стабильно
  • Если найдена программная ошибка - то следует дальнейшая подготовка hotfix
Если программной ошибки под файлами в версионном контроле не обнаружено:
  • проверить время выполнения запускаемого скрипта. Возможно, что время обработки скрипта начало превышать 30-ти минутный интервал запуска скрипта и это дает сайд-эффекты при сборе статистики
  • сравнение переменных (конфигурации) окружения с эталонными
  • если в архитектуре задействованы репликация или шардирование БД, проверить состояние master-slave (write-read) баз данных
Если причина не ясна, следует воспроизвести пошаговый debug с точками останова сценария сбора статистики указанного скрипта.

Задача 2

Если предполагается, что по каким-то из сущностей возможен временный пустой ответ, то можно кешировать такие запросы с определенным срезом параметров с периодом валидности в 1 час. Это означает, что для указанных запросов фактических вызовов к внешнему API производиться не будет. В начале каждого часа производить автоматический сброс кеша.

Альтернативой кешированию может являться проксирование на другой источник (заглушку), если пустой ответ не является удовлетворительным ответом системы.

Задача 3

Шаги по построению сервиса:
  • Составить перечень сущностей (моделей) и возможных операций над ними
  • Выбрать подходящую архитектуру построения API, например REST. Составить карту машрутов.
  • Подготовить спецификацию OpenAPI для взаимодействия с фронтом.
  • Сгенерировать на основе OpenAPI или подготовить вручную заглушки на необходимые методы
  • Выдать на фронт файл спецификации с описанием доступным маршрутов
  • Итерационно корректировать/дополнять спецификацию под версионным контролем

Для REST API и различных выборок с сортировкой и фильтрацией подойдет шаблон вида:

GET /groups?country=russia&startDate=01.01.1970&sort=spend&order=desc

или более дружелюбный ЧПУ SEO формат:

GET /groups/filter/country_russia/?sort=spend&order=desc

возможно некоторые запросы будет удобно передавить с заголовком application/json и телом в json формате.

Пример успешного ответа на запрос:

{
  "succes": true,
  "data": {
    "groups": [
      {
        "id": 86,
        "name": "Тестовая рекламная группа",
        "spend": 100,
        "clicks": 23,
        "relatedCountryIds": [1]
      }
    ],
    "countries": [
      {
        "id": 1,
        "name": "Россия",
        "spend": 20,
        "clicks": 133
      }
    ]
  }
}

Пример ответа с ошибками:

{
  "succes": false,
  "errors": [
     "Что-то пошло не так"
  ]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment