Skip to content

Commit eb12069

Browse files
authored
feat: log level (#7)
1 parent 857585a commit eb12069

File tree

6 files changed

+93
-36
lines changed

6 files changed

+93
-36
lines changed

cmd/client/apimonkey/instance.go

Lines changed: 33 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -11,42 +11,51 @@ import (
1111
"time"
1212

1313
"github.com/cockroachdb/errors"
14-
"github.com/google/uuid"
1514
"github.com/imroc/req/v3"
1615
"github.com/rs/zerolog"
1716
"github.com/tidwall/gjson"
1817
"meow.tf/streamdeck/sdk"
1918
)
2019

2120
type Instance struct {
22-
cfg *config
23-
contextApp string
24-
lg zerolog.Logger
25-
executor ScriptExecutor
26-
ctx context.Context
27-
ctxCancel context.CancelFunc
28-
mut sync.Mutex
21+
cfg *config
22+
contextApp string
23+
currentLogger zerolog.Logger
24+
executor ScriptExecutor
25+
ctx context.Context
26+
ctxCancel context.CancelFunc
27+
mut sync.Mutex
2928
}
3029

3130
func NewInstance(
3231
contextApp string,
3332
executor ScriptExecutor,
33+
logger zerolog.Logger,
3434
) *Instance {
3535
return &Instance{
36-
contextApp: contextApp,
37-
lg: lg.With().Str("context_id", contextApp).Logger(),
38-
executor: executor,
39-
mut: sync.Mutex{},
36+
contextApp: contextApp,
37+
currentLogger: logger.With().Str("context_id", contextApp).Logger(),
38+
executor: executor,
39+
mut: sync.Mutex{},
4040
}
4141
}
4242

43+
func (i *Instance) GetLogger() zerolog.Logger {
44+
return i.currentLogger
45+
}
46+
4347
func (i *Instance) SetConfig(ctxId string, cfg *config) {
4448
if i.contextApp != ctxId {
4549
return
4650
}
4751

4852
i.cfg = cfg
49-
lg.Debug().Msg("set config")
53+
54+
if i.cfg.MinLogLevel != nil {
55+
i.currentLogger = i.currentLogger.Level(*i.cfg.MinLogLevel)
56+
} else {
57+
i.currentLogger = i.currentLogger.Level(zerolog.WarnLevel)
58+
}
5059
}
5160

5261
func (i *Instance) ShowAlert() {
@@ -55,7 +64,7 @@ func (i *Instance) ShowAlert() {
5564

5665
func (i *Instance) KeyPressed() {
5766
if i.cfg == nil {
58-
lg.Error().Msg("global config not set")
67+
i.currentLogger.Error().Msg("global config not set")
5968
sdk.ShowAlert(i.contextApp)
6069
return
6170
}
@@ -65,12 +74,12 @@ func (i *Instance) KeyPressed() {
6574
targetUrl = i.cfg.ApiUrl
6675
}
6776

68-
targetUrl = runTemplate(targetUrl, i.cfg)
77+
targetUrl = runTemplate(targetUrl, i.cfg, i.currentLogger)
6978

7079
if err := exec.Command("rundll32",
7180
"url.dll,FileProtocolHandler", targetUrl).Start(); err != nil {
7281

73-
lg.Error().Msg("global config not set")
82+
i.currentLogger.Error().Msg("global config not set")
7483
sdk.ShowAlert(i.contextApp)
7584
return
7685
}
@@ -108,15 +117,14 @@ func (i *Instance) run() {
108117
interval = i.cfg.IntervalSeconds
109118
}
110119

111-
newLogger := lg.With().Str("id", uuid.NewString()).Logger()
112120
innerCtx, innerCancel := context.WithCancel(ctx)
113-
innerCtx = newLogger.WithContext(innerCtx)
121+
innerCtx = i.currentLogger.WithContext(innerCtx)
114122

115123
processErr := i.sendAndProcess(innerCtx)
116124
innerCancel()
117125

118126
if processErr != nil {
119-
lg.Err(errors.Wrap(processErr, "error processing response")).Send()
127+
i.currentLogger.Err(errors.Wrap(processErr, "error processing response")).Send()
120128
i.ShowAlert()
121129
} else {
122130
if i.cfg.ShowSuccessNotification {
@@ -129,12 +137,12 @@ func (i *Instance) run() {
129137
}
130138

131139
func (i *Instance) sendAndProcess(ctx context.Context) error {
132-
apiUrl := runTemplate(i.cfg.ApiUrl, i.cfg)
140+
apiUrl := runTemplate(i.cfg.ApiUrl, i.cfg, i.currentLogger)
133141
httpReq := req.C().NewRequest()
134142
httpReq = httpReq.SetContext(ctx)
135143

136144
for k, v := range i.cfg.Headers {
137-
httpReq.SetHeader(k, runTemplate(v, i.cfg))
145+
httpReq.SetHeader(k, runTemplate(v, i.cfg, i.currentLogger))
138146
}
139147

140148
zerolog.Ctx(ctx).Trace().Str("url", apiUrl).Msg("sending request")
@@ -144,7 +152,7 @@ func (i *Instance) sendAndProcess(ctx context.Context) error {
144152
}
145153

146154
value := resp.String()
147-
zerolog.Ctx(ctx).Debug().Str("response", value).Msg("got raw response")
155+
zerolog.Ctx(ctx).Trace().Str("response", value).Msg("got raw response")
148156

149157
if strings.TrimSpace(i.cfg.BodyScript) != "" {
150158
zerolog.Ctx(ctx).Trace().Str("script", i.cfg.BodyScript).Msg("executing script")
@@ -185,14 +193,14 @@ func (i *Instance) sendAndProcess(ctx context.Context) error {
185193
}
186194
}
187195

188-
zerolog.Ctx(ctx).Debug().Str("final_result", value).Msgf("final")
196+
zerolog.Ctx(ctx).Info().Str("final_result", value).Msgf("final")
189197

190198
return i.handleResponse(ctx, value)
191199
}
192200

193201
func (i *Instance) handleResponse(_ context.Context, response string) error {
194202
var sb strings.Builder
195-
prefix := runTemplate(i.cfg.TitlePrefix, i.cfg)
203+
prefix := runTemplate(i.cfg.TitlePrefix, i.cfg, i.currentLogger)
196204
if prefix != "" {
197205
sb.WriteString(strings.ReplaceAll(prefix, "\\n", "\n") + "\n")
198206
}
@@ -217,7 +225,7 @@ func (i *Instance) handleResponse(_ context.Context, response string) error {
217225
mapped = def
218226
} else if !ok && !defaultOk {
219227
sb.WriteString("!! NO !!\n !! MAPPING !!")
220-
lg.Error().Msgf("response mapper not found for value - %v", response)
228+
i.currentLogger.Error().Msgf("response mapper not found for value - %v", response)
221229

222230
sdk.SetTitle(i.contextApp, sb.String(), 0)
223231
sdk.SetImage(i.contextApp, "", 0)

cmd/client/apimonkey/main.go

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,23 +13,27 @@ import (
1313
"github.com/ft-t/streamdeck/cmd/scripts"
1414
)
1515

16-
var lg zerolog.Logger
17-
1816
var instances = map[string]*Instance{}
1917
var mut sync.Mutex
2018

21-
func setSettingsFromPayload(payload *fastjson.Value, ctxId string, instance *Instance) {
19+
func setSettingsFromPayload(
20+
payload *fastjson.Value,
21+
ctxId string,
22+
instance *Instance,
23+
) {
24+
logger := instance.GetLogger()
25+
2226
if instance == nil {
23-
lg.Warn().Msgf("instance %v not found", ctxId)
27+
logger.Warn().Msgf("instance %v not found", ctxId)
2428
return
2529
}
2630

2731
settingsBytes := payload.MarshalTo(nil)
28-
lg.Debug().Msgf("Got configuration: %v", string(settingsBytes))
32+
logger.Trace().Msgf("Got configuration: %v", string(settingsBytes))
2933
var tempConfig config
3034

3135
if err := json.Unmarshal(settingsBytes, &tempConfig); err != nil {
32-
lg.Err(err).Send()
36+
logger.Err(err).Send()
3337
instance.ShowAlert()
3438
return
3539
}
@@ -46,7 +50,7 @@ func main() {
4650
Compress: false,
4751
}
4852

49-
lg = zerolog.New(zerolog.MultiLevelWriter(os.Stdout, logFile)).With().Timestamp().Logger()
53+
lg := zerolog.New(zerolog.MultiLevelWriter(os.Stdout, logFile)).With().Timestamp().Logger()
5054

5155
sdk.AddHandler(func(event *sdk.WillAppearEvent) {
5256
if event.Payload == nil {
@@ -58,7 +62,7 @@ func main() {
5862
instance, ok := instances[event.Context]
5963

6064
if !ok {
61-
instance = NewInstance(event.Context, scripts.NewLua())
65+
instance = NewInstance(event.Context, scripts.NewLua(), lg)
6266
instances[event.Context] = instance
6367
}
6468

cmd/client/apimonkey/process.go

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,23 +6,28 @@ import (
66
"text/template"
77

88
"github.com/cockroachdb/errors"
9+
"github.com/rs/zerolog"
910
)
1011

11-
func runTemplate(input string, cfg *config) string {
12+
func runTemplate(
13+
input string,
14+
cfg *config,
15+
logger zerolog.Logger,
16+
) string {
1217
if len(cfg.TemplateParameters) == 0 || len(input) == 0 {
1318
return input
1419
}
1520

1621
parsed, err := template.New("any").Parse(input)
1722
if err != nil {
18-
lg.Err(errors.Wrapf(err, "can not parse template - %v", err))
23+
logger.Err(errors.Wrapf(err, "can not parse template - %v", err))
1924
return input
2025
}
2126

2227
var buf bytes.Buffer
2328

2429
if err = parsed.Execute(&buf, cfg.TemplateParameters); err != nil {
25-
lg.Err(errors.Wrapf(err, "can not parse template - %v", err))
30+
logger.Err(errors.Wrapf(err, "can not parse template - %v", err))
2631
return input
2732
}
2833

cmd/client/apimonkey/resources/pi/pi.html

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,17 @@
2626
<button class="sdpi-item-value" @click="save">Save All</button>
2727
</div>
2828
<hr>
29+
<div class="sdpi-item" id="select_single2">
30+
<div class="sdpi-item-label">Log Level</div>
31+
<select class="sdpi-item-value select sdProperty" v-model="config.logLevel">
32+
<option value="3">Error</option>
33+
<option value="2" selected>Warn</option>
34+
<option value="1">Info</option>
35+
<option value="0">Debug</option>
36+
<option value="-1">Trace</option>
37+
</select>
38+
</div>
39+
<hr>
2940
<div class="sdpi-item" id="select_single">
3041
<div class="sdpi-item-label">Request Type</div>
3142
<select class="sdpi-item-value select sdProperty" v-model="config.methodType">

cmd/client/apimonkey/types.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package main
22

3+
import "github.com/rs/zerolog"
4+
35
type config struct {
46
ApiUrl string `json:"apiUrl"`
57
BrowserUrl string `json:"browserUrl"`
@@ -11,4 +13,5 @@ type config struct {
1113
TitlePrefix string `json:"titlePrefix"`
1214
BodyScript string `json:"bodyScript"`
1315
ShowSuccessNotification bool `json:"showSuccessNotification"`
16+
MinLogLevel *zerolog.Level `json:"logLevel"`
1417
}

cmd/scripts/lua_test.go

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,3 +36,29 @@ func TestLuaWithHeadersAndTemplate(t *testing.T) {
3636
assert.NoError(t, err)
3737
assert.Equal(t, "Hello, world!SomeValuevalue1", resp)
3838
}
39+
40+
func TestHandleArray(t *testing.T) {
41+
executor := scripts.NewLua()
42+
43+
resp, err := executor.Execute(context.TODO(), `
44+
local json = require("json")
45+
local data2, pos2, err2 = json.decode(_G.ResponseBody, 1, nil)
46+
47+
return data2["values"][1]["state"]`,
48+
`{
49+
"values": [
50+
{
51+
"state": "SUCCESSFUL"
52+
}
53+
],
54+
"pagelen": 10,
55+
"size": 1,
56+
"page": 1
57+
}`,
58+
200,
59+
nil,
60+
nil,
61+
)
62+
assert.NoError(t, err)
63+
assert.Equal(t, "SUCCESSFUL", resp)
64+
}

0 commit comments

Comments
 (0)