All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.eclipse.kapua.kura.simulator.app.data.SimplePeriodicGenerator Maven / Gradle / Ivy

/*******************************************************************************
 * Copyright (c) 2017 Red Hat Inc and others.
 *
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *     Red Hat Inc - initial API and implementation
 *******************************************************************************/
package org.eclipse.kapua.kura.simulator.app.data;

import java.time.Instant;
import java.util.HashMap;
import java.util.Map;
import java.util.function.Function;

import org.eclipse.kapua.kura.simulator.app.ApplicationContext;
import org.eclipse.kapua.kura.simulator.app.Sender;
import org.eclipse.kapua.kura.simulator.generator.Generator;
import org.eclipse.kapua.kura.simulator.generator.GeneratorScheduler;
import org.eclipse.kapua.kura.simulator.generator.Payload;
import org.eclipse.kapua.kura.simulator.payload.Metrics;
import org.eclipse.kura.core.message.protobuf.KuraPayloadProto;
import org.eclipse.kura.core.message.protobuf.KuraPayloadProto.KuraPayload.Builder;

public class SimplePeriodicGenerator extends AbstractSingleTopicPeriodicGenerator {

    private final Generator generator;

    public SimplePeriodicGenerator(final ApplicationContext context, final GeneratorScheduler scheduler, final String dataTopic, final Generator generator) {
        super(context, scheduler, dataTopic);
        this.generator = generator;
    }

    public SimplePeriodicGenerator(final ApplicationContext context, final GeneratorScheduler scheduler, final String dataTopic, final Map> generators) {
        super(context, scheduler, dataTopic);
        this.generator = timestamp -> new Payload(generateMetrics(timestamp, generators));
    }

    @Override
    protected void update(final Instant timestamp, final Sender sender) {
        final Payload payload = this.generator.update(timestamp);

        if (payload == null) {
            return;
        }

        final Builder builder = KuraPayloadProto.KuraPayload.newBuilder();
        Metrics.buildPayload(builder, payload);
        builder.setTimestamp(timestamp.toEpochMilli());
        sender.send(builder);
    }

    protected static Map generateMetrics(final Instant timestamp, final Map> generators) {
        final Map result = new HashMap<>(generators.size());

        for (final Map.Entry> entry : generators.entrySet()) {
            result.put(entry.getKey(), entry.getValue().apply(timestamp));
        }

        return result;
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy