Skip to content

Commit

Permalink
Merge pull request #888 from priyakvs/priya/AS-8430/update-history-ap…
Browse files Browse the repository at this point in the history
…i-to-accept-timestamp

AS-8430: Update history API to accept timestamp query params
  • Loading branch information
jacobbednarz committed May 18, 2022
2 parents 2d1358e + 7d7b436 commit 6afe6ec
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 15 deletions.
35 changes: 21 additions & 14 deletions notifications.go
Expand Up @@ -5,9 +5,9 @@ import (
"encoding/json"
"fmt"
"net/http"
"net/url"
"strconv"
"time"

"github.com/google/go-querystring/query"
)

// NotificationMechanismData holds a single public facing mechanism data
Expand Down Expand Up @@ -405,27 +405,34 @@ func (api *API) GetAvailableNotificationTypes(ctx context.Context, accountID str
return r, nil
}

// TimeRange is an object for filtering the alert history based on timestamp.
type TimeRange struct {
Since string `json:"since,omitempty" url:"since,omitempty"`
Before string `json:"before,omitempty" url:"before,omitempty"`
}

// AlertHistoryFilter is an object for filtering the alert history response from the api.
type AlertHistoryFilter struct {
TimeRange
PaginationOptions
}

// ListNotificationHistory will return the history of alerts sent for
// a given account. The time period varies based on zone plan.
// Free, Biz, Pro = 30 days
// Ent = 90 days
//
// API Reference: https://api.cloudflare.com/#notification-history-list-history
func (api *API) ListNotificationHistory(ctx context.Context, accountID string, pageOpts PaginationOptions) ([]NotificationHistory, ResultInfo, error) {
v := url.Values{}
if pageOpts.PerPage > 0 {
v.Set("per_page", strconv.Itoa(pageOpts.PerPage))
}
if pageOpts.Page > 0 {
v.Set("page", strconv.Itoa(pageOpts.Page))
}
func (api *API) ListNotificationHistory(ctx context.Context, accountID string, alertHistoryFilter AlertHistoryFilter) ([]NotificationHistory, ResultInfo, error) {
v, _ := query.Values(alertHistoryFilter)

baseURL := fmt.Sprintf("/accounts/%s/alerting/v3/history", accountID)
if len(v) > 0 {
baseURL = fmt.Sprintf("%s?%s", baseURL, v.Encode())
queryParams := v.Encode()
if queryParams != "" {
queryParams = "?" + queryParams
}

res, err := api.makeRequestContext(ctx, http.MethodGet, baseURL, nil)
baseURL := fmt.Sprintf("/accounts/%s/alerting/v3/history", accountID)
res, err := api.makeRequestContext(ctx, http.MethodGet, baseURL+queryParams, nil)
if err != nil {
return []NotificationHistory{}, ResultInfo{}, err
}
Expand Down
9 changes: 8 additions & 1 deletion notifications_test.go
Expand Up @@ -531,6 +531,13 @@ func TestListNotificationHistory(t *testing.T) {
Page: 1,
}

timeRange := TimeRange{
Since: time.Now().Add(-15 * time.Minute).Format(time.RFC3339),
Before: time.Now().Format(time.RFC3339),
}

historyFilters := AlertHistoryFilter{TimeRange: timeRange, PaginationOptions: pageOptions}

alertHistory, err := json.Marshal(expected)
require.NoError(t, err)
require.NotNil(t, alertHistory)
Expand Down Expand Up @@ -558,7 +565,7 @@ func TestListNotificationHistory(t *testing.T) {

mux.HandleFunc("/accounts/"+testAccountID+"/alerting/v3/history", handler)

actualResult, actualResultInfo, err := client.ListNotificationHistory(context.Background(), testAccountID, pageOptions)
actualResult, actualResultInfo, err := client.ListNotificationHistory(context.Background(), testAccountID, historyFilters)
require.Nil(t, err)
require.NotNil(t, actualResult)
require.Equal(t, expected, actualResult)
Expand Down

0 comments on commit 6afe6ec

Please sign in to comment.