Skip to content

Commit

Permalink
Process and utility improvements
Browse files Browse the repository at this point in the history
  • Loading branch information
kyleu committed Oct 19, 2024
1 parent fa2e705 commit f8ef611
Show file tree
Hide file tree
Showing 7 changed files with 56 additions and 23 deletions.
4 changes: 2 additions & 2 deletions app/lib/log/encoder.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,8 @@ type customEncoder struct {
listeners []ListenerFunc
}

func newEncoder(cfg zapcore.EncoderConfig, colored bool) *customEncoder {
return &customEncoder{Encoder: zapcore.NewJSONEncoder(cfg), colored: colored, pool: buffer.NewPool()}
func newEncoder(cfg zapcore.EncoderConfig, colored bool, fns ...ListenerFunc) *customEncoder {
return &customEncoder{Encoder: zapcore.NewJSONEncoder(cfg), colored: colored, pool: buffer.NewPool(), listeners: fns}
}

func (e *customEncoder) Clone() zapcore.Encoder {
Expand Down
14 changes: 7 additions & 7 deletions app/lib/log/logger.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,17 +20,17 @@ var (
listenerMU = &sync.Mutex{}
)

func InitLogging(debug bool) (util.Logger, error) {
func InitLogging(debug bool, fns ...ListenerFunc) (util.Logger, error) {
var logger *zap.Logger
var err error
lf := util.GetEnv("logging_format")
switch {
case strings.EqualFold(lf, util.KeyJSON):
logger, err = initJSONLogging(getLevel(zap.InfoLevel))
case debug:
logger, err = initDevLogging(getLevel(zap.DebugLevel))
logger, err = initDevLogging(getLevel(zap.DebugLevel), fns...)
default:
logger, err = initSimpleLogging(getLevel(zap.DebugLevel))
logger, err = initSimpleLogging(getLevel(zap.DebugLevel), fns...)
}
if err != nil {
return nil, errors.Wrap(err, "error initializing logging")
Expand All @@ -42,9 +42,9 @@ func CreateTestLogger() (util.Logger, error) {
return InitLogging(false)
}

func initDevLogging(lvl zapcore.Level) (*zap.Logger, error) {
func initDevLogging(lvl zapcore.Level, fns ...ListenerFunc) (*zap.Logger, error) {
_ = zap.RegisterEncoder(keyCustom, func(cfg zapcore.EncoderConfig) (zapcore.Encoder, error) {
return newEncoder(cfg, runtime.GOOS != "js"), nil
return newEncoder(cfg, runtime.GOOS != "js", fns...), nil
})
config := zap.NewDevelopmentConfig()
config.EncoderConfig = zapcore.EncoderConfig{}
Expand All @@ -60,9 +60,9 @@ func initJSONLogging(lvl zapcore.Level) (*zap.Logger, error) {
return config.Build(zap.AddStacktrace(zap.PanicLevel), zap.AddCaller())
}

func initSimpleLogging(lvl zapcore.Level) (*zap.Logger, error) {
func initSimpleLogging(lvl zapcore.Level, fns ...ListenerFunc) (*zap.Logger, error) {
_ = zap.RegisterEncoder(keyCustom, func(cfg zapcore.EncoderConfig) (zapcore.Encoder, error) {
return createSimpleEncoder(cfg), nil
return createSimpleEncoder(cfg, fns...), nil
})
config := zap.NewDevelopmentConfig()
config.EncoderConfig = zapcore.EncoderConfig{}
Expand Down
30 changes: 26 additions & 4 deletions app/lib/log/simple.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,25 +3,47 @@ package log
import (
"go.uber.org/zap/buffer"
"go.uber.org/zap/zapcore"

"github.com/kyleu/rituals/app/util"
)

type simpleEncoder struct {
zapcore.Encoder
pool buffer.Pool
pool buffer.Pool
listeners []ListenerFunc
}

func createSimpleEncoder(cfg zapcore.EncoderConfig) *simpleEncoder {
return &simpleEncoder{Encoder: zapcore.NewJSONEncoder(cfg), pool: buffer.NewPool()}
func createSimpleEncoder(cfg zapcore.EncoderConfig, fns ...ListenerFunc) *simpleEncoder {
return &simpleEncoder{Encoder: zapcore.NewJSONEncoder(cfg), pool: buffer.NewPool(), listeners: fns}
}

func (e *simpleEncoder) Clone() zapcore.Encoder {
return &simpleEncoder{Encoder: e.Encoder.Clone(), pool: e.pool}
}

func (e *simpleEncoder) EncodeEntry(entry zapcore.Entry, _ []zapcore.Field) (*buffer.Buffer, error) {
func (e *simpleEncoder) EncodeEntry(entry zapcore.Entry, fields []zapcore.Field) (*buffer.Buffer, error) {
go func() {
e.sendToListeners(entry, fields)
}()
ret := e.pool.Get()
m := levelToColor[entry.Level.String()].Add(entry.Message)
ret.AppendString(m)
ret.AppendByte('\n')
return ret, nil
}

func (e *simpleEncoder) sendToListeners(entry zapcore.Entry, fields []zapcore.Field) {
listenerMU.Lock()
defer listenerMU.Unlock()
fieldMap := make(util.ValueMap, len(fields))
for _, x := range fields {
fieldMap[x.Key] = x.Interface
}
caller := util.ValueMap{"file": entry.Caller.File, "line": entry.Caller.Line, "function": entry.Caller.Function}
for _, listener := range e.listeners {
l := listener
go func() {
l(entry.Level.String(), entry.Time, entry.LoggerName, entry.Message, caller, entry.Stack, fieldMap)
}()
}
}
4 changes: 4 additions & 0 deletions app/util/map.go
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,10 @@ func (m ValueMap) WithoutKeys(keys ...string) ValueMap {
return ret
}

func (m ValueMap) AsMap() map[string]any {
return m
}

func (m ValueMap) String() string {
return ToJSONCompact(m)
}
Expand Down
11 changes: 11 additions & 0 deletions assets/embed.go
Original file line number Diff line number Diff line change
Expand Up @@ -50,3 +50,14 @@ func URL(path string) string {
e, _ := Embed(path)
return fmt.Sprintf("/assets/%s?hash=%s", path, e.Hash)
}

func ScriptElement(path string, deferFlag bool) string {
if deferFlag {
return fmt.Sprintf("<script src=%q defer=\"defer\"></script>", URL(path))
}
return fmt.Sprintf("<script src=%q></script>", URL(path))
}

func StylesheetElement(path string) string {
return fmt.Sprintf(`<link rel="stylesheet" media="screen" href=%q>`, URL(path))
}
4 changes: 2 additions & 2 deletions views/layout/Head.html
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,6 @@
<link rel="icon" href="{%s assets.URL(`logo.svg`) %}" type="image/svg+xml">
<style>
{%s= thm.CSS(2) %} </style>
<link rel="stylesheet" media="screen" href="{%s assets.URL(`client.css`) %}">{% if !ps.NoScript %}
<script type="text/javascript" src="{%s assets.URL(`client.js`) %}"></script>{% endif %}
{%s= assets.StylesheetElement(`client.css`) %}{% if !ps.NoScript %}
{%s= assets.ScriptElement(`client.js`, true) %}{% endif %}
{% endfunc %}
12 changes: 4 additions & 8 deletions views/layout/Head.html.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit f8ef611

Please sign in to comment.