/** * This method is used to log delayed metrics, if tracking delayed metrics * is turned on for this Blueflood service. * @param tenantid * @param delayedMetrics */ public void trackDelayedMetricsTenant(String tenantid, final List<Metric> delayedMetrics) { if (isTrackingDelayedMetrics) { String logMessage = String.format("[TRACKER][DELAYED METRIC] Tenant sending delayed metrics %s", tenantid); log.info(logMessage); // log individual delayed metrics locator and collectionTime double delayedMinutes; long nowMillis = System.currentTimeMillis(); for (Metric metric : delayedMetrics) { delayedMinutes = (double)(nowMillis - metric.getCollectionTime()) / 1000 / 60; logMessage = String.format("[TRACKER][DELAYED METRIC] %s has collectionTime %s which is delayed by %.2f minutes", metric.getLocator().toString(), dateFormatter.format(new Date(metric.getCollectionTime())), delayedMinutes); log.info(logMessage); } } }
private String getUnit(Metric metric) { return metric.getUnit(); }
@Test public void testJSONMetricsContainerConstruction() throws Exception { // Construct the JSONMetricsContainter from JSON metric objects JSONMetricsContainer jsonMetricsContainer = getContainer( "ac1", generateJSONMetricsData() ); List<Metric> metricsCollection = jsonMetricsContainer.getValidMetrics(); assertTrue( jsonMetricsContainer.getValidationErrors().isEmpty() ); assertTrue( metricsCollection.size() == 2 ); assertEquals( "ac1.mzord.duration", metricsCollection.get( 0 ).getLocator().toString() ); assertEquals( Long.MAX_VALUE, metricsCollection.get( 0 ).getMetricValue() ); assertEquals( 1234566, metricsCollection.get( 0 ).getTtlInSeconds() ); assertTrue( current - metricsCollection.get( 0 ).getCollectionTime() < MINUTE ); assertEquals( "milliseconds", metricsCollection.get( 0 ).getUnit() ); assertEquals( "ac1.mzord.status", metricsCollection.get( 1 ).getLocator().toString() ); assertEquals( 0, metricsCollection.get( 1 ).getMetricValue() ); assertEquals( "unknown", metricsCollection.get( 1 ).getUnit() ); }
protected List<IMetric> createTestMetrics(String tenantId) { Metric metric; List<IMetric> metrics = new ArrayList<>(); List<Locator> locators = createComplexTestLocators(tenantId); for (Locator locator : locators) { metric = new Metric(locator, 123456789L, 0, new TimeValue(1, TimeUnit.DAYS), UNIT); metrics.add(metric); } return metrics; }
private void forceTTLsIfConfigured(List<Metric> containerMetrics) { ConfigTtlProvider configTtlProvider = ConfigTtlProvider.getInstance(); if(configTtlProvider.areTTLsForced()) { for(Metric m : containerMetrics) { m.setTtl(configTtlProvider.getConfigTTLForIngestion()); } } } }
protected void createTestMetrics(String tenantId, Set<String> fullyQualifiedMetricNames) throws Exception { List<IMetric> metrics = new ArrayList<IMetric>(); for (String metricName: fullyQualifiedMetricNames) { metrics.add(new Metric(Locator.createLocatorFromPathComponents(tenantId, metricName), 5647382910L, 0, new TimeValue(1, TimeUnit.DAYS), UNIT)); } createTestMetrics(metrics); }
@Test public void testTrackDelayedAggregatedMetricsTenant() { // enable tracking delayed metrics and track tracker.setIsTrackingDelayedMetrics(); List<String> delayedMetricNames = new ArrayList<String>() {{ for ( Metric metric : delayedMetrics ) { add(metric.getLocator().toString()); } }}; long ingestTime = System.currentTimeMillis(); tracker.trackDelayedAggregatedMetricsTenant(tenantId, delayedMetrics.get(0).getCollectionTime(), ingestTime, delayedMetricNames); // verify verify(loggerMock, atLeastOnce()).info("[TRACKER] Tracking delayed metrics started"); verify(loggerMock, atLeastOnce()).info("[TRACKER][DELAYED METRIC] Tenant sending delayed metrics " + tenantId); verify(loggerMock, atLeastOnce()).info(contains("[TRACKER][DELAYED METRIC] " + tenantId + ".delayed.metric1" + "," + tenantId + ".delayed.metric2 have collectionTime 2016-01-01 00:00:00 which is delayed")); }
@Test public void testDeDupMetrics() throws Exception { // New index name and the locator to be written to it String ES_DUP = ElasticIO.ELASTICSEARCH_INDEX_NAME_WRITE + "_2"; Locator testLocator = createTestLocator(TENANT_A, 0, "A", 0); // Metric is already there in old List<SearchResult> results = elasticIO.search(TENANT_A, testLocator.getMetricName()); assertEquals(results.size(), 1); assertEquals(results.get(0).getMetricName(), testLocator.getMetricName()); // Insert metric into the new index elasticIO.setINDEX_NAME_WRITE(ES_DUP); List<IMetric> metricList = new ArrayList(); metricList.add(new Metric(createTestLocator(TENANT_A, 0, "A", 0), 987654321L, 0, new TimeValue(1, TimeUnit.DAYS), UNIT)); // Calling insertDiscovery with single metric in loop rather than metrics collection to improve on code coverage. for(IMetric metric : metricList){ elasticIO.insertDiscovery(metric); } helper.refreshIndex(ES_DUP); elasticIO.setINDEX_NAME_READ("metric_metadata_read"); results = elasticIO.search(TENANT_A, testLocator.getMetricName()); // Should just be one result assertEquals(results.size(), 1); assertEquals(results.get(0).getMetricName(), testLocator.getMetricName()); elasticIO.setINDEX_NAME_READ(ElasticIOConfig.ELASTICSEARCH_INDEX_NAME_READ.getDefaultValue()); elasticIO.setINDEX_NAME_WRITE(ElasticIOConfig.ELASTICSEARCH_INDEX_NAME_WRITE.getDefaultValue()); }