Skip to content

Commit 31fc31e

Browse files
chore: add regex capture to label application rule (#214)
1 parent c0dd217 commit 31fc31e

File tree

3 files changed

+22
-1
lines changed

3 files changed

+22
-1
lines changed

label-application-rule-config-service-api/src/main/proto/org/hypertrace/label/application/rule/config/service/v1/label_application_rule.proto

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,7 @@ message LabelApplicationRuleData {
110110
string key = 1;
111111
optional string json_path = 2;
112112
optional string alias = 3;
113+
optional string regex_capture = 4;
113114
}
114115
}
115116
}

label-application-rule-config-service-impl/src/main/java/org/hypertrace/label/application/rule/config/service/LabelApplicationRuleValidatorImpl.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -243,9 +243,10 @@ public void validateLabelExpression(Action.DynamicLabel dynamicLabel) {
243243
.getTokenExtractionRulesList()
244244
.forEach(
245245
tokenExtractionRule -> {
246-
validKeys.add(tokenExtractionRule.getKey());
247246
if (tokenExtractionRule.hasAlias()) {
248247
validKeys.add(tokenExtractionRule.getAlias());
248+
} else {
249+
validKeys.add(tokenExtractionRule.getKey());
249250
}
250251
});
251252
Pattern pattern = Pattern.compile("\\{(\\\\}|[^}])*}");
@@ -264,6 +265,9 @@ public void validateLabelExpression(Action.DynamicLabel dynamicLabel) {
264265
private void validateTokenExtractionRule(
265266
Action.DynamicLabel.TokenExtractionRule tokenExtractionRule) {
266267
validateNonDefaultPresenceOrThrow(tokenExtractionRule, tokenExtractionRule.KEY_FIELD_NUMBER);
268+
if (tokenExtractionRule.hasRegexCapture()) {
269+
RegexValidator.validateCaptureGroupCount(tokenExtractionRule.getRegexCapture(), 1);
270+
}
267271
}
268272

269273
private void throwInvalidArgumentException(String description) {

validation-utils/src/main/java/org/hypertrace/config/validation/RegexValidator.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,20 @@ public static Status validate(String regexPattern) {
1616
}
1717
return Status.OK;
1818
}
19+
20+
public static Status validateCaptureGroupCount(String regexPattern, int expectedCount) {
21+
// compiling an invalid regex throws PatternSyntaxException
22+
try {
23+
Pattern pattern = Pattern.compile(regexPattern);
24+
if (pattern.groupCount() != expectedCount) {
25+
return Status.INVALID_ARGUMENT.withDescription(
26+
"Regex group count should be: " + expectedCount);
27+
}
28+
} catch (PatternSyntaxException e) {
29+
return Status.INVALID_ARGUMENT
30+
.withCause(e)
31+
.withDescription("Invalid Regex pattern: " + regexPattern);
32+
}
33+
return Status.OK;
34+
}
1935
}

0 commit comments

Comments
 (0)