Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
81 changes: 37 additions & 44 deletions metrics/src/main/java/io/scalecube/metrics/PropertiesRegistry.java
Original file line number Diff line number Diff line change
Expand Up @@ -61,82 +61,62 @@ public void put(String name, Object value) {
});
}

/**
* Retrieves {@link Byte} property.
*
* @param countersReader countersReader
* @param name property name
* @return property value, or {@code null} if not found
*/
public static Byte getByteProperty(CountersReader countersReader, String name) {
return getProperty(countersReader, name, Byte::parseByte);
}

/**
* Retrieves {@link Short} property.
*
* @param countersReader countersReader
* @param name property name
* @return property value, or {@code null} if not found
*/
public static Short getShortProperty(CountersReader countersReader, String name) {
return getProperty(countersReader, name, Short::parseShort);
}

/**
* Retrieves {@link Integer} property.
*
* @param countersReader countersReader
* @param name property name
* @return property value, or {@code null} if not found
* @return property value, or {@code null} if not found or malformed, or throws exception if
* unparsable
*/
public static Integer getIntProperty(CountersReader countersReader, String name) {
return getProperty(countersReader, name, Integer::parseInt);
public static Integer getInt(CountersReader countersReader, String name) {
return get(countersReader, name, Integer::parseInt);
}

/**
* Retrieves {@link Long} property.
*
* @param countersReader countersReader
* @param name property name
* @return property value, or {@code null} if not found
* @return property value, or {@code null} if not found or malformed, or throws exception if
* unparsable
*/
public static Long getLongProperty(CountersReader countersReader, String name) {
return getProperty(countersReader, name, Long::parseLong);
public static Long getLong(CountersReader countersReader, String name) {
return get(countersReader, name, Long::parseLong);
}

/**
* Retrieves {@link Double} property.
* Retrieves enum property.
*
* @param countersReader countersReader
* @param name property name
* @return property value, or {@code null} if not found
* @return property value, or {@code null} if not found or malformed
*/
public static Double getDoubleProperty(CountersReader countersReader, String name) {
return getProperty(countersReader, name, Double::parseDouble);
public static <T extends Enum<T>> T getEnum(
CountersReader countersReader, String name, Function<String, T> enumFunc) {
return get(countersReader, name, enumFunc);
}

/**
* Retrieves enum property.
* Retrieves {@link Boolean} property.
*
* @param countersReader countersReader
* @param name property name
* @return property value, or {@code null} if not found
* @return property value, or {@code null} if not found or malformed
*/
public static <T extends Enum<T>> T getEnumProperty(
CountersReader countersReader, String name, Function<String, T> enumFunc) {
return getProperty(countersReader, name, enumFunc);
public static Boolean getBoolean(CountersReader countersReader, String name) {
return get(countersReader, name, Boolean::parseBoolean);
}

/**
* Retrieves {@link String} property.
*
* @param countersReader countersReader
* @param name property name
* @return property value, or {@code null} if not found
* @return property value, or {@code null} if not found or malformed
*/
public static String getProperty(CountersReader countersReader, String name) {
return getProperty(countersReader, name, s -> s);
public static String getString(CountersReader countersReader, String name) {
return get(countersReader, name, s -> s);
}

/**
Expand All @@ -146,12 +126,20 @@ public static String getProperty(CountersReader countersReader, String name) {
* @param name property name
* @param converter function to convert string value
* @param <T> result type
* @return converted property value, or {@code null} if not found
* @return converted property value, or {@code null} if not found or malformed
*/
public static <T> T getProperty(
public static <T> T get(
CountersReader countersReader, String name, Function<String, T> converter) {
final var counter = CounterDescriptor.findFirstCounter(countersReader, byPropertyName(name));
return counter != null ? converter.apply(counter.label().split("=")[1]) : null;
if (counter == null) {
return null;
}
final var label = counter.label();
final var equalsIndex = label.indexOf('=');
if (equalsIndex == -1) {
return null; // malformed label
}
return converter.apply(label.substring(equalsIndex + 1));
}

/**
Expand All @@ -162,6 +150,11 @@ public static <T> T getProperty(
*/
public static Predicate<CounterDescriptor> byPropertyName(String name) {
return byType(PropertiesRegistry.PROPERTY_COUNTER_TYPE_ID)
.and(descriptor -> name.equals(descriptor.label().split("=")[0]));
.and(
descriptor -> {
final var label = descriptor.label();
final var equalsIndex = label.indexOf('=');
return equalsIndex != -1 && name.equals(label.substring(0, equalsIndex));
});
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -33,70 +33,43 @@ void stringProperty() {
final var value = UUID.randomUUID();
final var name = "string_property";
propertiesRegistry.put(name, value);
assertEquals(value.toString(), PropertiesRegistry.getProperty(countersManager, name));
}

@Test
void byteProperty() {
final String name = "byte_property";
byte value = 42;
propertiesRegistry.put(name, value);
assertEquals(Byte.valueOf(value), PropertiesRegistry.getByteProperty(countersManager, name));
}

@Test
void shortProperty() {
final String name = "short_property";
short value = 12345;
propertiesRegistry.put(name, value);
assertEquals(Short.valueOf(value), PropertiesRegistry.getShortProperty(countersManager, name));
assertEquals(value.toString(), PropertiesRegistry.getString(countersManager, name));
}

@Test
void intProperty() {
final String name = "int_property";
int value = 123456789;
propertiesRegistry.put(name, value);
assertEquals(Integer.valueOf(value), PropertiesRegistry.getIntProperty(countersManager, name));
assertEquals(Integer.valueOf(value), PropertiesRegistry.getInt(countersManager, name));
}

@Test
void longProperty() {
final String name = "long_property";
long value = 9876543210L;
propertiesRegistry.put(name, value);
assertEquals(Long.valueOf(value), PropertiesRegistry.getLongProperty(countersManager, name));
}

@Test
void doubleProperty() {
final String name = "double_property";
double value = 3.14159;
propertiesRegistry.put(name, value);
assertEquals(
Double.valueOf(value), PropertiesRegistry.getDoubleProperty(countersManager, name));
assertEquals(Long.valueOf(value), PropertiesRegistry.getLong(countersManager, name));
}

@Test
void enumProperty() {
final String name = "enum_property";
SampleEnum value = SampleEnum.B;
propertiesRegistry.put(name, value);
SampleEnum result =
PropertiesRegistry.getEnumProperty(countersManager, name, SampleEnum::valueOf);
SampleEnum result = PropertiesRegistry.getEnum(countersManager, name, SampleEnum::valueOf);
assertEquals(value, result);
}

@Test
void unknownPropertyReturnsNull() {
assertNull(PropertiesRegistry.getProperty(countersManager, "nonexistent"));
assertNull(PropertiesRegistry.getByteProperty(countersManager, "nonexistent"));
assertNull(PropertiesRegistry.getShortProperty(countersManager, "nonexistent"));
assertNull(PropertiesRegistry.getIntProperty(countersManager, "nonexistent"));
assertNull(PropertiesRegistry.getLongProperty(countersManager, "nonexistent"));
assertNull(PropertiesRegistry.getDoubleProperty(countersManager, "nonexistent"));
assertNull(
PropertiesRegistry.getEnumProperty(countersManager, "nonexistent", SampleEnum::valueOf));
assertNull(PropertiesRegistry.getString(countersManager, "nonexistent"));
assertNull(PropertiesRegistry.getInt(countersManager, "nonexistent"));
assertNull(PropertiesRegistry.getInt(countersManager, "nonexistent"));
assertNull(PropertiesRegistry.getInt(countersManager, "nonexistent"));
assertNull(PropertiesRegistry.getLong(countersManager, "nonexistent"));
assertNull(PropertiesRegistry.getBoolean(countersManager, "nonexistent"));
assertNull(PropertiesRegistry.getEnum(countersManager, "nonexistent", SampleEnum::valueOf));
}

enum SampleEnum {
Expand Down