diff options
-rw-r--r-- | gentoobrowse-api/service/maintenanceCommon.cpp | 45 | ||||
-rw-r--r-- | gentoobrowse-api/service/maintenanceimpl.h | 2 |
2 files changed, 36 insertions, 11 deletions
diff --git a/gentoobrowse-api/service/maintenanceCommon.cpp b/gentoobrowse-api/service/maintenanceCommon.cpp index 4a11ed2..8b0c810 100644 --- a/gentoobrowse-api/service/maintenanceCommon.cpp +++ b/gentoobrowse-api/service/maintenanceCommon.cpp @@ -9,31 +9,42 @@ namespace Gentoo { namespace Service { - class AutoUpdatePackages : public IceUtil::TimerTask { + class BaseScheduledTask : public IceUtil::TimerTask { public: - AutoUpdatePackages(Ice::CommunicatorPtr i) : ic(i) { } + BaseScheduledTask(Ice::CommunicatorPtr i) : ic(i) + { + } + + protected: + template<typename Proxy> + Proxy getProxy(const std::string & n) const { + auto p = Proxy::checkedCast(ic->stringToProxy(n)); + p->ice_ping(); + return p; + } + + private: + Ice::CommunicatorPtr ic; + }; + + class AutoUpdatePackages : public BaseScheduledTask { + public: + AutoUpdatePackages(Ice::CommunicatorPtr i) : BaseScheduledTask(i) { } void runTimerTask() override { - auto m = MaintenancePrx::checkedCast(ic->stringToProxy("maintenance")); - m->ice_ping(); + auto m = getProxy<MaintenancePrx>("maintenance"); auto rb = m->begin_refreshBugs(); m->updateRepositories(); m->refreshPackageTree(); m->sendNotifications(); m->end_refreshBugs(rb); } - - private: - Ice::CommunicatorPtr ic; }; Maintenance::Maintenance(IceTray::DatabasePoolPtr d, Ice::CommunicatorPtr ic, Ice::PropertiesPtr p) : Maintenance::Maintenance(d) { - if (auto sync = p->getPropertyAsIntWithDefault("GentooBrowseAPI.SyncTime", 0) * 60) { - taskRunner = new IceUtil::Timer(); - taskRunner->scheduleRepeated(new AutoUpdatePackages(ic), IceUtil::Time::seconds(sync)); - } + addTask<AutoUpdatePackages>(ic, p, "SyncTime"); } Maintenance::Maintenance(IceTray::DatabasePoolPtr d) : @@ -48,6 +59,18 @@ namespace Gentoo { } } + template<typename Task> + void + Maintenance::addTask(Ice::CommunicatorPtr ic, Ice::PropertiesPtr p, const std::string & whenCfg) + { + if (auto sync = p->getPropertyAsIntWithDefault("GentooBrowseAPI." + whenCfg, 0) * 60) { + if (!taskRunner) { + taskRunner = new IceUtil::Timer(); + } + taskRunner->scheduleRepeated(new Task(ic), IceUtil::Time::seconds(sync)); + } + } + Ice::PropertiesPtr Maintenance::properties(const Ice::Current & c) { diff --git a/gentoobrowse-api/service/maintenanceimpl.h b/gentoobrowse-api/service/maintenanceimpl.h index 3a442b4..d28b1e6 100644 --- a/gentoobrowse-api/service/maintenanceimpl.h +++ b/gentoobrowse-api/service/maintenanceimpl.h @@ -30,6 +30,8 @@ namespace Gentoo { void applyFileChanges(DB::Connection *, const boost::filesystem::path &, const Repository &, ChangeSet &) const; private: + template<typename Task> + void addTask(Ice::CommunicatorPtr ic, Ice::PropertiesPtr p, const std::string & whenCfg); static Ice::PropertiesPtr properties(const Ice::Current &); |