/*
* Copyright 2016 Axibase Corporation or its affiliates. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License").
* You may not use this file except in compliance with the License.
* A copy of the License is located at
*
* https://www.axibase.com/atsd/axibase-apache-2.0.pdf
*
* or in the "license" file accompanying this file. This file 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 com.axibase.tsd;
import com.axibase.tsd.client.ClientConfigurationFactory;
import com.axibase.tsd.client.HttpClientManager;
import com.axibase.tsd.model.meta.DataType;
import com.axibase.tsd.model.meta.Metric;
import com.axibase.tsd.model.meta.TimePrecision;
import com.axibase.tsd.model.system.ClientConfiguration;
import com.axibase.tsd.util.AtsdUtil;
import com.fasterxml.jackson.databind.util.ISO8601Utils;
import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
import javax.ws.rs.core.MultivaluedHashMap;
import javax.ws.rs.core.MultivaluedMap;
import java.text.ParseException;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;
/**
* @author Nikolay Malevanny.
*/
public class TestUtil {
public static final String ALERTS_METRIC = "alerts-metric";
public static final Long MOCK_TIMESTAMP = 1456489150000L;
public static final Long MOCK_TIMESTAMP_DELTA = 60L;
public static final Double MOCK_SERIE_NUMERIC_VALUE = 1d;
public static final String MOCK_SERIE_TEXT_VALUE = "txt1";
public static final String MIN_QUERIED_DATE_TIME = "1000-01-01T00:00:00.000Z";
public static final String MAX_QUERIED_DATE_TIME = "9999-12-31T23:59:59.999Z";
public static final int WAIT_TIME = 1800;
public static final int RERUN_COUNT = 3;
public static final int MAX_PING_TRIES = 77;
// To overwrite client properties use Maven properties like:
// -DargLine="-Daxibase.tsd.api.server.name=10.100.10.5 -Daxibase.tsd.api.server.port=8888"
public static HttpClientManager buildHttpClientManager() {
// Use -Daxibase.tsd.api.client.properties=<filename> to change default properties file name
ClientConfigurationFactory configurationFactory = ClientConfigurationFactory.createInstance();
ClientConfiguration clientConfiguration = configurationFactory.createClientConfiguration();
HttpClientManager httpClientManager = new HttpClientManager();
httpClientManager.setClientConfiguration(clientConfiguration);
GenericObjectPoolConfig objectPoolConfig = new GenericObjectPoolConfig();
objectPoolConfig.setMaxTotal(100);
objectPoolConfig.setMaxIdle(100);
httpClientManager.setObjectPoolConfig(objectPoolConfig);
httpClientManager.setBorrowMaxWaitMillis(10000);
return httpClientManager;
}
public static MultivaluedMap<String, String> toMVM(String... tagNamesAndValues) {
return new MultivaluedHashMap<>(AtsdUtil.toMap(tagNamesAndValues));
}
public static void waitWorkingServer(HttpClientManager httpClientManager) {
for (int i = 0; i < MAX_PING_TRIES; i++) {
if (httpClientManager.canSendPlainCommand()) {
return;
} else {
try {
Thread.sleep(WAIT_TIME);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public static Metric createNewTestMetric(String metricName) {
return new Metric()
.setName(metricName)
.setDataType(DataType.INTEGER)
.setDescription("test")
.setEnabled(false)
.setMaxValue(1D)
.setMinValue(3D)
.buildTags(
"nnn-tag-1", "nnn-tag-value-1",
"nnn-tag-2", "nnn-tag-value-2"
)
.setTimePrecision(TimePrecision.SECONDS);
}
public static String buildVariablePrefix() {
String methodName = Thread.currentThread().getStackTrace()[2].getMethodName();
StringBuilder prefix = new StringBuilder();
for (int i = 0; i < methodName.length(); i++) {
Character ch = methodName.charAt(i);
if (Character.isUpperCase(ch)) {
prefix.append("-");
}
prefix.append(Character.toLowerCase(ch));
}
prefix.append(":tst-");
return prefix.toString();
}
public static String isoFormat(Date date) {
return isoFormat(date, true, "UTC");
}
public static String isoFormat(long t) {
return isoFormat(new Date(t));
}
public static String isoFormat(long t, boolean withMillis, String timeZoneName) {
return isoFormat(new Date(t), withMillis, timeZoneName);
}
public static String isoFormat(Date date, boolean withMillis, String timeZoneName) {
String pattern = (withMillis) ? "yyyy-MM-dd'T'HH:mm:ss.SSSXXX" : "yyyy-MM-dd'T'HH:mm:ssXXX";
SimpleDateFormat dateFormat = new SimpleDateFormat(pattern);
dateFormat.setTimeZone(TimeZone.getTimeZone(timeZoneName));
return dateFormat.format(date);
}
public static Date parseDate(String date) {
Date d = null;
try {
d = ISO8601Utils.parse(date, new ParsePosition(0));
} catch (ParseException e) {
throw new IllegalStateException(e);
}
return d;
}
}