golang - golang 현재 하드웨어 및 사용현황 구하기, 하드웨어 모니터링, cpu, memory, disk 사용률 보기
이 름 : 바다아이
|
조회수 : 10890
짧은 주소 : https://www.bada-ie.com/su/?801591785277
# 잘 만들어진 게 있네요.. 가져다 쓰셔요.... 응용하면 사용할 곳 많겠네요..
# 패키지 일단 가져와야죠
go get github.com/shirou/gopsutil
# 아래는 소스입니다.
package main
import (
"fmt""net/http""runtime""strconv""github.com/shirou/gopsutil/cpu""github.com/shirou/gopsutil/disk""github.com/shirou/gopsutil/host""github.com/shirou/gopsutil/mem""github.com/shirou/gopsutil/net"
)
funcdealwithErr(err error) {
if err != nil {
fmt.Println(err)
//os.Exit(-1)
}
}
funcGetHardwareData(w http.ResponseWriter, r *http.Request) {
runtimeOS := runtime.GOOS
// memory
vmStat, err := mem.VirtualMemory()
dealwithErr(err)
// disk - start from "/" mount point for Linux// might have to change for Windows!!// don't have a Window to test this out, if detect OS == windows// then use "\" instead of "/"
diskStat, err := disk.Usage("/")
dealwithErr(err)
// cpu - get CPU number of cores and speed
cpuStat, err := cpu.Info()
dealwithErr(err)
percentage, err := cpu.Percent(0, true)
dealwithErr(err)
// host or machine kernel, uptime, platform Info
hostStat, err := host.Info()
dealwithErr(err)
// get interfaces MAC/hardware address
interfStat, err := net.Interfaces()
dealwithErr(err)
html := "<html>OS : " + runtimeOS + "<br>"
html = html + "Total memory: " + strconv.FormatUint(vmStat.Total, 10) + " bytes <br>"
html = html + "Free memory: " + strconv.FormatUint(vmStat.Free, 10) + " bytes<br>"
html = html + "Percentage used memory: " + strconv.FormatFloat(vmStat.UsedPercent, 'f', 2, 64) + "%<br>"// get disk serial number.... strange... not available from disk package at compile time// undefined: disk.GetDiskSerialNumber//serial := disk.GetDiskSerialNumber("/dev/sda")//html = html + "Disk serial number: " + serial + "<br>"
html = html + "Total disk space: " + strconv.FormatUint(diskStat.Total, 10) + " bytes <br>"
html = html + "Used disk space: " + strconv.FormatUint(diskStat.Used, 10) + " bytes<br>"
html = html + "Free disk space: " + strconv.FormatUint(diskStat.Free, 10) + " bytes<br>"
html = html + "Percentage disk space usage: " + strconv.FormatFloat(diskStat.UsedPercent, 'f', 2, 64) + "%<br>"// since my machine has one CPU, I'll use the 0 index// if your machine has more than 1 CPU, use the correct index// to get the proper data
html = html + "CPU index number: " + strconv.FormatInt(int64(cpuStat[0].CPU), 10) + "<br>"
html = html + "VendorID: " + cpuStat[0].VendorID + "<br>"
html = html + "Family: " + cpuStat[0].Family + "<br>"
html = html + "Number of cores: " + strconv.FormatInt(int64(cpuStat[0].Cores), 10) + "<br>"
html = html + "Model Name: " + cpuStat[0].ModelName + "<br>"
html = html + "Speed: " + strconv.FormatFloat(cpuStat[0].Mhz, 'f', 2, 64) + " MHz <br>"for idx, cpupercent := range percentage {
html = html + "Current CPU utilization: [" + strconv.Itoa(idx) + "] " + strconv.FormatFloat(cpupercent, 'f', 2, 64) + "%<br>"
}
html = html + "Hostname: " + hostStat.Hostname + "<br>"
html = html + "Uptime: " + strconv.FormatUint(hostStat.Uptime, 10) + "<br>"
html = html + "Number of processes running: " + strconv.FormatUint(hostStat.Procs, 10) + "<br>"// another way to get the operating system name// both darwin for Mac OSX, For Linux, can be ubuntu as platform// and linux for OS
html = html + "OS: " + hostStat.OS + "<br>"
html = html + "Platform: " + hostStat.Platform + "<br>"// the unique hardware id for this machine
html = html + "Host ID(uuid): " + hostStat.HostID + "<br>"for _, interf := range interfStat {
html = html + "------------------------------------------------------<br>"
html = html + "Interface Name: " + interf.Name + "<br>"if interf.HardwareAddr != "" {
html = html + "Hardware(MAC) Address: " + interf.HardwareAddr + "<br>"
}
for _, flag := range interf.Flags {
html = html + "Interface behavior or flags: " + flag + "<br>"
}
for _, addr := range interf.Addrs {
html = html + "IPv6 or IPv4 addresses: " + addr.String() + "<br>"
}
}
html = html + "</html>"
w.Write([]byte(html))
}
funcSayName(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("Hello, I'm a machine and my name is [whatever]"))
}
funcmain() {
mux := http.NewServeMux()
mux.HandleFunc("/", SayName)
mux.HandleFunc("/gethwdata", GetHardwareData)
http.ListenAndServe(":8080", mux)
}
자 이제
http://localhost:8080/gethwdata
접속해 보시면 현재 하드웨어 및 사용상황이 표시됩니다.
p.s
혹시
golang.org/x/sys/unix 요거에 관련 함수없다고 에러 나시면
자신의 GOPATH 안의 src 에 위 해당 패키지 소스 unix 폴더를 삭제후....
다시
go get golang.org/x/sys/unix
하시면 됩니다. 추가된 함수가 있는데 기존에 받아놓은 것에는 없어서 그렇습니다.
새로 다시 받는 개념이네요..
출처 : https://www.socketloop.com/tutorials/golang-get-hardware-information-such-as-disk-memory-and-cpu-usage
|
|
번 호
카테고리
제 목
이름
조회수
Copyright ⓒ 2001.12. bada-ie.com. All rights reserved.
이 사이트는 리눅스에서 firefox 기준으로 작성되었습니다. 기타 브라우저에서는 다르게 보일 수 있습니다.
[ Ubuntu + GoLang + PostgreSQL + Mariadb ]
서버위치 : 오라클 클라우드 춘천 실행시간 : 0.06713 초 to webmaster... gogo sea. gogo sea.