Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -8,35 +8,46 @@ public static class ResponseMetaDataExtensions
{
public static QueryResultMetadataResponse.Types.QueryMetadata ToResponseMetaData(this QueryMetaData metadata)
{
var sdkMetrics = metadata.Metrics!;
var protoMetadata = new QueryResultMetadataResponse.Types.QueryMetadata()
var protoMetadata = new QueryResultMetadataResponse.Types.QueryMetadata();

if (metadata.Metrics is { } sdkMetrics)
{
Metrics = new QueryResultMetadataResponse.Types.QueryMetadata.Types.Metrics
var protoMetrics = new QueryResultMetadataResponse.Types.QueryMetadata.Types.Metrics
{
ElapsedTime = new Duration
{
Seconds = sdkMetrics.ElapsedTime!.Value.Seconds,
Nanos = sdkMetrics.ElapsedTime.Value.Nanoseconds
},
ExecutionTime = new Duration
{
Seconds = sdkMetrics.ExecutionTime!.Value.Seconds,
Nanos = sdkMetrics.ExecutionTime.Value.Nanoseconds
},
ProcessedObjects = (ulong)sdkMetrics.ProcessedObjects,
ResultCount = (ulong)sdkMetrics.ResultCount,
ResultSize = (ulong)sdkMetrics.ResultSize
};

if (sdkMetrics.ElapsedTime is { } elapsed)
{
protoMetrics.ElapsedTime = new Duration
{
Seconds = elapsed.Seconds,
Nanos = elapsed.Nanoseconds
};
}
};

if (metadata.RequestId is not null)
if (sdkMetrics.ExecutionTime is { } executed)
{
protoMetrics.ExecutionTime = new Duration
{
Seconds = executed.Seconds,
Nanos = executed.Nanoseconds
};
}

protoMetadata.Metrics = protoMetrics;
}

if (metadata.RequestId is { } requestId)
{
protoMetadata.RequestId = metadata.RequestId;
protoMetadata.RequestId = requestId;
}

if (metadata.Warnings is not null)
if (metadata.Warnings is { } metaWarnings)
{
foreach (var warnings in metadata.Warnings)
foreach (var warnings in metaWarnings)
{
protoMetadata.Warnings.Add(new QueryResultMetadataResponse.Types.QueryMetadata.Types.Warning()
{
Expand All @@ -47,4 +58,4 @@ public static QueryResultMetadataResponse.Types.QueryMetadata ToResponseMetaData
}
return protoMetadata;
}
}
}
9 changes: 8 additions & 1 deletion src/Couchbase.Core/Json/MillisecondsStringJsonConverter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,13 @@ public sealed class MillisecondsStringJsonConverter : JsonConverter<TimeSpan?>
return TimeSpan.FromTicks(nanoseconds / 100);
}
}
else if (stringValue.EndsWith("µs") || stringValue.EndsWith("μs") || stringValue.EndsWith("us"))
{
if (double.TryParse(stringValue[..^2], NumberStyles.Float, CultureInfo.InvariantCulture, out var microseconds))
{
return TimeSpan.FromTicks((long)(microseconds * 10));
}
}
else if (stringValue.EndsWith('s'))
{
if (double.TryParse(stringValue[..^1], NumberStyles.Float, CultureInfo.InvariantCulture, out var seconds))
Expand All @@ -63,7 +70,7 @@ public sealed class MillisecondsStringJsonConverter : JsonConverter<TimeSpan?>
}

throw new JsonException(
$"cannot parse {stringValue}. Only 0.0ms, 0.0ns, and 0.0s formats are supported.");
$"cannot parse {stringValue}. Only 0.0ms, 0.0ns, 0.0µs, and 0.0s formats are supported.");
}

public override void Write(Utf8JsonWriter writer, TimeSpan? value, JsonSerializerOptions options)
Expand Down
Loading