-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathmain.go
78 lines (70 loc) · 1.07 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
package main
import (
"encoding/csv"
"fmt"
"log"
"os"
"strconv"
"sync"
)
var (
MaxConcurrentThread = 8
)
func init() {
if i, err := strconv.Atoi(os.Getenv("MAX_CONCURRENT_THREAD")); err == nil && 0 < i {
MaxConcurrentThread = i
}
}
func main() {
var stdin string
w := csv.NewWriter(os.Stdout)
var mu sync.Mutex
write := func(input []string) {
mu.Lock()
defer mu.Unlock()
w.Write(input)
w.Flush()
}
write([]string{
"host",
"error",
"expires_on",
})
var (
wg = sync.WaitGroup{}
ch = make(chan int, MaxConcurrentThread)
)
for {
n, err := fmt.Scan(&stdin)
if n == 0 {
break
}
if err != nil {
panic(err)
}
ch <- 1
wg.Add(1)
go func(input string) {
defer func() {
<-ch
wg.Done()
}()
r, err := SSLCheck(stdin)
if err != nil {
log.Printf("[error]%s --> %v\n", stdin, err)
write([]string{
stdin,
fmt.Sprint(err),
"",
})
} else {
write([]string{
fmt.Sprintf("%s:%s", r.Host, r.Port),
fmt.Sprint(r.Error),
fmt.Sprint(r.ExpiresOn),
})
}
}(stdin)
}
wg.Wait()
}