func metaWindowsIfaces() { var dstConfigs []Win32_NetworkAdapterConfiguration q := wmi.CreateQuery(&dstConfigs, "WHERE MACAddress != null") err := wmi.Query(q, &dstConfigs) if err != nil { slog.Error(err) return } mNicConfigs := make(map[uint32]*Win32_NetworkAdapterConfiguration) for i, nic := range dstConfigs { mNicConfigs[nic.InterfaceIndex] = &dstConfigs[i] } mNicTeamIDtoSpeed := make(map[string]uint64) mNicTeamIDtoMaster := make(map[string]string) var dstTeamMembers []MSFT_NetLbfoTeamMember q = wmi.CreateQuery(&dstTeamMembers, "") err = wmi.QueryNamespace(q, &dstTeamMembers, "root\\StandardCimv2") if err == nil { for _, teamMember := range dstTeamMembers { mNicTeamIDtoSpeed[teamMember.InstanceID] = teamMember.ReceiveLinkSpeed mNicTeamIDtoMaster[teamMember.InstanceID] = teamMember.Team } } var dstAdapters []Win32_NetworkAdapter q = wmi.CreateQuery(&dstAdapters, "WHERE PhysicalAdapter=True and MACAddress <> null and NetConnectionStatus = 2") //Only adapters with MAC addresses and status="Connected" err = wmi.Query(q, &dstAdapters) if err != nil { slog.Error(err) return } for _, v := range dstAdapters { tag := opentsdb.TagSet{"iface": fmt.Sprint("Interface", v.InterfaceIndex)} AddMeta("", tag, "description", v.Description, true) AddMeta("", tag, "name", v.NetConnectionID, true) AddMeta("", tag, "mac", strings.Replace(v.MACAddress, ":", "", -1), true) if v.Speed != nil && *v.Speed != 0 { AddMeta("", tag, "speed", v.Speed, true) } else { nicSpeed := mNicTeamIDtoSpeed[v.GUID] AddMeta("", tag, "speed", nicSpeed, true) } nicMaster := mNicTeamIDtoMaster[v.GUID] if nicMaster != "" { AddMeta("", tag, "master", nicMaster, true) } nicConfig := mNicConfigs[v.InterfaceIndex] if nicConfig != nil { for _, ip := range *nicConfig.IPAddress { AddMeta("", tag, "addr", ip, true) // blocked by array support in WMI See https://github.com/StackExchange/wmi/issues/5 } } } }
func c_meta_windows_version() (opentsdb.MultiDataPoint, error) { var md opentsdb.MultiDataPoint var dst []Win32_OperatingSystem q := wmi.CreateQuery(&dst, "") err := wmi.Query(q, &dst) if err != nil { slog.Error(err) return md, err } var dstComputer []Win32_ComputerSystem q = wmi.CreateQuery(&dstComputer, "") err = wmi.Query(q, &dstComputer) if err != nil { slog.Error(err) return md, err } var dstBIOS []Win32_BIOS q = wmi.CreateQuery(&dstBIOS, "") err = wmi.Query(q, &dstBIOS) if err != nil { slog.Error(err) return md, err } for _, v := range dst { metadata.AddMeta("", nil, "version", v.Version, true) metadata.AddMeta("", nil, "versionCaption", v.Caption, true) } for _, v := range dstComputer { metadata.AddMeta("", nil, "manufacturer", v.Manufacturer, true) metadata.AddMeta("", nil, "model", v.Model, true) metadata.AddMeta("", nil, "memoryTotal", v.TotalPhysicalMemory, true) } for _, v := range dstBIOS { metadata.AddMeta("", nil, "serialNumber", v.SerialNumber, true) } return md, nil }
func metaWindowsVersion() { var dst []Win32_OperatingSystem q := wmi.CreateQuery(&dst, "") err := wmi.Query(q, &dst) if err != nil { slog.Error(err) return } var dstComputer []Win32_ComputerSystem q = wmi.CreateQuery(&dstComputer, "") err = wmi.Query(q, &dstComputer) if err != nil { slog.Error(err) return } var dstBIOS []Win32_BIOS q = wmi.CreateQuery(&dstBIOS, "") err = wmi.Query(q, &dstBIOS) if err != nil { slog.Error(err) return } for _, v := range dst { AddMeta("", nil, "version", v.Version, true) AddMeta("", nil, "versionCaption", v.Caption, true) } for _, v := range dstComputer { AddMeta("", nil, "manufacturer", v.Manufacturer, true) AddMeta("", nil, "model", v.Model, true) AddMeta("", nil, "memoryTotal", v.TotalPhysicalMemory, true) } for _, v := range dstBIOS { AddMeta("", nil, "serialNumber", v.SerialNumber, true) } }
func c_meta_windows_ifaces() (opentsdb.MultiDataPoint, error) { var md opentsdb.MultiDataPoint var dstConfigs []Win32_NetworkAdapterConfiguration q := wmi.CreateQuery(&dstConfigs, "WHERE MACAddress != null") err := wmi.Query(q, &dstConfigs) if err != nil { slog.Error(err) return md, err } mNicConfigs := make(map[uint32]*Win32_NetworkAdapterConfiguration) for i, nic := range dstConfigs { mNicConfigs[nic.InterfaceIndex] = &dstConfigs[i] } mNicTeamIDtoSpeed := make(map[string]uint64) mNicTeamIDtoMaster := make(map[string]string) var dstTeamMembers []MSFT_NetLbfoTeamMember q = wmi.CreateQuery(&dstTeamMembers, "") err = wmi.QueryNamespace(q, &dstTeamMembers, "root\\StandardCimv2") if err == nil { for _, teamMember := range dstTeamMembers { mNicTeamIDtoSpeed[teamMember.InstanceID] = teamMember.ReceiveLinkSpeed mNicTeamIDtoMaster[teamMember.InstanceID] = teamMember.Team } } var dstAdapters []Win32_NetworkAdapter q = wmi.CreateQuery(&dstAdapters, "WHERE PhysicalAdapter=True and MACAddress <> null and NetConnectionStatus = 2") //Only adapters with MAC addresses and status="Connected" err = wmi.Query(q, &dstAdapters) if err != nil { slog.Error(err) return md, err } mNicIndextoIPs := make(map[int]string) ifaces, _ := net.Interfaces() for _, iface := range ifaces { if iface.Flags&(net.FlagLoopback|net.FlagPointToPoint) != 0 { continue } rawAds, _ := iface.Addrs() addrs := make([]string, len(rawAds)) for i, rAd := range rawAds { addrs[i] = rAd.String() } sort.Strings(addrs) j, _ := json.Marshal(addrs) mNicIndextoIPs[iface.Index] = string(j) } for _, v := range dstAdapters { tag := opentsdb.TagSet{"iface": fmt.Sprint("Interface", v.InterfaceIndex)} metadata.AddMeta("", tag, "description", v.Description, true) metadata.AddMeta("", tag, "name", v.NetConnectionID, true) metadata.AddMeta("", tag, "mac", strings.Replace(v.MACAddress, ":", "", -1), true) if v.Speed != nil && *v.Speed != 0 { metadata.AddMeta("", tag, "speed", v.Speed, true) } else { nicSpeed := mNicTeamIDtoSpeed[v.GUID] metadata.AddMeta("", tag, "speed", nicSpeed, true) } nicMaster := mNicTeamIDtoMaster[v.GUID] if nicMaster != "" { metadata.AddMeta("", tag, "master", nicMaster, true) } nicIPs := mNicIndextoIPs[int(v.InterfaceIndex)] if nicIPs == "" { nicIPs = "[]" } metadata.AddMeta("", tag, "addresses", nicIPs, true) } return md, nil }