mirror of
https://github.com/hanzoai/traces.git
synced 2026-10-30 18:20:41 +00:00
e57aaeecc5
Bumps the opentelemetry-contrib group with 8 updates: | Package | From | To | | --- | --- | --- | | [github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/jaeger](https://github.com/open-telemetry/opentelemetry-collector-contrib) | `0.130.0` | `0.131.0` | | [github.com/open-telemetry/opentelemetry-collector-contrib/exporter/zipkinexporter](https://github.com/open-telemetry/opentelemetry-collector-contrib) | `0.130.0` | `0.131.0` | | [github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl](https://github.com/open-telemetry/opentelemetry-collector-contrib) | `0.130.0` | `0.131.0` | | [github.com/open-telemetry/opentelemetry-collector-contrib/processor/filterprocessor](https://github.com/open-telemetry/opentelemetry-collector-contrib) | `0.130.0` | `0.131.0` | | [github.com/open-telemetry/opentelemetry-collector-contrib/receiver/jaegerreceiver](https://github.com/open-telemetry/opentelemetry-collector-contrib) | `0.130.0` | `0.131.0` | | [github.com/open-telemetry/opentelemetry-collector-contrib/receiver/kafkareceiver](https://github.com/open-telemetry/opentelemetry-collector-contrib) | `0.130.0` | `0.131.0` | | [github.com/open-telemetry/opentelemetry-collector-contrib/receiver/opencensusreceiver](https://github.com/open-telemetry/opentelemetry-collector-contrib) | `0.130.0` | `0.131.0` | | [github.com/open-telemetry/opentelemetry-collector-contrib/receiver/zipkinreceiver](https://github.com/open-telemetry/opentelemetry-collector-contrib) | `0.130.0` | `0.131.0` | Updates `github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/jaeger` from 0.130.0 to 0.131.0 - [Release notes](https://github.com/open-telemetry/opentelemetry-collector-contrib/releases) - [Changelog](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CHANGELOG-API.md) - [Commits](https://github.com/open-telemetry/opentelemetry-collector-contrib/compare/v0.130.0...v0.131.0) Updates `github.com/open-telemetry/opentelemetry-collector-contrib/exporter/zipkinexporter` from 0.130.0 to 0.131.0 - [Release notes](https://github.com/open-telemetry/opentelemetry-collector-contrib/releases) - [Changelog](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CHANGELOG-API.md) - [Commits](https://github.com/open-telemetry/opentelemetry-collector-contrib/compare/v0.130.0...v0.131.0) Updates `github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl` from 0.130.0 to 0.131.0 - [Release notes](https://github.com/open-telemetry/opentelemetry-collector-contrib/releases) - [Changelog](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CHANGELOG-API.md) - [Commits](https://github.com/open-telemetry/opentelemetry-collector-contrib/compare/v0.130.0...v0.131.0) Updates `github.com/open-telemetry/opentelemetry-collector-contrib/processor/filterprocessor` from 0.130.0 to 0.131.0 - [Release notes](https://github.com/open-telemetry/opentelemetry-collector-contrib/releases) - [Changelog](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CHANGELOG-API.md) - [Commits](https://github.com/open-telemetry/opentelemetry-collector-contrib/compare/v0.130.0...v0.131.0) Updates `github.com/open-telemetry/opentelemetry-collector-contrib/receiver/jaegerreceiver` from 0.130.0 to 0.131.0 - [Release notes](https://github.com/open-telemetry/opentelemetry-collector-contrib/releases) - [Changelog](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CHANGELOG-API.md) - [Commits](https://github.com/open-telemetry/opentelemetry-collector-contrib/compare/v0.130.0...v0.131.0) Updates `github.com/open-telemetry/opentelemetry-collector-contrib/receiver/kafkareceiver` from 0.130.0 to 0.131.0 - [Release notes](https://github.com/open-telemetry/opentelemetry-collector-contrib/releases) - [Changelog](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CHANGELOG-API.md) - [Commits](https://github.com/open-telemetry/opentelemetry-collector-contrib/compare/v0.130.0...v0.131.0) Updates `github.com/open-telemetry/opentelemetry-collector-contrib/receiver/opencensusreceiver` from 0.130.0 to 0.131.0 - [Release notes](https://github.com/open-telemetry/opentelemetry-collector-contrib/releases) - [Changelog](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CHANGELOG-API.md) - [Commits](https://github.com/open-telemetry/opentelemetry-collector-contrib/compare/v0.130.0...v0.131.0) Updates `github.com/open-telemetry/opentelemetry-collector-contrib/receiver/zipkinreceiver` from 0.130.0 to 0.131.0 - [Release notes](https://github.com/open-telemetry/opentelemetry-collector-contrib/releases) - [Changelog](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CHANGELOG-API.md) - [Commits](https://github.com/open-telemetry/opentelemetry-collector-contrib/compare/v0.130.0...v0.131.0) --- updated-dependencies: - dependency-name: github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/jaeger dependency-version: 0.131.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: opentelemetry-contrib - dependency-name: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/zipkinexporter dependency-version: 0.131.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: opentelemetry-contrib - dependency-name: github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl dependency-version: 0.131.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: opentelemetry-contrib - dependency-name: github.com/open-telemetry/opentelemetry-collector-contrib/processor/filterprocessor dependency-version: 0.131.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: opentelemetry-contrib - dependency-name: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/jaegerreceiver dependency-version: 0.131.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: opentelemetry-contrib - dependency-name: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/kafkareceiver dependency-version: 0.131.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: opentelemetry-contrib - dependency-name: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/opencensusreceiver dependency-version: 0.131.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: opentelemetry-contrib - dependency-name: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/zipkinreceiver dependency-version: 0.131.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: opentelemetry-contrib ... Signed-off-by: dependabot[bot] <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
181 lines
4.5 KiB
Go
181 lines
4.5 KiB
Go
// Copyright The OpenTelemetry Authors
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package ottl // import "github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl"
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"fmt"
|
|
"time"
|
|
)
|
|
|
|
func (p *Parser[K]) evaluateMathExpression(expr *mathExpression) (Getter[K], error) {
|
|
mainGetter, err := p.evaluateAddSubTerm(expr.Left)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
for _, rhs := range expr.Right {
|
|
getter, err := p.evaluateAddSubTerm(rhs.Term)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
mainGetter = attemptMathOperation(mainGetter, rhs.Operator, getter)
|
|
}
|
|
|
|
return mainGetter, nil
|
|
}
|
|
|
|
func (p *Parser[K]) evaluateAddSubTerm(term *addSubTerm) (Getter[K], error) {
|
|
mainGetter, err := p.evaluateMathValue(term.Left)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
for _, rhs := range term.Right {
|
|
getter, err := p.evaluateMathValue(rhs.Value)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
mainGetter = attemptMathOperation(mainGetter, rhs.Operator, getter)
|
|
}
|
|
|
|
return mainGetter, nil
|
|
}
|
|
|
|
func (p *Parser[K]) evaluateMathValue(val *mathValue) (Getter[K], error) {
|
|
switch {
|
|
case val.Literal != nil:
|
|
return p.newGetter(value{Literal: val.Literal})
|
|
case val.SubExpression != nil:
|
|
return p.evaluateMathExpression(val.SubExpression)
|
|
}
|
|
|
|
return nil, fmt.Errorf("unsupported mathematical value %v", val)
|
|
}
|
|
|
|
func attemptMathOperation[K any](lhs Getter[K], op mathOp, rhs Getter[K]) Getter[K] {
|
|
return exprGetter[K]{
|
|
expr: Expr[K]{
|
|
exprFunc: func(ctx context.Context, tCtx K) (any, error) {
|
|
x, err := lhs.Get(ctx, tCtx)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
y, err := rhs.Get(ctx, tCtx)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
switch newX := x.(type) {
|
|
case int64:
|
|
switch newY := y.(type) {
|
|
case int64:
|
|
result, err := performOp[int64](newX, newY, op)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return result, nil
|
|
case float64:
|
|
result, err := performOp[float64](float64(newX), newY, op)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return result, nil
|
|
default:
|
|
return nil, fmt.Errorf("%v must be int64 or float64", y)
|
|
}
|
|
case float64:
|
|
switch newY := y.(type) {
|
|
case int64:
|
|
result, err := performOp[float64](newX, float64(newY), op)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return result, nil
|
|
case float64:
|
|
result, err := performOp[float64](newX, newY, op)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return result, nil
|
|
default:
|
|
return nil, fmt.Errorf("%v must be int64 or float64", y)
|
|
}
|
|
case time.Time:
|
|
return performOpTime(newX, y, op)
|
|
case time.Duration:
|
|
return performOpDuration(newX, y, op)
|
|
default:
|
|
return nil, fmt.Errorf("%v must be int64, float64, time.Time or time.Duration", x)
|
|
}
|
|
},
|
|
},
|
|
}
|
|
}
|
|
|
|
func performOpTime(x time.Time, y any, op mathOp) (any, error) {
|
|
switch op {
|
|
case add:
|
|
switch newY := y.(type) {
|
|
case time.Duration:
|
|
result := x.Add(newY)
|
|
return result, nil
|
|
default:
|
|
return nil, fmt.Errorf("time.Time must be added to time.Duration; found %v instead", y)
|
|
}
|
|
case sub:
|
|
switch newY := y.(type) {
|
|
case time.Time:
|
|
result := x.Sub(newY)
|
|
return result, nil
|
|
case time.Duration:
|
|
result := x.Add(-1 * newY)
|
|
return result, nil
|
|
default:
|
|
return nil, fmt.Errorf("time.Time or time.Duration must be subtracted from time.Time; found %v instead", y)
|
|
}
|
|
}
|
|
return nil, errors.New("only addition and subtraction supported for time.Time and time.Duration")
|
|
}
|
|
|
|
func performOpDuration(x time.Duration, y any, op mathOp) (any, error) {
|
|
switch op {
|
|
case add:
|
|
switch newY := y.(type) {
|
|
case time.Duration:
|
|
result := x + newY
|
|
return result, nil
|
|
case time.Time:
|
|
result := newY.Add(x)
|
|
return result, nil
|
|
default:
|
|
return nil, fmt.Errorf("time.Duration must be added to time.Duration or time.Time; found %v instead", y)
|
|
}
|
|
case sub:
|
|
switch newY := y.(type) {
|
|
case time.Duration:
|
|
result := x - newY
|
|
return result, nil
|
|
default:
|
|
return nil, fmt.Errorf("time.Duration must be subtracted from time.Duration; found %v instead", y)
|
|
}
|
|
}
|
|
return nil, errors.New("only addition and subtraction supported for time.Time and time.Duration")
|
|
}
|
|
|
|
func performOp[N int64 | float64](x, y N, op mathOp) (N, error) {
|
|
switch op {
|
|
case add:
|
|
return x + y, nil
|
|
case sub:
|
|
return x - y, nil
|
|
case mult:
|
|
return x * y, nil
|
|
case div:
|
|
if y == 0 {
|
|
return 0, errors.New("attempted to divide by 0")
|
|
}
|
|
return x / y, nil
|
|
}
|
|
return 0, fmt.Errorf("invalid operation %v", op)
|
|
}
|