Мы создаем библиотеку для периодического представления данных в базу данных временных рядов.По сути, вы создаете объект нашего класса Reporter и регистрируете в нем несколько метрик.Репортер имеет внутренний поток, который периодически просыпается и отправляет данные в бэкэнд.
registry = MetricsRegistry()
reporter = Reporter(registry, reporting_interval=5)
reporter.start()
cpu_gauge = registry.gauge("node.cpu")
cpu_gauge.set_value(60)
time.sleep(6)
# when we wake up the data must have been sent
...
Обычно, если API репортера для создания отчетов был синхронным и открытым, мы помещали бы вызов отчета в блок try/except
и регистрировали любые исключения.Например:
try:
reporter.report_now()
except Exception as e:
self.logger.error("Reporter failed", e)
Однако в этом случае отчетность происходит в фоновом потоке.Чтобы регистрировать возникающие исключения, нужно ли просить пользователя библиотеки передать ссылку на регистратор при создании репортера?Это не внутренняя библиотека, а то, что наши клиенты будут использовать, поэтому я хочу ознакомиться с общими рекомендациями, применяемыми в мире Python.