github.com/dim13/unifi@v0.0.0-20230308161331-9b04946f5e93/cmd/list-rawdevices/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-rawdevices
     6  // Generates a json file with a list of devices as received by the controller api.
     7  // Optionally devices can be filtered by device type
     8  package main
     9  
    10  import (
    11  	"encoding/json"
    12  	"flag"
    13  	"log"
    14  	"os"
    15  	"text/tabwriter"
    16  
    17  	"github.com/dim13/unifi"
    18  )
    19  
    20  var (
    21  	host    = flag.String("host", "unifi", "Controller hostname")
    22  	user    = flag.String("user", "admin", "Controller username")
    23  	pass    = flag.String("pass", "unifi", "Controller password")
    24  	port    = flag.String("port", "8443", "Controller port")
    25  	version = flag.Int("version", 5, "Controller base version")
    26  	siteid  = flag.String("siteid", "default", "Sitename or description")
    27  
    28  	filter = flag.String("filter", "", "Filter by device type [uap|usw|ugw]")
    29  	path   = flag.String("path", "./rawDevices.json", "The path and filename of the output")
    30  )
    31  
    32  func main() {
    33  	flag.Parse()
    34  
    35  	w := new(tabwriter.Writer)
    36  	w.Init(os.Stdout, 0, 8, 3, ' ', 0)
    37  	defer w.Flush()
    38  
    39  	u, err := unifi.Login(*user, *pass, *host, *port, *siteid, *version)
    40  	if err != nil {
    41  		log.Fatalln("Login returned error: ", err)
    42  	}
    43  	defer u.Logout()
    44  
    45  	site, err := u.Site(*siteid)
    46  	if err != nil {
    47  		log.Fatal(err)
    48  	}
    49  
    50  	rawDevices, err := u.RawDevices(site, *filter)
    51  	if err != nil {
    52  		log.Fatalln(err)
    53  	}
    54  
    55  	var devices []json.RawMessage
    56  
    57  	for _, v := range rawDevices {
    58  		devices = append(devices, v.Data)
    59  	}
    60  
    61  	json, _ := json.MarshalIndent(devices, "", "  ")
    62  	err = os.WriteFile(*path, json, 0644)
    63  	if err != nil {
    64  		log.Fatalln(err)
    65  
    66  	}
    67  }