/* * * * 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.client.metadata; import com.axibase.tsd.RerunRule; import com.axibase.tsd.TestUtil; import com.axibase.tsd.client.DataService; import com.axibase.tsd.client.HttpClientManager; import com.axibase.tsd.client.MetaDataService; import com.axibase.tsd.model.data.command.AddSeriesCommand; import com.axibase.tsd.model.data.series.Sample; import com.axibase.tsd.model.data.series.Series; import com.axibase.tsd.model.meta.DataType; import com.axibase.tsd.model.meta.Metric; import com.axibase.tsd.model.meta.TagAppender; import org.junit.After; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import static com.axibase.tsd.TestUtil.*; import static junit.framework.Assert.*; public class MetricTest { private MetaDataService metaDataService; private DataService dataService; private HttpClientManager httpClientManager; @Rule public RerunRule rerunRule = new RerunRule(); @Before public void setUp() throws Exception { httpClientManager = buildHttpClientManager(); metaDataService = new MetaDataService(); metaDataService.setHttpClientManager(httpClientManager); dataService = new DataService(); dataService.setHttpClientManager(httpClientManager); waitWorkingServer(httpClientManager); } @After public void tearDown() { httpClientManager.close(); } @Test public void testRetrieveMetricsByPattern() throws Exception { final String metricQuery = "name like '*'"; final String metricName = buildVariablePrefix(); if (metaDataService.retrieveMetrics(true, "name like '*'", TagAppender.ALL, 1).size() < 1) { assertTrue(metaDataService.createOrReplaceMetric(createNewTestMetric(metricName))); } List metrics = metaDataService.retrieveMetrics(true, metricQuery, TagAppender.ALL, 1); assertTrue(metrics.get(0) instanceof Metric); assertEquals(1, metrics.size()); metrics = metaDataService.retrieveMetrics(metricQuery, (String) null, null, TagAppender.ALL, 1); assertTrue(metrics.get(0) instanceof Metric); assertEquals(1, metrics.size()); } @Test public void testRetrieveMetricByName() throws Exception { final String metricName = buildVariablePrefix(); if (metaDataService.retrieveMetric(metricName) == null) { assertTrue(metaDataService.createOrReplaceMetric(createNewTestMetric(metricName))); } Metric metric = metaDataService.retrieveMetric(metricName); assertNotNull(metric); assertEquals(metric.getName(), metricName); } @Test public void testCreateOrReplaceMetric() throws Exception { final String metricName = buildVariablePrefix(); if (metaDataService.retrieveMetric(metricName) != null) { assertTrue(metaDataService.createOrReplaceMetric(createNewTestMetric(metricName))); } Metric metric = createNewTestMetric(metricName); { metric.setDataType(DataType.DOUBLE); assertTrue(metaDataService.createOrReplaceMetric(metric)); metric = metaDataService.retrieveMetric(metricName); assertEquals(metric.getName(), metricName); assertEquals(metric.getDataType(), DataType.DOUBLE); } { metric.setDataType(DataType.FLOAT); assertTrue(metaDataService.createOrReplaceMetric(metric)); metric = metaDataService.retrieveMetric(metricName); assertEquals(metric.getName(), metricName); assertEquals(metric.getDataType(), DataType.FLOAT); } } @Test public void testCreateAndDeleteMetric() throws Exception { final String metricName = buildVariablePrefix(); Metric metric = createNewTestMetric(metricName); if (metaDataService.retrieveMetric(metricName) != null) { assertTrue(metaDataService.deleteMetric(metric)); } assertNull(metaDataService.retrieveMetric(metricName)); assertTrue(metaDataService.createOrReplaceMetric(metric)); Metric insertedMetric = metaDataService.retrieveMetric(metricName); assertNotNull(insertedMetric); assertEquals(insertedMetric.getName(), metric.getName()); assertEquals(insertedMetric.getTags(), metric.getTags()); assertTrue(metaDataService.deleteMetric(insertedMetric)); assertNull(metaDataService.retrieveMetric(metricName)); } @Test public void testUpdateMetric() throws Exception { final String metricName = buildVariablePrefix(); if (metaDataService.retrieveMetric(metricName) != null) { assertTrue(metaDataService.deleteMetric(createNewTestMetric(metricName))); } assertNull(metaDataService.retrieveMetric(metricName)); Metric metric = createNewTestMetric(metricName); { Map<String, String> defaultTags = new HashMap<>(); defaultTags.put("test-tag1", "test-tag1-val"); defaultTags.put("test-tag2", "test-tag2-val"); metric.setTags(defaultTags); assertTrue(metaDataService.createOrReplaceMetric(metric)); metric = metaDataService.retrieveMetric(metricName); assertNotNull(metric); assertEquals(metric.getName(), metricName); assertEquals(metric.getTags(), defaultTags); assertEquals(metric.getTags().get("test-tag2"), "test-tag2-val"); } { Map<String, String> newTags = new HashMap<>(); newTags.put("test-tag2", "test-tag2-new-val"); newTags.put("test-tag3", "test-tag3-val"); newTags.put("test-tag4", "test-tag4-val"); metric.setTags(newTags); assertTrue(metaDataService.updateMetric(metric)); metric = metaDataService.retrieveMetric(metricName); assertNotNull(metric); assertTrue(metric.getTags().containsKey("test-tag1")); assertTrue(metric.getTags().containsKey("test-tag2")); assertTrue(metric.getTags().containsKey("test-tag3")); assertTrue(metric.getTags().containsKey("test-tag4")); assertEquals(metric.getTags().get("test-tag2"), "test-tag2-new-val"); } } @Test public void testRetrieveMetricsByEntity() throws Exception { final String metricName = buildVariablePrefix() + "metric"; final String entityName = buildVariablePrefix() + "entity"; final Long timestamp = MOCK_TIMESTAMP; if (metaDataService.retrieveMetrics(entityName, (Boolean) null, "name like '*'", null, 1).isEmpty()) { AddSeriesCommand addSeriesCommand = new AddSeriesCommand(entityName, metricName, "test-tag1", "test-tag1-val", "test-tag2", "test-tag2-val"); addSeriesCommand.addSeries(new Sample(timestamp, 1)); assertTrue(dataService.addSeries(addSeriesCommand)); } List metrics = metaDataService.retrieveMetrics(entityName, (Boolean) null, "name like '*'", null, 1); assertEquals(1, metrics.size()); assertTrue(metrics.get(0) instanceof Metric); assertEquals(((Metric) metrics.get(0)).getName(), metricName); metrics = metaDataService.retrieveMetrics(entityName, "name like '*'", (String) null, null, null, null, 1); assertEquals(1, metrics.size()); assertTrue(metrics.get(0) instanceof Metric); assertEquals(((Metric) metrics.get(0)).getName(), metricName); } @Test public void testRetrieveMetricSeries() { String testPrefix = TestUtil.buildVariablePrefix(); Series series = new Series(); series.setMetricName(testPrefix + "-metric"); series.setEntityName(testPrefix + "-entity"); series.setData(Collections.singletonList(new Sample(MOCK_TIMESTAMP, MOCK_SERIE_NUMERIC_VALUE, MOCK_SERIE_TEXT_VALUE))); AddSeriesCommand command = new AddSeriesCommand(series.getEntityName(), series.getMetricName(), null); command.addSeries(series.getData()); dataService.addSeries(command); TestUtil.waitWorkingServer(httpClientManager); List<Series> seriesList = metaDataService.retrieveMetricSeries(series.getMetricName()); String assertMessage = String.format( "Incorrect series list for metric %s", series.getMetricName() ); assertEquals("Incorrect count of series", 1, seriesList.size()); assertEquals(assertMessage, series.getMetricName(), seriesList.get(0).getMetricName()); } }