49 lines
1.0 KiB
Go
49 lines
1.0 KiB
Go
|
|
package operations
|
|
|
|
import (
|
|
"fmt"
|
|
"net"
|
|
"time"
|
|
|
|
"service-operation/types"
|
|
)
|
|
|
|
type TCPOperation struct {
|
|
timeout time.Duration
|
|
}
|
|
|
|
func NewTCPOperation(timeout time.Duration) *TCPOperation {
|
|
return &TCPOperation{timeout: timeout}
|
|
}
|
|
|
|
func (t *TCPOperation) Execute(host string, port int) (*types.OperationResult, error) {
|
|
result := &types.OperationResult{
|
|
Type: types.OperationTCP,
|
|
Host: host,
|
|
Port: port,
|
|
StartTime: time.Now(),
|
|
}
|
|
|
|
start := time.Now()
|
|
|
|
address := fmt.Sprintf("%s:%d", host, port)
|
|
conn, err := net.DialTimeout("tcp", address, t.timeout)
|
|
|
|
result.ResponseTime = time.Since(start)
|
|
result.EndTime = time.Now()
|
|
|
|
if err != nil {
|
|
result.Error = err.Error()
|
|
result.TCPConnected = false
|
|
result.Success = false
|
|
result.Details = fmt.Sprintf("Failed to connect to %s:%d - %s", host, port, err.Error())
|
|
} else {
|
|
conn.Close()
|
|
result.TCPConnected = true
|
|
result.Success = true
|
|
result.Details = fmt.Sprintf("Successfully connected to %s:%d", host, port)
|
|
}
|
|
|
|
return result, nil
|
|
} |