func findFirstMatchingPolicy(value *oproto.Value, policies []*oproto.RetentionPolicyItem) *oproto.RetentionPolicyItem { now := openinstrument.NowMs() valueStartAge := now - value.Timestamp if value.EndTimestamp == 0 && value.Timestamp != 0 { value.EndTimestamp = value.Timestamp } valueEndAge := now - value.EndTimestamp for _, item := range policies { if len(item.Variable) == 0 { // No variables supplied, this matches everything return item } for _, i := range item.Variable { // Look for policies that match the variable age v := variable.NewFromProto(i) if v.TimestampInsideRange(valueStartAge) || v.TimestampInsideRange(valueEndAge) { return item } } } return nil }
func Encode(input *oproto.ValueStream) *oproto.ValueStream { output := &oproto.ValueStream{Variable: input.Variable} var last *oproto.Value for _, value := range input.Value { if last == nil { last = value continue } if last.StringValue != "" && value.StringValue != "" { if last.StringValue == value.StringValue { if value.EndTimestamp > value.Timestamp { last.EndTimestamp = value.EndTimestamp } else { last.EndTimestamp = value.Timestamp } continue } } else { if last.DoubleValue == value.DoubleValue { if value.EndTimestamp > value.Timestamp { last.EndTimestamp = value.EndTimestamp } else { last.EndTimestamp = value.Timestamp } continue } } if last.EndTimestamp == 0 && last.Timestamp != 0 { last.EndTimestamp = last.Timestamp } output.Value = append(output.Value, last) last = value } if last != nil { if last.EndTimestamp == 0 && last.Timestamp != 0 { last.EndTimestamp = last.Timestamp } output.Value = append(output.Value, last) } return output }