From 4271b710ef88f06c2b42250ab179fdefb0153e56 Mon Sep 17 00:00:00 2001 From: James Turner Date: Thu, 3 Dec 2020 21:36:36 +0000 Subject: [PATCH] Add reporting callback option to SimGear Allows us to trigger an error logging callback explicitly, which can be used to drive Sentry.io on the FlightGear side. --- simgear/debug/CMakeLists.txt | 8 +++- simgear/debug/ErrorReportingCallback.cxx | 47 ++++++++++++++++++++++++ simgear/debug/ErrorReportingCallback.hxx | 31 ++++++++++++++++ 3 files changed, 84 insertions(+), 2 deletions(-) create mode 100644 simgear/debug/ErrorReportingCallback.cxx create mode 100644 simgear/debug/ErrorReportingCallback.hxx diff --git a/simgear/debug/CMakeLists.txt b/simgear/debug/CMakeLists.txt index e474d382..c016c333 100644 --- a/simgear/debug/CMakeLists.txt +++ b/simgear/debug/CMakeLists.txt @@ -3,8 +3,12 @@ include (SimGearComponent) set(HEADERS debug_types.h logstream.hxx BufferedLogCallback.hxx OsgIoCapture.hxx - LogCallback.hxx LogEntry.hxx) + LogCallback.hxx LogEntry.hxx + ErrorReportingCallback.hxx) + set(SOURCES logstream.cxx BufferedLogCallback.cxx - LogCallback.cxx LogEntry.cxx logdelta.cxx) + LogCallback.cxx LogEntry.cxx logdelta.cxx + ErrorReportingCallback.cxx + ) simgear_component(debug debug "${SOURCES}" "${HEADERS}") diff --git a/simgear/debug/ErrorReportingCallback.cxx b/simgear/debug/ErrorReportingCallback.cxx new file mode 100644 index 00000000..85159025 --- /dev/null +++ b/simgear/debug/ErrorReportingCallback.cxx @@ -0,0 +1,47 @@ +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Library General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Library General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// + +#include + +#include "ErrorReportingCallback.hxx" + +using std::string; + +namespace simgear { + +static ErrorReportCallback static_callback; + +void setErrorReportCallback(ErrorReportCallback cb) +{ + static_callback = cb; +} + + +void reportError(const std::string& msg, const std::string& more) +{ + if (!static_callback) + return; + + static_callback(msg, more, false); +} + +void reportFatalError(const std::string& msg, const std::string& more) +{ + if (!static_callback) + return; + static_callback(msg, more, true); +} + +} // namespace simgear diff --git a/simgear/debug/ErrorReportingCallback.hxx b/simgear/debug/ErrorReportingCallback.hxx new file mode 100644 index 00000000..b707f3de --- /dev/null +++ b/simgear/debug/ErrorReportingCallback.hxx @@ -0,0 +1,31 @@ +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Library General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Library General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// + +#pragma once + +#include +#include + +namespace simgear { + +void reportError(const std::string& msg, const std::string& more = {}); + +void reportFatalError(const std::string& msg, const std::string& more = {}); + +using ErrorReportCallback = std::function; + +void setErrorReportCallback(ErrorReportCallback cb); + +} // namespace simgear