From b732f2e46204e511636a206da544eb611684fc2d Mon Sep 17 00:00:00 2001 From: Tommy Ludwig <8924140+shakuzen@users.noreply.github.com> Date: Thu, 6 Oct 2022 05:35:19 +0900 Subject: [PATCH] Allow documenting optional keys (#3454) 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; + } } }