Skip to content

Commit d2da0bc

Browse files
authored
Feature: Send metric on startup with info if validation is enabled (#12)
1 parent 990e921 commit d2da0bc

File tree

4 files changed

+44
-6
lines changed

4 files changed

+44
-6
lines changed

openapi-validation-api/src/main/java/com/getyourguide/openapi/validation/api/metrics/DefaultMetricsReporter.java

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,20 @@ public class DefaultMetricsReporter implements MetricsReporter {
1616

1717
@Override
1818
public void reportViolation(OpenApiViolation violation) {
19-
var violationMetricName = configuration.getMetricName() + ".error";
19+
String violationMetricName = buildMetricName(".error");
2020
metricsClient.increment(violationMetricName, createTagsForViolation(violation));
2121
}
2222

23+
@Override
24+
public void reportStartup(boolean isValidationEnabled) {
25+
String startupMetricName = buildMetricName(".startup");
26+
metricsClient.increment(startupMetricName, createTagsForStartup(isValidationEnabled));
27+
}
28+
29+
private String buildMetricName(String suffix) {
30+
return configuration.getMetricName() + suffix;
31+
}
32+
2333
private MetricTag[] createTagsForViolation(OpenApiViolation violation) {
2434
var tags = new ArrayList<MetricTag>();
2535

@@ -29,11 +39,24 @@ private MetricTag[] createTagsForViolation(OpenApiViolation violation) {
2939
violation.getResponseStatus()
3040
.ifPresent(responseStatus -> tags.add(new MetricTag("status", responseStatus.toString())));
3141

42+
addAdditionalTags(tags);
43+
44+
return tags.toArray(MetricTag[]::new);
45+
}
46+
47+
private MetricTag[] createTagsForStartup(boolean isValidationEnabled) {
48+
var tags = new ArrayList<MetricTag>();
49+
50+
tags.add(new MetricTag("validation_enabled", String.valueOf(isValidationEnabled)));
51+
addAdditionalTags(tags);
52+
53+
return tags.toArray(MetricTag[]::new);
54+
}
55+
56+
private void addAdditionalTags(ArrayList<MetricTag> tags) {
3257
if (configuration.getMetricAdditionalTags() != null) {
3358
tags.addAll(configuration.getMetricAdditionalTags());
3459
}
35-
36-
return tags.toArray(MetricTag[]::new);
3760
}
3861

3962
@Builder

openapi-validation-api/src/main/java/com/getyourguide/openapi/validation/api/metrics/MetricsReporter.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,6 @@
44

55
public interface MetricsReporter {
66
void reportViolation(OpenApiViolation violation);
7+
8+
void reportStartup(boolean isValidationEnabled);
79
}

openapi-validation-core/src/main/java/com/getyourguide/openapi/validation/core/OpenApiRequestValidator.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import com.atlassian.oai.validator.model.SimpleRequest;
55
import com.atlassian.oai.validator.model.SimpleResponse;
66
import com.atlassian.oai.validator.report.ValidationReport;
7+
import com.getyourguide.openapi.validation.api.metrics.MetricsReporter;
78
import com.getyourguide.openapi.validation.api.model.Direction;
89
import com.getyourguide.openapi.validation.api.model.RequestMetaData;
910
import com.getyourguide.openapi.validation.api.model.ResponseMetaData;
@@ -24,9 +25,16 @@ public class OpenApiRequestValidator {
2425
private final OpenApiInteractionValidatorWrapper validator;
2526
private final ValidationReportHandler validationReportHandler;
2627

27-
public OpenApiRequestValidator(ValidationReportHandler validationReportHandler, String specificationFilePath, ValidatorConfiguration configuration) {
28+
public OpenApiRequestValidator(
29+
ValidationReportHandler validationReportHandler,
30+
MetricsReporter metricsReporter,
31+
String specificationFilePath,
32+
ValidatorConfiguration configuration
33+
) {
2834
this.validator = new OpenApiInteractionValidatorFactory().build(specificationFilePath, configuration);
2935
this.validationReportHandler = validationReportHandler;
36+
37+
metricsReporter.reportStartup(validator != null);
3038
}
3139

3240
public boolean isReady() {

spring-boot-starter/spring-boot-starter-core/src/main/java/com/getyourguide/openapi/validation/autoconfigure/LibraryAutoConfiguration.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,9 +93,14 @@ public ValidatorConfiguration validatorConfiguration() {
9393
@Bean
9494
public OpenApiRequestValidator openApiRequestValidator(
9595
ValidationReportHandler validationReportHandler,
96+
MetricsReporter metricsReporter,
9697
ValidatorConfiguration validatorConfiguration
9798
) {
98-
return new OpenApiRequestValidator(validationReportHandler, properties.getSpecificationFilePath(),
99-
validatorConfiguration);
99+
return new OpenApiRequestValidator(
100+
validationReportHandler,
101+
metricsReporter,
102+
properties.getSpecificationFilePath(),
103+
validatorConfiguration
104+
);
100105
}
101106
}

0 commit comments

Comments
 (0)