@@ -4,10 +4,8 @@ import (
4
4
"fmt"
5
5
"os"
6
6
"os/signal"
7
- "syscall"
8
- "time"
9
-
10
7
"strconv"
8
+ "syscall"
11
9
12
10
"github.com/cloverstd/tcping/ping"
13
11
"github.com/spf13/cobra"
@@ -43,78 +41,70 @@ var rootCmd = cobra.Command{
43
41
3. ping over http
44
42
> tcping -H google.com
45
43
4. ping with URI schema
46
- > tcping http ://hui.lu
44
+ > tcping https ://hui.lu
47
45
` ,
48
46
Run : func (cmd * cobra.Command , args []string ) {
49
47
if showVersion {
50
48
fmt .Printf ("version: %s\n " , version )
51
49
fmt .Printf ("git: %s\n " , gitCommit )
52
50
return
53
51
}
54
- if len (args ) != 2 && len ( args ) != 1 {
52
+ if len (args ) == 0 {
55
53
cmd .Usage ()
56
54
return
57
55
}
56
+ if len (args ) > 2 {
57
+ cmd .Println ("invalid command arguments" )
58
+ return
59
+ }
58
60
host := args [0 ]
59
61
62
+ url , err := ping .ParseAddress (host )
63
+ if err != nil {
64
+ fmt .Printf ("%s is an invalid target.\n " , host )
65
+ return
66
+ }
67
+ defaultPort := "80"
68
+ if len (args ) > 1 {
69
+ defaultPort = args [1 ]
70
+ }
71
+ port , err := strconv .Atoi (defaultPort )
72
+ if err != nil {
73
+ cmd .Printf ("%s is invalid port.\n " , defaultPort )
74
+ return
75
+ }
76
+ url .Host = fmt .Sprintf ("%s:%d" , url .Hostname (), port )
77
+
60
78
var (
61
- err error
62
- port int
63
79
schema string
64
80
)
65
- if len (args ) == 2 {
66
- port , err = strconv .Atoi (args [1 ])
67
- if err != nil {
68
- fmt .Println ("port should be integer" )
69
- cmd .Usage ()
70
- return
71
- }
72
- schema = ping .TCP .String ()
73
- } else {
74
- var matched bool
75
- schema , host , port , matched = ping .CheckURI (host )
76
- if ! matched {
77
- fmt .Println ("not a valid uri" )
78
- cmd .Usage ()
79
- return
80
- }
81
- }
82
- var timeoutDuration time.Duration
83
- if res , err := strconv .Atoi (timeout ); err == nil {
84
- timeoutDuration = time .Duration (res ) * time .Millisecond
85
- } else {
86
- timeoutDuration , err = time .ParseDuration (timeout )
87
- if err != nil {
88
- fmt .Println ("parse timeout failed" , err )
89
- cmd .Usage ()
90
- return
91
- }
81
+
82
+ timeoutDuration , err := ping .ParseDuration (timeout )
83
+ if err != nil {
84
+ cmd .Println ("parse timeout failed" , err )
85
+ cmd .Usage ()
86
+ return
92
87
}
93
88
94
- var intervalDuration time.Duration
95
- if res , err := strconv .Atoi (interval ); err == nil {
96
- intervalDuration = time .Duration (res ) * time .Millisecond
97
- } else {
98
- intervalDuration , err = time .ParseDuration (interval )
99
- if err != nil {
100
- fmt .Println ("parse interval failed" , err )
101
- cmd .Usage ()
102
- return
103
- }
89
+ intervalDuration , err := ping .ParseDuration (interval )
90
+ if err != nil {
91
+ cmd .Println ("parse interval failed" , err )
92
+ cmd .Usage ()
93
+ return
104
94
}
105
- var protocol ping. Protocol
95
+
106
96
if httpMode {
107
- protocol = ping .HTTP
108
- } else {
109
- protocol , err = ping .NewProtocol (schema )
110
- if err != nil {
111
- fmt .Println (err )
112
- cmd .Usage ()
113
- return
114
- }
97
+ url .Scheme = ping .HTTP .String ()
98
+ }
99
+ protocol , err := ping .NewProtocol (url .Scheme )
100
+ if err != nil {
101
+ cmd .Println ("invalid protocol" , err )
102
+ cmd .Usage ()
103
+ return
115
104
}
105
+
116
106
if len (dnsServer ) != 0 {
117
- ping .UseCustomeDNS (dnsServer )
107
+ ping .UseCustomDNS (dnsServer )
118
108
}
119
109
120
110
parseHost , _ := ping .FormatIP (host )
0 commit comments