1
+ package gotoc
2
+
3
+ import (
4
+ "fmt"
5
+ "unsafe"
6
+ )
7
+ /*
8
+
9
+ #include "../../../../../Include/sigar.h"
10
+
11
+
12
+
13
+ */
14
+ import "C"
15
+
16
+ type CpuInfo struct {
17
+ Vendor string
18
+ Model string
19
+ Mhz int
20
+ MhzMax int
21
+ MhzMin int
22
+ CacheSize uint
23
+ TotalSockets int
24
+ TotalCores int
25
+ CorePerSocket int
26
+ }
27
+
28
+ func GetCpuInfo ()(result []* CpuInfo , err error ){
29
+
30
+ defer func () {
31
+ if r := recover () ; r != nil {
32
+ err = fmt .Errorf ("Failed to rertieve cpu info due to: %v" , err )
33
+ }
34
+ }()
35
+ var sigar * C.sigar_t = GetSigarHandle ()
36
+
37
+ var cpuInfoList C.sigar_cpu_info_list_t
38
+
39
+ C .sigar_cpu_info_list_get (sigar , & cpuInfoList )
40
+
41
+ var length int = int (cpuInfoList .number )
42
+
43
+ cCpuInfo := GetGoSlice (length , unsafe .Pointer (cpuInfoList .data ))
44
+
45
+ var goCpuInfo []C.sigar_cpu_info_t
46
+ goCpuInfo = * (* []C.sigar_cpu_info_t )(unsafe .Pointer (& cCpuInfo ))
47
+
48
+ C .sigar_cpu_info_list_destroy (sigar ,& cpuInfoList )
49
+
50
+ result = make ([]* CpuInfo , len (goCpuInfo ))
51
+ for i ,sigarCpuinfo := range goCpuInfo {
52
+
53
+ result [i ] = & CpuInfo {
54
+ Vendor : C .GoString (& sigarCpuinfo .vendor [0 ]),
55
+ Model : C .GoString (& sigarCpuinfo .model [0 ]),
56
+ Mhz : int (sigarCpuinfo .mhz ),
57
+ MhzMax : int (sigarCpuinfo .mhz_max ),
58
+ MhzMin : int (sigarCpuinfo .mhz_min ),
59
+ CacheSize : uint (sigarCpuinfo .cache_size ),
60
+ TotalSockets : int (sigarCpuinfo .total_sockets ),
61
+ TotalCores : int (sigarCpuinfo .total_cores ),
62
+ CorePerSocket : int (sigarCpuinfo .cores_per_socket ),
63
+ }
64
+ }
65
+
66
+ return result ,nil
67
+
68
+ }
0 commit comments