Java源码示例:com.amazonaws.services.cloudwatch.model.ListMetricsRequest
示例1
/**
* Attempts to push the supplied predicate constraints onto the Cloudwatch Metrics request.
*/
protected static void pushDownPredicate(Constraints constraints, ListMetricsRequest listMetricsRequest)
{
Map<String, ValueSet> summary = constraints.getSummary();
ValueSet namespaceConstraint = summary.get(NAMESPACE_FIELD);
if (namespaceConstraint != null && namespaceConstraint.isSingleValue()) {
listMetricsRequest.setNamespace(namespaceConstraint.getSingleValue().toString());
}
ValueSet metricConstraint = summary.get(METRIC_NAME_FIELD);
if (metricConstraint != null && metricConstraint.isSingleValue()) {
listMetricsRequest.setMetricName(metricConstraint.getSingleValue().toString());
}
ValueSet dimensionNameConstraint = summary.get(DIMENSION_NAME_FIELD);
ValueSet dimensionValueConstraint = summary.get(DIMENSION_VALUE_FIELD);
if (dimensionNameConstraint != null && dimensionNameConstraint.isSingleValue() &&
dimensionValueConstraint != null && dimensionValueConstraint.isSingleValue()) {
DimensionFilter filter = new DimensionFilter()
.withName(dimensionNameConstraint.getSingleValue().toString())
.withValue(dimensionValueConstraint.getSingleValue().toString());
listMetricsRequest.setDimensions(Collections.singletonList(filter));
}
}
示例2
@Test
public void pushDownPredicate()
{
Map<String, ValueSet> constraintsMap = new HashMap<>();
constraintsMap.put(NAMESPACE_FIELD, makeStringEquals(allocator, "match1"));
constraintsMap.put(METRIC_NAME_FIELD, makeStringEquals(allocator, "match2"));
constraintsMap.put(STATISTIC_FIELD, makeStringEquals(allocator, "match3"));
constraintsMap.put(DIMENSION_NAME_FIELD, makeStringEquals(allocator, "match4"));
constraintsMap.put(DIMENSION_VALUE_FIELD, makeStringEquals(allocator, "match5"));
ListMetricsRequest request = new ListMetricsRequest();
MetricUtils.pushDownPredicate(new Constraints(constraintsMap), request);
assertEquals("match1", request.getNamespace());
assertEquals("match2", request.getMetricName());
assertEquals(1, request.getDimensions().size());
assertEquals(new DimensionFilter().withName("match4").withValue("match5"), request.getDimensions().get(0));
}
示例3
public boolean matches(Object o) {
ListMetricsRequest request = (ListMetricsRequest) o;
if (request == null) return false;
if (namespace != null && !namespace.equals(request.getNamespace())){
return false;
}
if (metricName != null && !metricName.equals(request.getMetricName())){
return false;
}
if (nextToken == null ^ request.getNextToken() == null) {
return false;
}
if (nextToken != null && !nextToken.equals(request.getNextToken())) {
return false;
}
if (!dimensions.equals(request.getDimensions())) {
return false;
}
return true;
}
示例4
@Test
public void testDimensions() throws Exception {
new CloudWatchCollector(
"---\nregion: reg\nmetrics:\n- aws_namespace: AWS/ELB\n aws_metric_name: RequestCount\n aws_dimensions:\n - AvailabilityZone\n - LoadBalancerName", cloudWatchClient, taggingClient).register(registry);
Mockito.when(cloudWatchClient.listMetrics((ListMetricsRequest)argThat(
new ListMetricsRequestMatcher().Namespace("AWS/ELB").MetricName("RequestCount").Dimensions("AvailabilityZone", "LoadBalancerName"))))
.thenReturn(new ListMetricsResult().withMetrics(
new Metric().withDimensions(new Dimension().withName("AvailabilityZone").withValue("a"), new Dimension().withName("LoadBalancerName").withValue("myLB")),
new Metric().withDimensions(new Dimension().withName("AvailabilityZone").withValue("a"), new Dimension().withName("LoadBalancerName").withValue("myLB"), new Dimension().withName("ThisExtraDimensionIsIgnored").withValue("dummy")),
new Metric().withDimensions(new Dimension().withName("AvailabilityZone").withValue("b"), new Dimension().withName("LoadBalancerName").withValue("myOtherLB"))));
Mockito.when(cloudWatchClient.getMetricStatistics((GetMetricStatisticsRequest)argThat(
new GetMetricStatisticsRequestMatcher().Namespace("AWS/ELB").MetricName("RequestCount").Dimension("AvailabilityZone", "a").Dimension("LoadBalancerName", "myLB"))))
.thenReturn(new GetMetricStatisticsResult().withDatapoints(
new Datapoint().withTimestamp(new Date()).withAverage(2.0)));
Mockito.when(cloudWatchClient.getMetricStatistics((GetMetricStatisticsRequest)argThat(
new GetMetricStatisticsRequestMatcher().Namespace("AWS/ELB").MetricName("RequestCount").Dimension("AvailabilityZone", "b").Dimension("LoadBalancerName", "myOtherLB"))))
.thenReturn(new GetMetricStatisticsResult().withDatapoints(
new Datapoint().withTimestamp(new Date()).withAverage(3.0)));
assertEquals(2.0, registry.getSampleValue("aws_elb_request_count_average", new String[]{"job", "instance", "availability_zone", "load_balancer_name"}, new String[]{"aws_elb", "", "a", "myLB"}), .01);
assertEquals(3.0, registry.getSampleValue("aws_elb_request_count_average", new String[]{"job", "instance", "availability_zone", "load_balancer_name"}, new String[]{"aws_elb", "", "b", "myOtherLB"}), .01);
assertNull(registry.getSampleValue("aws_elb_request_count_average", new String[]{"job", "instance", "availability_zone", "load_balancer_name", "this_extra_dimension_is_ignored"}, new String[]{"aws_elb", "", "a", "myLB", "dummy"}));
}
示例5
@Test
public void testDimensionSelect() throws Exception {
new CloudWatchCollector(
"---\nregion: reg\nmetrics:\n- aws_namespace: AWS/ELB\n aws_metric_name: RequestCount\n aws_dimensions:\n - AvailabilityZone\n - LoadBalancerName\n aws_dimension_select:\n LoadBalancerName:\n - myLB", cloudWatchClient, taggingClient).register(registry);
Mockito.when(cloudWatchClient.listMetrics((ListMetricsRequest)argThat(
new ListMetricsRequestMatcher().Namespace("AWS/ELB").MetricName("RequestCount").Dimensions("AvailabilityZone", "LoadBalancerName"))))
.thenReturn(new ListMetricsResult().withMetrics(
new Metric().withDimensions(new Dimension().withName("AvailabilityZone").withValue("a"), new Dimension().withName("LoadBalancerName").withValue("myLB")),
new Metric().withDimensions(new Dimension().withName("AvailabilityZone").withValue("b"), new Dimension().withName("LoadBalancerName").withValue("myLB")),
new Metric().withDimensions(new Dimension().withName("AvailabilityZone").withValue("a"), new Dimension().withName("LoadBalancerName").withValue("myOtherLB"))));
Mockito.when(cloudWatchClient.getMetricStatistics((GetMetricStatisticsRequest)argThat(
new GetMetricStatisticsRequestMatcher().Namespace("AWS/ELB").MetricName("RequestCount").Dimension("AvailabilityZone", "a").Dimension("LoadBalancerName", "myLB"))))
.thenReturn(new GetMetricStatisticsResult().withDatapoints(
new Datapoint().withTimestamp(new Date()).withAverage(2.0)));
Mockito.when(cloudWatchClient.getMetricStatistics((GetMetricStatisticsRequest)argThat(
new GetMetricStatisticsRequestMatcher().Namespace("AWS/ELB").MetricName("RequestCount").Dimension("AvailabilityZone", "b").Dimension("LoadBalancerName", "myLB"))))
.thenReturn(new GetMetricStatisticsResult().withDatapoints(
new Datapoint().withTimestamp(new Date()).withAverage(2.0)));
assertEquals(2.0, registry.getSampleValue("aws_elb_request_count_average", new String[]{"job", "instance", "availability_zone", "load_balancer_name"}, new String[]{"aws_elb", "", "a", "myLB"}), .01);
assertEquals(2.0, registry.getSampleValue("aws_elb_request_count_average", new String[]{"job", "instance", "availability_zone", "load_balancer_name"}, new String[]{"aws_elb", "", "b", "myLB"}), .01);
assertNull(registry.getSampleValue("aws_elb_request_count_average", new String[]{"job", "instance", "availability_zone", "load_balancer_name"}, new String[]{"aws_elb", "", "a", "myOtherLB"}));
}
示例6
@Test
public void testDimensionSelectRegex() throws Exception {
new CloudWatchCollector(
"---\nregion: reg\nmetrics:\n- aws_namespace: AWS/ELB\n aws_metric_name: RequestCount\n aws_dimensions:\n - AvailabilityZone\n - LoadBalancerName\n aws_dimension_select_regex:\n LoadBalancerName:\n - myLB(.*)", cloudWatchClient, taggingClient).register(registry);
Mockito.when(cloudWatchClient.listMetrics((ListMetricsRequest) argThat(
new ListMetricsRequestMatcher().Namespace("AWS/ELB").MetricName("RequestCount").Dimensions("AvailabilityZone", "LoadBalancerName"))))
.thenReturn(new ListMetricsResult().withMetrics(
new Metric().withDimensions(new Dimension().withName("AvailabilityZone").withValue("a"), new Dimension().withName("LoadBalancerName").withValue("myLB1")),
new Metric().withDimensions(new Dimension().withName("AvailabilityZone").withValue("b"), new Dimension().withName("LoadBalancerName").withValue("myLB2")),
new Metric().withDimensions(new Dimension().withName("AvailabilityZone").withValue("a"), new Dimension().withName("LoadBalancerName").withValue("myOtherLB"))));
Mockito.when(cloudWatchClient.getMetricStatistics((GetMetricStatisticsRequest) argThat(
new GetMetricStatisticsRequestMatcher().Namespace("AWS/ELB").MetricName("RequestCount").Dimension("AvailabilityZone", "a").Dimension("LoadBalancerName", "myLB1"))))
.thenReturn(new GetMetricStatisticsResult().withDatapoints(
new Datapoint().withTimestamp(new Date()).withAverage(2.0)));
Mockito.when(cloudWatchClient.getMetricStatistics((GetMetricStatisticsRequest) argThat(
new GetMetricStatisticsRequestMatcher().Namespace("AWS/ELB").MetricName("RequestCount").Dimension("AvailabilityZone", "b").Dimension("LoadBalancerName", "myLB2"))))
.thenReturn(new GetMetricStatisticsResult().withDatapoints(
new Datapoint().withTimestamp(new Date()).withAverage(2.0)));
assertEquals(2.0, registry.getSampleValue("aws_elb_request_count_average", new String[]{"job", "instance", "availability_zone", "load_balancer_name"}, new String[]{"aws_elb", "", "a", "myLB1"}), .01);
assertEquals(2.0, registry.getSampleValue("aws_elb_request_count_average", new String[]{"job", "instance", "availability_zone", "load_balancer_name"}, new String[]{"aws_elb", "", "b", "myLB2"}), .01);
assertNull(registry.getSampleValue("aws_elb_request_count_average", new String[]{"job", "instance", "availability_zone", "load_balancer_name"}, new String[]{"aws_elb", "", "a", "myOtherLB"}));
}
示例7
@Test
public void testGetDimensionsUsesNextToken() throws Exception {
new CloudWatchCollector(
"---\nregion: reg\nmetrics:\n- aws_namespace: AWS/ELB\n aws_metric_name: RequestCount\n aws_dimensions:\n - AvailabilityZone\n - LoadBalancerName\n aws_dimension_select:\n LoadBalancerName:\n - myLB", cloudWatchClient, taggingClient).register(registry);
Mockito.when(cloudWatchClient.listMetrics((ListMetricsRequest)argThat(
new ListMetricsRequestMatcher().Namespace("AWS/ELB").MetricName("RequestCount").Dimensions("AvailabilityZone", "LoadBalancerName"))))
.thenReturn(new ListMetricsResult().withNextToken("ABC"));
Mockito.when(cloudWatchClient.listMetrics((ListMetricsRequest)argThat(
new ListMetricsRequestMatcher().Namespace("AWS/ELB").MetricName("RequestCount").Dimensions("AvailabilityZone", "LoadBalancerName").NextToken("ABC"))))
.thenReturn(new ListMetricsResult().withMetrics(
new Metric().withDimensions(new Dimension().withName("AvailabilityZone").withValue("a"), new Dimension().withName("LoadBalancerName").withValue("myLB"))));
Mockito.when(cloudWatchClient.getMetricStatistics((GetMetricStatisticsRequest)argThat(
new GetMetricStatisticsRequestMatcher().Namespace("AWS/ELB").MetricName("RequestCount").Dimension("AvailabilityZone", "a").Dimension("LoadBalancerName", "myLB"))))
.thenReturn(new GetMetricStatisticsResult().withDatapoints(
new Datapoint().withTimestamp(new Date()).withAverage(2.0)));
assertEquals(2.0, registry.getSampleValue("aws_elb_request_count_average", new String[]{"job", "instance", "availability_zone", "load_balancer_name"}, new String[]{"aws_elb", "", "a", "myLB"}), .01);
}
示例8
@Test
public void testNoSelection() throws Exception {
// When no selection is made, all metrics should be returned
new CloudWatchCollector(
"---\nregion: reg\nmetrics:\n- aws_namespace: AWS/EC2\n aws_metric_name: CPUUtilization\n aws_dimensions:\n - InstanceId\n",
cloudWatchClient, taggingClient).register(registry);
Mockito.when(cloudWatchClient.listMetrics((ListMetricsRequest)argThat(
new ListMetricsRequestMatcher().Namespace("AWS/EC2").MetricName("CPUUtilization").Dimensions("InstanceId"))))
.thenReturn(new ListMetricsResult().withMetrics(
new Metric().withDimensions(new Dimension().withName("InstanceId").withValue("i-1")),
new Metric().withDimensions(new Dimension().withName("InstanceId").withValue("i-2"))));
Mockito.when(cloudWatchClient.getMetricStatistics((GetMetricStatisticsRequest)argThat(
new GetMetricStatisticsRequestMatcher().Namespace("AWS/EC2").MetricName("CPUUtilization").Dimension("InstanceId", "i-1"))))
.thenReturn(new GetMetricStatisticsResult().withDatapoints(
new Datapoint().withTimestamp(new Date()).withAverage(2.0)));
Mockito.when(cloudWatchClient.getMetricStatistics((GetMetricStatisticsRequest)argThat(
new GetMetricStatisticsRequestMatcher().Namespace("AWS/EC2").MetricName("CPUUtilization").Dimension("InstanceId", "i-2"))))
.thenReturn(new GetMetricStatisticsResult().withDatapoints(
new Datapoint().withTimestamp(new Date()).withAverage(3.0)));
assertEquals(2.0, registry.getSampleValue("aws_ec2_cpuutilization_average", new String[]{"job", "instance", "instance_id"}, new String[]{"aws_ec2", "", "i-1"}), .01);
assertEquals(3.0, registry.getSampleValue("aws_ec2_cpuutilization_average", new String[]{"job", "instance", "instance_id"}, new String[]{"aws_ec2", "", "i-2"}), .01);
}
示例9
private void execRequest(String endpoint, int status) {
AWSRequestMetrics metrics = new AWSRequestMetricsFullSupport();
metrics.addProperty(AWSRequestMetrics.Field.ServiceName, "AmazonCloudWatch");
metrics.addProperty(AWSRequestMetrics.Field.ServiceEndpoint, endpoint);
metrics.addProperty(AWSRequestMetrics.Field.StatusCode, "" + status);
if (status == 503) {
metrics.addProperty(AWSRequestMetrics.Field.AWSErrorCode, "Throttled");
}
String counterName = "BytesProcessed";
String timerName = "ClientExecuteTime";
metrics.setCounter(counterName, 12345);
metrics.getTimingInfo().addSubMeasurement(timerName, TimingInfo.unmodifiableTimingInfo(100000L, 200000L));
Request<?> req = new DefaultRequest(new ListMetricsRequest(), "AmazonCloudWatch");
req.setAWSRequestMetrics(metrics);
req.setEndpoint(URI.create(endpoint));
HttpResponse hr = new HttpResponse(req, new HttpPost(endpoint));
hr.setStatusCode(status);
Response<?> resp = new Response<>(null, new HttpResponse(req, new HttpPost(endpoint)));
collector.collectMetrics(req, resp);
}
示例10
public boolean matches(Object o) {
ListMetricsRequest request = (ListMetricsRequest) o;
if (request == null) return false;
if (namespace != null && !namespace.equals(request.getNamespace())){
return false;
}
if (metricName != null && !metricName.equals(request.getMetricName())){
return false;
}
if (nextToken == null ^ request.getNextToken() == null) {
return false;
}
if (nextToken != null && !nextToken.equals(request.getNextToken())) {
return false;
}
if (!dimensions.equals(request.getDimensions())) {
return false;
}
return true;
}
示例11
@Test
public void testDimensions() throws Exception {
new CloudWatchCollector(
"---\nregion: reg\nmetrics:\n- aws_namespace: AWS/ELB\n aws_metric_name: RequestCount\n aws_dimensions:\n - AvailabilityZone\n - LoadBalancerName", cloudWatchClient, taggingClient).register(registry);
Mockito.when(cloudWatchClient.listMetrics((ListMetricsRequest)argThat(
new ListMetricsRequestMatcher().Namespace("AWS/ELB").MetricName("RequestCount").Dimensions("AvailabilityZone", "LoadBalancerName"))))
.thenReturn(new ListMetricsResult().withMetrics(
new Metric().withDimensions(new Dimension().withName("AvailabilityZone").withValue("a"), new Dimension().withName("LoadBalancerName").withValue("myLB")),
new Metric().withDimensions(new Dimension().withName("AvailabilityZone").withValue("a"), new Dimension().withName("LoadBalancerName").withValue("myLB"), new Dimension().withName("ThisExtraDimensionIsIgnored").withValue("dummy")),
new Metric().withDimensions(new Dimension().withName("AvailabilityZone").withValue("b"), new Dimension().withName("LoadBalancerName").withValue("myOtherLB"))));
Mockito.when(cloudWatchClient.getMetricStatistics((GetMetricStatisticsRequest)argThat(
new GetMetricStatisticsRequestMatcher().Namespace("AWS/ELB").MetricName("RequestCount").Dimension("AvailabilityZone", "a").Dimension("LoadBalancerName", "myLB"))))
.thenReturn(new GetMetricStatisticsResult().withDatapoints(
new Datapoint().withTimestamp(new Date()).withAverage(2.0)));
Mockito.when(cloudWatchClient.getMetricStatistics((GetMetricStatisticsRequest)argThat(
new GetMetricStatisticsRequestMatcher().Namespace("AWS/ELB").MetricName("RequestCount").Dimension("AvailabilityZone", "b").Dimension("LoadBalancerName", "myOtherLB"))))
.thenReturn(new GetMetricStatisticsResult().withDatapoints(
new Datapoint().withTimestamp(new Date()).withAverage(3.0)));
assertEquals(2.0, registry.getSampleValue("aws_elb_request_count_average", new String[]{"job", "instance", "availability_zone", "load_balancer_name"}, new String[]{"aws_elb", "", "a", "myLB"}), .01);
assertEquals(3.0, registry.getSampleValue("aws_elb_request_count_average", new String[]{"job", "instance", "availability_zone", "load_balancer_name"}, new String[]{"aws_elb", "", "b", "myOtherLB"}), .01);
assertNull(registry.getSampleValue("aws_elb_request_count_average", new String[]{"job", "instance", "availability_zone", "load_balancer_name", "this_extra_dimension_is_ignored"}, new String[]{"aws_elb", "", "a", "myLB", "dummy"}));
}
示例12
@Test
public void testDimensionSelect() throws Exception {
new CloudWatchCollector(
"---\nregion: reg\nmetrics:\n- aws_namespace: AWS/ELB\n aws_metric_name: RequestCount\n aws_dimensions:\n - AvailabilityZone\n - LoadBalancerName\n aws_dimension_select:\n LoadBalancerName:\n - myLB", cloudWatchClient, taggingClient).register(registry);
Mockito.when(cloudWatchClient.listMetrics((ListMetricsRequest)argThat(
new ListMetricsRequestMatcher().Namespace("AWS/ELB").MetricName("RequestCount").Dimensions("AvailabilityZone", "LoadBalancerName"))))
.thenReturn(new ListMetricsResult().withMetrics(
new Metric().withDimensions(new Dimension().withName("AvailabilityZone").withValue("a"), new Dimension().withName("LoadBalancerName").withValue("myLB")),
new Metric().withDimensions(new Dimension().withName("AvailabilityZone").withValue("b"), new Dimension().withName("LoadBalancerName").withValue("myLB")),
new Metric().withDimensions(new Dimension().withName("AvailabilityZone").withValue("a"), new Dimension().withName("LoadBalancerName").withValue("myOtherLB"))));
Mockito.when(cloudWatchClient.getMetricStatistics((GetMetricStatisticsRequest)argThat(
new GetMetricStatisticsRequestMatcher().Namespace("AWS/ELB").MetricName("RequestCount").Dimension("AvailabilityZone", "a").Dimension("LoadBalancerName", "myLB"))))
.thenReturn(new GetMetricStatisticsResult().withDatapoints(
new Datapoint().withTimestamp(new Date()).withAverage(2.0)));
Mockito.when(cloudWatchClient.getMetricStatistics((GetMetricStatisticsRequest)argThat(
new GetMetricStatisticsRequestMatcher().Namespace("AWS/ELB").MetricName("RequestCount").Dimension("AvailabilityZone", "b").Dimension("LoadBalancerName", "myLB"))))
.thenReturn(new GetMetricStatisticsResult().withDatapoints(
new Datapoint().withTimestamp(new Date()).withAverage(2.0)));
assertEquals(2.0, registry.getSampleValue("aws_elb_request_count_average", new String[]{"job", "instance", "availability_zone", "load_balancer_name"}, new String[]{"aws_elb", "", "a", "myLB"}), .01);
assertEquals(2.0, registry.getSampleValue("aws_elb_request_count_average", new String[]{"job", "instance", "availability_zone", "load_balancer_name"}, new String[]{"aws_elb", "", "b", "myLB"}), .01);
assertNull(registry.getSampleValue("aws_elb_request_count_average", new String[]{"job", "instance", "availability_zone", "load_balancer_name"}, new String[]{"aws_elb", "", "a", "myOtherLB"}));
}
示例13
@Test
public void testDimensionSelectRegex() throws Exception {
new CloudWatchCollector(
"---\nregion: reg\nmetrics:\n- aws_namespace: AWS/ELB\n aws_metric_name: RequestCount\n aws_dimensions:\n - AvailabilityZone\n - LoadBalancerName\n aws_dimension_select_regex:\n LoadBalancerName:\n - myLB(.*)", cloudWatchClient, taggingClient).register(registry);
Mockito.when(cloudWatchClient.listMetrics((ListMetricsRequest) argThat(
new ListMetricsRequestMatcher().Namespace("AWS/ELB").MetricName("RequestCount").Dimensions("AvailabilityZone", "LoadBalancerName"))))
.thenReturn(new ListMetricsResult().withMetrics(
new Metric().withDimensions(new Dimension().withName("AvailabilityZone").withValue("a"), new Dimension().withName("LoadBalancerName").withValue("myLB1")),
new Metric().withDimensions(new Dimension().withName("AvailabilityZone").withValue("b"), new Dimension().withName("LoadBalancerName").withValue("myLB2")),
new Metric().withDimensions(new Dimension().withName("AvailabilityZone").withValue("a"), new Dimension().withName("LoadBalancerName").withValue("myOtherLB"))));
Mockito.when(cloudWatchClient.getMetricStatistics((GetMetricStatisticsRequest) argThat(
new GetMetricStatisticsRequestMatcher().Namespace("AWS/ELB").MetricName("RequestCount").Dimension("AvailabilityZone", "a").Dimension("LoadBalancerName", "myLB1"))))
.thenReturn(new GetMetricStatisticsResult().withDatapoints(
new Datapoint().withTimestamp(new Date()).withAverage(2.0)));
Mockito.when(cloudWatchClient.getMetricStatistics((GetMetricStatisticsRequest) argThat(
new GetMetricStatisticsRequestMatcher().Namespace("AWS/ELB").MetricName("RequestCount").Dimension("AvailabilityZone", "b").Dimension("LoadBalancerName", "myLB2"))))
.thenReturn(new GetMetricStatisticsResult().withDatapoints(
new Datapoint().withTimestamp(new Date()).withAverage(2.0)));
assertEquals(2.0, registry.getSampleValue("aws_elb_request_count_average", new String[]{"job", "instance", "availability_zone", "load_balancer_name"}, new String[]{"aws_elb", "", "a", "myLB1"}), .01);
assertEquals(2.0, registry.getSampleValue("aws_elb_request_count_average", new String[]{"job", "instance", "availability_zone", "load_balancer_name"}, new String[]{"aws_elb", "", "b", "myLB2"}), .01);
assertNull(registry.getSampleValue("aws_elb_request_count_average", new String[]{"job", "instance", "availability_zone", "load_balancer_name"}, new String[]{"aws_elb", "", "a", "myOtherLB"}));
}
示例14
@Test
public void testGetDimensionsUsesNextToken() throws Exception {
new CloudWatchCollector(
"---\nregion: reg\nmetrics:\n- aws_namespace: AWS/ELB\n aws_metric_name: RequestCount\n aws_dimensions:\n - AvailabilityZone\n - LoadBalancerName\n aws_dimension_select:\n LoadBalancerName:\n - myLB", cloudWatchClient, taggingClient).register(registry);
Mockito.when(cloudWatchClient.listMetrics((ListMetricsRequest)argThat(
new ListMetricsRequestMatcher().Namespace("AWS/ELB").MetricName("RequestCount").Dimensions("AvailabilityZone", "LoadBalancerName"))))
.thenReturn(new ListMetricsResult().withNextToken("ABC"));
Mockito.when(cloudWatchClient.listMetrics((ListMetricsRequest)argThat(
new ListMetricsRequestMatcher().Namespace("AWS/ELB").MetricName("RequestCount").Dimensions("AvailabilityZone", "LoadBalancerName").NextToken("ABC"))))
.thenReturn(new ListMetricsResult().withMetrics(
new Metric().withDimensions(new Dimension().withName("AvailabilityZone").withValue("a"), new Dimension().withName("LoadBalancerName").withValue("myLB"))));
Mockito.when(cloudWatchClient.getMetricStatistics((GetMetricStatisticsRequest)argThat(
new GetMetricStatisticsRequestMatcher().Namespace("AWS/ELB").MetricName("RequestCount").Dimension("AvailabilityZone", "a").Dimension("LoadBalancerName", "myLB"))))
.thenReturn(new GetMetricStatisticsResult().withDatapoints(
new Datapoint().withTimestamp(new Date()).withAverage(2.0)));
assertEquals(2.0, registry.getSampleValue("aws_elb_request_count_average", new String[]{"job", "instance", "availability_zone", "load_balancer_name"}, new String[]{"aws_elb", "", "a", "myLB"}), .01);
}
示例15
@Test
public void testNoSelection() throws Exception {
// When no selection is made, all metrics should be returned
new CloudWatchCollector(
"---\nregion: reg\nmetrics:\n- aws_namespace: AWS/EC2\n aws_metric_name: CPUUtilization\n aws_dimensions:\n - InstanceId\n",
cloudWatchClient, taggingClient).register(registry);
Mockito.when(cloudWatchClient.listMetrics((ListMetricsRequest)argThat(
new ListMetricsRequestMatcher().Namespace("AWS/EC2").MetricName("CPUUtilization").Dimensions("InstanceId"))))
.thenReturn(new ListMetricsResult().withMetrics(
new Metric().withDimensions(new Dimension().withName("InstanceId").withValue("i-1")),
new Metric().withDimensions(new Dimension().withName("InstanceId").withValue("i-2"))));
Mockito.when(cloudWatchClient.getMetricStatistics((GetMetricStatisticsRequest)argThat(
new GetMetricStatisticsRequestMatcher().Namespace("AWS/EC2").MetricName("CPUUtilization").Dimension("InstanceId", "i-1"))))
.thenReturn(new GetMetricStatisticsResult().withDatapoints(
new Datapoint().withTimestamp(new Date()).withAverage(2.0)));
Mockito.when(cloudWatchClient.getMetricStatistics((GetMetricStatisticsRequest)argThat(
new GetMetricStatisticsRequestMatcher().Namespace("AWS/EC2").MetricName("CPUUtilization").Dimension("InstanceId", "i-2"))))
.thenReturn(new GetMetricStatisticsResult().withDatapoints(
new Datapoint().withTimestamp(new Date()).withAverage(3.0)));
assertEquals(2.0, registry.getSampleValue("aws_ec2_cpuutilization_average", new String[]{"job", "instance", "instance_id"}, new String[]{"aws_ec2", "", "i-1"}), .01);
assertEquals(3.0, registry.getSampleValue("aws_ec2_cpuutilization_average", new String[]{"job", "instance", "instance_id"}, new String[]{"aws_ec2", "", "i-2"}), .01);
}
示例16
public static void main(String[] args) {
final String USAGE =
"To run this example, supply a metric name and metric namespace\n" +
"Ex: ListMetrics <metric-name> <metric-namespace>\n";
if (args.length != 2) {
System.out.println(USAGE);
System.exit(1);
}
String name = args[0];
String namespace = args[1];
final AmazonCloudWatch cw =
AmazonCloudWatchClientBuilder.defaultClient();
ListMetricsRequest request = new ListMetricsRequest()
.withMetricName(name)
.withNamespace(namespace);
boolean done = false;
while(!done) {
ListMetricsResult response = cw.listMetrics(request);
for(Metric metric : response.getMetrics()) {
System.out.printf(
"Retrieved metric %s", metric.getMetricName());
}
request.setNextToken(response.getNextToken());
if(response.getNextToken() == null) {
done = true;
}
}
}
示例17
private List<List<Dimension>> listDimensions(MetricRule rule, List<String> tagBasedResourceIds, AmazonCloudWatch cloudWatchClient) {
List<List<Dimension>> dimensions = new ArrayList<List<Dimension>>();
if (rule.awsDimensions == null) {
dimensions.add(new ArrayList<Dimension>());
return dimensions;
}
ListMetricsRequest request = new ListMetricsRequest();
request.setNamespace(rule.awsNamespace);
request.setMetricName(rule.awsMetricName);
List<DimensionFilter> dimensionFilters = new ArrayList<DimensionFilter>();
for (String dimension: rule.awsDimensions) {
dimensionFilters.add(new DimensionFilter().withName(dimension));
}
request.setDimensions(dimensionFilters);
String nextToken = null;
do {
request.setNextToken(nextToken);
ListMetricsResult result = cloudWatchClient.listMetrics(request);
cloudwatchRequests.labels("listMetrics", rule.awsNamespace).inc();
for (Metric metric: result.getMetrics()) {
if (metric.getDimensions().size() != dimensionFilters.size()) {
// AWS returns all the metrics with dimensions beyond the ones we ask for,
// so filter them out.
continue;
}
if (useMetric(rule, tagBasedResourceIds, metric)) {
dimensions.add(metric.getDimensions());
}
}
nextToken = result.getNextToken();
} while (nextToken != null);
return dimensions;
}
示例18
@Test
public void testDynamoIndexDimensions() throws Exception {
new CloudWatchCollector(
"---\nregion: reg\nmetrics:\n- aws_namespace: AWS/DynamoDB\n aws_metric_name: ConsumedReadCapacityUnits\n aws_dimensions:\n - TableName\n - GlobalSecondaryIndexName\n- aws_namespace: AWS/DynamoDB\n aws_metric_name: OnlineIndexConsumedWriteCapacity\n aws_dimensions:\n - TableName\n - GlobalSecondaryIndexName\n- aws_namespace: AWS/DynamoDB\n aws_metric_name: ConsumedReadCapacityUnits\n aws_dimensions:\n - TableName", cloudWatchClient, taggingClient).register(registry);
Mockito.when(cloudWatchClient.listMetrics((ListMetricsRequest)argThat(
new ListMetricsRequestMatcher().Namespace("AWS/DynamoDB").MetricName("ConsumedReadCapacityUnits").Dimensions("TableName", "GlobalSecondaryIndexName"))))
.thenReturn(new ListMetricsResult().withMetrics(
new Metric().withDimensions(new Dimension().withName("TableName").withValue("myTable"), new Dimension().withName("GlobalSecondaryIndexName").withValue("myIndex"))));
Mockito.when(cloudWatchClient.listMetrics((ListMetricsRequest)argThat(
new ListMetricsRequestMatcher().Namespace("AWS/DynamoDB").MetricName("OnlineIndexConsumedWriteCapacity").Dimensions("TableName", "GlobalSecondaryIndexName"))))
.thenReturn(new ListMetricsResult().withMetrics(
new Metric().withDimensions(new Dimension().withName("TableName").withValue("myTable"), new Dimension().withName("GlobalSecondaryIndexName").withValue("myIndex"))));
Mockito.when(cloudWatchClient.listMetrics((ListMetricsRequest)argThat(
new ListMetricsRequestMatcher().Namespace("AWS/DynamoDB").MetricName("ConsumedReadCapacityUnits").Dimensions("TableName"))))
.thenReturn(new ListMetricsResult().withMetrics(
new Metric().withDimensions(new Dimension().withName("TableName").withValue("myTable"))));
Mockito.when(cloudWatchClient.getMetricStatistics((GetMetricStatisticsRequest)argThat(
new GetMetricStatisticsRequestMatcher().Namespace("AWS/DynamoDB").MetricName("ConsumedReadCapacityUnits").Dimension("TableName", "myTable").Dimension("GlobalSecondaryIndexName", "myIndex"))))
.thenReturn(new GetMetricStatisticsResult().withDatapoints(
new Datapoint().withTimestamp(new Date()).withSum(1.0)));
Mockito.when(cloudWatchClient.getMetricStatistics((GetMetricStatisticsRequest)argThat(
new GetMetricStatisticsRequestMatcher().Namespace("AWS/DynamoDB").MetricName("OnlineIndexConsumedWriteCapacity").Dimension("TableName", "myTable").Dimension("GlobalSecondaryIndexName", "myIndex"))))
.thenReturn(new GetMetricStatisticsResult().withDatapoints(
new Datapoint().withTimestamp(new Date()).withSum(2.0)));
Mockito.when(cloudWatchClient.getMetricStatistics((GetMetricStatisticsRequest)argThat(
new GetMetricStatisticsRequestMatcher().Namespace("AWS/DynamoDB").MetricName("ConsumedReadCapacityUnits").Dimension("TableName", "myTable"))))
.thenReturn(new GetMetricStatisticsResult().withDatapoints(
new Datapoint().withTimestamp(new Date()).withSum(3.0)));
assertEquals(1.0, registry.getSampleValue("aws_dynamodb_consumed_read_capacity_units_index_sum", new String[]{"job", "instance", "table_name", "global_secondary_index_name"}, new String[]{"aws_dynamodb", "", "myTable", "myIndex"}), .01);
assertEquals(2.0, registry.getSampleValue("aws_dynamodb_online_index_consumed_write_capacity_sum", new String[]{"job", "instance", "table_name", "global_secondary_index_name"}, new String[]{"aws_dynamodb", "", "myTable", "myIndex"}), .01);
assertEquals(3.0, registry.getSampleValue("aws_dynamodb_consumed_read_capacity_units_sum", new String[]{"job", "instance", "table_name"}, new String[]{"aws_dynamodb", "", "myTable"}), .01);
}
示例19
@Test
public void testTagSelectEC2() throws Exception {
// Testing "aws_tag_select" with an EC2
new CloudWatchCollector(
"---\nregion: reg\nmetrics:\n- aws_namespace: AWS/EC2\n aws_metric_name: CPUUtilization\n aws_dimensions:\n - InstanceId\n aws_tag_select:\n resource_type_selection: \"ec2:instance\"\n resource_id_dimension: InstanceId\n tag_selections:\n Monitoring: [enabled]\n",
cloudWatchClient, taggingClient).register(registry);
Mockito.when(taggingClient.getResources((GetResourcesRequest)argThat(
new GetResourcesRequestMatcher().ResourceTypeFilter("ec2:instance").TagFilter("Monitoring", Arrays.asList("enabled")))))
.thenReturn(new GetResourcesResult().withResourceTagMappingList(
new ResourceTagMapping().withTags(new Tag().withKey("Monitoring").withValue("enabled")).withResourceARN("arn:aws:ec2:us-east-1:121212121212:instance/i-1")));
Mockito.when(cloudWatchClient.listMetrics((ListMetricsRequest)argThat(
new ListMetricsRequestMatcher().Namespace("AWS/EC2").MetricName("CPUUtilization").Dimensions("InstanceId"))))
.thenReturn(new ListMetricsResult().withMetrics(
new Metric().withDimensions(new Dimension().withName("InstanceId").withValue("i-1")),
new Metric().withDimensions(new Dimension().withName("InstanceId").withValue("i-2"))));
Mockito.when(cloudWatchClient.getMetricStatistics((GetMetricStatisticsRequest)argThat(
new GetMetricStatisticsRequestMatcher().Namespace("AWS/EC2").MetricName("CPUUtilization").Dimension("InstanceId", "i-1"))))
.thenReturn(new GetMetricStatisticsResult().withDatapoints(
new Datapoint().withTimestamp(new Date()).withAverage(2.0)));
Mockito.when(cloudWatchClient.getMetricStatistics((GetMetricStatisticsRequest)argThat(
new GetMetricStatisticsRequestMatcher().Namespace("AWS/EC2").MetricName("CPUUtilization").Dimension("InstanceId", "i-2"))))
.thenReturn(new GetMetricStatisticsResult().withDatapoints(
new Datapoint().withTimestamp(new Date()).withAverage(2.0)));
assertEquals(2.0, registry.getSampleValue("aws_ec2_cpuutilization_average", new String[]{"job", "instance", "instance_id"}, new String[]{"aws_ec2", "", "i-1"}), .01);
assertNull(registry.getSampleValue("aws_ec2_cpuutilization_average", new String[]{"job", "instance", "instance_id"}, new String[]{"aws_ec2", "", "i-2"}));
assertEquals(1.0, registry.getSampleValue("aws_resource_info", new String[]{"job", "instance", "arn", "instance_id", "tag_Monitoring"}, new String[]{"aws_ec2", "", "arn:aws:ec2:us-east-1:121212121212:instance/i-1", "i-1", "enabled"}), .01);
}
示例20
@Test
public void testTagSelectALB() throws Exception {
// Testing "aws_tag_select" with an ALB, which have a fairly complex ARN
new CloudWatchCollector(
"---\nregion: reg\nmetrics:\n- aws_namespace: AWS/ApplicationELB\n aws_metric_name: RequestCount\n aws_dimensions:\n - AvailabilityZone\n - LoadBalancer\n aws_tag_select:\n resource_type_selection: \"elasticloadbalancing:loadbalancer/app\"\n resource_id_dimension: LoadBalancer\n tag_selections:\n Monitoring: [enabled]\n",
cloudWatchClient, taggingClient).register(registry);
Mockito.when(taggingClient.getResources((GetResourcesRequest)argThat(
new GetResourcesRequestMatcher().ResourceTypeFilter("elasticloadbalancing:loadbalancer/app").TagFilter("Monitoring", Arrays.asList("enabled")))))
.thenReturn(new GetResourcesResult().withResourceTagMappingList(
new ResourceTagMapping().withTags(new Tag().withKey("Monitoring").withValue("enabled")).withResourceARN("arn:aws:elasticloadbalancing:us-east-1:121212121212:loadbalancer/app/myLB/123")));
Mockito.when(cloudWatchClient.listMetrics((ListMetricsRequest)argThat(
new ListMetricsRequestMatcher().Namespace("AWS/ApplicationELB").MetricName("RequestCount").Dimensions("AvailabilityZone", "LoadBalancer"))))
.thenReturn(new ListMetricsResult().withMetrics(
new Metric().withDimensions(new Dimension().withName("AvailabilityZone").withValue("a"), new Dimension().withName("LoadBalancer").withValue("app/myLB/123")),
new Metric().withDimensions(new Dimension().withName("AvailabilityZone").withValue("b"), new Dimension().withName("LoadBalancer").withValue("app/myLB/123")),
new Metric().withDimensions(new Dimension().withName("AvailabilityZone").withValue("a"), new Dimension().withName("LoadBalancer").withValue("app/myOtherLB/456"))));
Mockito.when(cloudWatchClient.getMetricStatistics((GetMetricStatisticsRequest)argThat(
new GetMetricStatisticsRequestMatcher().Namespace("AWS/ApplicationELB").MetricName("RequestCount").Dimension("AvailabilityZone", "a").Dimension("LoadBalancer", "app/myLB/123"))))
.thenReturn(new GetMetricStatisticsResult().withDatapoints(
new Datapoint().withTimestamp(new Date()).withAverage(2.0)));
Mockito.when(cloudWatchClient.getMetricStatistics((GetMetricStatisticsRequest)argThat(
new GetMetricStatisticsRequestMatcher().Namespace("AWS/ApplicationELB").MetricName("RequestCount").Dimension("AvailabilityZone", "b").Dimension("LoadBalancer", "app/myLB/123"))))
.thenReturn(new GetMetricStatisticsResult().withDatapoints(
new Datapoint().withTimestamp(new Date()).withAverage(3.0)));
Mockito.when(cloudWatchClient.getMetricStatistics((GetMetricStatisticsRequest)argThat(
new GetMetricStatisticsRequestMatcher().Namespace("AWS/ApplicationELB").MetricName("RequestCount").Dimension("AvailabilityZone", "a").Dimension("LoadBalancer", "app/myOtherLB/456"))))
.thenReturn(new GetMetricStatisticsResult().withDatapoints(
new Datapoint().withTimestamp(new Date()).withAverage(4.0)));
assertEquals(2.0, registry.getSampleValue("aws_applicationelb_request_count_average", new String[]{"job", "instance", "availability_zone", "load_balancer"}, new String[]{"aws_applicationelb", "", "a", "app/myLB/123"}), .01);
assertEquals(3.0, registry.getSampleValue("aws_applicationelb_request_count_average", new String[]{"job", "instance", "availability_zone", "load_balancer"}, new String[]{"aws_applicationelb", "", "b", "app/myLB/123"}), .01);
assertNull(registry.getSampleValue("aws_applicationelb_request_count_average", new String[]{"job", "instance", "availability_zone", "load_balancer"}, new String[]{"aws_applicationelb", "", "a", "app/myOtherLB/456"}));
assertEquals(1.0, registry.getSampleValue("aws_resource_info", new String[]{"job", "instance", "arn", "load_balancer", "tag_Monitoring"}, new String[]{"aws_applicationelb", "", "arn:aws:elasticloadbalancing:us-east-1:121212121212:loadbalancer/app/myLB/123", "app/myLB/123", "enabled"}), .01);
}
示例21
@Test
public void testTagSelectUsesPaginationToken() throws Exception {
// Testing "aws_tag_select" with an EC2
new CloudWatchCollector(
"---\nregion: reg\nmetrics:\n- aws_namespace: AWS/EC2\n aws_metric_name: CPUUtilization\n aws_dimensions:\n - InstanceId\n aws_tag_select:\n resource_type_selection: \"ec2:instance\"\n resource_id_dimension: InstanceId\n tag_selections:\n Monitoring: [enabled]\n",
cloudWatchClient, taggingClient).register(registry);
Mockito.when(taggingClient.getResources((GetResourcesRequest)argThat(
new GetResourcesRequestMatcher().ResourceTypeFilter("ec2:instance").TagFilter("Monitoring", Arrays.asList("enabled")))))
.thenReturn(new GetResourcesResult().withPaginationToken("ABC").withResourceTagMappingList(
new ResourceTagMapping().withTags(new Tag().withKey("Monitoring").withValue("enabled")).withResourceARN("arn:aws:ec2:us-east-1:121212121212:instance/i-1")));
Mockito.when(taggingClient.getResources((GetResourcesRequest)argThat(
new GetResourcesRequestMatcher().PaginationToken("ABC").ResourceTypeFilter("ec2:instance").TagFilter("Monitoring", Arrays.asList("enabled")))))
.thenReturn(new GetResourcesResult().withResourceTagMappingList(
new ResourceTagMapping().withTags(new Tag().withKey("Monitoring").withValue("enabled")).withResourceARN("arn:aws:ec2:us-east-1:121212121212:instance/i-2")));
Mockito.when(cloudWatchClient.listMetrics((ListMetricsRequest)argThat(
new ListMetricsRequestMatcher().Namespace("AWS/EC2").MetricName("CPUUtilization").Dimensions("InstanceId"))))
.thenReturn(new ListMetricsResult().withMetrics(
new Metric().withDimensions(new Dimension().withName("InstanceId").withValue("i-1")),
new Metric().withDimensions(new Dimension().withName("InstanceId").withValue("i-2"))));
Mockito.when(cloudWatchClient.getMetricStatistics((GetMetricStatisticsRequest)argThat(
new GetMetricStatisticsRequestMatcher().Namespace("AWS/EC2").MetricName("CPUUtilization").Dimension("InstanceId", "i-1"))))
.thenReturn(new GetMetricStatisticsResult().withDatapoints(
new Datapoint().withTimestamp(new Date()).withAverage(2.0)));
Mockito.when(cloudWatchClient.getMetricStatistics((GetMetricStatisticsRequest)argThat(
new GetMetricStatisticsRequestMatcher().Namespace("AWS/EC2").MetricName("CPUUtilization").Dimension("InstanceId", "i-2"))))
.thenReturn(new GetMetricStatisticsResult().withDatapoints(
new Datapoint().withTimestamp(new Date()).withAverage(3.0)));
assertEquals(2.0, registry.getSampleValue("aws_ec2_cpuutilization_average", new String[]{"job", "instance", "instance_id"}, new String[]{"aws_ec2", "", "i-1"}), .01);
assertEquals(3.0, registry.getSampleValue("aws_ec2_cpuutilization_average", new String[]{"job", "instance", "instance_id"}, new String[]{"aws_ec2", "", "i-2"}), .01);
assertEquals(1.0, registry.getSampleValue("aws_resource_info", new String[]{"job", "instance", "arn", "instance_id", "tag_Monitoring"}, new String[]{"aws_ec2", "", "arn:aws:ec2:us-east-1:121212121212:instance/i-1", "i-1", "enabled"}), .01);
assertEquals(1.0, registry.getSampleValue("aws_resource_info", new String[]{"job", "instance", "arn", "instance_id", "tag_Monitoring"}, new String[]{"aws_ec2", "", "arn:aws:ec2:us-east-1:121212121212:instance/i-2", "i-2", "enabled"}), .01);
}
示例22
@Test
public void testMultipleSelection() throws Exception {
// When multiple selections are made, "and" logic should be applied on metrics
new CloudWatchCollector(
"---\nregion: reg\nmetrics:\n- aws_namespace: AWS/EC2\n aws_metric_name: CPUUtilization\n aws_dimensions:\n - InstanceId\n aws_tag_select:\n resource_type_selection: \"ec2:instance\"\n resource_id_dimension: InstanceId\n tag_selections:\n Monitoring: [enabled]\n aws_dimension_select:\n InstanceId: [\"i-1\"]",
cloudWatchClient, taggingClient).register(registry);
Mockito.when(taggingClient.getResources((GetResourcesRequest)argThat(
new GetResourcesRequestMatcher().ResourceTypeFilter("ec2:instance").TagFilter("Monitoring", Arrays.asList("enabled")))))
.thenReturn(new GetResourcesResult().withResourceTagMappingList(
new ResourceTagMapping().withTags(new Tag().withKey("Monitoring").withValue("enabled")).withResourceARN("arn:aws:ec2:us-east-1:121212121212:instance/i-1"),
new ResourceTagMapping().withTags(new Tag().withKey("Monitoring").withValue("enabled")).withResourceARN("arn:aws:ec2:us-east-1:121212121212:instance/i-2")));
Mockito.when(cloudWatchClient.listMetrics((ListMetricsRequest)argThat(
new ListMetricsRequestMatcher().Namespace("AWS/EC2").MetricName("CPUUtilization").Dimensions("InstanceId"))))
.thenReturn(new ListMetricsResult().withMetrics(
new Metric().withDimensions(new Dimension().withName("InstanceId").withValue("i-1")),
new Metric().withDimensions(new Dimension().withName("InstanceId").withValue("i-2"))));
Mockito.when(cloudWatchClient.getMetricStatistics((GetMetricStatisticsRequest)argThat(
new GetMetricStatisticsRequestMatcher().Namespace("AWS/EC2").MetricName("CPUUtilization").Dimension("InstanceId", "i-1"))))
.thenReturn(new GetMetricStatisticsResult().withDatapoints(
new Datapoint().withTimestamp(new Date()).withAverage(2.0)));
Mockito.when(cloudWatchClient.getMetricStatistics((GetMetricStatisticsRequest)argThat(
new GetMetricStatisticsRequestMatcher().Namespace("AWS/EC2").MetricName("CPUUtilization").Dimension("InstanceId", "i-2"))))
.thenReturn(new GetMetricStatisticsResult().withDatapoints(
new Datapoint().withTimestamp(new Date()).withAverage(3.0)));
assertEquals(2.0, registry.getSampleValue("aws_ec2_cpuutilization_average", new String[]{"job", "instance", "instance_id"}, new String[]{"aws_ec2", "", "i-1"}), .01);
assertNull(registry.getSampleValue("aws_ec2_cpuutilization_average", new String[]{"job", "instance", "instance_id"}, new String[]{"aws_ec2", "", "i-2"}));
assertEquals(1.0, registry.getSampleValue("aws_resource_info", new String[]{"job", "instance", "arn", "instance_id", "tag_Monitoring"}, new String[]{"aws_ec2", "", "arn:aws:ec2:us-east-1:121212121212:instance/i-1", "i-1", "enabled"}), .01);
assertEquals(1.0, registry.getSampleValue("aws_resource_info", new String[]{"job", "instance", "arn", "instance_id", "tag_Monitoring"}, new String[]{"aws_ec2", "", "arn:aws:ec2:us-east-1:121212121212:instance/i-2", "i-2", "enabled"}), .01);
}
示例23
private List<List<Dimension>> listDimensions(MetricRule rule, List<String> tagBasedResourceIds, AmazonCloudWatch cloudWatchClient) {
List<List<Dimension>> dimensions = new ArrayList<List<Dimension>>();
if (rule.awsDimensions == null) {
dimensions.add(new ArrayList<Dimension>());
return dimensions;
}
ListMetricsRequest request = new ListMetricsRequest();
request.setNamespace(rule.awsNamespace);
request.setMetricName(rule.awsMetricName);
List<DimensionFilter> dimensionFilters = new ArrayList<DimensionFilter>();
for (String dimension: rule.awsDimensions) {
dimensionFilters.add(new DimensionFilter().withName(dimension));
}
request.setDimensions(dimensionFilters);
String nextToken = null;
do {
request.setNextToken(nextToken);
ListMetricsResult result = cloudWatchClient.listMetrics(request);
cloudwatchRequests.labels("listMetrics", rule.awsNamespace).inc();
for (Metric metric: result.getMetrics()) {
if (metric.getDimensions().size() != dimensionFilters.size()) {
// AWS returns all the metrics with dimensions beyond the ones we ask for,
// so filter them out.
continue;
}
if (useMetric(rule, tagBasedResourceIds, metric)) {
dimensions.add(metric.getDimensions());
}
}
nextToken = result.getNextToken();
} while (nextToken != null);
return dimensions;
}
示例24
@Test
public void testDynamoIndexDimensions() throws Exception {
new CloudWatchCollector(
"---\nregion: reg\nmetrics:\n- aws_namespace: AWS/DynamoDB\n aws_metric_name: ConsumedReadCapacityUnits\n aws_dimensions:\n - TableName\n - GlobalSecondaryIndexName\n- aws_namespace: AWS/DynamoDB\n aws_metric_name: OnlineIndexConsumedWriteCapacity\n aws_dimensions:\n - TableName\n - GlobalSecondaryIndexName\n- aws_namespace: AWS/DynamoDB\n aws_metric_name: ConsumedReadCapacityUnits\n aws_dimensions:\n - TableName", cloudWatchClient, taggingClient).register(registry);
Mockito.when(cloudWatchClient.listMetrics((ListMetricsRequest)argThat(
new ListMetricsRequestMatcher().Namespace("AWS/DynamoDB").MetricName("ConsumedReadCapacityUnits").Dimensions("TableName", "GlobalSecondaryIndexName"))))
.thenReturn(new ListMetricsResult().withMetrics(
new Metric().withDimensions(new Dimension().withName("TableName").withValue("myTable"), new Dimension().withName("GlobalSecondaryIndexName").withValue("myIndex"))));
Mockito.when(cloudWatchClient.listMetrics((ListMetricsRequest)argThat(
new ListMetricsRequestMatcher().Namespace("AWS/DynamoDB").MetricName("OnlineIndexConsumedWriteCapacity").Dimensions("TableName", "GlobalSecondaryIndexName"))))
.thenReturn(new ListMetricsResult().withMetrics(
new Metric().withDimensions(new Dimension().withName("TableName").withValue("myTable"), new Dimension().withName("GlobalSecondaryIndexName").withValue("myIndex"))));
Mockito.when(cloudWatchClient.listMetrics((ListMetricsRequest)argThat(
new ListMetricsRequestMatcher().Namespace("AWS/DynamoDB").MetricName("ConsumedReadCapacityUnits").Dimensions("TableName"))))
.thenReturn(new ListMetricsResult().withMetrics(
new Metric().withDimensions(new Dimension().withName("TableName").withValue("myTable"))));
Mockito.when(cloudWatchClient.getMetricStatistics((GetMetricStatisticsRequest)argThat(
new GetMetricStatisticsRequestMatcher().Namespace("AWS/DynamoDB").MetricName("ConsumedReadCapacityUnits").Dimension("TableName", "myTable").Dimension("GlobalSecondaryIndexName", "myIndex"))))
.thenReturn(new GetMetricStatisticsResult().withDatapoints(
new Datapoint().withTimestamp(new Date()).withSum(1.0)));
Mockito.when(cloudWatchClient.getMetricStatistics((GetMetricStatisticsRequest)argThat(
new GetMetricStatisticsRequestMatcher().Namespace("AWS/DynamoDB").MetricName("OnlineIndexConsumedWriteCapacity").Dimension("TableName", "myTable").Dimension("GlobalSecondaryIndexName", "myIndex"))))
.thenReturn(new GetMetricStatisticsResult().withDatapoints(
new Datapoint().withTimestamp(new Date()).withSum(2.0)));
Mockito.when(cloudWatchClient.getMetricStatistics((GetMetricStatisticsRequest)argThat(
new GetMetricStatisticsRequestMatcher().Namespace("AWS/DynamoDB").MetricName("ConsumedReadCapacityUnits").Dimension("TableName", "myTable"))))
.thenReturn(new GetMetricStatisticsResult().withDatapoints(
new Datapoint().withTimestamp(new Date()).withSum(3.0)));
assertEquals(1.0, registry.getSampleValue("aws_dynamodb_consumed_read_capacity_units_index_sum", new String[]{"job", "instance", "table_name", "global_secondary_index_name"}, new String[]{"aws_dynamodb", "", "myTable", "myIndex"}), .01);
assertEquals(2.0, registry.getSampleValue("aws_dynamodb_online_index_consumed_write_capacity_sum", new String[]{"job", "instance", "table_name", "global_secondary_index_name"}, new String[]{"aws_dynamodb", "", "myTable", "myIndex"}), .01);
assertEquals(3.0, registry.getSampleValue("aws_dynamodb_consumed_read_capacity_units_sum", new String[]{"job", "instance", "table_name"}, new String[]{"aws_dynamodb", "", "myTable"}), .01);
}
示例25
@Test
public void testTagSelectEC2() throws Exception {
// Testing "aws_tag_select" with an EC2
new CloudWatchCollector(
"---\nregion: reg\nmetrics:\n- aws_namespace: AWS/EC2\n aws_metric_name: CPUUtilization\n aws_dimensions:\n - InstanceId\n aws_tag_select:\n resource_type_selection: \"ec2:instance\"\n resource_id_dimension: InstanceId\n tag_selections:\n Monitoring: [enabled]\n",
cloudWatchClient, taggingClient).register(registry);
Mockito.when(taggingClient.getResources((GetResourcesRequest)argThat(
new GetResourcesRequestMatcher().ResourceTypeFilter("ec2:instance").TagFilter("Monitoring", Arrays.asList("enabled")))))
.thenReturn(new GetResourcesResult().withResourceTagMappingList(
new ResourceTagMapping().withTags(new Tag().withKey("Monitoring").withValue("enabled")).withResourceARN("arn:aws:ec2:us-east-1:121212121212:instance/i-1")));
Mockito.when(cloudWatchClient.listMetrics((ListMetricsRequest)argThat(
new ListMetricsRequestMatcher().Namespace("AWS/EC2").MetricName("CPUUtilization").Dimensions("InstanceId"))))
.thenReturn(new ListMetricsResult().withMetrics(
new Metric().withDimensions(new Dimension().withName("InstanceId").withValue("i-1")),
new Metric().withDimensions(new Dimension().withName("InstanceId").withValue("i-2"))));
Mockito.when(cloudWatchClient.getMetricStatistics((GetMetricStatisticsRequest)argThat(
new GetMetricStatisticsRequestMatcher().Namespace("AWS/EC2").MetricName("CPUUtilization").Dimension("InstanceId", "i-1"))))
.thenReturn(new GetMetricStatisticsResult().withDatapoints(
new Datapoint().withTimestamp(new Date()).withAverage(2.0)));
Mockito.when(cloudWatchClient.getMetricStatistics((GetMetricStatisticsRequest)argThat(
new GetMetricStatisticsRequestMatcher().Namespace("AWS/EC2").MetricName("CPUUtilization").Dimension("InstanceId", "i-2"))))
.thenReturn(new GetMetricStatisticsResult().withDatapoints(
new Datapoint().withTimestamp(new Date()).withAverage(2.0)));
assertEquals(2.0, registry.getSampleValue("aws_ec2_cpuutilization_average", new String[]{"job", "instance", "instance_id"}, new String[]{"aws_ec2", "", "i-1"}), .01);
assertNull(registry.getSampleValue("aws_ec2_cpuutilization_average", new String[]{"job", "instance", "instance_id"}, new String[]{"aws_ec2", "", "i-2"}));
assertEquals(1.0, registry.getSampleValue("aws_resource_info", new String[]{"job", "instance", "arn", "instance_id", "tag_Monitoring"}, new String[]{"aws_ec2", "", "arn:aws:ec2:us-east-1:121212121212:instance/i-1", "i-1", "enabled"}), .01);
}
示例26
@Test
public void testTagSelectALB() throws Exception {
// Testing "aws_tag_select" with an ALB, which have a fairly complex ARN
new CloudWatchCollector(
"---\nregion: reg\nmetrics:\n- aws_namespace: AWS/ApplicationELB\n aws_metric_name: RequestCount\n aws_dimensions:\n - AvailabilityZone\n - LoadBalancer\n aws_tag_select:\n resource_type_selection: \"elasticloadbalancing:loadbalancer/app\"\n resource_id_dimension: LoadBalancer\n tag_selections:\n Monitoring: [enabled]\n",
cloudWatchClient, taggingClient).register(registry);
Mockito.when(taggingClient.getResources((GetResourcesRequest)argThat(
new GetResourcesRequestMatcher().ResourceTypeFilter("elasticloadbalancing:loadbalancer/app").TagFilter("Monitoring", Arrays.asList("enabled")))))
.thenReturn(new GetResourcesResult().withResourceTagMappingList(
new ResourceTagMapping().withTags(new Tag().withKey("Monitoring").withValue("enabled")).withResourceARN("arn:aws:elasticloadbalancing:us-east-1:121212121212:loadbalancer/app/myLB/123")));
Mockito.when(cloudWatchClient.listMetrics((ListMetricsRequest)argThat(
new ListMetricsRequestMatcher().Namespace("AWS/ApplicationELB").MetricName("RequestCount").Dimensions("AvailabilityZone", "LoadBalancer"))))
.thenReturn(new ListMetricsResult().withMetrics(
new Metric().withDimensions(new Dimension().withName("AvailabilityZone").withValue("a"), new Dimension().withName("LoadBalancer").withValue("app/myLB/123")),
new Metric().withDimensions(new Dimension().withName("AvailabilityZone").withValue("b"), new Dimension().withName("LoadBalancer").withValue("app/myLB/123")),
new Metric().withDimensions(new Dimension().withName("AvailabilityZone").withValue("a"), new Dimension().withName("LoadBalancer").withValue("app/myOtherLB/456"))));
Mockito.when(cloudWatchClient.getMetricStatistics((GetMetricStatisticsRequest)argThat(
new GetMetricStatisticsRequestMatcher().Namespace("AWS/ApplicationELB").MetricName("RequestCount").Dimension("AvailabilityZone", "a").Dimension("LoadBalancer", "app/myLB/123"))))
.thenReturn(new GetMetricStatisticsResult().withDatapoints(
new Datapoint().withTimestamp(new Date()).withAverage(2.0)));
Mockito.when(cloudWatchClient.getMetricStatistics((GetMetricStatisticsRequest)argThat(
new GetMetricStatisticsRequestMatcher().Namespace("AWS/ApplicationELB").MetricName("RequestCount").Dimension("AvailabilityZone", "b").Dimension("LoadBalancer", "app/myLB/123"))))
.thenReturn(new GetMetricStatisticsResult().withDatapoints(
new Datapoint().withTimestamp(new Date()).withAverage(3.0)));
Mockito.when(cloudWatchClient.getMetricStatistics((GetMetricStatisticsRequest)argThat(
new GetMetricStatisticsRequestMatcher().Namespace("AWS/ApplicationELB").MetricName("RequestCount").Dimension("AvailabilityZone", "a").Dimension("LoadBalancer", "app/myOtherLB/456"))))
.thenReturn(new GetMetricStatisticsResult().withDatapoints(
new Datapoint().withTimestamp(new Date()).withAverage(4.0)));
assertEquals(2.0, registry.getSampleValue("aws_applicationelb_request_count_average", new String[]{"job", "instance", "availability_zone", "load_balancer"}, new String[]{"aws_applicationelb", "", "a", "app/myLB/123"}), .01);
assertEquals(3.0, registry.getSampleValue("aws_applicationelb_request_count_average", new String[]{"job", "instance", "availability_zone", "load_balancer"}, new String[]{"aws_applicationelb", "", "b", "app/myLB/123"}), .01);
assertNull(registry.getSampleValue("aws_applicationelb_request_count_average", new String[]{"job", "instance", "availability_zone", "load_balancer"}, new String[]{"aws_applicationelb", "", "a", "app/myOtherLB/456"}));
assertEquals(1.0, registry.getSampleValue("aws_resource_info", new String[]{"job", "instance", "arn", "load_balancer", "tag_Monitoring"}, new String[]{"aws_applicationelb", "", "arn:aws:elasticloadbalancing:us-east-1:121212121212:loadbalancer/app/myLB/123", "app/myLB/123", "enabled"}), .01);
}
示例27
@Test
public void testTagSelectUsesPaginationToken() throws Exception {
// Testing "aws_tag_select" with an EC2
new CloudWatchCollector(
"---\nregion: reg\nmetrics:\n- aws_namespace: AWS/EC2\n aws_metric_name: CPUUtilization\n aws_dimensions:\n - InstanceId\n aws_tag_select:\n resource_type_selection: \"ec2:instance\"\n resource_id_dimension: InstanceId\n tag_selections:\n Monitoring: [enabled]\n",
cloudWatchClient, taggingClient).register(registry);
Mockito.when(taggingClient.getResources((GetResourcesRequest)argThat(
new GetResourcesRequestMatcher().ResourceTypeFilter("ec2:instance").TagFilter("Monitoring", Arrays.asList("enabled")))))
.thenReturn(new GetResourcesResult().withPaginationToken("ABC").withResourceTagMappingList(
new ResourceTagMapping().withTags(new Tag().withKey("Monitoring").withValue("enabled")).withResourceARN("arn:aws:ec2:us-east-1:121212121212:instance/i-1")));
Mockito.when(taggingClient.getResources((GetResourcesRequest)argThat(
new GetResourcesRequestMatcher().PaginationToken("ABC").ResourceTypeFilter("ec2:instance").TagFilter("Monitoring", Arrays.asList("enabled")))))
.thenReturn(new GetResourcesResult().withResourceTagMappingList(
new ResourceTagMapping().withTags(new Tag().withKey("Monitoring").withValue("enabled")).withResourceARN("arn:aws:ec2:us-east-1:121212121212:instance/i-2")));
Mockito.when(cloudWatchClient.listMetrics((ListMetricsRequest)argThat(
new ListMetricsRequestMatcher().Namespace("AWS/EC2").MetricName("CPUUtilization").Dimensions("InstanceId"))))
.thenReturn(new ListMetricsResult().withMetrics(
new Metric().withDimensions(new Dimension().withName("InstanceId").withValue("i-1")),
new Metric().withDimensions(new Dimension().withName("InstanceId").withValue("i-2"))));
Mockito.when(cloudWatchClient.getMetricStatistics((GetMetricStatisticsRequest)argThat(
new GetMetricStatisticsRequestMatcher().Namespace("AWS/EC2").MetricName("CPUUtilization").Dimension("InstanceId", "i-1"))))
.thenReturn(new GetMetricStatisticsResult().withDatapoints(
new Datapoint().withTimestamp(new Date()).withAverage(2.0)));
Mockito.when(cloudWatchClient.getMetricStatistics((GetMetricStatisticsRequest)argThat(
new GetMetricStatisticsRequestMatcher().Namespace("AWS/EC2").MetricName("CPUUtilization").Dimension("InstanceId", "i-2"))))
.thenReturn(new GetMetricStatisticsResult().withDatapoints(
new Datapoint().withTimestamp(new Date()).withAverage(3.0)));
assertEquals(2.0, registry.getSampleValue("aws_ec2_cpuutilization_average", new String[]{"job", "instance", "instance_id"}, new String[]{"aws_ec2", "", "i-1"}), .01);
assertEquals(3.0, registry.getSampleValue("aws_ec2_cpuutilization_average", new String[]{"job", "instance", "instance_id"}, new String[]{"aws_ec2", "", "i-2"}), .01);
assertEquals(1.0, registry.getSampleValue("aws_resource_info", new String[]{"job", "instance", "arn", "instance_id", "tag_Monitoring"}, new String[]{"aws_ec2", "", "arn:aws:ec2:us-east-1:121212121212:instance/i-1", "i-1", "enabled"}), .01);
assertEquals(1.0, registry.getSampleValue("aws_resource_info", new String[]{"job", "instance", "arn", "instance_id", "tag_Monitoring"}, new String[]{"aws_ec2", "", "arn:aws:ec2:us-east-1:121212121212:instance/i-2", "i-2", "enabled"}), .01);
}
示例28
@Test
public void testMultipleSelection() throws Exception {
// When multiple selections are made, "and" logic should be applied on metrics
new CloudWatchCollector(
"---\nregion: reg\nmetrics:\n- aws_namespace: AWS/EC2\n aws_metric_name: CPUUtilization\n aws_dimensions:\n - InstanceId\n aws_tag_select:\n resource_type_selection: \"ec2:instance\"\n resource_id_dimension: InstanceId\n tag_selections:\n Monitoring: [enabled]\n aws_dimension_select:\n InstanceId: [\"i-1\"]",
cloudWatchClient, taggingClient).register(registry);
Mockito.when(taggingClient.getResources((GetResourcesRequest)argThat(
new GetResourcesRequestMatcher().ResourceTypeFilter("ec2:instance").TagFilter("Monitoring", Arrays.asList("enabled")))))
.thenReturn(new GetResourcesResult().withResourceTagMappingList(
new ResourceTagMapping().withTags(new Tag().withKey("Monitoring").withValue("enabled")).withResourceARN("arn:aws:ec2:us-east-1:121212121212:instance/i-1"),
new ResourceTagMapping().withTags(new Tag().withKey("Monitoring").withValue("enabled")).withResourceARN("arn:aws:ec2:us-east-1:121212121212:instance/i-2")));
Mockito.when(cloudWatchClient.listMetrics((ListMetricsRequest)argThat(
new ListMetricsRequestMatcher().Namespace("AWS/EC2").MetricName("CPUUtilization").Dimensions("InstanceId"))))
.thenReturn(new ListMetricsResult().withMetrics(
new Metric().withDimensions(new Dimension().withName("InstanceId").withValue("i-1")),
new Metric().withDimensions(new Dimension().withName("InstanceId").withValue("i-2"))));
Mockito.when(cloudWatchClient.getMetricStatistics((GetMetricStatisticsRequest)argThat(
new GetMetricStatisticsRequestMatcher().Namespace("AWS/EC2").MetricName("CPUUtilization").Dimension("InstanceId", "i-1"))))
.thenReturn(new GetMetricStatisticsResult().withDatapoints(
new Datapoint().withTimestamp(new Date()).withAverage(2.0)));
Mockito.when(cloudWatchClient.getMetricStatistics((GetMetricStatisticsRequest)argThat(
new GetMetricStatisticsRequestMatcher().Namespace("AWS/EC2").MetricName("CPUUtilization").Dimension("InstanceId", "i-2"))))
.thenReturn(new GetMetricStatisticsResult().withDatapoints(
new Datapoint().withTimestamp(new Date()).withAverage(3.0)));
assertEquals(2.0, registry.getSampleValue("aws_ec2_cpuutilization_average", new String[]{"job", "instance", "instance_id"}, new String[]{"aws_ec2", "", "i-1"}), .01);
assertNull(registry.getSampleValue("aws_ec2_cpuutilization_average", new String[]{"job", "instance", "instance_id"}, new String[]{"aws_ec2", "", "i-2"}));
assertEquals(1.0, registry.getSampleValue("aws_resource_info", new String[]{"job", "instance", "arn", "instance_id", "tag_Monitoring"}, new String[]{"aws_ec2", "", "arn:aws:ec2:us-east-1:121212121212:instance/i-1", "i-1", "enabled"}), .01);
assertEquals(1.0, registry.getSampleValue("aws_resource_info", new String[]{"job", "instance", "arn", "instance_id", "tag_Monitoring"}, new String[]{"aws_ec2", "", "arn:aws:ec2:us-east-1:121212121212:instance/i-2", "i-2", "enabled"}), .01);
}
示例29
/**
* Handles retrieving the list of available metrics when the METRICS_TABLE is queried by listing metrics in Cloudwatch Metrics.
*/
private void readMetricsWithConstraint(BlockSpiller blockSpiller, ReadRecordsRequest request, QueryStatusChecker queryStatusChecker)
throws TimeoutException
{
ListMetricsRequest listMetricsRequest = new ListMetricsRequest();
MetricUtils.pushDownPredicate(request.getConstraints(), listMetricsRequest);
String prevToken;
Set<String> requiredFields = new HashSet<>();
request.getSchema().getFields().stream().forEach(next -> requiredFields.add(next.getName()));
ValueSet dimensionNameConstraint = request.getConstraints().getSummary().get(DIMENSION_NAME_FIELD);
ValueSet dimensionValueConstraint = request.getConstraints().getSummary().get(DIMENSION_VALUE_FIELD);
do {
prevToken = listMetricsRequest.getNextToken();
ListMetricsResult result = invoker.invoke(() -> metrics.listMetrics(listMetricsRequest));
for (Metric nextMetric : result.getMetrics()) {
blockSpiller.writeRows((Block block, int row) -> {
boolean matches = MetricUtils.applyMetricConstraints(blockSpiller.getConstraintEvaluator(), nextMetric, null);
if (matches) {
matches &= block.offerValue(METRIC_NAME_FIELD, row, nextMetric.getMetricName());
matches &= block.offerValue(NAMESPACE_FIELD, row, nextMetric.getNamespace());
matches &= block.offerComplexValue(STATISTIC_FIELD, row, DEFAULT, STATISTICS);
matches &= block.offerComplexValue(DIMENSIONS_FIELD,
row,
(Field field, Object val) -> {
if (field.getName().equals(DIMENSION_NAME_FIELD)) {
return ((Dimension) val).getName();
}
else if (field.getName().equals(DIMENSION_VALUE_FIELD)) {
return ((Dimension) val).getValue();
}
throw new RuntimeException("Unexpected field " + field.getName());
},
nextMetric.getDimensions());
//This field is 'faked' in that we just use it as a convenient way to filter single dimensions. As such
//we always populate it with the value of the filter if the constraint passed and the filter was singleValue
String dimName = (dimensionNameConstraint == null || !dimensionNameConstraint.isSingleValue())
? null : (dimensionNameConstraint.getSingleValue().toString());
matches &= block.offerValue(DIMENSION_NAME_FIELD, row, dimName);
//This field is 'faked' in that we just use it as a convenient way to filter single dimensions. As such
//we always populate it with the value of the filter if the constraint passed and the filter was singleValue
String dimValue = (dimensionValueConstraint == null || !dimensionValueConstraint.isSingleValue())
? null : dimensionValueConstraint.getSingleValue().toString();
matches &= block.offerValue(DIMENSION_VALUE_FIELD, row, dimValue);
}
return matches ? 1 : 0;
});
}
listMetricsRequest.setNextToken(result.getNextToken());
}
while (listMetricsRequest.getNextToken() != null && !listMetricsRequest.getNextToken().equalsIgnoreCase(prevToken) && queryStatusChecker.isQueryRunning());
}
示例30
@Test
public void doGetMetricSamplesSplits()
throws Exception
{
logger.info("doGetMetricSamplesSplits: enter");
String namespaceFilter = "MyNameSpace";
String statistic = "p90";
int numMetrics = 10;
when(mockMetrics.listMetrics(any(ListMetricsRequest.class))).thenAnswer((InvocationOnMock invocation) -> {
ListMetricsRequest request = invocation.getArgumentAt(0, ListMetricsRequest.class);
//assert that the namespace filter was indeed pushed down
assertEquals(namespaceFilter, request.getNamespace());
String nextToken = (request.getNextToken() == null) ? "valid" : null;
List<Metric> metrics = new ArrayList<>();
for (int i = 0; i < numMetrics; i++) {
metrics.add(new Metric().withNamespace(namespaceFilter).withMetricName("metric-" + i));
}
return new ListMetricsResult().withNextToken(nextToken).withMetrics(metrics);
});
Schema schema = SchemaBuilder.newBuilder().addIntField("partitionId").build();
Block partitions = allocator.createBlock(schema);
BlockUtils.setValue(partitions.getFieldVector("partitionId"), 1, 1);
partitions.setRowCount(1);
Map<String, ValueSet> constraintsMap = new HashMap<>();
constraintsMap.put(NAMESPACE_FIELD,
EquatableValueSet.newBuilder(allocator, Types.MinorType.VARCHAR.getType(), true, false)
.add(namespaceFilter).build());
constraintsMap.put(STATISTIC_FIELD,
EquatableValueSet.newBuilder(allocator, Types.MinorType.VARCHAR.getType(), true, false)
.add(statistic).build());
String continuationToken = null;
GetSplitsRequest originalReq = new GetSplitsRequest(identity,
"queryId",
"catalog_name",
new TableName(defaultSchema, "metric_samples"),
partitions,
Collections.singletonList("partitionId"),
new Constraints(constraintsMap),
continuationToken);
int numContinuations = 0;
do {
GetSplitsRequest req = new GetSplitsRequest(originalReq, continuationToken);
logger.info("doGetMetricSamplesSplits: req[{}]", req);
MetadataResponse rawResponse = handler.doGetSplits(allocator, req);
assertEquals(MetadataRequestType.GET_SPLITS, rawResponse.getRequestType());
GetSplitsResponse response = (GetSplitsResponse) rawResponse;
continuationToken = response.getContinuationToken();
logger.info("doGetMetricSamplesSplits: continuationToken[{}] - numSplits[{}]", continuationToken, response.getSplits().size());
assertEquals(3, response.getSplits().size());
for (Split nextSplit : response.getSplits()) {
assertNotNull(nextSplit.getProperty(SERIALIZED_METRIC_STATS_FIELD_NAME));
}
if (continuationToken != null) {
numContinuations++;
}
}
while (continuationToken != null);
assertEquals(1, numContinuations);
logger.info("doGetMetricSamplesSplits: exit");
}