omada-api/device.go

63 lines
1.2 KiB
Go
Raw Permalink Normal View History

2025-02-01 17:38:29 +01:00
package omadaapi
import (
"fmt"
"strconv"
"git.tordarus.net/tordarus/ezhttp"
"git.tordarus.net/tordarus/omada-api/model"
)
func (api *Api) GetDevices(siteID model.SiteID) <-chan *model.Device {
out := make(chan *model.Device, 1000)
go func() {
defer close(out)
for page := 1; ; page++ {
resp, err := api.getDevices(page, siteID)
if err != nil {
return
}
for _, v := range resp.Result.Data {
out <- &v
}
if resp.Result.CurrentPage*resp.Result.CurrentSize >= resp.Result.TotalRows {
break
}
}
}()
return out
}
func (api *Api) getDevices(page int, siteID model.SiteID) (*model.PagedResponse[model.Device], error) {
2025-02-02 10:54:39 +01:00
api.refreshMutex.RLock()
defer api.refreshMutex.RUnlock()
2025-02-01 17:38:29 +01:00
req := ezhttp.Request(
ezhttp.Template(api.tmpl),
ezhttp.Method("GET"),
ezhttp.AppendPath(fmt.Sprintf("/openapi/v1/%s/sites/%s/devices", api.config.OmadaID, siteID)),
ezhttp.Query(
"page", strconv.Itoa(page),
"pageSize", "100",
),
)
resp, err := ezhttp.Do(req)
if err != nil {
return nil, err
}
defer resp.Body.Close()
response, err := ezhttp.ParseJsonResponse[model.PagedResponse[model.Device]](resp)
2025-02-01 17:38:29 +01:00
if err != nil {
return nil, err
}
return response, nil
}