Skip to content

Commit 297449c

Browse files
committed
♻️ refactor
Signed-off-by: vankichi <[email protected]>
1 parent 223aac3 commit 297449c

File tree

1 file changed

+34
-28
lines changed

1 file changed

+34
-28
lines changed

hack/tools/deadlink/main.go

Lines changed: 34 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111
"path/filepath"
1212
"regexp"
1313
"strings"
14+
"sync/atomic"
1415

1516
"github.com/vdaas/vald/internal/file"
1617
"github.com/vdaas/vald/internal/log"
@@ -32,10 +33,9 @@ const (
3233
)
3334

3435
var (
35-
format = flag.String("format", "html", "file format(html)")
36-
path = flag.String("path", "./", "directory or file path")
37-
ignorePath = flag.String("ignore-path", "", "ignore path to check")
38-
36+
format = flag.String("format", "html", "file format(html)")
37+
path = flag.String("path", "./", "directory or file path")
38+
ignorePath = flag.String("ignore-path", "", "ignore path to check")
3939
ignoreLinks = []string{
4040
"javascript:void(0)",
4141
@@ -49,8 +49,6 @@ var (
4949
reSrc = regexp.MustCompile(PREFIX_SRC + BASE_REGEXP)
5050
reSrcSet = regexp.MustCompile(PREFIX_SRCSET + BASE_REGEXP)
5151
reHref = regexp.MustCompile(PREFIX_HREF + BASE_REGEXP)
52-
53-
url = ""
5452
)
5553

5654
func getFiles(dir string) []string {
@@ -72,7 +70,7 @@ func getFiles(dir string) []string {
7270
return filePaths
7371
}
7472

75-
func convertToURL(s string) string {
73+
func convertToURL(s, url string) string {
7674
b := bytes.NewBuffer(make([]byte, 0, 100))
7775
if strings.HasPrefix(s, "#") {
7876
b.WriteString(url)
@@ -112,7 +110,10 @@ func exec(url string, cli *http.Client) int {
112110
return -1
113111
}
114112
resp.Body.Close()
115-
return resp.StatusCode
113+
if resp.StatusCode < 200 || resp.StatusCode >= 300 {
114+
return resp.StatusCode
115+
}
116+
return 200
116117
}
117118

118119
func main() {
@@ -161,6 +162,7 @@ func main() {
161162
}
162163

163164
eg, _ := errgroup.New(ctx)
165+
164166
countAll := 0
165167
successAll := 0
166168
failAll := 0
@@ -185,10 +187,10 @@ func main() {
185187
// str := *(*string)(unsafe.Pointer(&b))
186188
str := string(b)
187189
// get origin url
188-
url = strings.TrimPrefix(reProp.FindString(str), PREFIX_PROP)
190+
originURL := strings.TrimPrefix(reProp.FindString(str), PREFIX_PROP)
189191
// init counter
190192
r := result{
191-
url: url,
193+
url: originURL,
192194
count: 0,
193195
success: 0,
194196
fail: 0,
@@ -200,38 +202,42 @@ func main() {
200202
u := reSrc.FindAllString(str, -1)
201203
for _, elem := range u {
202204
e := strings.TrimPrefix(elem, PREFIX_SRC)
203-
url := convertToURL(e)
204-
if !isBlackList(url, ignoreLinks) {
205-
urls = append(urls, map[string]string{e: url})
205+
targetUrl := convertToURL(e, originURL)
206+
if !isBlackList(targetUrl, ignoreLinks) {
207+
urls = append(urls, map[string]string{e: targetUrl})
206208
r.count++
207209
}
208210
}
209211
u = reHref.FindAllString(str, -1)
210212
for _, elem := range u {
211213
e := strings.TrimPrefix(elem, PREFIX_HREF)
212-
url := convertToURL(e)
213-
if !isBlackList(url, ignoreLinks) {
214-
urls = append(urls, map[string]string{e: url})
214+
targetUrl := convertToURL(e, originURL)
215+
if !isBlackList(targetUrl, ignoreLinks) {
216+
urls = append(urls, map[string]string{e: targetUrl})
215217
r.count++
216218
}
217219
}
218220
u = reSrcSet.FindAllString(str, -1)
219221
for _, elem := range u {
220222
e := strings.TrimPrefix(elem, PREFIX_SRCSET)
221-
url := convertToURL(e)
222-
if !isBlackList(url, ignoreLinks) {
223-
urls = append(urls, map[string]string{e: url})
223+
targetUrl := convertToURL(e, originURL)
224+
if !isBlackList(targetUrl, ignoreLinks) {
225+
urls = append(urls, map[string]string{e: targetUrl})
224226
r.count++
225227
}
226228
}
227-
fmt.Printf("checking...%s (url: %s)\n", path, url)
229+
fmt.Printf("checking...%s (url: %s)\n", path, originURL)
230+
var (
231+
success int32 = 0
232+
fail int32 = 0
233+
)
228234
for _, url := range urls {
229235
eg.Go(func() error {
230236
for k, v := range url {
231237
mu.Lock()
238+
defer mu.Unlock()
232239
if _, ok := r.errLinks[k]; ok {
233-
r.fail++
234-
mu.Unlock()
240+
atomic.AddInt32(&fail, 1)
235241
continue
236242
}
237243
var code int
@@ -243,15 +249,12 @@ func main() {
243249
code = exec(v, cli)
244250
exLinks[v] = code
245251
}
246-
mu.Unlock()
247252
if code == 200 {
248-
r.success++
253+
atomic.AddInt32(&success, 1)
249254
} else {
250255
log.Warnf("[%d] %s", code, v)
251-
mu.Lock()
252256
r.errLinks[k] = code
253-
r.fail++
254-
mu.Unlock()
257+
atomic.AddInt32(&fail, 1)
255258
}
256259
}
257260
return nil
@@ -261,6 +264,9 @@ func main() {
261264
if err != nil {
262265
log.Error(err.Error())
263266
}
267+
r.success = int(atomic.LoadInt32(&success))
268+
r.fail = int(atomic.LoadInt32(&fail))
269+
264270
countAll += r.count
265271
successAll += r.success
266272
failAll += r.fail
@@ -275,7 +281,7 @@ func main() {
275281
fmt.Printf("count: %d, ok: %d, fail: %d\n\n", v.count, v.success, v.fail)
276282
}
277283
fmt.Printf("\n[summary] all: %d, OK: %d, NG: %d\n", countAll, successAll, failAll)
278-
if failAll > 0 {
284+
if countAll != successAll {
279285
os.Exit(1)
280286
}
281287
return

0 commit comments

Comments
 (0)