잠시만 기다려 주세요

     '대통령을 욕하는 것은 민주사회에서 주권을 가진 시민의 당연한 권리입니다. 대통령을 욕하는 것으로 주권자가 스트레스를 해소할 수 있다면 저는 기쁜 마음으로 들을 수 있습니다. - 노무현 -'
전체검색 :  
이번주 로또 및 연금번호 발생!!   |  HOME   |  여기는?   |  바다물때표   |  알림 (16)  |  여러가지 팁 (1059)  |  추천 및 재미 (156)  |  자료실 (22)  |  
시사, 이슈, 칼럼, 평론, 비평 (613)  |  끄적거림 (136)  |  문예 창작 (716)  |  바람 따라 (75)  |  시나리오 (760)  |  드라마 대본 (248)  |  
살인!


    golang

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

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
번 호 카테고리 제 목 이름 조회수
179 golang golang , ... 바다아이 1851
178 golang golang , map . 바다아이 1426
177 golang Golang (, , data ) , ... 바다아이 1508
176 golang golang sort ... 바다아이 1749
175 golang golang html.EscapeString html.UnescapeString input value ... 바다아이 1841
174 golang golang go.mod go.sum . GOPATH SRC not module, 1.16 . 바다아이 5152
173 golang go 1.16 ... is not in GOROOT.. GOPATH .... . 바다아이 6057
172 golang , String Formatting 바다아이 7702
171 golang rand.Intn , random, , . 바다아이 7159
170 golang golang ... 바다아이 10297
169 golang golang gopath, goroot .. golang 바다아이 7808
168 golang golang ... Force download file example 바다아이 9622
현재글 golang golang , , cpu, memory, disk 바다아이 10891
166 golang golang , ... GOOS, GOARCH 바다아이 8641
165 golang golang checkbox ... 바다아이 8402
164 golang golang , , http .... 바다아이 8175
163 golang golang nil , nil , nil ... 바다아이 8511
162 golang 2 golang, go , .... golang .... 바다아이 11409
161 golang golang postgresql, mysql, mariadb ... ` Grave () .. .. 바다아이 8722
160 golang golang postgresql mysql, mariadb scan , null .. 바다아이 8855
159 golang golang , iconv 바다아이 11655
158 golang golang quote escape, unquote 바다아이 9117
157 golang golang , http errorLog , , ... 바다아이 9191
156 golang golang interface , 바다아이 8614
155 golang golang struct .... 바다아이 9354
154 golang golang map map , 바다아이 8827
153 golang golang map .... .... 바다아이 8346
152 golang golang slice copy 바다아이 8474
151 golang golang goto 바다아이 9359
150 golang golang slice sort , int, string, float64 바다아이 8837
| |









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