As Ashish pointed out, this is not currently available in the client library. Hopefully it will be added soon but for the time being for anyone who wants to add a log based alert condition (conditionMatchedLog) using the Java Client library, this is what the code looks like.
public static UnknownFieldSet createConditionMatchedLog(String filter) {
// filter = "\nseverity = \"NOTICE\""; example filter
UnknownFieldSet.Field logMatchString =
UnknownFieldSet.Field.newBuilder()
.addLengthDelimited(ByteString.copyFromUtf8(filter))
.build();
UnknownFieldSet logMatchFilter =
UnknownFieldSet.newBuilder()
.addField(1, logMatchString)
.build();
UnknownFieldSet.Field logMatchFilterCombine =
UnknownFieldSet.Field.newBuilder()
.addLengthDelimited(logMatchFilter.toByteString())
.build();
UnknownFieldSet logMatchCondition =
UnknownFieldSet.newBuilder()
.addField(20, logMatchFilterCombine)
.build();
return logMatchCondition;
}
When constructing the actual Alert, you also need to define the Alert Strategy.
public static UnknownFieldSet createAlertStrategyFieldSet(long periodTime) {
//Making the alertStrategy field since you need those for log based alert policies
UnknownFieldSet.Field period =
UnknownFieldSet.Field.newBuilder()
.addVarint(periodTime) //must be an long
.build();
UnknownFieldSet periodSet =
UnknownFieldSet.newBuilder()
.addField(1, period)
.build();
UnknownFieldSet.Field periodSetField =
UnknownFieldSet.Field.newBuilder()
.addLengthDelimited(periodSet.toByteString())
.build();
UnknownFieldSet periodSetFieldUp =
UnknownFieldSet.newBuilder()
.addField(1, periodSetField)
.build();
UnknownFieldSet.Field periodSetField2 =
UnknownFieldSet.Field.newBuilder()
.addLengthDelimited(periodSetFieldUp.toByteString())
.build();
UnknownFieldSet periodSetFieldUp2 =
UnknownFieldSet.newBuilder()
.addField(1, periodSetField2)
.build();
UnknownFieldSet.Field periodSetField3 =
UnknownFieldSet.Field.newBuilder()
.addLengthDelimited(periodSetFieldUp2.toByteString())
.build();
UnknownFieldSet AlertStrategy =
UnknownFieldSet.newBuilder()
.addField(21, periodSetField3)
.build();
return AlertStrategy;
}
Putting it together
UnknownFieldSet conditionMatchedLog = createConditionMatchedLog(filter);
// Construct Condition object
AlertPolicy.Condition alertPolicyCondition =
AlertPolicy.Condition.newBuilder()
.setDisplayName(med.getConditions().get(index).getDisplayName())
.setUnknownFields(conditionMatchedLog)
.build();
//Making the alertStrategy field since you need those for log based alert policies
UnknownFieldSet alertStrategy = createAlertStrategyFieldSet(convertTimePeriodFromString(med.getAlertStrategy().getNotificationRateLimit().getPeriod()));
// Build the log based alert policy
AlertPolicy alertPolicy =
AlertPolicy.newBuilder()
.setDisplayName(med.getDisplayName())
.addConditions(alertPolicyCondition)
.setCombiner(AlertPolicy.ConditionCombinerType.OR)
.setEnabled(BoolValue.newBuilder().setValue(true).build())
.setUnknownFields(alertStrategy)
.build();