Skip to content

Commit 8577b6c

Browse files
authored
Implement app exit on unrecoverable error (#59)
1 parent 079f79a commit 8577b6c

2 files changed

Lines changed: 25 additions & 4 deletions

File tree

logger/logger.go

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,9 @@ import (
1313
)
1414

1515
var (
16-
infoLogger *log.Logger
17-
errorLogger *log.Logger
16+
infoLogger *log.Logger
17+
errorLogger *log.Logger
18+
criticalLogger *log.Logger
1819
)
1920
var initialised = false
2021
var mongoCollection *mongo.Collection
@@ -34,6 +35,7 @@ func InitLogger() {
3435

3536
infoLogger = log.New(os.Stdout, "INFO: ", log.Ldate|log.Ltime)
3637
errorLogger = log.New(os.Stderr, "ERROR: ", log.Ldate|log.Ltime)
38+
criticalLogger = log.New(os.Stderr, "CRITICAL: ", log.Ldate|log.Ltime)
3739
initialised = true
3840

3941
configPrintOut := fmt.Sprintf("\tPort:\t\t%v\n", viper.GetInt("port")) +
@@ -80,3 +82,13 @@ func Error(message string) {
8082

8183
errorLogger.Println(message)
8284
}
85+
86+
func Critical(message string) {
87+
writeToMongo("CRITICAL", message)
88+
89+
if !viper.GetBool("verbose") || !initialised {
90+
return
91+
}
92+
93+
criticalLogger.Println(message)
94+
}

scraper/handleTaskError.go

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,30 @@
11
package scraper
22

33
import (
4-
"bdo-rest-api/logger"
5-
"bdo-rest-api/utils"
64
"fmt"
5+
"os"
76
"strconv"
7+
"strings"
88
"time"
99

1010
"github.com/gocolly/colly/v2"
1111
"github.com/spf13/viper"
12+
13+
"bdo-rest-api/logger"
14+
"bdo-rest-api/utils"
1215
)
1316

1417
func handleTaskError(r *colly.Request, imperva bool, err error) {
1518
taskRetries, _ := strconv.Atoi(r.Ctx.Get("taskRetries"))
1619

1720
if imperva {
1821
logger.Error(fmt.Sprintf("Hit Imperva while loading %v, retries: %v", r.URL, taskRetries))
22+
} else if strings.Contains(err.Error(), "http2: Transport received GOAWAY from server ErrCode:INTERNAL_ERROR") {
23+
// This is an error that I don't know how to avoid, it clogs up all future requests
24+
// and it doesn't seem to be recoverable, so just exit the program and let Docker restart it
25+
// Maybe in the future there will be a way to avoid/handle this
26+
logger.Critical(fmt.Sprintf("Error occured: %v", err))
27+
os.Exit(1)
1928
} else {
2029
logger.Error(fmt.Sprintf("Error occured while loading %v: %v, retries: %v", r.URL, err, taskRetries))
2130
}

0 commit comments

Comments
 (0)