Skip to content

Commit 3450478

Browse files
committed
Added Context.getRemainingTime() back in.
- Renamed `Invocation.deadline` to `Invocation.deadlineInMillisSinceEpoch` to better reflect meaning. - Added a test for `Context.getRemainingTime()`
1 parent d12b20e commit 3450478

File tree

4 files changed

+24
-3
lines changed

4 files changed

+24
-3
lines changed

Sources/SwiftAwsLambda/Lambda.swift

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,14 @@ public enum Lambda {
118118
logger[metadataKey: "awsTraceId"] = .string(traceId)
119119
self.logger = logger
120120
}
121+
122+
public func getRemainingTime() -> TimeAmount {
123+
let deadline = self.deadline.millisSinceEpoch
124+
let now = DispatchWallTime.now().millisSinceEpoch
125+
126+
let remaining = deadline - now
127+
return .milliseconds(remaining)
128+
}
121129
}
122130

123131
private final class Lifecycle {

Sources/SwiftAwsLambda/LambdaRunner.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ private extension Lambda.Context {
130130
self.init(requestId: invocation.requestId,
131131
traceId: invocation.traceId,
132132
invokedFunctionArn: invocation.invokedFunctionArn,
133-
deadline: DispatchWallTime(millisSinceEpoch: invocation.deadline),
133+
deadline: DispatchWallTime(millisSinceEpoch: invocation.deadlineInMillisSinceEpoch),
134134
cognitoIdentity: invocation.cognitoIdentity,
135135
clientContext: invocation.clientContext,
136136
logger: logger)

Sources/SwiftAwsLambda/LambdaRuntimeClient.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ private extension HTTPClient.Response {
181181

182182
internal struct Invocation {
183183
let requestId: String
184-
let deadline: Int64
184+
let deadlineInMillisSinceEpoch: Int64
185185
let invokedFunctionArn: String
186186
let traceId: String
187187
let clientContext: String?
@@ -206,7 +206,7 @@ internal struct Invocation {
206206
}
207207

208208
self.requestId = requestId
209-
self.deadline = unixTimeInMilliseconds
209+
self.deadlineInMillisSinceEpoch = unixTimeInMilliseconds
210210
self.invokedFunctionArn = invokedFunctionArn
211211
self.traceId = traceId
212212
self.clientContext = headers["Lambda-Runtime-Client-Context"].first

Tests/SwiftAwsLambdaTests/LambdaTest.swift

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,19 @@ class LambdaTest: XCTestCase {
252252
logger: logger)
253253
XCTAssertLessThan(expiredContext.deadline, .now())
254254
}
255+
256+
func testGetRemainingTime() {
257+
let logger = Logger(label: "test")
258+
let context = Lambda.Context(requestId: UUID().uuidString,
259+
traceId: UUID().uuidString,
260+
invokedFunctionArn: UUID().uuidString,
261+
deadline: .now() + .seconds(1),
262+
cognitoIdentity: nil,
263+
clientContext: nil,
264+
logger: logger)
265+
XCTAssertLessThanOrEqual(context.getRemainingTime(), .seconds(1))
266+
XCTAssertGreaterThan(context.getRemainingTime(), .milliseconds(800))
267+
}
255268
}
256269

257270
private struct Behavior: LambdaServerBehavior {

0 commit comments

Comments
 (0)