diff --git a/doc/09-object-types.md b/doc/09-object-types.md
index 0d858f92a..0f92f28d8 100644
--- a/doc/09-object-types.md
+++ b/doc/09-object-types.md
@@ -1153,30 +1153,6 @@ use [MaxConcurrentChecks](17-language-reference.md#icinga-constants-global-confi
This also applies to an agent as command endpoint where the checker
feature is disabled.
-### CheckResultReader
-
-Reads Icinga 1.x check result files from a directory. This functionality is provided
-to help existing Icinga 1.x users and might be useful for migration scenarios.
-
-> **Note**
->
-> This feature is DEPRECATED and may be removed in future releases.
-> Check the [roadmap](https://github.com/Icinga/icinga2/milestones).
-
-Example:
-
-```
-object CheckResultReader "reader" {
- spool_dir = "/data/check-results"
-}
-```
-
-Configuration Attributes:
-
- Name | Type | Description
- --------------------------|-----------------------|----------------------------------
- spool\_dir | String | **Optional.** The directory which contains the check result files. Defaults to DataDir + "/spool/checkresults/".
-
### CompatLogger
Writes log files in a format that's compatible with Icinga 1.x.
diff --git a/doc/14-features.md b/doc/14-features.md
index b1981e0f5..4a4ff32b7 100644
--- a/doc/14-features.md
+++ b/doc/14-features.md
@@ -1228,32 +1228,6 @@ Detailed information on the commands and their required parameters can be found
on the [Icinga 1.x documentation](https://docs.icinga.com/latest/en/extcommands2.html).
-### Check Result Files
-
-> **Note**
->
-> This feature is DEPRECATED and may be removed in future releases.
-> Check the [roadmap](https://github.com/Icinga/icinga2/milestones).
-
-Icinga 1.x writes its check result files to a temporary spool directory
-where they are processed in a regular interval.
-While this is extremely inefficient in performance regards it has been
-rendered useful for passing passive check results directly into Icinga 1.x
-skipping the external command pipe.
-
-Several clustered/distributed environments and check-aggregation addons
-use that method. In order to support step-by-step migration of these
-environments, Icinga 2 supports the `CheckResultReader` object.
-
-There is no feature configuration available, but it must be defined
-on-demand in your Icinga 2 objects configuration.
-
-```
-object CheckResultReader "reader" {
- spool_dir = "/data/check-results"
-}
-```
-
### Livestatus
> **Note**
diff --git a/lib/compat/CMakeLists.txt b/lib/compat/CMakeLists.txt
index 638f3c193..f7d032fd4 100644
--- a/lib/compat/CMakeLists.txt
+++ b/lib/compat/CMakeLists.txt
@@ -1,11 +1,9 @@
# Icinga 2 | (c) 2012 Icinga GmbH | GPLv2+
-mkclass_target(checkresultreader.ti checkresultreader-ti.cpp checkresultreader-ti.hpp)
mkclass_target(compatlogger.ti compatlogger-ti.cpp compatlogger-ti.hpp)
mkclass_target(externalcommandlistener.ti externalcommandlistener-ti.cpp externalcommandlistener-ti.hpp)
set(compat_SOURCES
- checkresultreader.cpp checkresultreader.hpp checkresultreader-ti.hpp
compatlogger.cpp compatlogger.hpp compatlogger-ti.hpp
externalcommandlistener.cpp externalcommandlistener.hpp externalcommandlistener-ti.hpp
)
diff --git a/lib/compat/checkresultreader.cpp b/lib/compat/checkresultreader.cpp
deleted file mode 100644
index 1757333aa..000000000
--- a/lib/compat/checkresultreader.cpp
+++ /dev/null
@@ -1,166 +0,0 @@
-/* Icinga 2 | (c) 2012 Icinga GmbH | GPLv2+ */
-
-#include "icinga/compatutility.hpp"
-#include "compat/checkresultreader.hpp"
-#include "compat/checkresultreader-ti.cpp"
-#include "icinga/service.hpp"
-#include "icinga/pluginutility.hpp"
-#include "icinga/icingaapplication.hpp"
-#include "base/configtype.hpp"
-#include "base/objectlock.hpp"
-#include "base/logger.hpp"
-#include "base/convert.hpp"
-#include "base/application.hpp"
-#include "base/utility.hpp"
-#include "base/exception.hpp"
-#include "base/context.hpp"
-#include "base/statsfunction.hpp"
-#include
-
-using namespace icinga;
-
-REGISTER_TYPE(CheckResultReader);
-
-REGISTER_STATSFUNCTION(CheckResultReader, &CheckResultReader::StatsFunc);
-
-void CheckResultReader::StatsFunc(const Dictionary::Ptr& status, const Array::Ptr&)
-{
- DictionaryData nodes;
-
- for (const CheckResultReader::Ptr& checkresultreader : ConfigType::GetObjectsByType()) {
- nodes.emplace_back(checkresultreader->GetName(), 1); //add more stats
- }
-
- status->Set("checkresultreader", new Dictionary(std::move(nodes)));
-}
-
-/**
- * @threadsafety Always.
- */
-void CheckResultReader::Start(bool runtimeCreated)
-{
- ObjectImpl::Start(runtimeCreated);
-
- Log(LogInformation, "CheckResultReader")
- << "'" << GetName() << "' started.";
-
- Log(LogWarning, "CheckResultReader")
- << "This feature is DEPRECATED and may be removed in future releases. Check the roadmap at https://github.com/Icinga/icinga2/milestones";
-
-#ifndef _WIN32
- m_ReadTimer = new Timer();
- m_ReadTimer->OnTimerExpired.connect([this](const Timer * const&) { ReadTimerHandler(); });
- m_ReadTimer->SetInterval(5);
- m_ReadTimer->Start();
-#endif /* _WIN32 */
-}
-
-/**
- * @threadsafety Always.
- */
-void CheckResultReader::Stop(bool runtimeRemoved)
-{
- Log(LogInformation, "CheckResultReader")
- << "'" << GetName() << "' stopped.";
-
- ObjectImpl::Stop(runtimeRemoved);
-}
-
-/**
- * @threadsafety Always.
- */
-void CheckResultReader::ReadTimerHandler() const
-{
- CONTEXT("Processing check result files in '" << GetSpoolDir() << "'");
-
- Utility::Glob(GetSpoolDir() + "/c??????.ok", [this](const String& path) { ProcessCheckResultFile(path); }, GlobFile);
-}
-
-void CheckResultReader::ProcessCheckResultFile(const String& path) const
-{
- CONTEXT("Processing check result file '" << path << "'");
-
- String crfile = String(path.Begin(), path.End() - 3); /* Remove the ".ok" extension. */
-
- std::ifstream fp;
- fp.exceptions(std::ifstream::badbit);
- fp.open(crfile.CStr());
-
- std::map attrs;
-
- while (fp.good()) {
- std::string line;
- std::getline(fp, line);
-
- if (line.empty() || line[0] == '#')
- continue; /* Ignore comments and empty lines. */
-
- size_t pos = line.find_first_of('=');
-
- if (pos == std::string::npos)
- continue; /* Ignore invalid lines. */
-
- String key = line.substr(0, pos);
- String value = line.substr(pos + 1);
-
- attrs[key] = value;
- }
-
- /* Remove the checkresult files. */
- Utility::Remove(path);
-
- Utility::Remove(crfile);
-
- Checkable::Ptr checkable;
-
- Host::Ptr host = Host::GetByName(attrs["host_name"]);
-
- if (!host) {
- Log(LogWarning, "CheckResultReader")
- << "Ignoring checkresult file for host '" << attrs["host_name"] << "': Host does not exist.";
-
- return;
- }
-
- if (attrs.find("service_description") != attrs.end()) {
- Service::Ptr service = host->GetServiceByShortName(attrs["service_description"]);
-
- if (!service) {
- Log(LogWarning, "CheckResultReader")
- << "Ignoring checkresult file for host '" << attrs["host_name"]
- << "', service '" << attrs["service_description"] << "': Service does not exist.";
-
- return;
- }
-
- checkable = service;
- } else
- checkable = host;
-
- CheckResult::Ptr result = new CheckResult();
- String output = CompatUtility::UnEscapeString(attrs["output"]);
- std::pair co = PluginUtility::ParseCheckOutput(output);
- result->SetOutput(co.first);
- result->SetPerformanceData(PluginUtility::SplitPerfdata(co.second));
- result->SetState(PluginUtility::ExitStatusToState(Convert::ToLong(attrs["return_code"])));
-
- if (attrs.find("start_time") != attrs.end())
- result->SetExecutionStart(Convert::ToDouble(attrs["start_time"]));
- else
- result->SetExecutionStart(Utility::GetTime());
-
- if (attrs.find("finish_time") != attrs.end())
- result->SetExecutionEnd(Convert::ToDouble(attrs["finish_time"]));
- else
- result->SetExecutionEnd(result->GetExecutionStart());
-
- checkable->ProcessCheckResult(result);
-
- Log(LogDebug, "CheckResultReader")
- << "Processed checkresult file for object '" << checkable->GetName() << "'";
-
- /* Reschedule the next check. The side effect of this is that for as long
- * as we receive check result files for a host/service we won't execute any
- * active checks. */
- checkable->SetNextCheck(Utility::GetTime() + checkable->GetCheckInterval());
-}
diff --git a/lib/compat/checkresultreader.hpp b/lib/compat/checkresultreader.hpp
deleted file mode 100644
index 6cd28e318..000000000
--- a/lib/compat/checkresultreader.hpp
+++ /dev/null
@@ -1,38 +0,0 @@
-/* Icinga 2 | (c) 2012 Icinga GmbH | GPLv2+ */
-
-#ifndef CHECKRESULTREADER_H
-#define CHECKRESULTREADER_H
-
-#include "compat/checkresultreader-ti.hpp"
-#include "base/timer.hpp"
-#include
-
-namespace icinga
-{
-
-/**
- * An Icinga checkresult reader.
- *
- * @ingroup compat
- */
-class CheckResultReader final : public ObjectImpl
-{
-public:
- DECLARE_OBJECT(CheckResultReader);
- DECLARE_OBJECTNAME(CheckResultReader);
-
- static void StatsFunc(const Dictionary::Ptr& status, const Array::Ptr& perfdata);
-
-protected:
- void Start(bool runtimeCreated) override;
- void Stop(bool runtimeRemoved) override;
-
-private:
- Timer::Ptr m_ReadTimer;
- void ReadTimerHandler() const;
- void ProcessCheckResultFile(const String& path) const;
-};
-
-}
-
-#endif /* CHECKRESULTREADER_H */
diff --git a/lib/compat/checkresultreader.ti b/lib/compat/checkresultreader.ti
deleted file mode 100644
index 0132818cf..000000000
--- a/lib/compat/checkresultreader.ti
+++ /dev/null
@@ -1,20 +0,0 @@
-/* Icinga 2 | (c) 2012 Icinga GmbH | GPLv2+ */
-
-#include "base/configobject.hpp"
-#include "base/application.hpp"
-
-library compat;
-
-namespace icinga
-{
-
-class CheckResultReader : ConfigObject
-{
- activation_priority 100;
-
- [config] String spool_dir {
- default {{{ return Configuration::DataDir + "/spool/checkresults/"; }}}
- };
-};
-
-}
diff --git a/lib/icinga/compatutility.cpp b/lib/icinga/compatutility.cpp
index 344e95797..95aed4396 100644
--- a/lib/icinga/compatutility.cpp
+++ b/lib/icinga/compatutility.cpp
@@ -293,7 +293,7 @@ String CompatUtility::EscapeString(const String& str)
return result;
}
-/* Used in ExternalCommandListener and CheckResultReader. */
+/* Used in ExternalCommandListener. */
String CompatUtility::UnEscapeString(const String& str)
{
String result = str;
diff --git a/tools/syntax/nano/icinga2.nanorc b/tools/syntax/nano/icinga2.nanorc
index 6f682891b..cff78be3b 100644
--- a/tools/syntax/nano/icinga2.nanorc
+++ b/tools/syntax/nano/icinga2.nanorc
@@ -9,7 +9,7 @@ icolor brightgreen "object[ \t]+(checkcommand|notificationcommand|eventcommand
icolor brightgreen "object[ \t]+(timeperiod|scheduleddowntime|dependency|perfdatawriter)"
icolor brightgreen "object[ \t]+(graphitewriter|idomysqlconnection|idomysqlconnection)"
icolor brightgreen "object[ \t]+(livestatuslistener|externalcommandlistener)"
-icolor brightgreen "object[ \t]+(compatlogger|checkresultreader|checkcomponent|notificationcomponent)"
+icolor brightgreen "object[ \t]+(compatlogger|checkcomponent|notificationcomponent)"
icolor brightgreen "object[ \t]+(filelogger|sysloglogger|journaldlogger|apilistener|endpoint|zone)"
## apply def