
This implements stats for windows nodes in a new package, winstats. WinStats exports methods to get cadvisor like datastructures, however with windows specific metrics. WinStats only gets node level metrics and information, container stats will go via the CRI. This enables the use of the summary api to get metrics for windows nodes.
241 lines
6.5 KiB
Go
241 lines
6.5 KiB
Go
// Copyright 2010 The win Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
// +build windows
|
|
|
|
package win
|
|
|
|
import (
|
|
"syscall"
|
|
"unsafe"
|
|
)
|
|
|
|
type DISPID int32
|
|
|
|
const (
|
|
DISPID_BEFORENAVIGATE DISPID = 100
|
|
DISPID_NAVIGATECOMPLETE DISPID = 101
|
|
DISPID_STATUSTEXTCHANGE DISPID = 102
|
|
DISPID_QUIT DISPID = 103
|
|
DISPID_DOWNLOADCOMPLETE DISPID = 104
|
|
DISPID_COMMANDSTATECHANGE DISPID = 105
|
|
DISPID_DOWNLOADBEGIN DISPID = 106
|
|
DISPID_NEWWINDOW DISPID = 107
|
|
DISPID_PROGRESSCHANGE DISPID = 108
|
|
DISPID_WINDOWMOVE DISPID = 109
|
|
DISPID_WINDOWRESIZE DISPID = 110
|
|
DISPID_WINDOWACTIVATE DISPID = 111
|
|
DISPID_PROPERTYCHANGE DISPID = 112
|
|
DISPID_TITLECHANGE DISPID = 113
|
|
DISPID_TITLEICONCHANGE DISPID = 114
|
|
DISPID_FRAMEBEFORENAVIGATE DISPID = 200
|
|
DISPID_FRAMENAVIGATECOMPLETE DISPID = 201
|
|
DISPID_FRAMENEWWINDOW DISPID = 204
|
|
DISPID_BEFORENAVIGATE2 DISPID = 250
|
|
DISPID_NEWWINDOW2 DISPID = 251
|
|
DISPID_NAVIGATECOMPLETE2 DISPID = 252
|
|
DISPID_ONQUIT DISPID = 253
|
|
DISPID_ONVISIBLE DISPID = 254
|
|
DISPID_ONTOOLBAR DISPID = 255
|
|
DISPID_ONMENUBAR DISPID = 256
|
|
DISPID_ONSTATUSBAR DISPID = 257
|
|
DISPID_ONFULLSCREEN DISPID = 258
|
|
DISPID_DOCUMENTCOMPLETE DISPID = 259
|
|
DISPID_ONTHEATERMODE DISPID = 260
|
|
DISPID_ONADDRESSBAR DISPID = 261
|
|
DISPID_WINDOWSETRESIZABLE DISPID = 262
|
|
DISPID_WINDOWCLOSING DISPID = 263
|
|
DISPID_WINDOWSETLEFT DISPID = 264
|
|
DISPID_WINDOWSETTOP DISPID = 265
|
|
DISPID_WINDOWSETWIDTH DISPID = 266
|
|
DISPID_WINDOWSETHEIGHT DISPID = 267
|
|
DISPID_CLIENTTOHOSTWINDOW DISPID = 268
|
|
DISPID_SETSECURELOCKICON DISPID = 269
|
|
DISPID_FILEDOWNLOAD DISPID = 270
|
|
DISPID_NAVIGATEERROR DISPID = 271
|
|
DISPID_PRIVACYIMPACTEDSTATECHANGE DISPID = 272
|
|
)
|
|
|
|
var (
|
|
IID_IDispatch = IID{0x00020400, 0x0000, 0x0000, [8]byte{0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}}
|
|
)
|
|
|
|
const (
|
|
DISP_E_MEMBERNOTFOUND = 0x80020003
|
|
)
|
|
|
|
type VARTYPE uint16
|
|
|
|
const (
|
|
VT_EMPTY VARTYPE = 0
|
|
VT_NULL VARTYPE = 1
|
|
VT_I2 VARTYPE = 2
|
|
VT_I4 VARTYPE = 3
|
|
VT_R4 VARTYPE = 4
|
|
VT_R8 VARTYPE = 5
|
|
VT_CY VARTYPE = 6
|
|
VT_DATE VARTYPE = 7
|
|
VT_BSTR VARTYPE = 8
|
|
VT_DISPATCH VARTYPE = 9
|
|
VT_ERROR VARTYPE = 10
|
|
VT_BOOL VARTYPE = 11
|
|
VT_VARIANT VARTYPE = 12
|
|
VT_UNKNOWN VARTYPE = 13
|
|
VT_DECIMAL VARTYPE = 14
|
|
VT_I1 VARTYPE = 16
|
|
VT_UI1 VARTYPE = 17
|
|
VT_UI2 VARTYPE = 18
|
|
VT_UI4 VARTYPE = 19
|
|
VT_I8 VARTYPE = 20
|
|
VT_UI8 VARTYPE = 21
|
|
VT_INT VARTYPE = 22
|
|
VT_UINT VARTYPE = 23
|
|
VT_VOID VARTYPE = 24
|
|
VT_HRESULT VARTYPE = 25
|
|
VT_PTR VARTYPE = 26
|
|
VT_SAFEARRAY VARTYPE = 27
|
|
VT_CARRAY VARTYPE = 28
|
|
VT_USERDEFINED VARTYPE = 29
|
|
VT_LPSTR VARTYPE = 30
|
|
VT_LPWSTR VARTYPE = 31
|
|
VT_RECORD VARTYPE = 36
|
|
VT_INT_PTR VARTYPE = 37
|
|
VT_UINT_PTR VARTYPE = 38
|
|
VT_FILETIME VARTYPE = 64
|
|
VT_BLOB VARTYPE = 65
|
|
VT_STREAM VARTYPE = 66
|
|
VT_STORAGE VARTYPE = 67
|
|
VT_STREAMED_OBJECT VARTYPE = 68
|
|
VT_STORED_OBJECT VARTYPE = 69
|
|
VT_BLOB_OBJECT VARTYPE = 70
|
|
VT_CF VARTYPE = 71
|
|
VT_CLSID VARTYPE = 72
|
|
VT_VERSIONED_STREAM VARTYPE = 73
|
|
VT_BSTR_BLOB VARTYPE = 0xfff
|
|
VT_VECTOR VARTYPE = 0x1000
|
|
VT_ARRAY VARTYPE = 0x2000
|
|
VT_BYREF VARTYPE = 0x4000
|
|
VT_RESERVED VARTYPE = 0x8000
|
|
VT_ILLEGAL VARTYPE = 0xffff
|
|
VT_ILLEGALMASKED VARTYPE = 0xfff
|
|
VT_TYPEMASK VARTYPE = 0xfff
|
|
)
|
|
|
|
type VARIANT struct {
|
|
Vt VARTYPE
|
|
reserved [14]byte
|
|
}
|
|
|
|
type VARIANTARG VARIANT
|
|
|
|
type VARIANT_BOOL int16
|
|
|
|
//type BSTR *uint16
|
|
|
|
func StringToBSTR(value string) *uint16 /*BSTR*/ {
|
|
// IMPORTANT: Don't forget to free the BSTR value when no longer needed!
|
|
return SysAllocString(value)
|
|
}
|
|
|
|
func BSTRToString(value *uint16 /*BSTR*/) string {
|
|
// ISSUE: Is this really ok?
|
|
bstrArrPtr := (*[200000000]uint16)(unsafe.Pointer(value))
|
|
|
|
bstrSlice := make([]uint16, SysStringLen(value))
|
|
copy(bstrSlice, bstrArrPtr[:])
|
|
|
|
return syscall.UTF16ToString(bstrSlice)
|
|
}
|
|
|
|
type VAR_I4 struct {
|
|
vt VARTYPE
|
|
reserved1 [6]byte
|
|
lVal int32
|
|
reserved2 [4]byte
|
|
}
|
|
|
|
func IntToVariantI4(value int32) *VAR_I4 {
|
|
return &VAR_I4{vt: VT_I4, lVal: value}
|
|
}
|
|
|
|
func VariantI4ToInt(value *VAR_I4) int32 {
|
|
return value.lVal
|
|
}
|
|
|
|
type VAR_BOOL struct {
|
|
vt VARTYPE
|
|
reserved1 [6]byte
|
|
boolVal VARIANT_BOOL
|
|
reserved2 [6]byte
|
|
}
|
|
|
|
func BoolToVariantBool(value bool) *VAR_BOOL {
|
|
return &VAR_BOOL{vt: VT_BOOL, boolVal: VARIANT_BOOL(BoolToBOOL(value))}
|
|
}
|
|
|
|
func VariantBoolToBool(value *VAR_BOOL) bool {
|
|
return value.boolVal != 0
|
|
}
|
|
|
|
func StringToVariantBSTR(value string) *VAR_BSTR {
|
|
// IMPORTANT: Don't forget to free the BSTR value when no longer needed!
|
|
return &VAR_BSTR{vt: VT_BSTR, bstrVal: StringToBSTR(value)}
|
|
}
|
|
|
|
func VariantBSTRToString(value *VAR_BSTR) string {
|
|
return BSTRToString(value.bstrVal)
|
|
}
|
|
|
|
type DISPPARAMS struct {
|
|
Rgvarg *VARIANTARG
|
|
RgdispidNamedArgs *DISPID
|
|
CArgs int32
|
|
CNamedArgs int32
|
|
}
|
|
|
|
var (
|
|
// Library
|
|
liboleaut32 uintptr
|
|
|
|
// Functions
|
|
sysAllocString uintptr
|
|
sysFreeString uintptr
|
|
sysStringLen uintptr
|
|
)
|
|
|
|
func init() {
|
|
// Library
|
|
liboleaut32 = MustLoadLibrary("oleaut32.dll")
|
|
|
|
// Functions
|
|
sysAllocString = MustGetProcAddress(liboleaut32, "SysAllocString")
|
|
sysFreeString = MustGetProcAddress(liboleaut32, "SysFreeString")
|
|
sysStringLen = MustGetProcAddress(liboleaut32, "SysStringLen")
|
|
}
|
|
|
|
func SysAllocString(s string) *uint16 /*BSTR*/ {
|
|
ret, _, _ := syscall.Syscall(sysAllocString, 1,
|
|
uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(s))),
|
|
0,
|
|
0)
|
|
|
|
return (*uint16) /*BSTR*/ (unsafe.Pointer(ret))
|
|
}
|
|
|
|
func SysFreeString(bstr *uint16 /*BSTR*/) {
|
|
syscall.Syscall(sysFreeString, 1,
|
|
uintptr(unsafe.Pointer(bstr)),
|
|
0,
|
|
0)
|
|
}
|
|
|
|
func SysStringLen(bstr *uint16 /*BSTR*/) uint32 {
|
|
ret, _, _ := syscall.Syscall(sysStringLen, 1,
|
|
uintptr(unsafe.Pointer(bstr)),
|
|
0,
|
|
0)
|
|
|
|
return uint32(ret)
|
|
}
|