omada-api/device.go

66 lines
1.3 KiB
Go

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, <-chan error) {
out := make(chan *model.Device, 1000)
errChan := make(chan error)
go func() {
defer close(out)
defer close(errChan)
for page := 1; ; page++ {
resp, err := api.getDevices(page, siteID)
if err != nil {
errChan <- err
return
}
for _, v := range resp.Result.Data {
out <- &v
}
if resp.Result.CurrentPage*resp.Result.CurrentSize >= resp.Result.TotalRows {
break
}
}
}()
return out, errChan
}
func (api *Api) getDevices(page int, siteID model.SiteID) (*model.PagedResponse[model.Device], error) {
api.refreshMutex.RLock()
defer api.refreshMutex.RUnlock()
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)
if err != nil {
return nil, err
}
return response, nil
}