diff options
-rw-r--r-- | gentoobrowse-api/service/maintenanceBugs.cpp | 60 | ||||
-rw-r--r-- | gentoobrowse-api/service/maintenanceGitOperations.cpp | 27 |
2 files changed, 53 insertions, 34 deletions
diff --git a/gentoobrowse-api/service/maintenanceBugs.cpp b/gentoobrowse-api/service/maintenanceBugs.cpp index 9393cdf..aee9003 100644 --- a/gentoobrowse-api/service/maintenanceBugs.cpp +++ b/gentoobrowse-api/service/maintenanceBugs.cpp @@ -10,6 +10,7 @@ #include <utils/dbUtils.h> #include <compileTimeFormatter.h> #include <logger.h> +#include <nagios.h> namespace Gentoo { namespace Service { @@ -67,37 +68,46 @@ namespace Gentoo { AdHocFormatter(UpdatingBugs, "Refreshing bug list from %?"); AdHocFormatter(UpdatingBugUrl, " ... %?"); AdHocFormatter(UpdatingBugsResult, "Refreshed bug list: %? added, %? updated, %? removed"); + constexpr const std::string_view NagiosServiceName("GB API Bug Updates"); void Maintenance::refreshBugs(const Ice::Current & c) { - auto log = LOGMANAGER()->getLogger(__FUNCTION__); - std::filesystem::path root = properties(c)->getPropertyWithDefault( - "GentooBrowseAPI.BugRoot", "https://bugs.gentoo.org/data/cached"); + try { + auto log = LOGMANAGER()->getLogger(__FUNCTION__); + std::filesystem::path root = properties(c)->getPropertyWithDefault( + "GentooBrowseAPI.BugRoot", "https://bugs.gentoo.org/data/cached"); - log->messagectf<UpdatingBugs>(IceTray::Logging::LogLevel::INFO, root); - auto dbc = db->get(); - DB::TransactionScope tx(*dbc.get()); - DB::TablePatch tp; - tp.pk = { "bugId" }; - tp.cols = { "bugId", "severity", "status", "summary" }; - tp.dest = "gentoobrowse.bugs"; - tp.src = Utils::Database::emptyClone(dbc.get(), "gentoobrowse.bugs"); - auto ins = Utils::Database::tablePatchInserter(dbc.get(), tp); - BugListParser blp(ins); - for(const auto & bl : { + log->messagectf<UpdatingBugs>(IceTray::Logging::LogLevel::INFO, root); + auto dbc = db->get(); + DB::TransactionScope tx(*dbc.get()); + DB::TablePatch tp; + tp.pk = { "bugId" }; + tp.cols = { "bugId", "severity", "status", "summary" }; + tp.dest = "gentoobrowse.bugs"; + tp.src = Utils::Database::emptyClone(dbc.get(), "gentoobrowse.bugs"); + auto ins = Utils::Database::tablePatchInserter(dbc.get(), tp); + BugListParser blp(ins); + for(const auto & bl : { "buglist-CONFIRMED.html", - "buglist-UNCONFIRMED.html", - "buglist-IN_PROGRESS.html" }) { - log->messagectf<UpdatingBugUrl>(IceTray::Logging::LogLevel::DEBUG, bl); - AdHoc::Net::CurlStreamSource css(root / bl); - css.setopt(CURLOPT_ENCODING, "deflate, gzip"); - css.setopt(CURLOPT_TIMEOUT, 20L); - AdHoc::Net::CurlStream cs(css); - blp.parse_stream(cs); + "buglist-UNCONFIRMED.html", + "buglist-IN_PROGRESS.html" }) { + log->messagectf<UpdatingBugUrl>(IceTray::Logging::LogLevel::DEBUG, bl); + AdHoc::Net::CurlStreamSource css(root / bl); + css.setopt(CURLOPT_ENCODING, "deflate, gzip"); + css.setopt(CURLOPT_TIMEOUT, 20L); + AdHoc::Net::CurlStream cs(css); + blp.parse_stream(cs); + } + auto result = dbc->patchTable(&tp); + Utils::Database::drop(dbc.get(), tp.src); + log->messagectf<UpdatingBugsResult>(IceTray::Logging::LogLevel::INFO, result.inserts, result.updates, result.deletes); + AdHoc::submitNagiosPassiveServiceCheck(NagiosServiceName, AdHoc::NagiosStatusCode::OK, + UpdatingBugsResult::get(result.inserts, result.updates, result.deletes)); + } + catch (const std::exception & ex) { + AdHoc::submitNagiosPassiveServiceCheck(NagiosServiceName, AdHoc::NagiosStatusCode::Warning, ex.what()); + throw; } - auto result = dbc->patchTable(&tp); - log->messagectf<UpdatingBugsResult>(IceTray::Logging::LogLevel::INFO, result.inserts, result.updates, result.deletes); - Utils::Database::drop(dbc.get(), tp.src); } } } diff --git a/gentoobrowse-api/service/maintenanceGitOperations.cpp b/gentoobrowse-api/service/maintenanceGitOperations.cpp index dae0da2..2a72fe6 100644 --- a/gentoobrowse-api/service/maintenanceGitOperations.cpp +++ b/gentoobrowse-api/service/maintenanceGitOperations.cpp @@ -15,6 +15,7 @@ #include <compileTimeFormatter.h> #include <systemd/sd-daemon.h> #include <logger.h> +#include <nagios.h> namespace Gentoo { namespace Service { @@ -166,19 +167,27 @@ namespace Gentoo { return changes; } + constexpr const std::string_view NagiosServiceName("GB API Package Updates"); void Maintenance::refreshPackageTree(const Ice::Current & c) { - auto properties = c.adapter->getCommunicator()->getProperties(); - auto repoRoot = std::filesystem::path(properties->getPropertyWithDefault("GentooBrowseAPI.RepoRoot", "/")); - auto dbc = db->get(); - DB::TransactionScope tx(*dbc.get()); - for (const auto & repo : fetch<Gentoo::Repositories>(dbc.get(), sql::maintenance::reposToGitRefresh)) { - auto changes = refreshRepository(dbc.get(), properties, repo); - this->applyFileChanges(dbc.get(), repoRoot, repo, changes); + try { + auto properties = c.adapter->getCommunicator()->getProperties(); + auto repoRoot = std::filesystem::path(properties->getPropertyWithDefault("GentooBrowseAPI.RepoRoot", "/")); + auto dbc = db->get(); + DB::TransactionScope tx(*dbc.get()); + for (const auto & repo : fetch<Gentoo::Repositories>(dbc.get(), sql::maintenance::reposToGitRefresh)) { + auto changes = refreshRepository(dbc.get(), properties, repo); + this->applyFileChanges(dbc.get(), repoRoot, repo, changes); + } + time_t now = time(nullptr); + sd_notifyf(0, "STATUS=Last update %s", ctime(&now)); + AdHoc::submitNagiosPassiveServiceCheck(NagiosServiceName, AdHoc::NagiosStatusCode::OK, "Package tree(s) updated"); + } + catch (const std::exception & ex) { + AdHoc::submitNagiosPassiveServiceCheck(NagiosServiceName, AdHoc::NagiosStatusCode::Warning, ex.what()); + throw; } - time_t now = time(nullptr); - sd_notifyf(0, "STATUS=Last update %s", ctime(&now)); } AdHocFormatter(UpdatingFileContent, "Updating file content"); |