github.com/dim13/unifi@v0.0.0-20230308161331-9b04946f5e93/cmd/list-devices/main.go (about) 1 // Copyright (c) 2014 Dimitri Sokolyuk. All rights reserved. 2 // Use of this source code is governed by ISC-style license 3 // that can be found in the LICENSE file. 4 5 // Example command list-devices 6 // List devices of a given site 7 package main 8 9 import ( 10 "flag" 11 "fmt" 12 "log" 13 "os" 14 "strconv" 15 "strings" 16 "text/tabwriter" 17 18 "github.com/dim13/unifi" 19 ) 20 21 var ( 22 host = flag.String("host", "unifi", "Controller hostname") 23 user = flag.String("user", "admin", "Controller username") 24 pass = flag.String("pass", "unifi", "Controller password") 25 port = flag.String("port", "8443", "Controller port") 26 version = flag.Int("version", 5, "Controller base version") 27 siteid = flag.String("siteid", "default", "Sitename or description") 28 filter = flag.String("filter", "", "Device Filter [uap|usw|ugw]") 29 ) 30 31 func main() { 32 flag.Parse() 33 34 w := new(tabwriter.Writer) 35 w.Init(os.Stdout, 0, 8, 3, ' ', 0) 36 defer w.Flush() 37 38 u, err := unifi.Login(*user, *pass, *host, *port, *siteid, *version) 39 if err != nil { 40 log.Fatalln("Login returned error: ", err) 41 } 42 defer u.Logout() 43 44 site, err := u.Site(*siteid) 45 if err != nil { 46 log.Fatal(err) 47 } 48 49 devices, err := u.Devices(site, *filter) 50 if err != nil { 51 log.Fatalln(err) 52 } 53 54 var numberOfUAPs, numberOfUSWs, numberOfUGWs, numberOfDevices int 55 56 // Output headline 57 fmt.Fprintln(w, "Type\tName\tIP\tMac\tModelName\tVersion\tStatus\tNumberOfClients\tTxBytes\tRxBytes") 58 59 for _, d := range devices { 60 p := []string{ 61 d.Type, 62 d.DeviceName(), 63 d.IP, 64 d.Mac, 65 d.ModelName(), 66 d.Version, 67 d.State.String(), 68 strconv.Itoa(d.NumSta), 69 unifi.Bytes(d.TxBytes).String(), 70 unifi.Bytes(d.RxBytes).String(), 71 } 72 fmt.Fprintln(w, strings.Join(p, "\t")) 73 74 switch d.Type { 75 case unifi.TypeAccessPoint: 76 numberOfUAPs++ 77 case unifi.TypeSwitch: 78 numberOfUSWs++ 79 case unifi.TypeGateway: 80 numberOfUGWs++ 81 } 82 83 numberOfDevices++ 84 85 } 86 87 w.Flush() // Write 88 fmt.Printf("\n") 89 fmt.Printf("Number of APs : %d\n", numberOfUAPs) 90 fmt.Printf("Number of Switches: %d\n", numberOfUSWs) 91 fmt.Printf("Number of Gateways: %d\n", numberOfUGWs) 92 fmt.Printf("Total : %d\n", numberOfDevices) 93 94 }