@@ -23,16 +23,9 @@ func GetURLHandlerInstance() LinkHandlerInterface {
23
23
24
24
// Handle - using scrap lib, check the link status
25
25
func (handler * urlHandler ) Handle (linkPath string ) int {
26
- respStatus , err := handler .scrap (linkPath )
27
- for i := 0 ; i < 2 && err != nil ; i ++ {
26
+ respStatus , err := handler .scrap (linkPath , true )
27
+ if err != nil {
28
28
errLower := strings .ToLower (err .Error ())
29
- if strings .Contains (errLower , "eof" ) || strings .Contains (errLower , "timeout" ) {
30
- respStatus , err = handler .scrap (linkPath )
31
- if err == nil {
32
- return respStatus
33
- }
34
- errLower = strings .ToLower (err .Error ())
35
- }
36
29
if strings .Contains (errLower , "not found" ) {
37
30
return 404
38
31
}
@@ -42,19 +35,24 @@ func (handler *urlHandler) Handle(linkPath string) int {
42
35
if strings .Contains (errLower , "timeout" ) {
43
36
return 504
44
37
}
45
- log .WithFields (log.Fields {
46
- "link" : linkPath ,
47
- "error" : err ,
48
- }).Error ("Failed get URL data" )
49
38
}
50
39
return respStatus
51
40
}
52
41
53
- func (handler * urlHandler ) scrap (linkPath string ) (int , error ) {
42
+ func (handler * urlHandler ) scrap (linkPath string , retry bool ) (int , error ) {
43
+ var err error
54
44
c := colly .NewCollector ()
55
45
respStatus := 0
56
46
c .OnResponse (func (resp * colly.Response ) {
57
47
respStatus = resp .StatusCode
58
48
})
59
- return respStatus , c .Visit (linkPath )
49
+ err = c .Visit (linkPath )
50
+ if retry && (err != nil || respStatus == 0 ) {
51
+ log .WithFields (log.Fields {
52
+ "link" : linkPath ,
53
+ "error" : err ,
54
+ }).Error ("Failed get URL data, retrying" )
55
+ err = c .Visit (linkPath )
56
+ }
57
+ return respStatus , err
60
58
}
0 commit comments