diff options
author | Christian Mollekopf <chrigi_1@fastmail.fm> | 2016-12-22 18:22:39 +0100 |
---|---|---|
committer | Christian Mollekopf <chrigi_1@fastmail.fm> | 2016-12-22 18:22:39 +0100 |
commit | b2ad8f785e801a35cadf254d827f56d648be510c (patch) | |
tree | 4eeb1e3eefb02c40dac40469c0fae5ad91feb3e3 /common/resourcefacade.cpp | |
parent | 1fe8664ec74165fc3f250098609ea0e049e3adc8 (diff) | |
download | sink-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.cpp | 43 |
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 | ||
87 | template<typename DomainType> | 87 | template<typename DomainType> |
88 | LocalStorageQueryRunner<DomainType>::LocalStorageQueryRunner(const Query &query, const QByteArray &identifier, const QByteArray &typeName, ConfigNotifier &configNotifier) | 88 | LocalStorageQueryRunner<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 | |||
165 | template<typename DomainType> | 165 | template<typename DomainType> |
166 | void LocalStorageQueryRunner<DomainType>::statusChanged(const QByteArray &identifier) | 166 | void 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 | ||
276 | template <typename DomainType> | 276 | template <typename DomainType> |
277 | QPair<KAsync::Job<void>, typename ResultEmitter<typename DomainType::Ptr>::Ptr> LocalStorageFacade<DomainType>::load(const Query &query) | 277 | QPair<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 | ||
297 | QPair<KAsync::Job<void>, typename Sink::ResultEmitter<typename ApplicationDomain::SinkResource::Ptr>::Ptr> ResourceFacade::load(const Sink::Query &query) | 298 | QPair<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 ¬ification) { | 306 | auto ret = QObject::connect(resourceAccess.data(), &ResourceAccess::notification, runner->guard(), [resource, runner, resourceAccess, ctx](const Notification ¬ification) { |
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 | ||
327 | QPair<KAsync::Job<void>, typename Sink::ResultEmitter<typename ApplicationDomain::SinkAccount::Ptr>::Ptr> AccountFacade::load(const Sink::Query &query) | 329 | QPair<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 ¬ification) { | 344 | auto ret = QObject::connect(resourceAccess.data(), &ResourceAccess::notification, runner->guard(), [resource, runner, resourceAccess, accountIdentifier, ctx](const Notification ¬ification) { |
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 | } |