diff options
-rw-r--r-- | gentoobrowse-api/service/main.cpp | 2 | ||||
-rw-r--r-- | gentoobrowse-api/service/maintenanceCommon.cpp | 30 | ||||
-rw-r--r-- | gentoobrowse-api/service/maintenanceimpl.h | 4 |
3 files changed, 33 insertions, 3 deletions
diff --git a/gentoobrowse-api/service/main.cpp b/gentoobrowse-api/service/main.cpp index 8ac8a8b..ce32be0 100644 --- a/gentoobrowse-api/service/main.cpp +++ b/gentoobrowse-api/service/main.cpp @@ -30,7 +30,7 @@ class Api : public IceTray::Service { { auto db = getConnectionPool(ic, "postgresql", "GentooBrowseAPI"); adp->add(new Portage(db), ic->stringToIdentity("portage")); - adp->add(new Maintenance(db), ic->stringToIdentity("maintenance")); + adp->add(new Maintenance(db, ic, ic->getProperties()), ic->stringToIdentity("maintenance")); adp->add(new Users(db), ic->stringToIdentity("users")); adp->add(new Notifications(), ic->stringToIdentity("notifications")); adp->add(new MailServer(), ic->stringToIdentity("mailserver")); diff --git a/gentoobrowse-api/service/maintenanceCommon.cpp b/gentoobrowse-api/service/maintenanceCommon.cpp index c2c96a3..e7590e3 100644 --- a/gentoobrowse-api/service/maintenanceCommon.cpp +++ b/gentoobrowse-api/service/maintenanceCommon.cpp @@ -9,14 +9,42 @@ namespace Gentoo { namespace Service { - Maintenance::Maintenance(IceTray::DatabasePoolPtr d) : + class AutoUpdatePackages : public IceUtil::TimerTask { + public: + AutoUpdatePackages(Ice::CommunicatorPtr i) : ic(i) { } + + void runTimerTask() override { + auto m = MaintenancePrx::checkedCast(ic->stringToProxy("maintenance")); + m->ice_ping(); + auto rb = m->begin_refreshBugs(); + m->updateRepositories(); + auto rptg = m->begin_refreshPackageTreeGit(); + auto rcl = m->begin_refreshChangeLogs(); + m->end_refreshPackageTreeGit(rptg); + m->sendNotifications(); + m->end_refreshChangeLogs(rcl); + m->end_refreshBugs(rb); + } + + private: + Ice::CommunicatorPtr ic; + }; + + Maintenance::Maintenance(IceTray::DatabasePoolPtr d, Ice::CommunicatorPtr ic, Ice::PropertiesPtr p) : IceTray::AbstractDatabaseClient(d) { setupFileProcessors(); + if (auto sync = p->getPropertyAsIntWithDefault("GentooBrowseAPI.SyncTime", 0) * 60) { + taskRunner = new IceUtil::Timer(); + taskRunner->scheduleRepeated(new AutoUpdatePackages(ic), IceUtil::Time::seconds(sync)); + } } Maintenance::~Maintenance() { + if (taskRunner) { + taskRunner->destroy(); + } } Ice::PropertiesPtr diff --git a/gentoobrowse-api/service/maintenanceimpl.h b/gentoobrowse-api/service/maintenanceimpl.h index b6b480a..a1f474b 100644 --- a/gentoobrowse-api/service/maintenanceimpl.h +++ b/gentoobrowse-api/service/maintenanceimpl.h @@ -9,6 +9,7 @@ #include <boost/function/function_fwd.hpp> #include <converters.h> #include "maintenance/abstractFileProcessor.h" +#include <IceUtil/Timer.h> namespace Gentoo { namespace Service { @@ -19,7 +20,7 @@ namespace Gentoo { typedef boost::function<void(FileProcessorPtr, int64_t, const Gentoo::StringList &, const boost::filesystem::path &)> FileHandleFunc; typedef std::map<int64_t, std::string> RepoMap; - Maintenance(IceTray::DatabasePoolPtr d); + Maintenance(IceTray::DatabasePoolPtr d, Ice::CommunicatorPtr ic, Ice::PropertiesPtr p); ~Maintenance(); void refreshPackageTree(const Ice::Current &) override; @@ -45,6 +46,7 @@ namespace Gentoo { template <typename T> static FileProcessorPtr createFileProessor(bool vcsMode); FileProcessorFactories fpfs; + IceUtil::TimerPtr taskRunner; }; } } |