Skip to content

Commit 10a86af

Browse files
author
Otávio Fernandes
committed
Instrumenting applicatoin with logrus.
1 parent c326abc commit 10a86af

File tree

6 files changed

+108
-57
lines changed

6 files changed

+108
-57
lines changed

cmd/vault-handler/download.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55

66
vaulthandler "github.com/otaviof/vault-handler/pkg/vault-handler"
77
"github.com/spf13/cobra"
8+
"github.com/spf13/viper"
89
)
910

1011
var downloadCmd = &cobra.Command{
@@ -19,10 +20,12 @@ func runDownloadCmd(cmd *cobra.Command, args []string) {
1920
var manifest *vaulthandler.Manifest
2021
var err error
2122

23+
log.Printf("runDownloadCmd")
24+
2225
handler := bootstrap()
2326

2427
for _, manifestFile := range args {
25-
log.Printf("Handling manifest file: '%s'", manifestFile)
28+
log.Printf("[Download] Handling manifest file: '%s'", manifestFile)
2629

2730
if manifest, err = vaulthandler.NewManifest(manifestFile); err != nil {
2831
log.Fatalf("[ERROR] On parsing manifest: '%s'", err)
@@ -40,4 +43,8 @@ func init() {
4043
flags.String("output-dir", ".", "Output directory.")
4144

4245
rootCmd.AddCommand(downloadCmd)
46+
47+
if err := viper.BindPFlags(flags); err != nil {
48+
panic(err)
49+
}
4350
}

cmd/vault-handler/vault_handler.go

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
package main
22

33
import (
4-
"log"
4+
"os"
55
"strings"
66

77
vaulthandler "github.com/otaviof/vault-handler/pkg/vault-handler"
8+
log "github.com/sirupsen/logrus"
89
"github.com/spf13/cobra"
910
"github.com/spf13/viper"
1011
)
@@ -31,9 +32,15 @@ func configFromEnv() *vaulthandler.Config {
3132

3233
// bootstrap creates connection with vault, by instantiating Handler.
3334
func bootstrap() *vaulthandler.Handler {
35+
var level log.Level
3436
var handler *vaulthandler.Handler
3537
var err error
3638

39+
if level, err = log.ParseLevel(viper.GetString("log-level")); err != nil {
40+
log.Fatalf("[ERROR] On parsing log-level: '%s'", err)
41+
}
42+
log.SetLevel(level)
43+
3744
config := configFromEnv()
3845
if err = config.Validate(); err != nil {
3946
log.Fatalf("[ERROR] On validating parameters: '%s'", err)
@@ -54,6 +61,8 @@ func bootstrap() *vaulthandler.Handler {
5461
func init() {
5562
var err error
5663

64+
log.SetOutput(os.Stdout)
65+
5766
flags := rootCmd.PersistentFlags()
5867

5968
// setting up rules for environment variables
@@ -67,6 +76,7 @@ func init() {
6776
flags.String("vault-role-id", "", "Vault AppRole role-id")
6877
flags.String("vault-secret-id", "", "Vault AppRole secret-id")
6978
flags.Bool("dry-run", false, "dry-run mode")
79+
flags.String("log-level", "debug", "dry-run mode")
7080

7181
if err = viper.BindPFlags(flags); err != nil {
7282
log.Fatal(err)

pkg/vault-handler/file.go

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,14 @@ import (
66
"fmt"
77
"io"
88
"io/ioutil"
9-
"log"
109
"path"
10+
11+
log "github.com/sirupsen/logrus"
1112
)
1213

1314
// File definition on how to write a secret to file-system.
1415
type File struct {
16+
logger *log.Entry // logger
1517
group string // name of the group
1618
properties *SecretData // using SecretData as file properties
1719
payload []byte // data payload
@@ -22,23 +24,21 @@ func (f *File) Zip() error {
2224
var buffer bytes.Buffer
2325
var err error
2426

25-
originalPayloadLen := len(f.payload)
27+
f.logger.WithField("bytes", len(f.payload)).Info("Zipping file payload")
2628
gz := gzip.NewWriter(&buffer)
2729

2830
if _, err = gz.Write(f.payload); err != nil {
2931
return err
3032
}
3133
if err = gz.Flush(); err != nil {
3234
return err
33-
3435
}
3536
if err = gz.Close(); err != nil {
3637
return err
3738
}
38-
39-
log.Printf("[File] Zipping payload, before and after: '%d'/'%d' bytes ",
40-
originalPayloadLen, len(f.payload))
4139
f.payload = buffer.Bytes()
40+
f.logger.WithField("bytes", len(f.payload)).Info("Zipped file payload")
41+
4242
return nil
4343
}
4444

@@ -48,7 +48,8 @@ func (f *File) Unzip() error {
4848
var bufferOut bytes.Buffer
4949
var err error
5050

51-
originalPayloadLen := len(f.payload)
51+
f.logger.WithField("bytes", len(f.payload)).Info("Unzipping file payload")
52+
5253
bufferIn := bytes.NewBuffer(f.payload)
5354
if reader, err = gzip.NewReader(bufferIn); err != nil {
5455
return err
@@ -57,9 +58,9 @@ func (f *File) Unzip() error {
5758
return err
5859
}
5960

60-
log.Printf("[File] Unzipping payload, before and after: '%d'/'%d' bytes ",
61-
originalPayloadLen, len(f.payload))
6261
f.payload = bufferOut.Bytes()
62+
f.logger.WithField("bytes", len(f.payload)).Info("Unzipped file payload")
63+
6364
return nil
6465
}
6566

@@ -74,14 +75,16 @@ func (f *File) Read(baseDir string) error {
7475
if f.payload, err = ioutil.ReadFile(fullPath); err != nil {
7576
return err
7677
}
77-
log.Printf("[File] Reading '%d' bytes from '%s'", len(f.payload), fullPath)
78+
f.logger.WithFields(log.Fields{"path": fullPath, "bytes": len(f.payload)}).
79+
Info("Reading file content")
7880

7981
return nil
8082
}
8183

8284
// Write contents to file-system.
8385
func (f *File) Write(baseDir string) error {
84-
log.Printf("[File] Writting '%d' bytes on '%s'", len(f.payload), f.fileName())
86+
f.logger.WithFields(log.Fields{"name": f.fileName(), "bytes": len(f.payload)}).
87+
Info("Reading file content")
8588
return ioutil.WriteFile(f.FilePath(baseDir), f.payload, 0600)
8689
}
8790

@@ -107,5 +110,14 @@ func (f *File) Payload() []byte {
107110

108111
// NewFile instance.
109112
func NewFile(group string, properties *SecretData, payload []byte) *File {
110-
return &File{group: group, properties: properties, payload: payload}
113+
return &File{
114+
logger: log.WithFields(log.Fields{
115+
"type": "File",
116+
"name": properties.Name,
117+
"extension": properties.Extension,
118+
}),
119+
group: group,
120+
properties: properties,
121+
payload: payload,
122+
}
111123
}

pkg/vault-handler/handler.go

Lines changed: 39 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
11
package vaulthandler
22

33
import (
4-
"log"
54
"path"
5+
6+
log "github.com/sirupsen/logrus"
67
)
78

89
// Handler application primary runtime object.
910
type Handler struct {
10-
config *Config // configuration instance
11-
vault *Vault // vault api instance
11+
logger *log.Entry // logger
12+
config *Config // configuration instance
13+
vault *Vault // vault api instance
1214
}
1315

1416
// Authenticate against vault either via token directly or via AppRole, must be invoked before other
@@ -17,10 +19,10 @@ func (h *Handler) Authenticate() error {
1719
var err error
1820

1921
if h.config.VaultToken != "" {
20-
log.Printf("[Handler] Using token based authentication against Vault.")
22+
h.logger.Info("Using token based authentication")
2123
h.vault.TokenAuth(h.config.VaultToken)
2224
} else {
23-
log.Printf("[Handler] Using AppRole based authentication against Vault.")
25+
h.logger.Info("Using AppRole based authentication")
2426
if err = h.vault.AppRoleAuth(h.config.VaultRoleID, h.config.VaultSecretID); err != nil {
2527
return err
2628
}
@@ -34,23 +36,23 @@ func (h *Handler) Download(manifest *Manifest) error {
3436
var err error
3537

3638
for group, secrets := range manifest.Secrets {
37-
log.Printf("[Handler/Download] Handling secrets for '%s' group...", group)
38-
log.Printf("[Handler/Download] [%s] Vault path '%s'", group, secrets.Path)
39+
logger := h.logger.WithFields(log.Fields{"group": group, "vaultPath": secrets.Path})
40+
logger.Info("Handling secrets")
3941

4042
for _, data := range secrets.Data {
43+
var vaultPath = h.composeVaultPath(secrets, data)
4144
var payload []byte
4245

43-
log.Printf("[Handler/Download] [%s] Reading data from Vault '%s.%s' (unzip: %v)",
44-
group, data.Name, data.Extension, data.Unzip)
45-
46-
vaultPath := h.composeVaultPath(secrets, data)
47-
log.Printf("[Handler/Download] [%s] '%s' path in Vault: '%s'",
48-
data.Name, group, vaultPath)
46+
logger.WithFields(log.Fields{
47+
"name": data.Name,
48+
"extension": data.Extension,
49+
"unzip": data.Unzip,
50+
"vaultPath": vaultPath,
51+
}).Info("Reading data from Vault")
4952

5053
if payload, err = h.vault.Read(vaultPath, data.Name); err != nil {
5154
return err
5255
}
53-
5456
file := NewFile(group, &data, payload)
5557

5658
if data.Unzip {
@@ -72,29 +74,40 @@ func (h *Handler) Download(manifest *Manifest) error {
7274
func (h *Handler) Upload(manifest *Manifest) error {
7375
var err error
7476

75-
log.Printf("[Handler/Upload] Input directory: '%s'", h.config.InputDir)
76-
77+
h.logger.Info("Uploading secrets...")
7778
for group, secrets := range manifest.Secrets {
78-
log.Printf("[Handler/Upload] Handling secrets for '%s' group...", group)
79-
log.Printf("[Handler/Upload] [%s] Vault path '%s'", group, secrets.Path)
79+
logger := h.logger.WithFields(log.Fields{
80+
"action": "upload",
81+
"inputDir": h.config.InputDir,
82+
"group": group,
83+
"vaultPath": secrets.Path,
84+
})
85+
logger.Info("Handling secrets for group")
8086

8187
for _, data := range secrets.Data {
88+
logger = logger.WithFields(log.Fields{
89+
"name": data.Name,
90+
"extension": data.Extension,
91+
"unzip": data.Unzip,
92+
})
93+
logger.Info("Handling file")
94+
8295
file := NewFile(group, &data, []byte{})
8396

8497
if err = file.Read(h.config.InputDir); err != nil {
85-
log.Printf("[Handler/Upload] error on reading file: '%s'", err)
98+
logger.Error("error on reading file", err)
8699
return err
87100
}
88101

89102
if data.Unzip {
90103
if err = file.Zip(); err != nil {
91-
log.Printf("[Handler/Upload] error on zipping file payload: '%s'", err)
104+
logger.Error("error on zipping payload", err)
92105
return err
93106
}
94107
}
95108

96109
if err = h.dispense(file, h.composeVaultPath(secrets, data)); err != nil {
97-
log.Printf("[Handler/Upload] Error on writting data to Vault: '%s'", err)
110+
logger.Error("error on writting data to vault", err)
98111
return err
99112
}
100113
}
@@ -146,7 +159,11 @@ func (h *Handler) composeVaultPath(secrets Secrets, data SecretData) string {
146159
func NewHandler(config *Config) (*Handler, error) {
147160
var err error
148161

149-
handler := &Handler{config: config}
162+
handler := &Handler{
163+
config: config,
164+
logger: log.WithFields(log.Fields{"type": "Handler"}),
165+
}
166+
150167
if handler.vault, err = NewVault(config.VaultAddr); err != nil {
151168
return nil, err
152169
}

pkg/vault-handler/utils.go

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,9 @@ package vaulthandler
22

33
import (
44
"io/ioutil"
5-
"log"
65
"os"
6+
7+
log "github.com/sirupsen/logrus"
78
)
89

910
// fileExists Check if path exists, boolean return.
@@ -16,15 +17,17 @@ func fileExists(path string) bool {
1617

1718
// readFile Wrap up a ioutil call, using fatal log in case of error.
1819
func readFile(path string) []byte {
19-
log.Printf("[Utils] Reading file: '%s'", path)
20+
var fileBytes []byte
21+
var err error
22+
23+
logger := log.WithField("path", path)
24+
logger.Infof("Reading file bytes")
2025

2126
if !fileExists(path) {
22-
log.Fatalf("Can't find file: '%s'", path)
27+
logger.Fatal("Can't find file")
2328
}
24-
25-
fileBytes, err := ioutil.ReadFile(path)
26-
if err != nil {
27-
log.Fatal(err)
29+
if fileBytes, err = ioutil.ReadFile(path); err != nil {
30+
logger.Fatalf("Error on read file: '%s'", err)
2831
}
2932
return fileBytes
3033
}

0 commit comments

Comments
 (0)