2  * ============LICENSE_START=======================================================
 
   3  * dcaegen2-collectors-veshv
 
   4  * ================================================================================
 
   5  * Copyright (C) 2018-2019 NOKIA
 
   6  * ================================================================================
 
   7  * Licensed under the Apache License, Version 2.0 (the "License");
 
   8  * you may not use this file except in compliance with the License.
 
   9  * You may obtain a copy of the License at
 
  11  *      http://www.apache.org/licenses/LICENSE-2.0
 
  13  * Unless required by applicable law or agreed to in writing, software
 
  14  * distributed under the License is distributed on an "AS IS" BASIS,
 
  15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 
  16  * See the License for the specific language governing permissions and
 
  17  * limitations under the License.
 
  18  * ============LICENSE_END=========================================================
 
  20 package org.onap.dcae.collectors.veshv.simulators.dcaeapp.impl
 
  22 import org.onap.dcae.collectors.veshv.simulators.dcaeapp.impl.adapters.KafkaSource
 
  23 import org.onap.dcae.collectors.veshv.utils.logging.Logger
 
  24 import reactor.kafka.receiver.ReceiverRecord
 
  25 import java.util.concurrent.ConcurrentLinkedQueue
 
  28  * @author Piotr Jaszczyk <piotr.jaszczyk@nokia.com>
 
  31 class ConsumerState(private val messages: ConcurrentLinkedQueue<ByteArray>) {
 
  32     val messagesCount: Int by lazy {
 
  36     val consumedMessages: List<ByteArray> by lazy {
 
  41 interface ConsumerStateProvider {
 
  42     fun currentState(): ConsumerState
 
  46 class Consumer : ConsumerStateProvider {
 
  48     private var consumedMessages: ConcurrentLinkedQueue<ByteArray> = ConcurrentLinkedQueue()
 
  50     override fun currentState(): ConsumerState = ConsumerState(consumedMessages)
 
  52     override fun reset() = consumedMessages.clear()
 
  54     fun update(record: ReceiverRecord<ByteArray, ByteArray>) {
 
  55         logger.trace { "Updating stats for message from ${record.topic()}:${record.partition()}" }
 
  56         consumedMessages.add(record.value())
 
  60         private val logger = Logger(Consumer::class)
 
  64 class ConsumerFactory(private val kafkaBootstrapServers: String) {
 
  65     fun createConsumerForTopics(kafkaTopics: Set<String>): Consumer =
 
  66             KafkaSource.create(kafkaBootstrapServers, kafkaTopics.toSet()).start()