잠시만 기다려 주세요

     '판사, 검사 사법고시 공부쟁이들이 나라를 다 망친다.'
전체검색 :  
이번주 로또 및 연금번호 발생!!   |  HOME   |  여기는?   |  바다물때표   |  알림 (27)  |  여러가지 팁 (1126)  |  추천 및 재미 (166)  |  자료실 (25)  |  
시사, 이슈, 칼럼, 평론, 비평 (1054)  |  끄적거림 (160)  |  문예 창작 (736)  |  바람 따라 (75)  |  시나리오 (760)  |  드라마 대본 (248)  |  
살인!


    golang

golang - golang 현재 하드웨어 및 사용현황 구하기, 하드웨어 모니터링, cpu, memory, disk 사용률 보기
이 름 : 바다아이   |   조회수 : 15093         짧은 주소 : 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 / 7 page
번 호 카테고리 제 목 이름 조회수
184 golang golang postgresql 접속시 콘솔과 실제 golang 프로그램에서 postgresql 접속 시간이 안 맞을 때..timezone 문제.. 바다아이 1437
183 golang golang mariadb, mysql 접속 pooler proxysql 에 관한 설명..!!! mariadb 접속 개선, 연결 속도 증가 설정.. 바다아이 1601
182 golang golnag 받아온 의존 패키지 및 등등...  Go 언어에서 패키지를 업데이트... go get 업데이트... 바다아이 1518
181 golang golang 에서 postgresql + pgx + pgbouncer 사용하기... 기존 설정 그대로 유지하면서 성능 향상 됩니다. pgbouncer 사용, 설명... 바다아이 1630
180 golang golang 문자열 함수 예제... 바다아이 2427
179 golang golang 숫자인지 아닌지 확인하기, 체크하기... 바다아이 5268
178 golang golang 배열 삭제, map 삭제. 바다아이 4241
177 golang Golang 문자열 변환 방법(문자열, 숫자, 등 data 파싱방법) 타입 변환, 형 변환... 바다아이 5199
176 golang golang sort 정렬하기... 바다아이 5299
175 golang golang html.EscapeString html.UnescapeString input value 따옴표 안에 따옴표... 특수문자 치환 바다아이 5079
174 golang golang go.mod go.sum 모듈 관련 문제. GOPATH SRC not module, 1.16 로컬 패키지 사용 문제. 바다아이 8981
173 golang go 1.16 컴파일 에러... is not in GOROOT.. 컴파일시 GOPATH 찾지 못하는 문제.... 패키지 모듈 문제. 바다아이 10284
172 golang 문자열 포맷, String Formatting 바다아이 11405
171 golang rand.Intn 랜덤값 구하기, random, 랜덤 난수 발생하기, 알파벳 난수발생. 바다아이 10984
170 golang golang 을 사용하는 회사들 리스트... 바다아이 15217
169 golang golang gopath, goroot 경로 설정하기.. golang 설치하기 바다아이 11780
168 golang golang 파일 다운로드 예제... Force download file example 바다아이 13921
현재글 golang golang 현재 하드웨어 및 사용현황 구하기, 하드웨어 모니터링, cpu, memory, disk 사용률 보기 바다아이 15094
166 golang golang 원하는 형태로, 여러 종류로 크로스 컴파일 하기... GOOS, GOARCH 바다아이 12414
165 golang golang 체크박스 checkbox 배열 폼 처리... 다중 체크박스 바다아이 12520
164 golang golang 핸들함수, 라우터, http 웹서버 예제.... 바다아이 12306
163 golang golang 에서 nil 을 할당할 수 있는 경우, nil 을 사용할 수 있는 타입, nil 을 사용... 바다아이 12178
162 golang 2년 가까이 golang, go 언어를 사용해본 소감, 후기.... golang 찬양.... 추천 바다아이 15520
161 golang golang 에서 postgresql, mysql, mariadb 다중쿼리 에러날 때... ` Grave (그레이브) 문제 될 때.. 쿼리문 에러.. 바다아이 12839
160 golang golang 으로 postgresql 이나 mysql, mariadb 접속해서 데이터 가져올 때 scan 시 빈값, null 값이 오면 에러나는 문제.. 바다아이 12810
159 golang golang 간편하게 문자 인코딩 변환, iconv 바다아이 15649
158 golang golang quote escape, unquote 바다아이 13007
157 golang golang 웹서버, http errorLog 에러로그 남기기, 저장하기, 기록하기... 바다아이 13474
156 golang golang 인터페이스 interface 예제, 설명 바다아이 12655
155 golang golang 구조체 struct 포인터 개념 정리.... 바다아이 13230
| |









Copyright ⓒ 2001.12. bada-ie.com. All rights reserved.
이 사이트는 리눅스에서 chrome 기준으로 작성되었습니다. 기타 브라우저에서는 다르게 보일 수 있습니다.
[ Debian + GoLang + PostgreSQL + Mariadb + PgBouncer + ProxySQL]
서버위치 : San Jose Datacenter  실행시간 : 0.04215 초
to webmaster... gogo sea. gogo sea.