Skip to content

Commit

Permalink
feat: init config with parsing env expression
Browse files Browse the repository at this point in the history
  • Loading branch information
dspo committed Jul 19, 2023
1 parent f1eadfc commit bf6f9bd
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 35 deletions.
4 changes: 2 additions & 2 deletions internal/apps/ai-proxy/filters/session-context/filter.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,10 @@ import (
"bytes"
"context"
"encoding/json"
"github.com/pkg/errors"
"io"
"net/http"

"github.com/pkg/errors"
"gopkg.in/yaml.v3"

"github.com/erda-project/erda-infra/base/logs"
Expand Down Expand Up @@ -70,7 +70,7 @@ func (c *SessionContext) OnRequest(ctx context.Context, _ http.ResponseWriter, i
if !ok {
return reverseproxy.Continue, nil
}

sessionId := infor.Header().Get(vars.XAIProxySessionId)
if sessionId == "" {
l.Debugf("sessionId is not specified, continue")
Expand Down
75 changes: 42 additions & 33 deletions internal/apps/ai-proxy/provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,14 @@ var (
return new(provider)
},
}
rootKeyAuth = transport.WithInterceptors(func(h interceptor.Handler) interceptor.Handler {
return func(ctx context.Context, req interface{}) (interface{}, error) {
if auth := transport.ContextHeader(ctx).Get("Authorization"); len(auth) == 0 || auth[0] != "Bearer "+os.Getenv("AI_PROXY_ROOT_KEY") {
return nil, errors.New("Access denied to the admin API")
}
return h(ctx, req)
}
})
)

func init() {
Expand All @@ -95,6 +103,7 @@ type provider struct {
}

func (p *provider) Init(_ servicehub.Context) error {
p.initConfig()
p.initLogger()
if err := p.parseRoutesConfig(); err != nil {
return errors.Wrap(err, "failed to parseRoutesConfig")
Expand Down Expand Up @@ -186,6 +195,15 @@ func (p *provider) RegisterService(desc *grpc.ServiceDesc, impl interface{}) {
}
}

func (p *provider) initConfig() {
for _, s := range []*string{
&p.Config.LogLevel,
&p.Config.ErdaOpenapi,
} {
parseEnvExpr(s)
}
}

func (p *provider) initLogger() {
if l, ok := p.L.(*logrusx.Logger); ok {
var logger = logrus.New()
Expand All @@ -198,8 +216,8 @@ func (p *provider) initLogger() {
}
p.L.Infof("logger formatter: %+v", formatter)
logger.SetFormatter(formatter)
if level, err := logrus.ParseLevel(p.Config.GetLogLevel()); err == nil {
p.L.Infof("logger level: %s", p.Config.GetLogLevel())
if level, err := logrus.ParseLevel(p.Config.LogLevel); err == nil {
p.L.Infof("logger level: %s", p.Config.LogLevel)
logger.SetLevel(level)
} else {
p.L.Infof("failed to parse logger level from config, set it as %s", logrus.InfoLevel.String())
Expand All @@ -208,8 +226,8 @@ func (p *provider) initLogger() {
l.Entry = logrus.NewEntry(logger)
return
}
p.L.Infof("logger level: %s", p.Config.GetLogLevel())
if err := p.L.SetLevel(p.Config.GetLogLevel()); err != nil {
p.L.Infof("logger level: %s", p.Config.LogLevel)
if err := p.L.SetLevel(p.Config.LogLevel); err != nil {
p.L.Infof("failed to set logger level from config, set it as %s", logrus.InfoLevel.String())
_ = p.L.SetLevel(logrus.InfoLevel.String())
}
Expand Down Expand Up @@ -284,28 +302,6 @@ type configPromExporter struct {
Name string `json:"name" yaml:"name"`
}

func (c *config) GetLogLevel() string {
expr, start, end, err := strutil.FirstCustomExpression(c.LogLevel, "${", "}", func(s string) bool {
return strings.HasPrefix(strings.TrimSpace(s), "env.")
})
if err != nil || start == end {
return c.LogLevel
}
key := strings.TrimPrefix(expr, "env.")
keys := strings.Split(key, ":")
if len(keys) > 0 {
key = keys[0]
}
env, ok := os.LookupEnv(key)
if !ok {
if len(keys) > 1 {
return strings.Join(keys[1:], ":")
}
return logrus.InfoLevel.String()
}
return env
}

func WrapRequest(r *http.Request, wraps ...func(*http.Request)) *http.Request {
for _, wrap := range wraps {
wrap(r)
Expand All @@ -319,11 +315,24 @@ func SetXRequestId(r *http.Request) {
}
}

var rootKeyAuth = transport.WithInterceptors(func(h interceptor.Handler) interceptor.Handler {
return func(ctx context.Context, req interface{}) (interface{}, error) {
if auth := transport.ContextHeader(ctx).Get("Authorization"); len(auth) == 0 || auth[0] != "Bearer "+os.Getenv("AI_PROXY_ROOT_KEY") {
return nil, errors.New("Access denied to the admin API")
}
return h(ctx, req)
func parseEnvExpr(s *string) {
expr, start, end, err := strutil.FirstCustomExpression(*s, "${", "}", func(s string) bool {
return strings.HasPrefix(strings.TrimSpace(s), "env.")
})
if err != nil || start == end {
return
}
})
key := strings.TrimPrefix(expr, "env.")
keyAndDefault := strings.SplitN(key, ":", 2)
if len(keyAndDefault) > 0 {
key = keyAndDefault[0]
}
if v, ok := os.LookupEnv(key); ok {
*s = v
return
}
if len(keyAndDefault) > 1 {
*s = keyAndDefault[1]
return
}
}

0 comments on commit bf6f9bd

Please sign in to comment.