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  }