90 lines
2 KiB
Go
90 lines
2 KiB
Go
|
package opnsense
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"strings"
|
||
|
|
||
|
"github.com/go-kit/log/level"
|
||
|
)
|
||
|
|
||
|
type cronSearchResponse struct {
|
||
|
Rows []struct {
|
||
|
UUID string `json:"uuid"`
|
||
|
Enabled string `json:"enabled"`
|
||
|
Minutes string `json:"minutes"`
|
||
|
Hours string `json:"hours"`
|
||
|
Days string `json:"days"`
|
||
|
Months string `json:"months"`
|
||
|
Weekdays string `json:"weekdays"`
|
||
|
Description string `json:"description"`
|
||
|
Command string `json:"command"`
|
||
|
Origin string `json:"origin"`
|
||
|
} `json:"rows"`
|
||
|
RowCount int `json:"rowCount"`
|
||
|
Total int `json:"total"`
|
||
|
Current int `json:"current"`
|
||
|
}
|
||
|
|
||
|
type CronStatus int
|
||
|
|
||
|
const (
|
||
|
CronStatusDisabled CronStatus = iota
|
||
|
CronStatusEnabled
|
||
|
)
|
||
|
|
||
|
type Cron struct {
|
||
|
UUID string
|
||
|
Status CronStatus
|
||
|
Schedule string
|
||
|
Description string
|
||
|
Command string
|
||
|
Origin string
|
||
|
}
|
||
|
|
||
|
type CronTable struct {
|
||
|
TotalEntries int
|
||
|
Cron []Cron
|
||
|
}
|
||
|
|
||
|
const fetchCronPayload = `{"current":1,"rowCount":-1,"sort":{},"searchPhrase":"","resolve":"no"}`
|
||
|
|
||
|
func (c *Client) FetchCronTable() (CronTable, *APICallError) {
|
||
|
var resp cronSearchResponse
|
||
|
var cronTable CronTable
|
||
|
|
||
|
path, ok := c.endpoints["cronJobs"]
|
||
|
if !ok {
|
||
|
return cronTable, &APICallError{
|
||
|
Endpoint: "cron",
|
||
|
Message: "endpoint not found",
|
||
|
StatusCode: 0,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if err := c.do("POST", path, strings.NewReader(fetchCronPayload), &resp); err != nil {
|
||
|
return cronTable, err
|
||
|
}
|
||
|
|
||
|
for _, cron := range resp.Rows {
|
||
|
cronTable.TotalEntries++
|
||
|
|
||
|
intStatus, err := parseStringToInt(cron.Enabled, path)
|
||
|
if err != nil {
|
||
|
level.Warn(c.log).
|
||
|
Log("msg", "unable to parse cron entry status", "err", err)
|
||
|
continue
|
||
|
}
|
||
|
|
||
|
cronTable.Cron = append(cronTable.Cron, Cron{
|
||
|
UUID: cron.UUID,
|
||
|
Status: CronStatus(intStatus),
|
||
|
Description: cron.Description,
|
||
|
Schedule: fmt.Sprintf("%s %s %s %s %s", cron.Minutes, cron.Hours, cron.Days, cron.Months, cron.Weekdays),
|
||
|
Command: cron.Command,
|
||
|
Origin: cron.Origin,
|
||
|
})
|
||
|
}
|
||
|
|
||
|
return cronTable, nil
|
||
|
}
|