refactor: env utils

This commit is contained in:
Fu Diwei
2025-12-23 22:44:20 +08:00
parent afde1bfbcb
commit d91119067c
4 changed files with 113 additions and 29 deletions
+6 -12
View File
@@ -6,10 +6,8 @@ import (
"fmt"
"log"
"log/slog"
"os"
"runtime"
"runtime/debug"
"strconv"
"sync"
"time"
@@ -20,19 +18,15 @@ import (
"github.com/certimate-go/certimate/internal/repository"
"github.com/certimate-go/certimate/internal/workflow/engine"
"github.com/certimate-go/certimate/pkg/logging"
xenv "github.com/certimate-go/certimate/pkg/utils/env"
)
var maxWorkers = 1
var envMaxWorkers = 1
func init() {
envMaxWorkers := os.Getenv("CERTIMATE_WORKFLOW_MAX_WORKERS")
if n, _ := strconv.Atoi(envMaxWorkers); n > 0 {
maxWorkers = n
} else {
maxWorkers = runtime.GOMAXPROCS(0)
if maxWorkers == 0 {
maxWorkers = max(1, runtime.NumCPU())
}
envMaxWorkers = xenv.GetOrDefaultInt("CERTIMATE_WORKFLOW_MAX_WORKERS", runtime.GOMAXPROCS(0))
if envMaxWorkers <= 0 {
envMaxWorkers = max(1, runtime.NumCPU())
}
}
@@ -372,7 +366,7 @@ func (wd *workflowDispatcher) tryNextAsync() {
func newWorkflowDispatcher() WorkflowDispatcher {
return &workflowDispatcher{
concurrency: maxWorkers,
concurrency: envMaxWorkers,
pendingRunQueue: make([]string, 0),
processingTasks: make(map[string]*taskInfo),
@@ -6,7 +6,6 @@ import (
"log/slog"
"maps"
"math"
"os"
"slices"
"strings"
"time"
@@ -24,15 +23,13 @@ import (
"github.com/certimate-go/certimate/internal/tools/mproc"
xcert "github.com/certimate-go/certimate/pkg/utils/cert"
xcryptokey "github.com/certimate-go/certimate/pkg/utils/crypto/key"
xenv "github.com/certimate-go/certimate/pkg/utils/env"
)
var useMultiProc = true
var envMultiProc = true
func init() {
envMultiProc := os.Getenv("CERTIMATE_WORKFLOW_MULTIPROC")
if envMultiProc == "0" {
useMultiProc = false
}
envMultiProc = xenv.GetOrDefaultBool("CERTIMATE_WORKFLOW_MULTIPROC", true)
}
const (
@@ -362,7 +359,7 @@ func (ne *bizApplyNodeExecutor) executeObtain(execCtx *NodeExecutionContext, nod
}
// 如果启用多进程模式,发送指令
if useMultiProc {
if envMultiProc {
type InData struct {
Account *certacme.ACMEAccount `json:"account,omitempty"`
Request *certacme.ObtainCertificateRequest `json:"request,omitempty"`
+93
View File
@@ -0,0 +1,93 @@
package env
import (
"errors"
"os"
"strconv"
)
// 以字符串形式读取指定环境变量的值。
//
// 入参:
// - envVar:环境变量。
//
// 出参:
// - 环境变量值。
func GetString(envVar string) string {
return GetOrDefaultString(envVar, "")
}
// 以字符串形式读取指定环境变量的值。
//
// 入参:
// - envVar:环境变量。
// - defaultValue: 默认值。
//
// 出参:
// - 环境变量值。如果指定环境变量不存在、或者值为零值,则返回默认值。
func GetOrDefaultString(envVar, defaultValue string) string {
return getOrDefault(envVar, defaultValue, parseString)
}
// 以整数形式读取指定环境变量的值。
//
// 入参:
// - envVar:环境变量。
//
// 出参:
// - 环境变量值。
func GetInt(envVar string) int {
return GetOrDefaultInt(envVar, 0)
}
// 以整数形式读取指定环境变量的值。
//
// 入参:
// - envVar:环境变量。
// - defaultValue: 默认值。
//
// 出参:
// - 环境变量值。如果指定环境变量不存在、或者值的类型不是整数,则返回默认值。
func GetOrDefaultInt(envVar string, defaultValue int) int {
return getOrDefault(envVar, defaultValue, strconv.Atoi)
}
// 以布尔形式读取指定环境变量的值。
//
// 入参:
// - envVar:环境变量。
//
// 出参:
// - 环境变量值。
func GetBool(envVar string) bool {
return GetOrDefaultBool(envVar, false)
}
// 以布尔形式读取指定环境变量的值。
//
// 入参:
// - envVar:环境变量。
// - defaultValue: 默认值。
//
// 出参:
// - 环境变量值。如果指定环境变量不存在、或者值的类型不是布尔,则返回默认值。
func GetOrDefaultBool(envVar string, defaultValue bool) bool {
return getOrDefault(envVar, defaultValue, strconv.ParseBool)
}
func getOrDefault[T any](envVar string, defaultValue T, parser func(string) (T, error)) T {
v, err := parser(os.Getenv(envVar))
if err != nil {
return defaultValue
}
return v
}
func parseString(s string) (string, error) {
if s == "" {
return "", errors.New("empty string")
}
return s, nil
}
+10 -10
View File
@@ -11,7 +11,7 @@ import (
// - key: 键。
//
// 出参:
// - 字典中键对应的值。如果指定键不存在或者值的类型不是字符串,则返回空字符串。
// - 字典中键对应的值。如果指定键不存在、或者值的类型不是字符串,则返回空字符串。
func GetString(dict map[string]any, key string) string {
return GetOrDefaultString(dict, key, "")
}
@@ -24,7 +24,7 @@ func GetString(dict map[string]any, key string) string {
// - defaultValue: 默认值。
//
// 出参:
// - 字典中键对应的值。如果指定键不存在、值的类型不是字符串或者值为零值,则返回默认值。
// - 字典中键对应的值。如果指定键不存在、值的类型不是字符串、或者值为零值,则返回默认值。
func GetOrDefaultString(dict map[string]any, key string, defaultValue string) string {
if dict == nil {
return defaultValue
@@ -48,7 +48,7 @@ func GetOrDefaultString(dict map[string]any, key string, defaultValue string) st
// - key: 键。
//
// 出参:
// - 字典中键对应的值。如果指定键不存在或者值的类型不是整数,则返回 0。
// - 字典中键对应的值。如果指定键不存在、或者值的类型不是整数,则返回 0。
func GetInt(dict map[string]any, key string) int {
return GetOrDefaultInt(dict, key, 0)
}
@@ -61,7 +61,7 @@ func GetInt(dict map[string]any, key string) int {
// - defaultValue: 默认值。
//
// 出参:
// - 字典中键对应的值。如果指定键不存在、值的类型不是整数或者值为零值,则返回默认值。
// - 字典中键对应的值。如果指定键不存在、值的类型不是整数、或者值为零值,则返回默认值。
func GetOrDefaultInt(dict map[string]any, key string, defaultValue int) int {
if dict == nil {
return defaultValue
@@ -117,7 +117,7 @@ func GetOrDefaultInt(dict map[string]any, key string, defaultValue int) int {
// - key: 键。
//
// 出参:
// - 字典中键对应的值。如果指定键不存在或者值的类型不是 32 位整数,则返回 0。
// - 字典中键对应的值。如果指定键不存在、或者值的类型不是 32 位整数,则返回 0。
func GetInt32(dict map[string]any, key string) int32 {
return GetOrDefaultInt32(dict, key, 0)
}
@@ -130,7 +130,7 @@ func GetInt32(dict map[string]any, key string) int32 {
// - defaultValue: 默认值。
//
// 出参:
// - 字典中键对应的值。如果指定键不存在、值的类型不是 32 位整数或者值为零值,则返回默认值。
// - 字典中键对应的值。如果指定键不存在、值的类型不是 32 位整数、或者值为零值,则返回默认值。
func GetOrDefaultInt32(dict map[string]any, key string, defaultValue int32) int32 {
if dict == nil {
return defaultValue
@@ -186,7 +186,7 @@ func GetOrDefaultInt32(dict map[string]any, key string, defaultValue int32) int3
// - key: 键。
//
// 出参:
// - 字典中键对应的值。如果指定键不存在或者值的类型不是 64 位整数,则返回 0。
// - 字典中键对应的值。如果指定键不存在、或者值的类型不是 64 位整数,则返回 0。
func GetInt64(dict map[string]any, key string) int64 {
return GetOrDefaultInt64(dict, key, 0)
}
@@ -199,7 +199,7 @@ func GetInt64(dict map[string]any, key string) int64 {
// - defaultValue: 默认值。
//
// 出参:
// - 字典中键对应的值。如果指定键不存在、值的类型不是 64 位整数或者值为零值,则返回默认值。
// - 字典中键对应的值。如果指定键不存在、值的类型不是 64 位整数、或者值为零值,则返回默认值。
func GetOrDefaultInt64(dict map[string]any, key string, defaultValue int64) int64 {
if dict == nil {
return defaultValue
@@ -255,7 +255,7 @@ func GetOrDefaultInt64(dict map[string]any, key string, defaultValue int64) int6
// - key: 键。
//
// 出参:
// - 字典中键对应的值。如果指定键不存在或者值的类型不是布尔,则返回 false。
// - 字典中键对应的值。如果指定键不存在、或者值的类型不是布尔,则返回 false。
func GetBool(dict map[string]any, key string) bool {
return GetOrDefaultBool(dict, key, false)
}
@@ -268,7 +268,7 @@ func GetBool(dict map[string]any, key string) bool {
// - defaultValue: 默认值。
//
// 出参:
// - 字典中键对应的值。如果指定键不存在或者值的类型不是布尔,则返回默认值。
// - 字典中键对应的值。如果指定键不存在、或者值的类型不是布尔,则返回默认值。
func GetOrDefaultBool(dict map[string]any, key string, defaultValue bool) bool {
if dict == nil {
return defaultValue