-
Notifications
You must be signed in to change notification settings - Fork 892
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
GODRIVER-2810 Switch to polling monitoring when running within a FaaS…
… environment (#1376)
- Loading branch information
1 parent
53450c7
commit 99bdb94
Showing
24 changed files
with
1,390 additions
and
213 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,128 @@ | ||
// Copyright (C) MongoDB, Inc. 2023-present. | ||
// | ||
// Licensed under the Apache License, Version 2.0 (the "License"); you may | ||
// not use this file except in compliance with the License. You may obtain | ||
// a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 | ||
|
||
package driverutil | ||
|
||
import ( | ||
"os" | ||
"strings" | ||
) | ||
|
||
const AwsLambdaPrefix = "AWS_Lambda_" | ||
|
||
const ( | ||
// FaaS environment variable names | ||
|
||
// EnvVarAWSExecutionEnv is the AWS Execution environment variable. | ||
EnvVarAWSExecutionEnv = "AWS_EXECUTION_ENV" | ||
// EnvVarAWSLambdaRuntimeAPI is the AWS Lambda runtime API variable. | ||
EnvVarAWSLambdaRuntimeAPI = "AWS_LAMBDA_RUNTIME_API" | ||
// EnvVarFunctionsWorkerRuntime is the functions worker runtime variable. | ||
EnvVarFunctionsWorkerRuntime = "FUNCTIONS_WORKER_RUNTIME" | ||
// EnvVarKService is the K Service variable. | ||
EnvVarKService = "K_SERVICE" | ||
// EnvVarFunctionName is the function name variable. | ||
EnvVarFunctionName = "FUNCTION_NAME" | ||
// EnvVarVercel is the Vercel variable. | ||
EnvVarVercel = "VERCEL" | ||
// EnvVarK8s is the K8s veriable. | ||
EnvVarK8s = "KUBERNETES_SERVICE_HOST" | ||
) | ||
|
||
const ( | ||
// FaaS environment variable names | ||
|
||
// EnvVarAWSRegion is the AWS region variable. | ||
EnvVarAWSRegion = "AWS_REGION" | ||
// EnvVarAWSLambdaFunctionMemorySize is the AWS Lambda function memory size variable. | ||
EnvVarAWSLambdaFunctionMemorySize = "AWS_LAMBDA_FUNCTION_MEMORY_SIZE" | ||
// EnvVarFunctionMemoryMB is the function memory in megabytes variable. | ||
EnvVarFunctionMemoryMB = "FUNCTION_MEMORY_MB" | ||
// EnvVarFunctionTimeoutSec is the function timeout in seconds variable. | ||
EnvVarFunctionTimeoutSec = "FUNCTION_TIMEOUT_SEC" | ||
// EnvVarFunctionRegion is the function region variable. | ||
EnvVarFunctionRegion = "FUNCTION_REGION" | ||
// EnvVarVercelRegion is the Vercel region variable. | ||
EnvVarVercelRegion = "VERCEL_REGION" | ||
) | ||
|
||
const ( | ||
// FaaS environment names used by the client | ||
|
||
// EnvNameAWSLambda is the AWS Lambda environment name. | ||
EnvNameAWSLambda = "aws.lambda" | ||
// EnvNameAzureFunc is the Azure Function environment name. | ||
EnvNameAzureFunc = "azure.func" | ||
// EnvNameGCPFunc is the Google Cloud Function environment name. | ||
EnvNameGCPFunc = "gcp.func" | ||
// EnvNameVercel is the Vercel environment name. | ||
EnvNameVercel = "vercel" | ||
) | ||
|
||
// GetFaasEnvName parses the FaaS environment variable name and returns the | ||
// corresponding name used by the client. If none of the variables or variables | ||
// for multiple names are populated the client.env value MUST be entirely | ||
// omitted. When variables for multiple "client.env.name" values are present, | ||
// "vercel" takes precedence over "aws.lambda"; any other combination MUST cause | ||
// "client.env" to be entirely omitted. | ||
func GetFaasEnvName() string { | ||
envVars := []string{ | ||
EnvVarAWSExecutionEnv, | ||
EnvVarAWSLambdaRuntimeAPI, | ||
EnvVarFunctionsWorkerRuntime, | ||
EnvVarKService, | ||
EnvVarFunctionName, | ||
EnvVarVercel, | ||
} | ||
|
||
// If none of the variables are populated the client.env value MUST be | ||
// entirely omitted. | ||
names := make(map[string]struct{}) | ||
|
||
for _, envVar := range envVars { | ||
val := os.Getenv(envVar) | ||
if val == "" { | ||
continue | ||
} | ||
|
||
var name string | ||
|
||
switch envVar { | ||
case EnvVarAWSExecutionEnv: | ||
if !strings.HasPrefix(val, AwsLambdaPrefix) { | ||
continue | ||
} | ||
|
||
name = EnvNameAWSLambda | ||
case EnvVarAWSLambdaRuntimeAPI: | ||
name = EnvNameAWSLambda | ||
case EnvVarFunctionsWorkerRuntime: | ||
name = EnvNameAzureFunc | ||
case EnvVarKService, EnvVarFunctionName: | ||
name = EnvNameGCPFunc | ||
case EnvVarVercel: | ||
// "vercel" takes precedence over "aws.lambda". | ||
delete(names, EnvNameAWSLambda) | ||
|
||
name = EnvNameVercel | ||
} | ||
|
||
names[name] = struct{}{} | ||
if len(names) > 1 { | ||
// If multiple names are populated the client.env value | ||
// MUST be entirely omitted. | ||
names = nil | ||
|
||
break | ||
} | ||
} | ||
|
||
for name := range names { | ||
return name | ||
} | ||
|
||
return "" | ||
} |
File renamed without changes.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.