summaryrefslogtreecommitdiffstats
path: root/common/resourcefacade.cpp
diff options
context:
space:
mode:
authorChristian Mollekopf <chrigi_1@fastmail.fm>2016-12-22 18:22:39 +0100
committerChristian Mollekopf <chrigi_1@fastmail.fm>2016-12-22 18:22:39 +0100
commitb2ad8f785e801a35cadf254d827f56d648be510c (patch)
tree4eeb1e3eefb02c40dac40469c0fae5ad91feb3e3 /common/resourcefacade.cpp
parent1fe8664ec74165fc3f250098609ea0e049e3adc8 (diff)
downloadsink-b2ad8f785e801a35cadf254d827f56d648be510c.tar.gz
sink-b2ad8f785e801a35cadf254d827f56d648be510c.zip
Introduced Log::Context
To have hierarchical debug output we have to pass around something at run-time, there is no reasonable alternative. Log::Context provides the identifier to do just that and largely replaces the debug component idea.
Diffstat (limited to 'common/resourcefacade.cpp')
-rw-r--r--common/resourcefacade.cpp43
1 files changed, 23 insertions, 20 deletions
diff --git a/common/resourcefacade.cpp b/common/resourcefacade.cpp
index 861d37a..1c6b0c8 100644
--- a/common/resourcefacade.cpp
+++ b/common/resourcefacade.cpp
@@ -85,8 +85,8 @@ static bool matchesFilter(const QHash<QByteArray, Query::Comparator> &filter, co
85} 85}
86 86
87template<typename DomainType> 87template<typename DomainType>
88LocalStorageQueryRunner<DomainType>::LocalStorageQueryRunner(const Query &query, const QByteArray &identifier, const QByteArray &typeName, ConfigNotifier &configNotifier) 88LocalStorageQueryRunner<DomainType>::LocalStorageQueryRunner(const Query &query, const QByteArray &identifier, const QByteArray &typeName, ConfigNotifier &configNotifier, const Sink::Log::Context &ctx)
89 : mResultProvider(new ResultProvider<typename DomainType::Ptr>), mConfigStore(identifier, typeName), mGuard(new QObject) 89 : mResultProvider(new ResultProvider<typename DomainType::Ptr>), mConfigStore(identifier, typeName), mGuard(new QObject), mLogCtx(ctx.subContext("config"))
90{ 90{
91 QObject *guard = new QObject; 91 QObject *guard = new QObject;
92 mResultProvider->setFetcher([this, query, guard, &configNotifier](const QSharedPointer<DomainType> &) { 92 mResultProvider->setFetcher([this, query, guard, &configNotifier](const QSharedPointer<DomainType> &) {
@@ -95,7 +95,7 @@ LocalStorageQueryRunner<DomainType>::LocalStorageQueryRunner(const Query &query,
95 const auto type = entries.value(res); 95 const auto type = entries.value(res);
96 96
97 if (query.hasFilter(ApplicationDomain::SinkResource::ResourceType::name) && query.getFilter(ApplicationDomain::SinkResource::ResourceType::name).value.toByteArray() != type) { 97 if (query.hasFilter(ApplicationDomain::SinkResource::ResourceType::name) && query.getFilter(ApplicationDomain::SinkResource::ResourceType::name).value.toByteArray() != type) {
98 SinkTrace() << "Skipping due to type."; 98 SinkTraceCtx(mLogCtx) << "Skipping due to type.";
99 continue; 99 continue;
100 } 100 }
101 if (!query.ids().isEmpty() && !query.ids().contains(res)) { 101 if (!query.ids().isEmpty() && !query.ids().contains(res)) {
@@ -103,10 +103,10 @@ LocalStorageQueryRunner<DomainType>::LocalStorageQueryRunner(const Query &query,
103 } 103 }
104 auto entity = readFromConfig<DomainType>(mConfigStore, res, type); 104 auto entity = readFromConfig<DomainType>(mConfigStore, res, type);
105 if (!matchesFilter(query.getBaseFilters(), *entity)){ 105 if (!matchesFilter(query.getBaseFilters(), *entity)){
106 SinkTrace() << "Skipping due to filter." << res; 106 SinkTraceCtx(mLogCtx) << "Skipping due to filter." << res;
107 continue; 107 continue;
108 } 108 }
109 SinkTrace() << "Found match " << res; 109 SinkTraceCtx(mLogCtx) << "Found match " << res;
110 updateStatus(*entity); 110 updateStatus(*entity);
111 mResultProvider->add(entity); 111 mResultProvider->add(entity);
112 } 112 }
@@ -118,7 +118,7 @@ LocalStorageQueryRunner<DomainType>::LocalStorageQueryRunner(const Query &query,
118 { 118 {
119 auto ret = QObject::connect(&configNotifier, &ConfigNotifier::added, guard, [this](const ApplicationDomain::ApplicationDomainType::Ptr &entry) { 119 auto ret = QObject::connect(&configNotifier, &ConfigNotifier::added, guard, [this](const ApplicationDomain::ApplicationDomainType::Ptr &entry) {
120 auto entity = entry.staticCast<DomainType>(); 120 auto entity = entry.staticCast<DomainType>();
121 SinkTrace() << "A new resource has been added: " << entity->identifier(); 121 SinkTraceCtx(mLogCtx) << "A new resource has been added: " << entity->identifier();
122 updateStatus(*entity); 122 updateStatus(*entity);
123 mResultProvider->add(entity); 123 mResultProvider->add(entity);
124 }); 124 });
@@ -165,7 +165,7 @@ void LocalStorageQueryRunner<DomainType>::setStatusUpdater(const std::function<v
165template<typename DomainType> 165template<typename DomainType>
166void LocalStorageQueryRunner<DomainType>::statusChanged(const QByteArray &identifier) 166void LocalStorageQueryRunner<DomainType>::statusChanged(const QByteArray &identifier)
167{ 167{
168 SinkTrace() << "Status changed " << identifier; 168 SinkTraceCtx(mLogCtx) << "Status changed " << identifier;
169 auto entity = readFromConfig<DomainType>(mConfigStore, identifier, ApplicationDomain::getTypeName<DomainType>()); 169 auto entity = readFromConfig<DomainType>(mConfigStore, identifier, ApplicationDomain::getTypeName<DomainType>());
170 updateStatus(*entity); 170 updateStatus(*entity);
171 mResultProvider->modify(entity); 171 mResultProvider->modify(entity);
@@ -274,9 +274,10 @@ KAsync::Job<void> LocalStorageFacade<DomainType>::remove(const DomainType &domai
274} 274}
275 275
276template <typename DomainType> 276template <typename DomainType>
277QPair<KAsync::Job<void>, typename ResultEmitter<typename DomainType::Ptr>::Ptr> LocalStorageFacade<DomainType>::load(const Query &query) 277QPair<KAsync::Job<void>, typename ResultEmitter<typename DomainType::Ptr>::Ptr> LocalStorageFacade<DomainType>::load(const Query &query, const Sink::Log::Context &parentCtx)
278{ 278{
279 auto runner = new LocalStorageQueryRunner<DomainType>(query, mIdentifier, mTypeName, sConfigNotifier); 279 auto ctx = parentCtx.subContext(ApplicationDomain::getTypeName<DomainType>());
280 auto runner = new LocalStorageQueryRunner<DomainType>(query, mIdentifier, mTypeName, sConfigNotifier, ctx);
280 return qMakePair(KAsync::null<void>(), runner->emitter()); 281 return qMakePair(KAsync::null<void>(), runner->emitter());
281} 282}
282 283
@@ -294,15 +295,16 @@ KAsync::Job<void> ResourceFacade::remove(const Sink::ApplicationDomain::SinkReso
294 return Sink::Store::removeDataFromDisk(identifier).then(LocalStorageFacade<Sink::ApplicationDomain::SinkResource>::remove(resource)); 295 return Sink::Store::removeDataFromDisk(identifier).then(LocalStorageFacade<Sink::ApplicationDomain::SinkResource>::remove(resource));
295} 296}
296 297
297QPair<KAsync::Job<void>, typename Sink::ResultEmitter<typename ApplicationDomain::SinkResource::Ptr>::Ptr> ResourceFacade::load(const Sink::Query &query) 298QPair<KAsync::Job<void>, typename Sink::ResultEmitter<typename ApplicationDomain::SinkResource::Ptr>::Ptr> ResourceFacade::load(const Sink::Query &query, const Sink::Log::Context &parentCtx)
298{ 299{
299 auto runner = new LocalStorageQueryRunner<ApplicationDomain::SinkResource>(query, mIdentifier, mTypeName, sConfigNotifier); 300 auto ctx = parentCtx.subContext("resource");
301 auto runner = new LocalStorageQueryRunner<ApplicationDomain::SinkResource>(query, mIdentifier, mTypeName, sConfigNotifier, ctx);
300 auto monitoredResources = QSharedPointer<QSet<QByteArray>>::create(); 302 auto monitoredResources = QSharedPointer<QSet<QByteArray>>::create();
301 runner->setStatusUpdater([runner, monitoredResources](ApplicationDomain::SinkResource &resource) { 303 runner->setStatusUpdater([runner, monitoredResources, ctx](ApplicationDomain::SinkResource &resource) {
302 auto resourceAccess = ResourceAccessFactory::instance().getAccess(resource.identifier(), ResourceConfig::getResourceType(resource.identifier())); 304 auto resourceAccess = ResourceAccessFactory::instance().getAccess(resource.identifier(), ResourceConfig::getResourceType(resource.identifier()));
303 if (!monitoredResources->contains(resource.identifier())) { 305 if (!monitoredResources->contains(resource.identifier())) {
304 auto ret = QObject::connect(resourceAccess.data(), &ResourceAccess::notification, runner->guard(), [resource, runner, resourceAccess](const Notification &notification) { 306 auto ret = QObject::connect(resourceAccess.data(), &ResourceAccess::notification, runner->guard(), [resource, runner, resourceAccess, ctx](const Notification &notification) {
305 SinkTrace() << "Received notification in facade: " << notification.type; 307 SinkTraceCtx(ctx) << "Received notification in facade: " << notification.type;
306 if (notification.type == Notification::Status) { 308 if (notification.type == Notification::Status) {
307 runner->statusChanged(resource.identifier()); 309 runner->statusChanged(resource.identifier());
308 } 310 }
@@ -324,22 +326,23 @@ AccountFacade::~AccountFacade()
324{ 326{
325} 327}
326 328
327QPair<KAsync::Job<void>, typename Sink::ResultEmitter<typename ApplicationDomain::SinkAccount::Ptr>::Ptr> AccountFacade::load(const Sink::Query &query) 329QPair<KAsync::Job<void>, typename Sink::ResultEmitter<typename ApplicationDomain::SinkAccount::Ptr>::Ptr> AccountFacade::load(const Sink::Query &query, const Sink::Log::Context &parentCtx)
328{ 330{
329 auto runner = new LocalStorageQueryRunner<ApplicationDomain::SinkAccount>(query, mIdentifier, mTypeName, sConfigNotifier); 331 auto ctx = parentCtx.subContext("accounts");
332 auto runner = new LocalStorageQueryRunner<ApplicationDomain::SinkAccount>(query, mIdentifier, mTypeName, sConfigNotifier, ctx);
330 auto monitoredResources = QSharedPointer<QSet<QByteArray>>::create(); 333 auto monitoredResources = QSharedPointer<QSet<QByteArray>>::create();
331 runner->setStatusUpdater([runner, monitoredResources](ApplicationDomain::SinkAccount &account) { 334 runner->setStatusUpdater([runner, monitoredResources, ctx](ApplicationDomain::SinkAccount &account) {
332 Query query; 335 Query query;
333 query.filter<ApplicationDomain::SinkResource::Account>(account.identifier()); 336 query.filter<ApplicationDomain::SinkResource::Account>(account.identifier());
334 const auto resources = Store::read<ApplicationDomain::SinkResource>(query); 337 const auto resources = Store::read<ApplicationDomain::SinkResource>(query);
335 SinkTrace() << "Found resource belonging to the account " << account.identifier() << " : " << resources; 338 SinkTraceCtx(ctx) << "Found resource belonging to the account " << account.identifier() << " : " << resources;
336 auto accountIdentifier = account.identifier(); 339 auto accountIdentifier = account.identifier();
337 ApplicationDomain::Status status = ApplicationDomain::ConnectedStatus; 340 ApplicationDomain::Status status = ApplicationDomain::ConnectedStatus;
338 for (const auto &resource : resources) { 341 for (const auto &resource : resources) {
339 auto resourceAccess = ResourceAccessFactory::instance().getAccess(resource.identifier(), ResourceConfig::getResourceType(resource.identifier())); 342 auto resourceAccess = ResourceAccessFactory::instance().getAccess(resource.identifier(), ResourceConfig::getResourceType(resource.identifier()));
340 if (!monitoredResources->contains(resource.identifier())) { 343 if (!monitoredResources->contains(resource.identifier())) {
341 auto ret = QObject::connect(resourceAccess.data(), &ResourceAccess::notification, runner->guard(), [resource, runner, resourceAccess, accountIdentifier](const Notification &notification) { 344 auto ret = QObject::connect(resourceAccess.data(), &ResourceAccess::notification, runner->guard(), [resource, runner, resourceAccess, accountIdentifier, ctx](const Notification &notification) {
342 SinkTrace() << "Received notification in facade: " << notification.type; 345 SinkTraceCtx(ctx) << "Received notification in facade: " << notification.type;
343 if (notification.type == Notification::Status) { 346 if (notification.type == Notification::Status) {
344 runner->statusChanged(accountIdentifier); 347 runner->statusChanged(accountIdentifier);
345 } 348 }