Пример #1
0
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
}
Пример #2
0
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
}