Skip to content

Commit b3d1395

Browse files
committed
feat: add more params to logger
1 parent 1327858 commit b3d1395

File tree

8 files changed

+110
-56
lines changed

8 files changed

+110
-56
lines changed

internal/api/api.go

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,16 +35,19 @@ func NewUpdateApi(dnsServiceFactory factory.ServiceFactory) *UpdateApi {
3535
func (u *UpdateApi) HandleUpdateRequest(c echo.Context) error {
3636
var request UpdateRequest
3737

38+
logger := log.With().Str("subdomains", request.Subdomains).Str("domain", request.Domain).Str("IP", request.IP).Logger()
39+
3840
err := c.Bind(&request)
3941
if err != nil {
4042
log.Error().Err(err).Msg(ErrCannotParseRequest.Error())
4143
return c.String(http.StatusBadRequest, ErrCannotParseRequest.Error())
4244
}
4345

44-
log.Info().Str("subdomains", request.Subdomains).Str("domain", request.Domain).Str("IP", request.IP).Msg("request received")
46+
logger.Info().Msg("request received")
4547

4648
err = validateRequest(request.Domain, request.IP)
4749
if err != nil {
50+
logger.Error().Err(err).Msg(err.Error())
4851
return c.String(400, err.Error())
4952
}
5053

@@ -53,13 +56,15 @@ func (u *UpdateApi) HandleUpdateRequest(c echo.Context) error {
5356
successfulUpdates := 0
5457

5558
if len(subdomains) == 0 || subdomains[0] == "" {
59+
logger.Error().Err(ErrMissingParameter).Msg(ErrMissingParameter.Error())
5660
return c.String(http.StatusBadRequest, ErrMissingParameter.Error())
5761
}
5862

5963
for i := range subdomains {
6064

6165
service, err := u.dnsServiceFactory.Find(services.Registrar(request.Registrar))
6266
if err != nil {
67+
logger.Err(err).Msg("getting registrar from factory failed")
6368
return c.String(400, err.Error())
6469
}
6570

@@ -71,13 +76,14 @@ func (u *UpdateApi) HandleUpdateRequest(c echo.Context) error {
7176

7277
err = service.UpdateRecord(request)
7378
if err != nil {
79+
logger.Err(err).Msg("updating record failed")
7480
return c.String(http.StatusInternalServerError, err.Error())
7581
}
7682

7783
successfulUpdates++
7884
}
7985

80-
log.Info().Int("updates", successfulUpdates).Str("subdomains", request.Subdomains).Str("domain", request.Domain).Msg("successfully created")
86+
logger.Info().Int("updates", successfulUpdates).Msg("successfully created")
8187

8288
return c.String(http.StatusOK, fmt.Sprintf("created %d entries for subdomains %s on %s: %s", successfulUpdates, request.Subdomains, request.Domain, request.IP))
8389

services/cloudflare.go

Lines changed: 38 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@ func NewCloudflareDnsUpdateService(client HTTPClient) (*CloudflareDnsUpdateServi
2323
ttl := viper.GetInt("cloudflare.ttl")
2424
apikey := viper.GetString("cloudflare.apiKey")
2525
zoneId := viper.GetString("cloudflare.zoneId")
26+
27+
log.Info().Msg("initializing cloudflare service")
28+
2629
if len(baseUrl) == 0 || ttl == 0 || len(apikey) == 0 || len(zoneId) == 0 {
2730
return nil, ErrMissingInfoForServiceInit
2831
}
@@ -64,6 +67,9 @@ func (c *CloudflareDnsUpdateService) UpdateRecord(request *DynDnsRequest) error
6467
endpoint := fmt.Sprintf("%s/zones/%s/dns_records", c.baseUrl,
6568
c.zoneId)
6669

70+
logger := log.With().Str("func", "UpdateRecord").Str("registrar", "cloudflare").Str("endpoint", endpoint).Str("domain", request.Domain).Str("subdomain", request.Subdomain).Logger()
71+
logger.Info().Msg("building update request")
72+
6773
req, err := http.NewRequest("GET", endpoint, nil)
6874

6975
var r CloudflareQueryResponse
@@ -73,14 +79,20 @@ func (c *CloudflareDnsUpdateService) UpdateRecord(request *DynDnsRequest) error
7379

7480
resp, err := c.client.Do(req)
7581
if err != nil {
76-
return errors.New("error getting cloudflare request")
82+
logger.Error().Err(err).Msg(ErrBuildingRequest.Error())
83+
return ErrBuildingRequest
7784
}
7885

7986
b, _ := io.ReadAll(resp.Body)
8087
err = json.Unmarshal(b, &r)
8188

82-
if resp.StatusCode != http.StatusOK || len(r.Errors) > 0 || err != nil {
83-
log.Error().Msg("could not query record:" + string(b))
89+
if err != nil {
90+
logger.Error().Err(err).Msg(ErrParsingResponse.Error())
91+
return err
92+
}
93+
94+
if resp.StatusCode != http.StatusOK || len(r.Errors) > 0 {
95+
logger.Error().Interface("response", b).Msg("could not query record")
8496
return errors.New("could not query record: " + string(b))
8597
}
8698

@@ -95,8 +107,10 @@ func (c *CloudflareDnsUpdateService) UpdateRecord(request *DynDnsRequest) error
95107
}
96108

97109
if len(id) == 0 {
110+
logger.Info().Msg("entry not found, creating new")
98111
return c.newRecord(request)
99112
} else {
113+
logger.Info().Msg("entry found, updating")
100114
return c.editExistingRecord(request, id)
101115
}
102116
}
@@ -111,35 +125,40 @@ func (c *CloudflareDnsUpdateService) newRecord(request *DynDnsRequest) error {
111125

112126
endpoint := fmt.Sprintf("%s/zones/%s/dns_records", c.baseUrl,
113127
c.zoneId)
114-
log.Info().Str("subdomain", cloudflareRequest.Subdomain).Str("endpoint", endpoint).Str("IP", cloudflareRequest.IP).Msg("building update request")
128+
129+
logger := log.With().Str("func", "newRecord").Str("registrar", "cloudflare").Str("subdomain", cloudflareRequest.Subdomain).Str("endpoint", endpoint).Str("IP", cloudflareRequest.IP).Logger()
130+
logger.Info().Msg("building new record request")
115131

116132
body, err := json.Marshal(cloudflareRequest)
117133
if err != nil {
118-
log.Error().Err(err).Msg("marshalling failed")
119-
return errors.New("could not parse request")
134+
logger.Error().Err(err).Msg(ErrBuildingRequest.Error())
135+
return ErrBuildingRequest
120136
}
121137

122138
req, err := http.NewRequest("POST", endpoint, bytes.NewBuffer(body))
123139
if err != nil {
124-
log.Error().Err(err).Msg("building request failed failed")
125-
return errors.New("could not create request for cloudflare")
140+
logger.Error().Err(err).Msg(ErrBuildingRequest.Error())
141+
return ErrBuildingRequest
126142
}
127143

128144
req.Header.Set("Content-Type", "application/json; charset=utf-8")
129145
req.Header.Set("Authorization", fmt.Sprintf("Bearer %s", c.apiKey))
130146

147+
logger.Info().Msg("executing request")
131148
resp, err := c.client.Do(req)
132149
if err != nil {
133-
log.Error().Err(err).Msg("executing request failed")
134-
return errors.New("could not execute request")
150+
logger.Error().Err(err).Msg(ErrExecutingRequest.Error())
151+
return ErrExecutingRequest
135152
}
136153

137154
if resp.StatusCode != 200 {
138155
b, _ := io.ReadAll(resp.Body)
139-
log.Error().Msg("gandi rejected request")
140-
return fmt.Errorf("cloudflare rejected request: %s", string(b))
156+
logger.Error().Bytes("response", b).Msg(ErrRegistrarRejectedRequest.Error())
157+
return ErrRegistrarRejectedRequest
141158
}
142159

160+
logger.Info().Msg("request for new record successful")
161+
143162
return nil
144163
}
145164

@@ -153,17 +172,19 @@ func (c *CloudflareDnsUpdateService) editExistingRecord(request *DynDnsRequest,
153172

154173
endpoint := fmt.Sprintf("%s/zones/%s/dns_records/%s", c.baseUrl,
155174
c.zoneId, id)
156-
log.Info().Str("subdomain", cloudflareRequest.Subdomain).Str("endpoint", endpoint).Str("IP", cloudflareRequest.IP).Msg("building update request")
175+
176+
logger := log.With().Str("func", "editExistingRecord").Str("registrar", "cloudflare").Str("subdomain", cloudflareRequest.Subdomain).Str("endpoint", endpoint).Str("IP", cloudflareRequest.IP).Logger()
177+
logger.Info().Msg("building request to edit record")
157178

158179
body, err := json.Marshal(cloudflareRequest)
159180
if err != nil {
160-
log.Error().Err(err).Msg("marshalling failed")
181+
logger.Error().Err(err).Msg("marshalling failed")
161182
return errors.New("could not parse request")
162183
}
163184

164185
req, err := http.NewRequest("PUT", endpoint, bytes.NewBuffer(body))
165186
if err != nil {
166-
log.Error().Err(err).Msg("building request failed failed")
187+
logger.Error().Err(err).Msg("building request failed failed")
167188
return errors.New("could not create request for cloudflare")
168189
}
169190

@@ -172,13 +193,13 @@ func (c *CloudflareDnsUpdateService) editExistingRecord(request *DynDnsRequest,
172193

173194
resp, err := c.client.Do(req)
174195
if err != nil {
175-
log.Error().Err(err).Msg("executing request failed")
196+
logger.Error().Err(err).Msg("executing request failed")
176197
return errors.New("could not execute request")
177198
}
178199

179200
if resp.StatusCode != 200 {
180201
b, _ := io.ReadAll(resp.Body)
181-
log.Error().Msg("cloudflare rejected request")
202+
logger.Error().Bytes("response", b).Msg("cloudflare rejected request")
182203
return fmt.Errorf("cloudflare rejected request: %s", string(b))
183204
}
184205

services/cloudflare_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -234,7 +234,7 @@ func TestCloudflareDnsUpdateService_UpdateRecord_NewRecord_ApiError(t *testing.T
234234

235235
err = registrar.UpdateRecord(dynReq)
236236

237-
assert.EqualError(t, err, "cloudflare rejected request: api error")
237+
assert.EqualError(t, err, services.ErrRegistrarRejectedRequest.Error())
238238
}
239239

240240
func TestCloudflareDnsUpdateService_UpdateRecord_ExistingRecord_ApiError(t *testing.T) {
@@ -363,5 +363,5 @@ func TestCloudflareDnsUpdateService_UpdateRecord_NewRecord_RequestError(t *testi
363363

364364
err = registrar.UpdateRecord(dynReq)
365365

366-
assert.EqualError(t, err, "could not execute request")
366+
assert.EqualError(t, err, services.ErrExecutingRequest.Error())
367367
}

services/errors.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,8 @@ import "errors"
55
var (
66
ErrMissingInfoForServiceInit = errors.New("cannot setup service, missing config param")
77
ErrRegistrarNotFound = errors.New("registrar not found")
8+
ErrBuildingRequest = errors.New("error building request")
9+
ErrParsingResponse = errors.New("error parsing api response")
10+
ErrRegistrarRejectedRequest = errors.New("registrar rejected request")
11+
ErrExecutingRequest = errors.New("error executing request")
812
)

services/gandi.go

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ package services
33
import (
44
"bytes"
55
"encoding/json"
6-
"errors"
76
"fmt"
87
"github.com/rs/zerolog/log"
98
"github.com/spf13/viper"
@@ -21,6 +20,9 @@ func NewGandiDnsUpdateService(client HTTPClient) (*GandiDnsUpdateService, error)
2120
baseUrl := viper.GetString("gandi.baseUrl")
2221
ttl := viper.GetInt("gandi.ttl")
2322
apikey := viper.GetString("gandi.apiKey")
23+
24+
log.Info().Msg("initializing gandi service")
25+
2426
if len(baseUrl) == 0 || ttl == 0 || len(apikey) == 0 {
2527
return nil, ErrMissingInfoForServiceInit
2628
}
@@ -63,35 +65,38 @@ func (g *GandiDnsUpdateService) UpdateRecord(request *DynDnsRequest) error {
6365
endpoint := fmt.Sprintf("%s/domains/%s/records/%s/A", g.baseUrl,
6466
request.Domain, gandiRequest.Subdomain)
6567

66-
log.Info().Str("subdomain", gandiRequest.Subdomain).Str("endpoint", endpoint).Str("IP", gandiRequest.IPValues[0]).Msg("building update request")
68+
logger := log.With().Str("func", "UpdateRecord").Str("registrar", "gandi").Str("endpoint", endpoint).Str("domain", request.Domain).Str("subdomain", request.Subdomain).Logger()
69+
logger.Info().Msg("building update request")
6770

6871
body, err := json.Marshal(gandiRequest)
6972
if err != nil {
70-
log.Error().Err(err).Msg("marshalling failed")
71-
return errors.New("error")
73+
logger.Error().Err(err).Msg(ErrBuildingRequest.Error())
74+
return ErrBuildingRequest
7275
}
7376

7477
req, err := http.NewRequest("PUT", endpoint, bytes.NewBuffer(body))
7578
if err != nil {
76-
log.Error().Err(err).Msg("building request failed failed")
77-
return errors.New("could not create request for gandi")
79+
logger.Error().Err(err).Msg(ErrBuildingRequest.Error())
80+
return ErrBuildingRequest
7881
}
7982

8083
req.Header.Set("Content-Type", "application/json; charset=utf-8")
8184
req.Header.Set("Authorization", "Apikey "+g.apiKey)
8285

8386
resp, err := g.client.Do(req)
8487
if err != nil {
85-
log.Error().Err(err).Msg("executing request failed")
86-
return errors.New("could execute request")
88+
logger.Error().Err(err).Msg(ErrExecutingRequest.Error())
89+
return ErrExecutingRequest
8790
}
8891

8992
if resp.StatusCode != 201 {
9093
b, _ := io.ReadAll(resp.Body)
91-
log.Error().Msg("gandi rejected request")
92-
return fmt.Errorf("gandi rejected request: %s", string(b))
94+
logger.Error().Bytes("response", b).Msg(ErrRegistrarRejectedRequest.Error())
95+
return ErrRegistrarRejectedRequest
9396
}
9497

98+
logger.Info().Msg("update request successful")
99+
95100
return nil
96101
}
97102

services/gandi_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ func TestGandiDnsUpdateService_UpdateRecord_ApiError(t *testing.T) {
9797

9898
err = registrar.UpdateRecord(req)
9999

100-
assert.EqualError(t, err, "gandi rejected request: {\"errors\":[{\"message\":\"error\"}],\"result\":null}")
100+
assert.EqualError(t, err, services.ErrRegistrarRejectedRequest.Error())
101101
}
102102

103103
func TestGandiDnsUpdateService_UpdateRecord_Success(t *testing.T) {

0 commit comments

Comments
 (0)