diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/ingestor.cpp | 14 | ||||
| -rw-r--r-- | src/ingestor.hpp | 2 | ||||
| -rw-r--r-- | src/logTypes.hpp | 9 |
3 files changed, 16 insertions, 9 deletions
diff --git a/src/ingestor.cpp b/src/ingestor.cpp index 41dd24f..ebff00b 100644 --- a/src/ingestor.cpp +++ b/src/ingestor.cpp @@ -53,9 +53,11 @@ namespace WebStat { operator()(const std::string_view value) const { return { - .hash = makeHash(value), + .key = { + .hash = makeHash(value), + .type = Type, + }, .id = std::nullopt, - .type = Type, .value = value, }; } @@ -331,7 +333,7 @@ namespace WebStat { } constexpr auto ENTITY_IDS = std::views::transform([](auto && value) { - return std::make_pair(value->hash, *value->id); + return std::tie(value->key, *value->id); }); Ingestor::Job::Result @@ -610,7 +612,7 @@ namespace WebStat { { auto lockedEntities = existingEntities.shared(); for (const auto entity : entities) { - if (auto existing = lockedEntities->find(entity->hash); existing != lockedEntities->end()) { + if (auto existing = lockedEntities->find(entity->key); existing != lockedEntities->end()) { entity->id = existing->second; } } @@ -644,7 +646,7 @@ namespace WebStat { }}; assert(!entity.id); - const auto & [typeName, onInsert] = ENTITY_TYPE_VALUES[std::to_underlying(entity.type)]; + const auto & [typeName, onInsert] = ENTITY_TYPE_VALUES[std::to_underlying(entity.key.type)]; bool entityNullDetail = true; std::tie(entity.id, entityNullDetail) = insert<EntityId, bool>(dbconn, SQL::ENTITY_INSERT, SQL::ENTITY_INSERT_OPTS, entity.value, typeName); @@ -671,7 +673,7 @@ namespace WebStat { void Ingestor::onNewUserAgent(const Entity & entity) const { - const auto & [entityHash, entityId, type, value] = entity; + const auto & [_, entityId, value] = entity; auto curlOp = curlGetUserAgentDetail(*entityId, value, settings.userAgentAPI.c_str()); { std::lock_guard curlOperationsLock {curlOperationsMutex}; diff --git a/src/ingestor.hpp b/src/ingestor.hpp index e250072..7082dc0 100644 --- a/src/ingestor.hpp +++ b/src/ingestor.hpp @@ -101,7 +101,7 @@ namespace WebStat { DB::ConnectionPoolPtr dbpool; mutable Stats stats {}; - ThreadSafeT<std::map<EntityHash, EntityId>> existingEntities; + ThreadSafeT<std::map<EntityKey, EntityId>> existingEntities; LineBatch queuedLines, processingLines; bool terminated = false; diff --git a/src/logTypes.hpp b/src/logTypes.hpp index 7f0473e..d1bda3f 100644 --- a/src/logTypes.hpp +++ b/src/logTypes.hpp @@ -38,10 +38,15 @@ namespace WebStat { using EntityId = int32_t; using EntityHash = std::array<uint8_t, MD5_DIGEST_LENGTH>; - struct Entity { + struct EntityKey { EntityHash hash; - std::optional<EntityId> id; EntityType type; + constexpr auto operator<=>(const EntityKey &) const noexcept = default; + }; + + struct Entity { + EntityKey key; + std::optional<EntityId> id; std::string_view value; }; } |
