Git Product home page Git Product logo

admitad_test's Introduction

Резюме (что было сделано)

Алгоритм работы:

  • Прочитать целиком входной файл;
  • Выкинуть все огранические переходы (раз они ни на что не влияют);
  • Сгруппировать события по юзерам, отсортировать по дате;
  • Пройтись по каждому полученному юзеру;
  • Если его последнее событие -- не успешная покупка, то выкинуть такого юзера. Тут используется допущение что логи уже чистые и подготовленные (судя по предоставленным данным и таймингу 1 час). В реальном мире нужно искать несколько покупок у каждого пользователя, и для каждой покупки повторять описанные ниже действия;
  • В обратном порядке (от новых к старым) пройтись по событиям и найти первый переход из кешбек-сервиса;
  • Если это наш сервис, то успех (сохранить юзера в отдельный файл), если не наш, то нафиг.

Установка

Требования:

  • Используется Python 3.8.
  • Не требует внешних зависимостей для использования.
  • Для запуска юнит-тестов потребуются дополнительные зависимости:
    python3.8 -m venv .venv
    source .venv/bin/activate
    pip install -r pip-requirements-dev.txt
    

(Код совместим с более ранними версиями вплоть до 3.5, но зависимости для юнит-тестов - нет, нужно поискать более старую версию coverage.)

Запустить юнит-тесты (без подсчёта покрытия):

make test

Запустить юнит-тесты (с подсчётом покрытия) и построить отчёт:

make coverage
make coverage_report

Как пользоваться

Посмотреть все опции:

python src/main.py -h

Пример запуска:

python src/main.py -p src/tests/fixture1.json --log-level DEBUG

Пример результата

Условие задания от заказчика

Пользователи посещают сайт магазина Shop. Они могут приходить из поисковиков (органический трафик), приходить по партнерским ссылкам нескольких кэшбек-сервисов: нашего (Ours) и других (Theirs1, Theirs2).

Примеры логов в БД сервиса Ours, которые собираются скриптом со всех страниц сайта магазина:

  1. Органический переход клиента в магазин
[
    {
        "client_id": "user15",
        "User-Agent": "Firefox 59",
        "document.location": "https://shop.com/products/?id=2",
        "document.referer": "https://yandex.ru/search/?q=купить+котика",
        "date": "2018-04-03T07:59:13.286000Z"
    }
]
  1. Переход клиента в магазин по партнерской ссылке кэшбек-сервиса
[
    {
        "client_id": "user15",
        "User-Agent": "Firefox 59",
        "document.location": "https://shop.com/products/?id=2",
        "document.referer": "https://referal.ours.com/?ref=123hexcode",
        "date": "2018-04-04T08:30:14.104000Z"
    },
    {
        "client_id": "user15",
        "User-Agent": "Firefox 59",
        "document.location": "https://shop.com/products/?id=2",
        "document.referer": "https://ad.theirs1.com/?src=q1w2e3r4",
        "date": "2018-04-04T08:45:14.384000Z"
    }
]
  1. Внутренний переход клиента в магазине
[
    {
        "client_id": "user15",
        "User-Agent": "Firefox 59",
        "document.location": "https://shop.com/checkout",
        "document.referer": "https://shop.com/products/?id=2",
        "date": "2018-04-04T08:59:16.222000Z"
    }
]

Магазин Shop платит кэшбек-сервисам за клиентов, которые перешли по их ссылке, оплатили товар и в конце попали на страницу https://shop.com/checkout ("Спасибо за заказ"). Комиссия выплачивается по принципу "выигрывает последний кэшбек-сервис, после перехода по партнерской ссылке которого клиент купил товар".

Сервис Ours хочет по своим логам находить клиентов, которые совершили покупку именно благодаря ему. Нужно написать программу, которая ищет победившие партнерские ссылки сервиса Ours. Учесть различные сценарии поведения клиента на сайте.

На выходе менеджер ожидает получить список клиентов и какие партнерские ссылки привели к их покупкам.

Будет плюсом​, если будут предоставлены доказательства правильности работы алгоритма.

Решение прислать в виде ссылки на код проекта на https://github.com/. В репозитории разместить файл README.md, содержащий пошаговую инструкцию по развертыванию и использованию проекта.

Дополнительно примеры логов:

[
    {
        "client_id": "user7",
        "User-Agent": "Chrome 65",
        "document.location": "https://shop.com/",
        "document.referer": "https://referal.ours.com/?ref=0xc0ffee",
        "date": "2018-05-23T18:59:13.286000Z"
    },
    {
        "client_id": "user7",
        "User-Agent": "Chrome 65",
        "document.location": "https://shop.com/products/?id=10",
        "document.referer": "https://shop.com/",
        "date": "2018-05-23T18:59:20.119000Z"
    },
    {
        "client_id": "user7",
        "User-Agent": "Chrome 65",
        "document.location": "https://shop.com/products/?id=25",
        "document.referer": "https://shop.com/products/?id=10",
        "date": "2018-05-23T19:04:20.119000Z"
    },
    {
        "client_id": "user7",
        "User-Agent": "Chrome 65",
        "document.location": "https://shop.com/cart",
        "document.referer": "https://shop.com/products/?id=25",
        "date": "2018-05-23T19:05:13.123000Z"
    },
    {
        "client_id": "user7",
        "User-Agent": "Chrome 65",
        "document.location": "https://shop.com/checkout",
        "document.referer": "https://shop.com/cart",
        "date": "2018-05-23T19:05:59.224000Z"
    }
]

admitad_test's People

Contributors

d3quone avatar

Watchers

 avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.