From 883d31935a9a51496c1f76dc093e672cb6db50d5 Mon Sep 17 00:00:00 2001 From: Tommy Ludwig <8924140+shakuzen@users.noreply.github.com> Date: Wed, 5 Oct 2022 18:29:58 +0900 Subject: [PATCH] Allow documenting optional keys There is no distinction between required and optional keys currently when using ObservationDocumentation. This introduces a new method `isRequired` that will default to true. Optional keys may be documented by overriding this method. Future use of this can be in the docs-generator marking whether a key is required or not in the generated documentation. Also, testing the instrumentation with our TCKs can check that required keys are always present, and that undocumented keys are not present but optional keys may or may not be present. --- .../java/io/micrometer/common/docs/KeyName.java | 9 +++++++++ .../tck/TestObservationRegistryAssertTests.java | 13 +++++++++++++ 2 files changed, 22 insertions(+) diff --git a/micrometer-commons/src/main/java/io/micrometer/common/docs/KeyName.java b/micrometer-commons/src/main/java/io/micrometer/common/docs/KeyName.java index 23e1e7ac73..d71dbebf1e 100644 --- a/micrometer-commons/src/main/java/io/micrometer/common/docs/KeyName.java +++ b/micrometer-commons/src/main/java/io/micrometer/common/docs/KeyName.java @@ -62,4 +62,13 @@ default KeyValue withValue(String value, Predicate validator) { */ String asString(); + /** + * Whether this key is required to be present in the instrumentation. This can be + * checked in a test of the instrumentation. + * @return whether this key is required + */ + default boolean isRequired() { + return true; + } + } diff --git a/micrometer-observation-test/src/test/java/io/micrometer/observation/tck/TestObservationRegistryAssertTests.java b/micrometer-observation-test/src/test/java/io/micrometer/observation/tck/TestObservationRegistryAssertTests.java index f2f90beacd..d2d92b9950 100644 --- a/micrometer-observation-test/src/test/java/io/micrometer/observation/tck/TestObservationRegistryAssertTests.java +++ b/micrometer-observation-test/src/test/java/io/micrometer/observation/tck/TestObservationRegistryAssertTests.java @@ -356,6 +356,19 @@ enum MyKeyName implements KeyName { public String asString() { return "foo"; } + }, + + MAYBE_SOMETHING { + + @Override + public String asString() { + return "maybe.something"; + } + + @Override + public boolean isRequired() { + return false; + } } }