Skip to content

Commit

Permalink
Merge branch 'main' into chore/converter-type-removal
Browse files Browse the repository at this point in the history
  • Loading branch information
bacherfl authored Nov 12, 2024
2 parents f7dd387 + 4e7f7d2 commit f247936
Show file tree
Hide file tree
Showing 266 changed files with 394 additions and 593 deletions.
27 changes: 27 additions & 0 deletions .chloggen/36079-add-datadog-json-handling.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# Use this changelog template to create an entry for release notes.

# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix'
change_type: 'enhancement'

# The name of the component, or a single word describing the area of concern, (e.g. filelogreceiver)
component: 'datadogreceiver'

# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`).
note: "Add json handling for the `api/v2/series` endpoint in the datadogreceiver"

# Mandatory: One or more tracking issues related to the change. You can use the PR number here if no issue exists.
issues: [36079]

# (Optional) One or more lines of additional information to render under the primary note.
# These lines will be padded with 2 spaces and then inserted directly into the document.
# Use pipe (|) for multiline entries.
subtext:

# If your change doesn't affect end users or the exported elements of any package,
# you should instead start your pull request title with [chore] or use the "Skip Changelog" label.
# Optional: The change log or logs in which this entry should be included.
# e.g. '[user]' or '[user, api]'
# Include 'user' if the change is relevant to end users.
# Include 'api' if there is a change to a library API.
# Default: '[user]'
change_logs: []
3 changes: 1 addition & 2 deletions connector/countconnector/factory.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ import (
"go.opentelemetry.io/collector/consumer"

"github.com/open-telemetry/opentelemetry-collector-contrib/connector/countconnector/internal/metadata"
"github.com/open-telemetry/opentelemetry-collector-contrib/internal/filter/expr"
"github.com/open-telemetry/opentelemetry-collector-contrib/internal/filter/filterottl"
"github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl"
"github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl/contexts/ottldatapoint"
Expand Down Expand Up @@ -156,7 +155,7 @@ func createLogsToMetrics(
}

type metricDef[K any] struct {
condition expr.BoolExpr[K]
condition *ottl.ConditionSequence[K]
desc string
attrs []AttributeConfig
}
3 changes: 1 addition & 2 deletions connector/sumconnector/factory.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ import (
"go.opentelemetry.io/collector/consumer"

"github.com/open-telemetry/opentelemetry-collector-contrib/connector/sumconnector/internal/metadata"
"github.com/open-telemetry/opentelemetry-collector-contrib/internal/filter/expr"
"github.com/open-telemetry/opentelemetry-collector-contrib/internal/filter/filterottl"
"github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl"
"github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl/contexts/ottldatapoint"
Expand Down Expand Up @@ -161,7 +160,7 @@ func createLogsToMetrics(
}

type metricDef[K any] struct {
condition expr.BoolExpr[K]
condition *ottl.ConditionSequence[K]
desc string
attrs []AttributeConfig
sourceAttr string
Expand Down
3 changes: 1 addition & 2 deletions exporter/honeycombmarkerexporter/logs_exporter.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@ import (
"go.opentelemetry.io/collector/exporter"
"go.opentelemetry.io/collector/pdata/plog"

"github.com/open-telemetry/opentelemetry-collector-contrib/internal/filter/expr"
"github.com/open-telemetry/opentelemetry-collector-contrib/internal/filter/filterottl"
"github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl"
"github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl/contexts/ottllog"
Expand All @@ -34,7 +33,7 @@ const (

type marker struct {
Marker
logBoolExpr expr.BoolExpr[ottllog.TransformContext]
logBoolExpr *ottl.ConditionSequence[ottllog.TransformContext]
}

type honeycombLogsExporter struct {
Expand Down
2 changes: 1 addition & 1 deletion extension/encoding/jsonlogencodingextension/extension.go
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ func (e *jsonLogExtension) Shutdown(_ context.Context) error {
}

func (e *jsonLogExtension) logProcessor(ld plog.Logs) ([]byte, error) {
logs := make([]logBody, ld.ResourceLogs().Len()-1)
logs := make([]logBody, 0, ld.LogRecordCount())

rls := ld.ResourceLogs()
for i := 0; i < rls.Len(); i++ {
Expand Down
1 change: 0 additions & 1 deletion internal/aws/awsutil/conn.go
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,6 @@ func GetAWSConfigSession(logger *zap.Logger, cn ConnAttr, cfg *AWSSessionSetting
logger.Debug("Fetch region from ec2 metadata", zap.String("region", awsRegion))
}
}

}

if awsRegion == "" {
Expand Down
2 changes: 0 additions & 2 deletions internal/aws/containerinsight/utils_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,6 @@ func convertToFloat64(value any) float64 {

func checkMetricsAreExpected(t *testing.T, md pmetric.Metrics, fields map[string]any, tags map[string]string,
expectedUnits map[string]string) {

rms := md.ResourceMetrics()
assert.Equal(t, 1, rms.Len())

Expand Down Expand Up @@ -265,7 +264,6 @@ func TestConvertToOTLPMetricsForClusterMetrics(t *testing.T) {
}
md = ConvertToOTLPMetrics(fields, tags, zap.NewNop())
checkMetricsAreExpected(t, md, fields, tags, expectedUnits)

}

func TestConvertToOTLPMetricsForContainerMetrics(t *testing.T) {
Expand Down
1 change: 0 additions & 1 deletion internal/aws/cwlogs/cwlog_client.go
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,6 @@ func (client *Client) PutLogEvents(input *cloudwatchlogs.PutLogEventsInput, retr
client.logger.Error("cwlog_client: Error occurs in PutLogEvents", zap.Error(awsErr))
return err
}

}

//TODO: Should have metrics to provide visibility of these failures
Expand Down
3 changes: 0 additions & 3 deletions internal/aws/cwlogs/pusher.go
Original file line number Diff line number Diff line change
Expand Up @@ -195,7 +195,6 @@ type logPusher struct {
// NewPusher creates a logPusher instance
func NewPusher(streamKey StreamKey, retryCnt int,
svcStructuredLog Client, logger *zap.Logger) Pusher {

pusher := newLogPusher(streamKey, svcStructuredLog, logger)

pusher.retryCnt = defaultRetryCount
Expand Down Expand Up @@ -250,7 +249,6 @@ func (p *logPusher) ForceFlush() error {
}

func (p *logPusher) pushEventBatch(req any) error {

// http://docs.aws.amazon.com/goto/SdkForGoV1/logs-2014-03-28/PutLogEvents
// The log events in the batch must be in chronological ordered by their
// timestamp (the time the event occurred, expressed as the number of milliseconds
Expand Down Expand Up @@ -296,7 +294,6 @@ func (p *logPusher) addLogEvent(logEvent *Event) *eventBatch {
}

func (p *logPusher) renewEventBatch() *eventBatch {

var prevBatch *eventBatch
if len(p.logEventBatch.putLogEventsInput.LogEvents) > 0 {
prevBatch = p.logEventBatch
Expand Down
1 change: 0 additions & 1 deletion internal/aws/cwlogs/pusher_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -172,7 +172,6 @@ func TestPusher_addLogEventBatch(t *testing.T) {
p.logEventBatch.byteTotal = 1
assert.Nil(t, p.addLogEvent(nil))
assert.Len(t, p.logEventBatch.putLogEventsInput.LogEvents, 1)

}

func TestAddLogEventWithValidation(t *testing.T) {
Expand Down
1 change: 0 additions & 1 deletion internal/aws/k8s/k8sclient/obj_store.go
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,6 @@ func (s *ObjStore) Update(obj any) error {
// Delete implements the Delete method of the store interface.
// Delete deletes an existing entry in the ObjStore.
func (s *ObjStore) Delete(obj any) error {

o, err := meta.Accessor(obj)
if err != nil {
return err
Expand Down
1 change: 0 additions & 1 deletion internal/aws/metrics/metric_calculator.go
Original file line number Diff line number Diff line change
Expand Up @@ -157,7 +157,6 @@ func (m *MapWithExpiry) Shutdown() error {
return errors.New("shutdown called on an already closed channel")
default:
close(m.doneChan)

}
return nil
}
Expand Down
1 change: 0 additions & 1 deletion internal/aws/xray/tracesegment_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -598,7 +598,6 @@ func TestTraceBodyUnMarshalling(t *testing.T) {
ExceptionID: String("abcdefghijklmnop"),
},
}, actualSeg, testCase+": unmarshalled segment is different from the expected")

},
},
{
Expand Down
1 change: 0 additions & 1 deletion internal/aws/xray/xray_client_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,5 +39,4 @@ func TestUserAgent(t *testing.T) {
assert.Contains(t, req.HTTPRequest.UserAgent(), "xray-otel-exporter/")
assert.Contains(t, req.HTTPRequest.UserAgent(), "exec-env/")
assert.Contains(t, req.HTTPRequest.UserAgent(), "OS/")

}
1 change: 0 additions & 1 deletion internal/coreinternal/aggregateutil/aggregate.go
Original file line number Diff line number Diff line change
Expand Up @@ -188,7 +188,6 @@ func mergeNumberDataPoints(dpsMap map[string]pmetric.NumberDataPointSlice, agg A
dp.SetDoubleValue((medianNumbers[mNumber-1] + medianNumbers[mNumber]) / 2)
}
}

}
case pmetric.NumberDataPointValueTypeInt:
medianNumbers := []int64{dp.IntValue()}
Expand Down
6 changes: 0 additions & 6 deletions internal/coreinternal/attraction/attraction_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,6 @@ func TestAttributes_InsertValue(t *testing.T) {
}

func TestAttributes_InsertFromAttribute(t *testing.T) {

testCases := []testCase{
// Ensure no attribute is inserted because because attributes do not exist.
{
Expand Down Expand Up @@ -144,7 +143,6 @@ func TestAttributes_InsertFromAttribute(t *testing.T) {
}

func TestAttributes_UpdateValue(t *testing.T) {

testCases := []testCase{
// Ensure no changes to the span as there is no attributes map.
{
Expand Down Expand Up @@ -190,7 +188,6 @@ func TestAttributes_UpdateValue(t *testing.T) {
}

func TestAttributes_UpdateFromAttribute(t *testing.T) {

testCases := []testCase{
// Ensure no changes to the span as there is no attributes map.
{
Expand Down Expand Up @@ -418,7 +415,6 @@ func TestAttributes_Extract(t *testing.T) {
}

func TestAttributes_UpsertFromAttribute(t *testing.T) {

testCases := []testCase{
// Ensure `new_user_key` is not set for spans with no attributes.
{
Expand Down Expand Up @@ -926,7 +922,6 @@ func TestValidConfiguration(t *testing.T) {
{Key: "five", FromAttribute: "two", Action: UPSERT},
{Key: "two", Regex: compiledRegex, AttrNames: []string{"", "documentId"}, Action: EXTRACT},
}, ap.actions)

}

func hash(b []byte) string {
Expand All @@ -950,7 +945,6 @@ func (a mockInfoAuth) GetAttributeNames() []string {
}

func TestFromContext(t *testing.T) {

mdCtx := client.NewContext(context.TODO(), client.Info{
Metadata: client.NewMetadata(map[string][]string{
"source_single_val": {"single_val"},
Expand Down
1 change: 0 additions & 1 deletion internal/docker/docker_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,6 @@ func TestFetchingTimeouts(t *testing.T) {
t, time.Now().UnixNano(), shouldHaveTaken,
"Client timeouts don't appear to have been exercised.",
)

}

func TestToStatsJSONErrorHandling(t *testing.T) {
Expand Down
1 change: 0 additions & 1 deletion internal/filter/filterexpr/matcher_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,6 @@ func testMetricNameMatch(t *testing.T, dataType pmetric.MetricType) {
matched, err = matcher.MatchMetric(m)
assert.NoError(t, err)
assert.True(t, matched)

}

func TestMatchIntGaugeDataPointByMetricAndSecondPointLabelValue(t *testing.T) {
Expand Down
1 change: 0 additions & 1 deletion internal/filter/filterlog/filterlog.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@ var useOTTLBridge = featuregate.GlobalRegistry().MustRegister(
// The logic determining if a log should be processed is based on include and exclude settings.
// Include properties are checked before exclude settings are checked.
func NewSkipExpr(mp *filterconfig.MatchConfig) (expr.BoolExpr[ottllog.TransformContext], error) {

if useOTTLBridge.IsEnabled() {
return filterottl.NewLogSkipExprBridge(mp)
}
Expand Down
2 changes: 0 additions & 2 deletions internal/filter/filtermatcher/attributematcher.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,6 @@ func NewAttributesMatcher(config filterset.Config, attributes []filterconfig.Att
// Convert attribute values from mp representation to in-memory representation.
var rawAttributes []AttributeMatcher
for _, attribute := range attributes {

if attribute.Key == "" {
return nil, errors.New("can't have empty key in the list of attributes")
}
Expand Down Expand Up @@ -73,7 +72,6 @@ func NewAttributesMatcher(config filterset.Config, attributes []filterconfig.Att
}
default:
return nil, filterset.NewUnrecognizedMatchTypeError(config.MatchType)

}
}

Expand Down
15 changes: 7 additions & 8 deletions internal/filter/filterottl/filter.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ package filterottl // import "github.com/open-telemetry/opentelemetry-collector-
import (
"go.opentelemetry.io/collector/component"

"github.com/open-telemetry/opentelemetry-collector-contrib/internal/filter/expr"
"github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl"
"github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl/contexts/ottldatapoint"
"github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl/contexts/ottllog"
Expand All @@ -20,7 +19,7 @@ import (
// NewBoolExprForSpan creates a BoolExpr[ottlspan.TransformContext] that will return true if any of the given OTTL conditions evaluate to true.
// The passed in functions should use the ottlspan.TransformContext.
// If a function named `match` is not present in the function map it will be added automatically so that parsing works as expected
func NewBoolExprForSpan(conditions []string, functions map[string]ottl.Factory[ottlspan.TransformContext], errorMode ottl.ErrorMode, set component.TelemetrySettings) (expr.BoolExpr[ottlspan.TransformContext], error) {
func NewBoolExprForSpan(conditions []string, functions map[string]ottl.Factory[ottlspan.TransformContext], errorMode ottl.ErrorMode, set component.TelemetrySettings) (*ottl.ConditionSequence[ottlspan.TransformContext], error) {
parser, err := ottlspan.NewParser(functions, set)
if err != nil {
return nil, err
Expand All @@ -36,7 +35,7 @@ func NewBoolExprForSpan(conditions []string, functions map[string]ottl.Factory[o
// NewBoolExprForSpanEvent creates a BoolExpr[ottlspanevent.TransformContext] that will return true if any of the given OTTL conditions evaluate to true.
// The passed in functions should use the ottlspanevent.TransformContext.
// If a function named `match` is not present in the function map it will be added automatically so that parsing works as expected
func NewBoolExprForSpanEvent(conditions []string, functions map[string]ottl.Factory[ottlspanevent.TransformContext], errorMode ottl.ErrorMode, set component.TelemetrySettings) (expr.BoolExpr[ottlspanevent.TransformContext], error) {
func NewBoolExprForSpanEvent(conditions []string, functions map[string]ottl.Factory[ottlspanevent.TransformContext], errorMode ottl.ErrorMode, set component.TelemetrySettings) (*ottl.ConditionSequence[ottlspanevent.TransformContext], error) {
parser, err := ottlspanevent.NewParser(functions, set)
if err != nil {
return nil, err
Expand All @@ -52,7 +51,7 @@ func NewBoolExprForSpanEvent(conditions []string, functions map[string]ottl.Fact
// NewBoolExprForMetric creates a BoolExpr[ottlmetric.TransformContext] that will return true if any of the given OTTL conditions evaluate to true.
// The passed in functions should use the ottlmetric.TransformContext.
// If a function named `match` is not present in the function map it will be added automatically so that parsing works as expected
func NewBoolExprForMetric(conditions []string, functions map[string]ottl.Factory[ottlmetric.TransformContext], errorMode ottl.ErrorMode, set component.TelemetrySettings) (expr.BoolExpr[ottlmetric.TransformContext], error) {
func NewBoolExprForMetric(conditions []string, functions map[string]ottl.Factory[ottlmetric.TransformContext], errorMode ottl.ErrorMode, set component.TelemetrySettings) (*ottl.ConditionSequence[ottlmetric.TransformContext], error) {
parser, err := ottlmetric.NewParser(functions, set)
if err != nil {
return nil, err
Expand All @@ -68,7 +67,7 @@ func NewBoolExprForMetric(conditions []string, functions map[string]ottl.Factory
// NewBoolExprForDataPoint creates a BoolExpr[ottldatapoint.TransformContext] that will return true if any of the given OTTL conditions evaluate to true.
// The passed in functions should use the ottldatapoint.TransformContext.
// If a function named `match` is not present in the function map it will be added automatically so that parsing works as expected
func NewBoolExprForDataPoint(conditions []string, functions map[string]ottl.Factory[ottldatapoint.TransformContext], errorMode ottl.ErrorMode, set component.TelemetrySettings) (expr.BoolExpr[ottldatapoint.TransformContext], error) {
func NewBoolExprForDataPoint(conditions []string, functions map[string]ottl.Factory[ottldatapoint.TransformContext], errorMode ottl.ErrorMode, set component.TelemetrySettings) (*ottl.ConditionSequence[ottldatapoint.TransformContext], error) {
parser, err := ottldatapoint.NewParser(functions, set)
if err != nil {
return nil, err
Expand All @@ -84,7 +83,7 @@ func NewBoolExprForDataPoint(conditions []string, functions map[string]ottl.Fact
// NewBoolExprForLog creates a BoolExpr[ottllog.TransformContext] that will return true if any of the given OTTL conditions evaluate to true.
// The passed in functions should use the ottllog.TransformContext.
// If a function named `match` is not present in the function map it will be added automatically so that parsing works as expected
func NewBoolExprForLog(conditions []string, functions map[string]ottl.Factory[ottllog.TransformContext], errorMode ottl.ErrorMode, set component.TelemetrySettings) (expr.BoolExpr[ottllog.TransformContext], error) {
func NewBoolExprForLog(conditions []string, functions map[string]ottl.Factory[ottllog.TransformContext], errorMode ottl.ErrorMode, set component.TelemetrySettings) (*ottl.ConditionSequence[ottllog.TransformContext], error) {
parser, err := ottllog.NewParser(functions, set)
if err != nil {
return nil, err
Expand All @@ -100,7 +99,7 @@ func NewBoolExprForLog(conditions []string, functions map[string]ottl.Factory[ot
// NewBoolExprForResource creates a BoolExpr[ottlresource.TransformContext] that will return true if any of the given OTTL conditions evaluate to true.
// The passed in functions should use the ottlresource.TransformContext.
// If a function named `match` is not present in the function map it will be added automatically so that parsing works as expected
func NewBoolExprForResource(conditions []string, functions map[string]ottl.Factory[ottlresource.TransformContext], errorMode ottl.ErrorMode, set component.TelemetrySettings) (expr.BoolExpr[ottlresource.TransformContext], error) {
func NewBoolExprForResource(conditions []string, functions map[string]ottl.Factory[ottlresource.TransformContext], errorMode ottl.ErrorMode, set component.TelemetrySettings) (*ottl.ConditionSequence[ottlresource.TransformContext], error) {
parser, err := ottlresource.NewParser(functions, set)
if err != nil {
return nil, err
Expand All @@ -116,7 +115,7 @@ func NewBoolExprForResource(conditions []string, functions map[string]ottl.Facto
// NewBoolExprForScope creates a BoolExpr[ottlscope.TransformContext] that will return true if any of the given OTTL conditions evaluate to true.
// The passed in functions should use the ottlresource.TransformContext.
// If a function named `match` is not present in the function map it will be added automatically so that parsing works as expected
func NewBoolExprForScope(conditions []string, functions map[string]ottl.Factory[ottlscope.TransformContext], errorMode ottl.ErrorMode, set component.TelemetrySettings) (expr.BoolExpr[ottlscope.TransformContext], error) {
func NewBoolExprForScope(conditions []string, functions map[string]ottl.Factory[ottlscope.TransformContext], errorMode ottl.ErrorMode, set component.TelemetrySettings) (*ottl.ConditionSequence[ottlscope.TransformContext], error) {
parser, err := ottlscope.NewParser(functions, set)
if err != nil {
return nil, err
Expand Down
1 change: 0 additions & 1 deletion internal/filter/filterspan/filterspan_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -304,7 +304,6 @@ func TestServiceNameForResource(t *testing.T) {
resource := td.ResourceSpans().At(0).Resource()
name = serviceNameForResource(resource)
require.Equal(t, "<nil-service-name>", name)

}

func Test_NewSkipExpr_With_Bridge(t *testing.T) {
Expand Down
1 change: 0 additions & 1 deletion internal/k8stest/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ type K8sClient struct {
}

func NewK8sClient(kubeconfigPath string) (*K8sClient, error) {

if kubeconfigPath == "" {
return nil, errors.New("Please provide file path to load kubeconfig")
}
Expand Down
1 change: 0 additions & 1 deletion internal/k8stest/k8s_collector.go
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,6 @@ func WaitForCollectorToStart(t *testing.T, client *K8sClient, podNamespace strin
return true
}
return false

}, time.Duration(podTimeoutMinutes)*time.Minute, 2*time.Second,
"collector pods were not ready within %d minutes", podTimeoutMinutes)
}
1 change: 0 additions & 1 deletion internal/kafka/authentication.go
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,6 @@ func configurePlaintext(config PlainTextConfig, saramaConfig *sarama.Config) {
}

func configureSASL(config SASLConfig, saramaConfig *sarama.Config) error {

if config.Username == "" {
return fmt.Errorf("username have to be provided")
}
Expand Down
1 change: 0 additions & 1 deletion internal/kafka/awsmsk/iam_scram_client_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -112,5 +112,4 @@ func TestValidatingServerResponse(t *testing.T) {

_, err := new(IAMSASLClient).Step("")
assert.ErrorIs(t, err, ErrInvalidStateReached, "Must be an invalid step when not set up correctly")

}
1 change: 0 additions & 1 deletion internal/kafka/scram_client.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,6 @@ func (x *XDGSCRAMClient) Begin(userName, password, authzID string) (err error) {
// completes is also an error.
func (x *XDGSCRAMClient) Step(challenge string) (response string, err error) {
return x.ClientConversation.Step(challenge)

}

// Done returns true if the conversation is completed or has errored.
Expand Down
Loading

0 comments on commit f247936

Please sign in to comment.