Генерируя уникальный идентификационный номер для входа цели в пользовательское исключение


Я придумал базовым классом для исключений, для это SMS-сервис, я работаю на. Основная идея сервиса заключается в том, что пользователь отправляет текстовое сообщение на номер, сообщения, запросы конкретного действия будет осуществляться агентом, который входит в другой веб-сайт, некоторые из которых запись информации царапины и выплюнул обратно пользователю. Небольшой взять на КЖ. Очевидно, что вещи не всегда работают так, как предполагалось по разным причинам.

Когда что-то идет не так, и возвращенный текст сообщения не содержит запрашиваемой информации, я хочу, чтобы пользователь имел к этой ошибке, если проблема повторится. Чтобы учесть, что я сохраню логи, где мне быстро сможете посмотреть, что случилось, используя справочный номер. Журналы будут содержать полную информацию об ошибке.

Целевое использование пользовательских исключений:

try:
    service.login(credentials)
except AuthenticationError as e:
    sms_client.send(phone_number, f'{Something went wrong. If this keeps on happening, please contact us with this error ref: {e.reference}')

...

import logging
import uuid


logging.basicConfig(filename='errors.log', level=logging.ERROR)


class ServiceException(Exception):
    def __init__(self, message, url):
        self.reference = str(uuid.uuid4()).split('-')[0]
        error_message = f'{message}: \'{url}\' | error ref: {self.reference}'
        logging.error(error_message)
        super(Exception, self).__init__(error_message)


class AuthenticationError(ServiceException):
    """Ambiguous error prevented successful authentication."""


Комментарии
1 ответ


обеспокоены, если резать идентификатор UUID короткий будет держать его уникальным

Ну, ты-вывода-32 бита. Так что вы можете сделать приблизительные 64К проводки (2^16) прежде чем нарваться на большие неприятности, по данным парадокса дней рождения.

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

Ты ставишь 4 бита энтропии на каждой шестигранной нюббле, которые, вероятно, будут копировать-Н-наклеенная (или пересылаются) пользователя. Если вы работаете в 8-символьного ограничения, рассмотреть, используя схему, как base36 или base64, так что каждый персонаж передает больше бит. Без вставки будет ограничений, таких как разглядывание на 'L' и отправив цифру '1'.

Если вы не беспокоитесь о пользователях составления идентификаторов, рассмотреть вопрос об использовании (идентификатор пользователя, serial_num), или лучше: (идентификатор пользователя, отметка времени).

2
ответ дан 15 мая 2018 в 04:05 Источник Поделиться