• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

welovemedia / ffmate / 18142163785

30 Sep 2025 08:09PM UTC coverage: 60.424% (-1.8%) from 62.189%
18142163785

push

github

YoSev
feat: add startup and periodic (cluster) task fail logic for crashed clients

20 of 91 new or added lines in 9 files covered. (21.98%)

60 existing lines in 4 files now uncovered.

2252 of 3727 relevant lines covered (60.42%)

13.35 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

92.31
/internal/debug/debug.go
1
package debug
2

3
import (
4
        "io"
5
        "os"
6

7
        "github.com/yosev/debugo"
8
)
9

10
// loggers holds all log levels and namespaces as plain functions.
11
type loggers struct {
12
        Info  func(format string, v ...any)
13
        Debug func(format string, v ...any)
14
        Warn  func(format string, v ...any)
15
        Error func(format string, v ...any)
16
}
17

18
// newLoggers creates a set of loggers for a given namespace prefix.
19
func newLoggers(prefix string) loggers {
98✔
20
        makeLogger := func(level string) func(string, ...any) {
490✔
21
                ns := level
392✔
22
                if prefix != "" {
756✔
23
                        ns = level + ":" + prefix
364✔
24
                }
364✔
25
                logger := debugo.New(ns)
392✔
26
                return func(format string, v ...any) {
1,290✔
27
                        logger.Debugf(format, v...)
898✔
28
                }
898✔
29
        }
30

31
        return loggers{
98✔
32
                Info:  makeLogger("info"),
98✔
33
                Debug: makeLogger("debug"),
98✔
34
                Warn:  makeLogger("warn"),
98✔
35
                Error: makeLogger("error"),
98✔
36
        }
98✔
37
}
38

39
// Global loggers
40
var (
41
        Log         = newLoggers("") // no namespace
42
        Watchfolder = newLoggers("watchfolder")
43
        Task        = newLoggers("task")
44
        Preset      = newLoggers("preset")
45
        Client      = newLoggers("client")
46
        FFmpeg      = newLoggers("ffmpeg")
47
        Websocket   = newLoggers("websocket")
48
        Controller  = newLoggers("controller")
49
        Service     = newLoggers("service")
50
        Middleware  = newLoggers("middleware")
51
        Telemetry   = newLoggers("telemetry")
52
        Webhook     = newLoggers("webhook")
53
        HTTP        = newLoggers("http")
54
        Test        = newLoggers("test")
55
)
56

57
// logBroadcaster is used to forward all logs to websocket clients via callback.
58
type logBroadcaster struct {
59
        Callback func([]byte)
60
}
UNCOV
61

×
62
func (cw *logBroadcaster) Write(p []byte) (int, error) {
1✔
63
        cw.Callback(p)
1✔
64
        return len(p), nil
1✔
65
}
1✔
66

UNCOV
67
// RegisterBroadcastLogger sets up a multi-writer that sends logs to stderr and a callback.
×
68
func RegisterBroadcastLogger(fn func([]byte)) {
1✔
69
        mw := io.MultiWriter(os.Stderr, &logBroadcaster{Callback: fn})
1✔
70
        debugo.SetOutput(mw)
1✔
71
}
1✔
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc