Atomatically reload recommendation engines
This commit is contained in:
@@ -148,7 +148,7 @@ Engine::reload()
|
|||||||
{
|
{
|
||||||
using namespace Database;
|
using namespace Database;
|
||||||
|
|
||||||
LMS_LOG(RECOMMENDATION, DEBUG) << "Reloading recommendation engines...";
|
LMS_LOG(RECOMMENDATION, INFO) << "Reloading recommendation engines...";
|
||||||
|
|
||||||
const ScanSettings::RecommendationEngineType engineType {[&]()
|
const ScanSettings::RecommendationEngineType engineType {[&]()
|
||||||
{
|
{
|
||||||
@@ -157,21 +157,25 @@ Engine::reload()
|
|||||||
return ScanSettings::get(_dbSession)->getRecommendationEngineType();
|
return ScanSettings::get(_dbSession)->getRecommendationEngineType();
|
||||||
}()};
|
}()};
|
||||||
|
|
||||||
// TODO: just replace the classifier once it is ready
|
std::map<ClassifierPriority, std::unique_ptr<IClassifier>> newClassifiers;
|
||||||
clearClassifiers();
|
|
||||||
|
|
||||||
switch (engineType)
|
switch (engineType)
|
||||||
{
|
{
|
||||||
case ScanSettings::RecommendationEngineType::Features:
|
case ScanSettings::RecommendationEngineType::Features:
|
||||||
// addClassifier(createFeaturesClassifier(), 0); // higher priority
|
// newClassifiers.emplace_back(0, createFeaturesClassifier()); // higher priority
|
||||||
// [[fallthrough]];
|
// [[fallthrough]];
|
||||||
|
|
||||||
case ScanSettings::RecommendationEngineType::Clusters:
|
case ScanSettings::RecommendationEngineType::Clusters:
|
||||||
addClassifier(createClustersClassifier(_dbSession), 1); // lower priority
|
newClassifiers.emplace(1, createClustersClassifier(_dbSession)); // lower priority
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
LMS_LOG(RECOMMENDATION, DEBUG) << "Recommendation engines reloaded!";
|
{
|
||||||
|
std::unique_lock lock {_classifiersMutex};
|
||||||
|
_classifiers.swap(newClassifiers);
|
||||||
|
}
|
||||||
|
|
||||||
|
LMS_LOG(RECOMMENDATION, INFO) << "Recommendation engines reloaded!";
|
||||||
|
|
||||||
_sigReloaded.emit();
|
_sigReloaded.emit();
|
||||||
}
|
}
|
||||||
@@ -180,9 +184,6 @@ Engine::reload()
|
|||||||
void
|
void
|
||||||
Engine::clearClassifiers()
|
Engine::clearClassifiers()
|
||||||
{
|
{
|
||||||
std::unique_lock lock {_classifiersMutex};
|
|
||||||
|
|
||||||
_classifiers.clear();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|||||||
@@ -37,6 +37,8 @@ namespace Recommendation
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
using ClassifierPriority = unsigned;
|
||||||
|
|
||||||
void start() override;
|
void start() override;
|
||||||
void stop() override;
|
void stop() override;
|
||||||
|
|
||||||
@@ -59,7 +61,7 @@ namespace Recommendation
|
|||||||
Wt::Signal<> _sigReloaded;
|
Wt::Signal<> _sigReloaded;
|
||||||
|
|
||||||
std::shared_mutex _classifiersMutex;
|
std::shared_mutex _classifiersMutex;
|
||||||
std::map<unsigned, std::unique_ptr<IClassifier>> _classifiers;
|
std::map<ClassifierPriority, std::unique_ptr<IClassifier>> _classifiers;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // ns Recommendation
|
} // ns Recommendation
|
||||||
|
|||||||
Reference in New Issue
Block a user