-
Notifications
You must be signed in to change notification settings - Fork 113
add an option to start the local debugging server based on an env variable #87
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
18a8bb7
c761c44
83861da
f3dc137
4115008
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -97,36 +97,55 @@ public enum Lambda { | |
// for testing and internal use | ||
@discardableResult | ||
internal static func run(configuration: Configuration = .init(), factory: @escaping HandlerFactory) -> Result<Int, Error> { | ||
Backtrace.install() | ||
var logger = Logger(label: "Lambda") | ||
logger.logLevel = configuration.general.logLevel | ||
let _run = { (configuration: Configuration, factory: @escaping HandlerFactory) -> Result<Int, Error> in | ||
Backtrace.install() | ||
var logger = Logger(label: "Lambda") | ||
logger.logLevel = configuration.general.logLevel | ||
|
||
var result: Result<Int, Error>! | ||
MultiThreadedEventLoopGroup.withCurrentThreadAsEventLoop { eventLoop in | ||
let lifecycle = Lifecycle(eventLoop: eventLoop, logger: logger, configuration: configuration, factory: factory) | ||
#if DEBUG | ||
let signalSource = trap(signal: configuration.lifecycle.stopSignal) { signal in | ||
logger.info("intercepted signal: \(signal)") | ||
lifecycle.shutdown() | ||
} | ||
#endif | ||
|
||
lifecycle.start().flatMap { | ||
lifecycle.shutdownFuture | ||
}.whenComplete { lifecycleResult in | ||
var result: Result<Int, Error>! | ||
MultiThreadedEventLoopGroup.withCurrentThreadAsEventLoop { eventLoop in | ||
let lifecycle = Lifecycle(eventLoop: eventLoop, logger: logger, configuration: configuration, factory: factory) | ||
#if DEBUG | ||
signalSource.cancel() | ||
let signalSource = trap(signal: configuration.lifecycle.stopSignal) { signal in | ||
logger.info("intercepted signal: \(signal)") | ||
lifecycle.shutdown() | ||
} | ||
#endif | ||
eventLoop.shutdownGracefully { error in | ||
if let error = error { | ||
preconditionFailure("Failed to shutdown eventloop: \(error)") | ||
|
||
lifecycle.start().flatMap { | ||
lifecycle.shutdownFuture | ||
}.whenComplete { lifecycleResult in | ||
#if DEBUG | ||
signalSource.cancel() | ||
#endif | ||
eventLoop.shutdownGracefully { error in | ||
if let error = error { | ||
preconditionFailure("Failed to shutdown eventloop: \(error)") | ||
} | ||
} | ||
result = lifecycleResult | ||
} | ||
result = lifecycleResult | ||
} | ||
|
||
logger.info("shutdown completed") | ||
return result | ||
} | ||
|
||
logger.info("shutdown completed") | ||
return result | ||
// start local server for debugging in DEBUG mode only | ||
#if DEBUG | ||
if Lambda.env("LOCAL_LAMBDA_SERVER_ENABLED").flatMap(Bool.init) ?? false { | ||
do { | ||
return try Lambda.withLocalServer { | ||
_run(configuration, factory) | ||
} | ||
} catch { | ||
return .failure(error) | ||
} | ||
} else { | ||
return _run(configuration, factory) | ||
} | ||
#else | ||
return _run(configuration, factory) | ||
#endif | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. this is the actual change 👀 hopefully this does not feel too "dangerous" since it behind both |
||
} | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
no changes here ^^, just setting a
_run
local variable with the function body