/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package gobblin.metrics.influxdb; import gobblin.metrics.test.TimestampedValue; import java.util.List; import java.util.Map; import java.util.concurrent.TimeUnit; import org.influxdb.InfluxDB; import org.influxdb.dto.BatchPoints; import org.influxdb.dto.Point; import org.influxdb.dto.Pong; import org.influxdb.dto.Query; import org.influxdb.dto.QueryResult; import com.google.common.collect.Maps; /** * A test implementation of {@link org.influxdb.InfluxDB}. * * @author Lorand Bendig * */ public class TestInfluxDB implements InfluxDB { private final Map<String, TimestampedValue> data = Maps.newHashMap(); @Override public InfluxDB setLogLevel(LogLevel logLevel) { // Nothing to do return this; } @Override public InfluxDB enableBatch(int actions, int flushDuration, TimeUnit flushDurationTimeUnit) { // Nothing to do return this; } @Override public void disableBatch() { // Nothing to do } @Override public Pong ping() { // Nothing to do return null; } @Override public String version() { // Nothing to do return null; } @Override public void write(String database, String retentionPolicy, Point point) { BatchPoints batchPoints = BatchPoints.database(database).retentionPolicy(retentionPolicy).build(); batchPoints.point(point); this.write(batchPoints); } @Override public void write(BatchPoints batchPoints) { for (Point point : batchPoints.getPoints()) { write(point.lineProtocol()); } } @Override public QueryResult query(Query query) { // Nothing to do return null; } @Override public QueryResult query(Query query, TimeUnit timeUnit) { // Nothing to do return null; } @Override public void createDatabase(String name) { // Nothing to do } @Override public void deleteDatabase(String name) { // Nothing to do } @Override public List<String> describeDatabases() { // Nothing to do return null; } @Override public void setConnectTimeout(long connectTimeout, TimeUnit timeUnit) { // Nothing to do } @Override public void setReadTimeout(long readTimeout, TimeUnit timeUnit) { // Nothing to do } @Override public void setWriteTimeout(long writeTimeout, TimeUnit timeUnit) { // Nothing to do } /** * Get a metric with a given name. * * @param name metric name * @return a {@link gobblin.metrics.TimestampedValue} */ public TimestampedValue getMetric(String name) { return this.data.get(name); } private void write(String lineProtocol) { String[] split = lineProtocol.split(" "); String key = split[0]; String value = split[1].substring(split[1].indexOf('=') + 1, split[1].length()); long timestamp = Long.valueOf(split[2]) / 1000000l; data.put(key, new TimestampedValue(timestamp, value)); } }