잠시만 기다려 주세요


 
HOME   |  여기는?   |  바다물때표   |  여러가지 팁 (812)  |  추천 및 재미 (79)  |  자료실 (18)  |  끄적거림 (467)  |  시나리오 (760)  |  드라마 대본 (248)  |  

2019년 11월 22일
순간순간 깨어있지 못하면 벼락치는 곳에서 안테나 잡고 전파찾기 마련이다. - 바다아이
 




    golang

golang - golang 현재 하드웨어 및 사용현황 구하기, 하드웨어 모니터링, cpu, memory, disk 사용률 보기
이 름 : 바다아이   |   조회수 : 1078         짧은 주소 : https://www.bada-ie.com/su/?931547540291
# 잘 만들어진 게 있네요.. 가져다 쓰셔요.... 응용하면 사용할 곳 많겠네요..
# 패키지 일단 가져와야죠

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"
)

func dealwithErr(err error) {
	if err != nil {
		fmt.Println(err)
		//os.Exit(-1)
	}
}

func GetHardwareData(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))

}

func SayName(w http.ResponseWriter, r *http.Request) {
	w.Write([]byte("Hello, I'm a machine and my name is [whatever]"))
}

func main() {
	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
| |


      1 page / 6 page
번 호 카테고리 제 목 이름 조회수
171 golang golang ... 바다아이 418
170 golang golang gopath, goroot .. 바다아이 403
169 golang golang ... Force download file example 바다아이 709
현재글 golang golang , , cpu, memory, disk 바다아이 1079
167 golang golang , ... GOOS, GOARCH 바다아이 794
166 golang golang checkbox ... 바다아이 957
165 golang golang , , http .... 바다아이 968
164 golang golang nil , nil , nil ... 바다아이 1020
163 golang 2 golang, go , .... golang .... 바다아이 1355
162 golang golang postgresql, mysql, mariadb ... ` Grave () .. .. 바다아이 1101
161 golang golang postgresql mysql, mariadb scan , null .. 바다아이 1170
160 golang golang , iconv 바다아이 1244
159 golang golang quote escape, unquote 바다아이 1230
158 golang golang , http errorLog , , ... 바다아이 1296
157 golang golang interface , 바다아이 1259
156 golang golang struct .... 바다아이 1337
155 golang golang map map , 바다아이 1250
154 golang golang map .... .... 바다아이 1310
153 golang golang slice copy 바다아이 1199
152 golang golang goto 바다아이 1293
151 golang golang slice sort , int, string, float64 바다아이 1325
150 golang URL Parsing, url . parse 바다아이 1348
149 golang golang , interface{} ... 바다아이 1283
148 golang golang interface to string, , , map slice json 바다아이 1241
147 golang golang How to convert JSON string to map and slice, json 바다아이 1291
146 golang golang , file write, Writing Files 바다아이 1426
145 golang golang Insert Line or String to File, , , , , 바다아이 1210
144 golang golang replace 바다아이 1267
143 golang golang split explode , , ... 바다아이 1364
142 golang golang email read parse, , ..... .... 바다아이 1285
| |




Copyright ⓒ 2001.12. bada-ie.com. All rights reserved.
이 사이트는 리눅스에서 firefox 기준으로 작성되었습니다. 기타 브라우저에서는 다르게 보일 수 있습니다.
[ FreeBSD + GoLang + PostgreSQL ]
서버위치 : 서울 Amazon Lightsail  실행시간 : 0.20095
to webmaster... gogo sea. gogo sea.