Skip to content

Commit 54a5cbc

Browse files
committed
Code refactoring
1 parent 56c8f18 commit 54a5cbc

File tree

5 files changed

+146
-83
lines changed

5 files changed

+146
-83
lines changed

common/updown-badge-server.spec

+6-2
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414

1515
Summary: Service for generating badges for updown.io checks
1616
Name: updown-badge-server
17-
Version: 1.3.2
17+
Version: 1.4.0
1818
Release: 0%{?dist}
1919
Group: Applications/System
2020
License: Apache License, Version 2.0
@@ -26,7 +26,7 @@ Source100: checksum.sha512
2626

2727
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
2828

29-
BuildRequires: golang >= 1.21
29+
BuildRequires: golang >= 1.22
3030

3131
Requires: systemd
3232

@@ -100,6 +100,10 @@ exit 0
100100
################################################################################
101101

102102
%changelog
103+
* Thu Oct 10 2024 Anton Novojilov <[email protected]> - 1.4.0-0
104+
- Code refactoring
105+
- Dependencies update
106+
103107
* Mon Jun 24 2024 Anton Novojilov <[email protected]> - 1.3.2-0
104108
- Code refactoring
105109
- Dependencies update

daemon/daemon.go

+109-56
Original file line numberDiff line numberDiff line change
@@ -8,27 +8,30 @@ package daemon
88
// ////////////////////////////////////////////////////////////////////////////////// //
99

