Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Improve logging #19

Merged
merged 1 commit into from
Aug 2, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 8 additions & 2 deletions db/db.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package db

import (
"database/sql"
"encoding/base64"
"fmt"
"net/url"
"strconv"
Expand Down Expand Up @@ -99,7 +100,10 @@ func (db *Database) stateS3toDB(state *terraform.State, path string, versionId s

for k, v := range r.Primary.Attributes {
if !isASCII(v) {
log.Infof("Attribute %s has non-ASCII value %v, skipping", k, v)
log.WithFields(log.Fields{
"key": k,
"value_base64": base64.StdEncoding.EncodeToString([]byte(v)),
}).Info("Attribute has non-ASCII value, skipping")
continue
}
res.Attributes = append(res.Attributes, Attribute{
Expand Down Expand Up @@ -183,7 +187,9 @@ type SearchResult struct {
}

func (db *Database) SearchAttribute(query url.Values) (results []SearchResult, page int, total int) {
log.Infof("Searching for attribute with query=%v", query)
log.WithFields(log.Fields{
"query": query,
}).Info("Searching for attribute with query")

targetVersion := string(query.Get("versionid"))

Expand Down
21 changes: 17 additions & 4 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -59,27 +59,40 @@ func refreshDB(d *db.Database) {
log.Infof("Refreshing DB from S3")
states, err := s3.GetStates()
if err != nil {
log.Errorf("Failed to build cache: %s", err)
log.WithFields(log.Fields{
"error": err,
}).Error("Failed to retrieve states from S3. Retrying in 1 minute.")
time.Sleep(1 * time.Minute)
continue
}

statesVersions := d.ListStatesVersions()
for _, st := range states {
versions, _ := s3.GetVersions(st)
for _, v := range versions {
if _, ok := statesVersions[*v.VersionId]; ok {
log.Debugf("Version %s is already in the DB", *v.VersionId)
log.WithFields(log.Fields{
"version_id": *v.VersionId,
}).Debug("Version is already in the database, skipping")
} else {
d.InsertVersion(v)
}

if isKnownStateVersion(statesVersions, *v.VersionId, st) {
log.Debugf("State %s/%s is already in the DB, skipping", st, *v.VersionId)
log.WithFields(log.Fields{
"path": st,
"version_id": *v.VersionId,
}).Debug("State is already in the database, skipping")
continue
}
state, _ := s3.GetState(st, *v.VersionId)
d.InsertState(st, *v.VersionId, state)
if err != nil {
log.Errorf("Failed to insert state %s/%s: %v", st, *v.VersionId, err)
log.WithFields(log.Fields{
"path": st,
"version_id": *v.VersionId,
"error": err,
}).Error("Failed to insert state in the database")
}
}
}
Expand Down
17 changes: 14 additions & 3 deletions s3/s3.go
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,10 @@ func GetVersions(prefix string) (versions []*s3.ObjectVersion, err error) {
}

func GetState(st, versionId string) (state *terraform.State, err error) {
log.Infof("Retrieving %s/%s from S3", st, versionId)
log.WithFields(log.Fields{
"path": st,
"version_id": versionId,
}).Info("Retrieving state from S3")
input := &s3.GetObjectInput{
Bucket: aws.String(bucket),
Key: aws.String(st),
Expand All @@ -123,7 +126,11 @@ func GetState(st, versionId string) (state *terraform.State, err error) {
}
result, err := svc.GetObjectWithContext(context.Background(), input)
if err != nil {
log.Errorf("Error retrieving %s/%s from S3: %v", st, versionId, err)
log.WithFields(log.Fields{
"path": st,
"version_id": versionId,
"error": err,
}).Error("Error retrieving state from S3")
errObj := make(map[string]string)
errObj["error"] = fmt.Sprintf("State file not found: %v", st)
errObj["details"] = fmt.Sprintf("%v", err)
Expand All @@ -134,7 +141,11 @@ func GetState(st, versionId string) (state *terraform.State, err error) {

content, err := ioutil.ReadAll(result.Body)
if err != nil {
log.Errorf("Error reading %s/%s from S3: %v", st, versionId, err)
log.WithFields(log.Fields{
"path": st,
"version_id": versionId,
"error": err,
}).Error("Error reading state from S3")
errObj := make(map[string]string)
errObj["error"] = fmt.Sprintf("Failed to read S3 response: %v", st)
errObj["details"] = fmt.Sprintf("%v", err)
Expand Down