mirror of
https://github.com/optim-enterprises-bv/vault.git
synced 2025-10-30 18:17:55 +00:00
Set default reporting start time to billing start date (#27379)
* Apply oss patch * Added changelog
This commit is contained in:
5
changelog/27379.txt
Normal file
5
changelog/27379.txt
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
```release-note:change
|
||||||
|
activity: The startTime will be set to the start of the current billing period by default.
|
||||||
|
The endTime will be set to the end of the current month. This applies to /sys/internal/counters/activity,
|
||||||
|
/sys/internal/counters/activity/export, and the vault operator usage command that utilizes /sys/internal/counters/activity.
|
||||||
|
```
|
||||||
@@ -56,7 +56,7 @@ func (c *OperatorUsageCommand) Flags() *FlagSets {
|
|||||||
|
|
||||||
f.TimeVar(&TimeVar{
|
f.TimeVar(&TimeVar{
|
||||||
Name: "start-time",
|
Name: "start-time",
|
||||||
Usage: "Start of report period. Defaults to 'default_reporting_period' before end time.",
|
Usage: "Start of report period. Defaults to billing start time",
|
||||||
Target: &c.flagStartTime,
|
Target: &c.flagStartTime,
|
||||||
Completion: complete.PredictNothing,
|
Completion: complete.PredictNothing,
|
||||||
Default: time.Time{},
|
Default: time.Time{},
|
||||||
@@ -64,7 +64,7 @@ func (c *OperatorUsageCommand) Flags() *FlagSets {
|
|||||||
})
|
})
|
||||||
f.TimeVar(&TimeVar{
|
f.TimeVar(&TimeVar{
|
||||||
Name: "end-time",
|
Name: "end-time",
|
||||||
Usage: "End of report period. Defaults to end of last month.",
|
Usage: "End of report period. Defaults to end of the current month.",
|
||||||
Target: &c.flagEndTime,
|
Target: &c.flagEndTime,
|
||||||
Completion: complete.PredictNothing,
|
Completion: complete.PredictNothing,
|
||||||
Default: time.Time{},
|
Default: time.Time{},
|
||||||
|
|||||||
48
vault/external_tests/activity/activity_util.go
Normal file
48
vault/external_tests/activity/activity_util.go
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
// Copyright (c) HashiCorp, Inc.
|
||||||
|
// SPDX-License-Identifier: MPL-2.0
|
||||||
|
|
||||||
|
package activity
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/hashicorp/vault/api"
|
||||||
|
"github.com/hashicorp/vault/vault"
|
||||||
|
"github.com/mitchellh/mapstructure"
|
||||||
|
)
|
||||||
|
|
||||||
|
type QueryResponse struct {
|
||||||
|
StartTime string `json:"start_time" mapstructure:"start_time"`
|
||||||
|
EndTime string `json:"end_time" mapstructure:"end_time"`
|
||||||
|
ByNamespace []*vault.ResponseNamespace `json:"by_namespace"`
|
||||||
|
Total *vault.ResponseCounts `json:"total"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func expectEndTime(t *testing.T, expected time.Time, resp *api.Secret) {
|
||||||
|
t.Helper()
|
||||||
|
|
||||||
|
qr := QueryResponse{}
|
||||||
|
mapstructure.Decode(resp.Data, &qr)
|
||||||
|
parsedTime, err := time.Parse(time.RFC3339, qr.EndTime)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
if !expected.Equal(parsedTime) {
|
||||||
|
t.Errorf("wrong end time, expected %v actual %v", expected, parsedTime)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func expectStartTime(t *testing.T, expected time.Time, resp *api.Secret) {
|
||||||
|
t.Helper()
|
||||||
|
|
||||||
|
var qr QueryResponse
|
||||||
|
mapstructure.Decode(resp.Data, &qr)
|
||||||
|
parsedTime, err := time.Parse(time.RFC3339, qr.StartTime)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
if !expected.Equal(parsedTime) {
|
||||||
|
t.Errorf("wrong start time, expected %v actual %v", expected, parsedTime)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -13,7 +13,6 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/hashicorp/go-secure-stdlib/parseutil"
|
"github.com/hashicorp/go-secure-stdlib/parseutil"
|
||||||
"github.com/hashicorp/vault/helper/timeutil"
|
|
||||||
"github.com/hashicorp/vault/sdk/framework"
|
"github.com/hashicorp/vault/sdk/framework"
|
||||||
"github.com/hashicorp/vault/sdk/logical"
|
"github.com/hashicorp/vault/sdk/logical"
|
||||||
)
|
)
|
||||||
@@ -182,23 +181,25 @@ func (b *SystemBackend) rootActivityPaths() []*framework.Path {
|
|||||||
return paths
|
return paths
|
||||||
}
|
}
|
||||||
|
|
||||||
func parseStartEndTimes(a *ActivityLog, d *framework.FieldData) (time.Time, time.Time, error) {
|
func parseStartEndTimes(a *ActivityLog, d *framework.FieldData, billingStartTime time.Time) (time.Time, time.Time, error) {
|
||||||
startTime := d.Get("start_time").(time.Time)
|
startTime := d.Get("start_time").(time.Time)
|
||||||
endTime := d.Get("end_time").(time.Time)
|
endTime := d.Get("end_time").(time.Time)
|
||||||
|
|
||||||
// If a specific endTime is used, then respect that
|
// If a specific endTime is used, then respect that
|
||||||
// otherwise we want to give the latest N months, so go back to the start
|
// otherwise we want to query up until the end of the current month.
|
||||||
// of the previous month
|
|
||||||
//
|
//
|
||||||
// Also convert any user inputs to UTC to avoid
|
// Also convert any user inputs to UTC to avoid
|
||||||
// problems later.
|
// problems later.
|
||||||
if endTime.IsZero() {
|
if endTime.IsZero() {
|
||||||
endTime = timeutil.EndOfMonth(timeutil.StartOfPreviousMonth(time.Now().UTC()))
|
endTime = time.Now().UTC()
|
||||||
} else {
|
} else {
|
||||||
endTime = endTime.UTC()
|
endTime = endTime.UTC()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If startTime is not specified, we would like to query
|
||||||
|
// from the beginning of the billing period
|
||||||
if startTime.IsZero() {
|
if startTime.IsZero() {
|
||||||
startTime = a.DefaultStartTime(endTime)
|
startTime = billingStartTime
|
||||||
} else {
|
} else {
|
||||||
startTime = startTime.UTC()
|
startTime = startTime.UTC()
|
||||||
}
|
}
|
||||||
@@ -218,7 +219,7 @@ func (b *SystemBackend) handleClientExport(ctx context.Context, req *logical.Req
|
|||||||
return logical.ErrorResponse("no activity log present"), nil
|
return logical.ErrorResponse("no activity log present"), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
startTime, endTime, err := parseStartEndTimes(a, d)
|
startTime, endTime, err := parseStartEndTimes(a, d, b.Core.BillingStart())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return logical.ErrorResponse(err.Error()), nil
|
return logical.ErrorResponse(err.Error()), nil
|
||||||
}
|
}
|
||||||
@@ -257,7 +258,7 @@ func (b *SystemBackend) handleClientMetricQuery(ctx context.Context, req *logica
|
|||||||
endTime = time.Now().UTC()
|
endTime = time.Now().UTC()
|
||||||
} else {
|
} else {
|
||||||
var err error
|
var err error
|
||||||
startTime, endTime, err = parseStartEndTimes(a, d)
|
startTime, endTime, err = parseStartEndTimes(a, d, b.Core.BillingStart())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return logical.ErrorResponse(err.Error()), nil
|
return logical.ErrorResponse(err.Error()), nil
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user