4 changed files with 187 additions and 11 deletions
@ -0,0 +1,77 @@ |
|||||||
|
/* |
||||||
|
* Copyright 2012-2023 the original author or authors. |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* https://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
|
|
||||||
|
package org.springframework.boot.actuate.autoconfigure.tracing; |
||||||
|
|
||||||
|
import java.util.ArrayList; |
||||||
|
import java.util.Collections; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
import brave.baggage.BaggagePropagation; |
||||||
|
import brave.baggage.BaggagePropagationConfig; |
||||||
|
import brave.baggage.BaggagePropagationConfig.SingleBaggageField; |
||||||
|
|
||||||
|
import org.springframework.util.Assert; |
||||||
|
import org.springframework.util.CollectionUtils; |
||||||
|
|
||||||
|
/** |
||||||
|
* Local baggage fields. |
||||||
|
* |
||||||
|
* @author Moritz Halbritter |
||||||
|
*/ |
||||||
|
class LocalBaggageFields { |
||||||
|
|
||||||
|
private final List<String> fields; |
||||||
|
|
||||||
|
LocalBaggageFields(List<String> fields) { |
||||||
|
Assert.notNull(fields, "fields must not be null"); |
||||||
|
this.fields = fields; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Returns the local fields as a list. |
||||||
|
* @return the list |
||||||
|
*/ |
||||||
|
List<String> asList() { |
||||||
|
return Collections.unmodifiableList(this.fields); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Extracts the local fields from the given propagation factory builder. |
||||||
|
* @param builder the propagation factory builder to extract the local fields from |
||||||
|
* @return the local fields |
||||||
|
*/ |
||||||
|
static LocalBaggageFields extractFrom(BaggagePropagation.FactoryBuilder builder) { |
||||||
|
List<String> localFields = new ArrayList<>(); |
||||||
|
for (BaggagePropagationConfig config : builder.configs()) { |
||||||
|
if (config instanceof SingleBaggageField field) { |
||||||
|
if (CollectionUtils.isEmpty(field.keyNames())) { |
||||||
|
localFields.add(field.field().name()); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
return new LocalBaggageFields(localFields); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Creates empty local fields. |
||||||
|
* @return the empty local fields |
||||||
|
*/ |
||||||
|
static LocalBaggageFields empty() { |
||||||
|
return new LocalBaggageFields(Collections.emptyList()); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,63 @@ |
|||||||
|
/* |
||||||
|
* Copyright 2012-2023 the original author or authors. |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* https://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
|
|
||||||
|
package org.springframework.boot.actuate.autoconfigure.tracing; |
||||||
|
|
||||||
|
import brave.baggage.BaggageField; |
||||||
|
import brave.baggage.BaggagePropagation; |
||||||
|
import brave.baggage.BaggagePropagation.FactoryBuilder; |
||||||
|
import brave.baggage.BaggagePropagationConfig; |
||||||
|
import brave.propagation.Propagation; |
||||||
|
import brave.propagation.Propagation.Factory; |
||||||
|
import brave.propagation.Propagation.KeyFactory; |
||||||
|
import org.junit.jupiter.api.Test; |
||||||
|
|
||||||
|
import static org.assertj.core.api.Assertions.assertThat; |
||||||
|
|
||||||
|
/** |
||||||
|
* Tests for {@link LocalBaggageFields}. |
||||||
|
* |
||||||
|
* @author Moritz Halbritter |
||||||
|
*/ |
||||||
|
class LocalBaggageFieldsTests { |
||||||
|
|
||||||
|
@Test |
||||||
|
void extractFromBuilder() { |
||||||
|
FactoryBuilder builder = createBuilder(); |
||||||
|
builder.add(BaggagePropagationConfig.SingleBaggageField.remote(BaggageField.create("remote-field-1"))); |
||||||
|
builder.add(BaggagePropagationConfig.SingleBaggageField.remote(BaggageField.create("remote-field-2"))); |
||||||
|
builder.add(BaggagePropagationConfig.SingleBaggageField.local(BaggageField.create("local-field-1"))); |
||||||
|
builder.add(BaggagePropagationConfig.SingleBaggageField.local(BaggageField.create("local-field-2"))); |
||||||
|
LocalBaggageFields fields = LocalBaggageFields.extractFrom(builder); |
||||||
|
assertThat(fields.asList()).containsExactlyInAnyOrder("local-field-1", "local-field-2"); |
||||||
|
} |
||||||
|
|
||||||
|
@Test |
||||||
|
void empty() { |
||||||
|
assertThat(LocalBaggageFields.empty().asList()).isEmpty(); |
||||||
|
} |
||||||
|
|
||||||
|
@SuppressWarnings("deprecation") |
||||||
|
private static FactoryBuilder createBuilder() { |
||||||
|
return BaggagePropagation.newFactoryBuilder(new Factory() { |
||||||
|
@Override |
||||||
|
public <K> Propagation<K> create(KeyFactory<K> keyFactory) { |
||||||
|
return null; |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
Loading…
Reference in new issue