* Copyright (c) 2025 Bocloud Technologies Co., Ltd.
* installer is licensed under Mulan PSL v2.
* You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain n copy of Mulan PSL v2 at:
* http://license.coscl.org.cn/MulanPSL2
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
* See the Mulan PSL v2 for more details.
******************************************************************/
package utils
import (
"errors"
"net"
"os"
"os/exec"
"path/filepath"
"syscall"
"time"
)
func CheckPorts(ports []string) error {
for _, port := range ports {
conn, err := net.DialTimeout("tcp", "0.0.0.0:"+port, DialTimeoutSeconds*time.Second)
if err == nil {
if closeErr := conn.Close(); closeErr != nil {
}
return errors.New(port)
}
}
return nil
}
func DiskUsage(path string) (uint64, uint64) {
fs := syscall.Statfs_t{}
err := syscall.Statfs(path, &fs)
if err != nil {
return 0, 0
}
all := fs.Blocks * uint64(fs.Bsize)
free := fs.Bfree * uint64(fs.Bsize)
return all, free
}
func ExecPath() (string, error) {
file, err := exec.LookPath(os.Args[0])
if err != nil {
return "", err
}
return filepath.Abs(file)
}