Size: a a a

Saint P Ruby Community

2020 September 23

f🤔

focusshifter 🤔 in Saint P Ruby Community
Александр Крылов
можешь что-то из книг посоветовать про "- как гарантировать целостность происходящего и выявлять ошибки" ?
я в первую очередь про стандартные бухгалтерские операции. для самого старта посмотреть на принципы сведения баланса и оформления отчетности, они есть в любом "быстробухгалтер" курсе
источник

f🤔

focusshifter 🤔 in Saint P Ruby Community
Alexander Pavlyut
я думал тут про биллинг и его логирование речь
не, логгирование эт отдельная фоновая тема
источник

AP

Alexander Pavlyut in Saint P Ruby Community
ебть
источник

АД

Антон Дьячук... in Saint P Ruby Community
max
мы обсуждаем предложенное вами решение, а не моё
ну, это вам не нравится? мое решение мне нравится
источник

AP

Alexander Pavlyut in Saint P Ruby Community
сорян братья
источник

AP

Alexander Pavlyut in Saint P Ruby Community
мультитред детектед
источник

АД

Антон Дьячук... in Saint P Ruby Community
Alexander Pavlyut
мультитред детектед
ага, похоже на то 🙂
источник

f🤔

focusshifter 🤔 in Saint P Ruby Community
Alexander Pavlyut
что надо хранить - все исходные данные финансовых событий, которые позволят на нужныйы момент пересчитать показатели нужных балансов
тут +, я примерно это имел в виду, когда говорил про первичку
источник

PP

Pavel Peganov in Saint P Ruby Community
Выпускайте GIL
источник

АД

Антон Дьячук... in Saint P Ruby Community
max
при том, что при 2ой формулировке задачи я нахожу не значимым логирование ожидаемых "ошибок" - деление на 0 и некорректное кол-во аргументов, но значимым неправильный тип аргументов
но по вашему прототипу это невозможно будет сделать просто логируя 4xx ошибки в nginx (а предложение было именно такое)
про логирование ничего не было в условии задачи
источник

АД

Антон Дьячук... in Saint P Ruby Community
по тексту ошибки можно определить что, когда, кому показывать
источник

АК

Александр Крылов... in Saint P Ruby Community
наверное вопрос про логгирование/мониторинг относиться к тому, что когда вы используете коды ошибок, вместо 200. То приходится понимать на какие ошибки надо реагировать (например 500), а какие ошибки это норма для системы (в обсуждаемом примере 422).
источник

AG

Alexander G in Saint P Ruby Community
источник

AG

Alexander G in Saint P Ruby Community
в случае с делением на 0, было бы неплохо быстро узнать, почему в один день вдруг стало в 10 раз больше таких запросов.
вдруг там строка к инту стала приводиться неправильно после вчерашнего релиза

теперь всегда приходит div 0 0
источник

AG

Alexander G in Saint P Ruby Community
но, конечно, можно такое логировать в рамках своей архитектуры, из приложениия. Надо только не забыть это реализовать
источник

AG

Alexander G in Saint P Ruby Community
С смысле, ничего особо страшного не просходит, конечно.
С graphql уже есть такие проблемы (как @darigaaz верно приводил его в пример), но если используется http rest api, то грех не использовать http статусы.
источник

АД

Антон Дьячук... in Saint P Ruby Community
грех - подходящее слово
источник

ME

Makar Ermokhin in Saint P Ruby Community
Anton Davydov
Если сложно будет найти кого - могу рассказать как в igooods сервис для билинга вытаскивали (если мне ребята разрешат)
Где то я такое уже слышал...
источник

AD

Anton Davydov in Saint P Ruby Community
источник

EM

Eugene Maslenkov in Saint P Ruby Community
max
да сколько ж можно =)

спроектируйте апи эндпоинт по делению чисел /div
и есть 2 формулировки:
1. "Необходимо возвращать результат деления"
2. "Необходимо возвращать результат деления. Но в случае неправильного кол-ва переданных аргументов показывать модалку с текстом "...". В случае деления на 0 показывать модалку с текстом "Деление на 0""

какие статусы и тела ответов будут для 1го и 2го случая, если выполнять запросы:
1. div 10 5
2. div  42
3. div 3 0
4. div 1 2 3 4 5
5. div "всем" "привет"
мы в одном из проектов "грубо говоря" использовали три кода так:
200 success
400 - известная ошибка, например не прошла валидация или что-то подобное body: {error_code: 12345, error: message, some_additional_info ... }
500 - не известная ошибка
400 и 500 обрабатывались в ApplicationController-е, все известные ошибки наследовались от AppBaseError, по этому можно было просто сделать rescue_from AppBaseError -> 400; StandardError -> 500
другие коды старались не использовать, что бы "быстрее" отделять ошибки уровня rails от ошибок уровня nginx

логирование действительно отдельная тема, в выше упомянутом проекте было помимо info/debug/error было у логов еще что-то типа ttl, потому что некоторые логи занимали по 2mb (ответы external api) - такие логи жили час по дефолту, и их можно было "сохранить", если что-то пошло не так (всплеск ошибок). Логировалось буквально все.
источник