
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.
224 lines
5.1 KiB
Go
224 lines
5.1 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 GpStatus int32
|
|
|
|
const (
|
|
Ok GpStatus = 0
|
|
GenericError GpStatus = 1
|
|
InvalidParameter GpStatus = 2
|
|
OutOfMemory GpStatus = 3
|
|
ObjectBusy GpStatus = 4
|
|
InsufficientBuffer GpStatus = 5
|
|
NotImplemented GpStatus = 6
|
|
Win32Error GpStatus = 7
|
|
WrongState GpStatus = 8
|
|
Aborted GpStatus = 9
|
|
FileNotFound GpStatus = 10
|
|
ValueOverflow GpStatus = 11
|
|
AccessDenied GpStatus = 12
|
|
UnknownImageFormat GpStatus = 13
|
|
FontFamilyNotFound GpStatus = 14
|
|
FontStyleNotFound GpStatus = 15
|
|
NotTrueTypeFont GpStatus = 16
|
|
UnsupportedGdiplusVersion GpStatus = 17
|
|
GdiplusNotInitialized GpStatus = 18
|
|
PropertyNotFound GpStatus = 19
|
|
PropertyNotSupported GpStatus = 20
|
|
ProfileNotFound GpStatus = 21
|
|
)
|
|
|
|
func (s GpStatus) String() string {
|
|
switch s {
|
|
case Ok:
|
|
return "Ok"
|
|
|
|
case GenericError:
|
|
return "GenericError"
|
|
|
|
case InvalidParameter:
|
|
return "InvalidParameter"
|
|
|
|
case OutOfMemory:
|
|
return "OutOfMemory"
|
|
|
|
case ObjectBusy:
|
|
return "ObjectBusy"
|
|
|
|
case InsufficientBuffer:
|
|
return "InsufficientBuffer"
|
|
|
|
case NotImplemented:
|
|
return "NotImplemented"
|
|
|
|
case Win32Error:
|
|
return "Win32Error"
|
|
|
|
case WrongState:
|
|
return "WrongState"
|
|
|
|
case Aborted:
|
|
return "Aborted"
|
|
|
|
case FileNotFound:
|
|
return "FileNotFound"
|
|
|
|
case ValueOverflow:
|
|
return "ValueOverflow"
|
|
|
|
case AccessDenied:
|
|
return "AccessDenied"
|
|
|
|
case UnknownImageFormat:
|
|
return "UnknownImageFormat"
|
|
|
|
case FontFamilyNotFound:
|
|
return "FontFamilyNotFound"
|
|
|
|
case FontStyleNotFound:
|
|
return "FontStyleNotFound"
|
|
|
|
case NotTrueTypeFont:
|
|
return "NotTrueTypeFont"
|
|
|
|
case UnsupportedGdiplusVersion:
|
|
return "UnsupportedGdiplusVersion"
|
|
|
|
case GdiplusNotInitialized:
|
|
return "GdiplusNotInitialized"
|
|
|
|
case PropertyNotFound:
|
|
return "PropertyNotFound"
|
|
|
|
case PropertyNotSupported:
|
|
return "PropertyNotSupported"
|
|
|
|
case ProfileNotFound:
|
|
return "ProfileNotFound"
|
|
}
|
|
|
|
return "Unknown Status Value"
|
|
}
|
|
|
|
type GdiplusStartupInput struct {
|
|
GdiplusVersion uint32
|
|
DebugEventCallback uintptr
|
|
SuppressBackgroundThread BOOL
|
|
SuppressExternalCodecs BOOL
|
|
}
|
|
|
|
type GdiplusStartupOutput struct {
|
|
NotificationHook uintptr
|
|
NotificationUnhook uintptr
|
|
}
|
|
|
|
type GpImage struct{}
|
|
|
|
type GpBitmap GpImage
|
|
|
|
type ARGB uint32
|
|
|
|
var (
|
|
// Library
|
|
libgdiplus uintptr
|
|
|
|
// Functions
|
|
gdipCreateBitmapFromFile uintptr
|
|
gdipCreateBitmapFromHBITMAP uintptr
|
|
gdipCreateHBITMAPFromBitmap uintptr
|
|
gdipDisposeImage uintptr
|
|
gdiplusShutdown uintptr
|
|
gdiplusStartup uintptr
|
|
)
|
|
|
|
var (
|
|
token uintptr
|
|
)
|
|
|
|
func init() {
|
|
// Library
|
|
libgdiplus = MustLoadLibrary("gdiplus.dll")
|
|
|
|
// Functions
|
|
gdipCreateBitmapFromFile = MustGetProcAddress(libgdiplus, "GdipCreateBitmapFromFile")
|
|
gdipCreateBitmapFromHBITMAP = MustGetProcAddress(libgdiplus, "GdipCreateBitmapFromHBITMAP")
|
|
gdipCreateHBITMAPFromBitmap = MustGetProcAddress(libgdiplus, "GdipCreateHBITMAPFromBitmap")
|
|
gdipDisposeImage = MustGetProcAddress(libgdiplus, "GdipDisposeImage")
|
|
gdiplusShutdown = MustGetProcAddress(libgdiplus, "GdiplusShutdown")
|
|
gdiplusStartup = MustGetProcAddress(libgdiplus, "GdiplusStartup")
|
|
}
|
|
|
|
func GdipCreateBitmapFromFile(filename *uint16, bitmap **GpBitmap) GpStatus {
|
|
ret, _, _ := syscall.Syscall(gdipCreateBitmapFromFile, 2,
|
|
uintptr(unsafe.Pointer(filename)),
|
|
uintptr(unsafe.Pointer(bitmap)),
|
|
0)
|
|
|
|
return GpStatus(ret)
|
|
}
|
|
|
|
func GdipCreateBitmapFromHBITMAP(hbm HBITMAP, hpal HPALETTE, bitmap **GpBitmap) GpStatus {
|
|
ret, _, _ := syscall.Syscall(gdipCreateBitmapFromHBITMAP, 3,
|
|
uintptr(hbm),
|
|
uintptr(hpal),
|
|
uintptr(unsafe.Pointer(bitmap)))
|
|
|
|
return GpStatus(ret)
|
|
}
|
|
|
|
func GdipCreateHBITMAPFromBitmap(bitmap *GpBitmap, hbmReturn *HBITMAP, background ARGB) GpStatus {
|
|
ret, _, _ := syscall.Syscall(gdipCreateHBITMAPFromBitmap, 3,
|
|
uintptr(unsafe.Pointer(bitmap)),
|
|
uintptr(unsafe.Pointer(hbmReturn)),
|
|
uintptr(background))
|
|
|
|
return GpStatus(ret)
|
|
}
|
|
|
|
func GdipDisposeImage(image *GpImage) GpStatus {
|
|
ret, _, _ := syscall.Syscall(gdipDisposeImage, 1,
|
|
uintptr(unsafe.Pointer(image)),
|
|
0,
|
|
0)
|
|
|
|
return GpStatus(ret)
|
|
}
|
|
|
|
func GdiplusShutdown() {
|
|
syscall.Syscall(gdiplusShutdown, 1,
|
|
token,
|
|
0,
|
|
0)
|
|
}
|
|
|
|
func GdiplusStartup(input *GdiplusStartupInput, output *GdiplusStartupOutput) GpStatus {
|
|
ret, _, _ := syscall.Syscall(gdiplusStartup, 3,
|
|
uintptr(unsafe.Pointer(&token)),
|
|
uintptr(unsafe.Pointer(input)),
|
|
uintptr(unsafe.Pointer(output)))
|
|
|
|
return GpStatus(ret)
|
|
}
|
|
|
|
/*GdipSaveImageToFile(image *GpImage, filename *uint16, clsidEncoder *CLSID, encoderParams *EncoderParameters) GpStatus {
|
|
ret, _, _ := syscall.Syscall6(gdipSaveImageToFile, 4,
|
|
uintptr(unsafe.Pointer(image)),
|
|
uintptr(unsafe.Pointer(filename)),
|
|
uintptr(unsafe.Pointer(clsidEncoder)),
|
|
uintptr(unsafe.Pointer(encoderParams)),
|
|
0,
|
|
0)
|
|
|
|
return GpStatus(ret)
|
|
}*/
|