1010
import (
11+
"fmt"
1112
"os"
1213
"runtime"
13-
"strings"
1414
"time"
1515

16-
"github.com/essentialkaos/ek/v12/cache"
17-
"github.com/essentialkaos/ek/v12/fmtc"
18-
"github.com/essentialkaos/ek/v12/knf"
19-
"github.com/essentialkaos/ek/v12/log"
20-
"github.com/essentialkaos/ek/v12/options"
21-
"github.com/essentialkaos/ek/v12/signal"
22-
"github.com/essentialkaos/ek/v12/support"
23-
"github.com/essentialkaos/ek/v12/support/deps"
24-
"github.com/essentialkaos/ek/v12/terminal"
25-
"github.com/essentialkaos/ek/v12/terminal/tty"
26-
"github.com/essentialkaos/ek/v12/usage"
27-
28-
knfv "github.com/essentialkaos/ek/v12/knf/validators"
29-
knff "github.com/essentialkaos/ek/v12/knf/validators/fs"
30-
knfn "github.com/essentialkaos/ek/v12/knf/validators/network"
31-
knfr "github.com/essentialkaos/ek/v12/knf/validators/regexp"
16+
"github.com/essentialkaos/ek/v13/cache"
17+
"github.com/essentialkaos/ek/v13/cache/memory"
18+
"github.com/essentialkaos/ek/v13/errutil"
19+
"github.com/essentialkaos/ek/v13/fmtc"
20+
"github.com/essentialkaos/ek/v13/knf"
21+
"github.com/essentialkaos/ek/v13/log"
22+
"github.com/essentialkaos/ek/v13/options"
23+
"github.com/essentialkaos/ek/v13/signal"
24+
"github.com/essentialkaos/ek/v13/support"
25+
"github.com/essentialkaos/ek/v13/support/deps"
26+
"github.com/essentialkaos/ek/v13/support/services"
27+
"github.com/essentialkaos/ek/v13/terminal"
28+
"github.com/essentialkaos/ek/v13/terminal/tty"
29+
"github.com/essentialkaos/ek/v13/usage"
30+
31+
knfv "github.com/essentialkaos/ek/v13/knf/validators"
32+
knff "github.com/essentialkaos/ek/v13/knf/validators/fs"
33+
knfn "github.com/essentialkaos/ek/v13/knf/validators/network"
34+
knfr "github.com/essentialkaos/ek/v13/knf/validators/regexp"
3235

3336
"github.com/essentialkaos/go-badge"
3437

@@ -42,7 +45,7 @@ import (
4245
// Basic service info
4346
const (
4447
APP = "UpDownBadgeServer"
45-
VER = "1.3.2"
48+
VER = "1.4.0"
4649
DESC = "Service for generating badges for updown.io checks"
4750
)
4851

@@ -97,7 +100,7 @@ var optMap = options.Map{
97100

98101
var udAPI *api.API
99102
var server *fasthttp.Server
100-
var badgeCache *cache.Cache
103+
var badgeCache cache.Cache
101104
var badgeGen *badge.Generator
102105
var badgeStyle string
103106
var redirectURL string
@@ -125,22 +128,41 @@ func Run(gomod []byte) {
125128
case options.GetB(OPT_VERB_VER):
126129
support.Collect(APP, VER).
127130
WithDeps(deps.Extract(gomod)).
131+
WithServices(services.Collect("updown-badge-server")).
128132
Print()
129133
os.Exit(0)
130134
case options.GetB(OPT_HELP):
131135
genUsage().Print()
132136
os.Exit(0)
133137
}
134138

135-
loadConfig()
136-
validateConfig()
137-
configureRuntime()
138-
registerSignalHandlers()
139-
setupLogger()
139+
err := errutil.Chain(
140+
loadConfig,
141+
validateConfig,
142+
configureRuntime,
143+
setupSignalHandlers,
144+
setupLogger,
145+
)
140146

141-
log.Aux(strings.Repeat("-", 80))
147+
if err != nil {
148+
terminal.Error(err)
149+
os.Exit(1)
150+
}
151+
152+
log.Divider()
142153
log.Aux("%s %s starting…", APP, VER)
143154

155+
err = errutil.Chain(
156+
setupCache,
157+
setupGenerator,
158+
setupAPIClient,
159+
)
160+
161+
if err != nil {
162+
log.Crit(err.Error())
163+
os.Exit(1)
164+
}
165+
144166
start()
145167
}
146168

@@ -159,31 +181,32 @@ func configureUI() {
159181
}
160182

161183
// loadConfig reads and parses configuration file
162-
func loadConfig() {
184+
func loadConfig() error {
163185
err := knf.Global(options.GetS(OPT_CONFIG))
164186

165187
if err != nil {
166-
log.Crit(err.Error())
167-
os.Exit(1)
188+
return fmt.Errorf("Can't load configuration: %w", err)
168189
}
190+
191+
return nil
169192
}
170193

171194
// validateConfig validates configuration file values
172-
func validateConfig() {
195+
func validateConfig() error {
173196
errs := knf.Validate([]*knf.Validator{
174-
{UPDOWN_API_KEY, knfv.Empty, nil},
175-
{SERVER_PORT, knfv.Empty, nil},
197+
{UPDOWN_API_KEY, knfv.Set, nil},
198+
{SERVER_PORT, knfv.Set, nil},
176199

177200
{MAIN_MAX_PROCS, knfv.TypeNum, nil},
178201
{CACHE_PERIOD, knfv.TypeNum, nil},
179202
{SERVER_PORT, knfv.TypeNum, nil},
180203

181204
{BADGE_FONT, knff.Perms, "FRS"},
182-
{BADGE_STYLE, knfv.NotContains, []string{
205+
{BADGE_STYLE, knfv.SetToAny, []string{
183206
STYLE_PLASTIC, STYLE_FLAT, STYLE_FLAT_SQUARE,
184207
}},
185208

186-
{UPDOWN_API_KEY, knfv.NotLen, 23},
209+
{UPDOWN_API_KEY, knfv.LenEquals, 23},
187210
{UPDOWN_API_KEY, knfr.Regexp, "^ro-[0-9A-Za-z]{20}$"},
188211

189212
{MAIN_MAX_PROCS, knfv.Less, MIN_PROCS},
@@ -201,57 +224,75 @@ func validateConfig() {
201224
{LOG_DIR, knff.Perms, "DW"},
202225
{LOG_DIR, knff.Perms, "DX"},
203226

204-
{LOG_LEVEL, knfv.NotContains, []string{
227+
{LOG_LEVEL, knfv.SetToAnyIgnoreCase, []string{
205228
"debug", "info", "warn", "error", "crit",
206229
}},
207230
})
208231

209232
if len(errs) != 0 {
210-
for _, err := range errs {
211-
log.Crit(err.Error())
212-
}
213-
214-
os.Exit(1)
233+
return errs[0]
215234
}
235+
236+
return nil
216237
}
217238

218239
// configureRuntime configures runtime
219-
func configureRuntime() {
240+
func configureRuntime() error {
220241
if !knf.HasProp(MAIN_MAX_PROCS) {
221-
return
242+
return nil
222243
}
223244

224245
runtime.GOMAXPROCS(knf.GetI(MAIN_MAX_PROCS))
246+
247+
return nil
225248
}
226249

227-
// registerSignalHandlers registers signal handlers
228-
func registerSignalHandlers() {
250+
// setupSignalHandlers registers signal handlers
251+
func setupSignalHandlers() error {
229252
signal.Handlers{
230253
signal.TERM: termSignalHandler,
231254
signal.INT: intSignalHandler,
232255
signal.HUP: hupSignalHandler,
233256
}.TrackAsync()
257+
258+
return nil
234259
}
235260

236261
// setupLogger configures logger subsystems
237-
func setupLogger() {
262+
func setupLogger() error {
238263
err := log.Set(knf.GetS(LOG_FILE), knf.GetM(LOG_MODE, 0644))
239264

240265
if err != nil {
241-
log.Crit(err.Error())
242-
os.Exit(1)
266+
return fmt.Errorf("Can't setup logger: %w", err)
243267
}
244268

245269
err = log.MinLevel(knf.GetS(LOG_LEVEL))
246270

247271
if err != nil {
248-
log.Crit(err.Error())
249-
os.Exit(1)
272+
return fmt.Errorf("Can't setup logger: %w", err)
250273
}
274+
275+
return nil
251276
}
252277

253-
// start configures and starts all subsystems
254-
func start() {
278+
// setupCache configures in-memory cache
279+
func setupCache() error {
280+
var err error
281+
282+
badgeCache, err = memory.New(memory.Config{
283+
DefaultExpiration: knf.GetD(CACHE_PERIOD, knf.Second),
284+
CleanupInterval: 15 * time.Second,
285+
})
286+
287+
if err != nil {
288+
return fmt.Errorf("Can't configure in-memory cache: %w", err)
289+
}
290+
291+
return nil
292+
}
293+
294+
// setupGenerator configurates badge generator
295+
func setupGenerator() error {
255296
var err error
256297

257298
badgeStyle = knf.GetS(BADGE_STYLE, "flat")
@@ -260,21 +301,32 @@ func start() {
260301
badgeGen, err = badge.NewGenerator(knf.GetS(BADGE_FONT), 11)
261302

262303
if err != nil {
263-
log.Crit("Can't load font for badges: %v", err)
264-
shutdown(1)
304+
return fmt.Errorf("Can't create badge generator: %w", err)
265305
}
266306

307+
return nil
308+
}
309+
310+
// setupAPIClient configures updown.io API client
311+
func setupAPIClient() error {
267312
udAPI = api.NewClient(knf.GetS(UPDOWN_API_KEY))
268313
udAPI.SetUserAgent(APP, VER)
269314

270-
badgeCache = cache.New(knf.GetD(CACHE_PERIOD, knf.Second), time.Minute)
315+
return nil
316+
}
271317

272-
err = startHTTPServer(knf.GetS(SERVER_IP), knf.GetS(SERVER_PORT))
318+
// start configures and starts all subsystems
319+
func start() error {
320+
err := startHTTPServer(
321+
knf.GetS(SERVER_IP),
322+
knf.GetS(SERVER_PORT),
323+
)
273324

274325
if err != nil {
275-
log.Crit("Can't start HTTP server: %v", err)
276-
shutdown(1)
326+
return fmt.Errorf("Can't start HTTP server: %w", err)
277327
}
328+
329+
return nil
278330
}
279331

280332
// intSignalHandler is INT signal handler
@@ -306,6 +358,7 @@ func shutdown(code int) {
306358
}
307359
}
308360

361+
log.Flush()
309362
os.Exit(code)
310363
}
311364

daemon/server.go

+5-5
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,11 @@ import (
1111
"fmt"
1212
"strings"
1313

14-
"github.com/essentialkaos/ek/v12/color"
15-
"github.com/essentialkaos/ek/v12/easing"
16-
"github.com/essentialkaos/ek/v12/log"
17-
"github.com/essentialkaos/ek/v12/mathutil"
18-
"github.com/essentialkaos/ek/v12/strutil"
14+
"github.com/essentialkaos/ek/v13/color"
15+
"github.com/essentialkaos/ek/v13/easing"
16+
"github.com/essentialkaos/ek/v13/log"
17+
"github.com/essentialkaos/ek/v13/mathutil"
18+
"github.com/essentialkaos/ek/v13/strutil"
1919

2020
"github.com/essentialkaos/go-badge"
2121

go.mod

+7-7
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
11
module github.com/essentialkaos/updown-badge-server
22

3-
go 1.18
3+
go 1.22.8
44

55
require (
6-
github.com/essentialkaos/ek/v12 v12.130.0
6+
github.com/essentialkaos/ek/v13 v13.6.0
77
github.com/essentialkaos/go-badge v1.4.1
88
github.com/valyala/fasthttp v1.56.0
99
)
1010

1111
require (
12-
github.com/andybalholm/brotli v1.1.0 // indirect
13-
github.com/essentialkaos/depsy v1.3.0 // indirect
12+
github.com/andybalholm/brotli v1.1.1 // indirect
13+
github.com/essentialkaos/depsy v1.3.1 // indirect
1414
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect
15-
github.com/klauspost/compress v1.17.9 // indirect
15+
github.com/klauspost/compress v1.17.10 // indirect
1616
github.com/valyala/bytebufferpool v1.0.0 // indirect
17-
golang.org/x/image v0.18.0 // indirect
18-
golang.org/x/sys v0.25.0 // indirect
17+
golang.org/x/image v0.21.0 // indirect
18+
golang.org/x/sys v0.26.0 // indirect
1919
)

0 commit comments

Comments
 (0)