diff --git a/api/events.go b/api/events.go new file mode 100644 index 0000000..e730e43 --- /dev/null +++ b/api/events.go @@ -0,0 +1,8 @@ +package api + +import "github.com/maas/gomaasclient/entity" + +// Events is an interface for node events +type Events interface { + Get(params *entity.EventParams) (*entity.EventResp, error) +} diff --git a/client/client.go b/client/client.go index 02e5d3d..b1e62b3 100644 --- a/client/client.go +++ b/client/client.go @@ -40,6 +40,7 @@ func constructClient(apiClient *APIClient) *Client { DNSResources: &DNSResources{APIClient: *apiClient}, DNSResourceRecord: &DNSResourceRecord{APIClient: *apiClient}, DNSResourceRecords: &DNSResourceRecords{APIClient: *apiClient}, + Events: &Events{APIClient: *apiClient}, Fabric: &Fabric{APIClient: *apiClient}, Fabrics: &Fabrics{APIClient: *apiClient}, VLAN: &VLAN{APIClient: *apiClient}, @@ -105,6 +106,7 @@ type Client struct { DNSResourceRecords api.DNSResourceRecords Domain api.Domain Domains api.Domains + Events api.Events Fabric api.Fabric Fabrics api.Fabrics VLAN api.VLAN diff --git a/client/events.go b/client/events.go new file mode 100644 index 0000000..9871be9 --- /dev/null +++ b/client/events.go @@ -0,0 +1,32 @@ +package client + +import ( + "encoding/json" + + "github.com/google/go-querystring/query" + "github.com/maas/gomaasclient/entity" +) + +// Events implements api.Events +type Events struct { + APIClient APIClient +} + +func (e *Events) client() APIClient { + return e.APIClient.GetSubObject("events") +} + +// Get events for nodes +func (e *Events) Get(params *entity.EventParams) (*entity.EventResp, error) { + qsp, err := query.Values(params) + if err != nil { + return nil, err + } + + events := &entity.EventResp{} + err = e.client().Get("query", qsp, func(data []byte) error { + return json.Unmarshal(data, events) + }) + + return events, err +} diff --git a/entity/event/event.go b/entity/event/event.go new file mode 100644 index 0000000..44e1b36 --- /dev/null +++ b/entity/event/event.go @@ -0,0 +1,2 @@ +// Package event contains entities related to events. +package event diff --git a/entity/event/types.go b/entity/event/types.go new file mode 100644 index 0000000..8b742f0 --- /dev/null +++ b/entity/event/types.go @@ -0,0 +1,13 @@ +package event + +// LogLevel correlates to a log level for MAAS events. +type LogLevel string + +const ( + AUDIT LogLevel = "AUDIT" + CRITICAL LogLevel = "CRITICAL" + DEBUG LogLevel = "DEBUG" + ERROR LogLevel = "ERROR" + WARNING LogLevel = "WARNING" + INFO LogLevel = "INFO" +) diff --git a/entity/events.go b/entity/events.go new file mode 100644 index 0000000..b61b79b --- /dev/null +++ b/entity/events.go @@ -0,0 +1,35 @@ +package entity + +import "github.com/maas/gomaasclient/entity/event" + +// Event represent an event for MAAS node +type Event struct { + UserName string `json:"username,omitempty"` + Node string `json:"node,omitempty"` + Hostname string `json:"hostname,omitempty"` + Created string `json:"created,omitempty"` + Type string `json:"type,omitempty"` + Description string `json:"description,omitempty"` + Level string `json:"level,omitempty"` + ID int `json:"id,omitempty"` +} + +// EventResp represents the MAAS Events endpoint +type EventResp struct { + Count int `json:"count,omitempty"` + Events []Event `json:"events,omitempty"` +} + +// EventParams enumerates the parameters for the event get operation +type EventParams struct { + Hostname string `url:"hostname,omitempty"` + MACAddress string `url:"mac_address,omitempty"` + ID string `url:"id,omitempty"` + Zone string `url:"zone,omitempty"` + AgentName string `url:"agent_name,omitempty"` + Limit string `url:"limit,omitempty"` + Before string `url:"before,omitempty"` + After string `url:"after,omitempty"` + Owner string `url:"owner,omitempty"` + Level event.LogLevel `url:"level,omitempty"` +}