Documentation
¶
Index ¶
- Constants
- type AlreadyExistsError
- type Connector
- type CreateEntitlementInputs
- type CreateEntitlementRepoInputs
- type Entitlement
- type EntitlementCreatedEvent
- type EntitlementDeletedEvent
- type EntitlementRepo
- type EntitlementType
- type EntitlementValue
- type GenericProperties
- type InvalidFeatureError
- type InvalidValueError
- type ListEntitlementsOrderBy
- type ListEntitlementsParams
- type MeasureUsageFromEnum
- type MeasureUsageFromInput
- type NotFoundError
- type SubTypeConnector
- type TypedEntitlement
- type UpdateEntitlementUsagePeriodParams
- type UsagePeriod
- type WrongTypeError
Constants ¶
View Source
const (
EventSubsystem metadata.EventSubsystem = "entitlement"
)
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type AlreadyExistsError ¶
func (*AlreadyExistsError) Error ¶
func (e *AlreadyExistsError) Error() string
type Connector ¶
type Connector interface {
CreateEntitlement(ctx context.Context, input CreateEntitlementInputs) (*Entitlement, error)
OverrideEntitlement(ctx context.Context, subject string, entitlementIdOrFeatureKey string, input CreateEntitlementInputs) (*Entitlement, error)
GetEntitlement(ctx context.Context, namespace string, id string) (*Entitlement, error)
DeleteEntitlement(ctx context.Context, namespace string, id string) error
GetEntitlementValue(ctx context.Context, namespace string, subjectKey string, idOrFeatureKey string, at time.Time) (EntitlementValue, error)
GetEntitlementsOfSubject(ctx context.Context, namespace string, subjectKey models.SubjectKey) ([]Entitlement, error)
ListEntitlements(ctx context.Context, params ListEntitlementsParams) (pagination.PagedResponse[Entitlement], error)
}
func NewEntitlementConnector ¶
func NewEntitlementConnector( entitlementRepo EntitlementRepo, featureConnector productcatalog.FeatureConnector, meterRepo meter.Repository, meteredEntitlementConnector SubTypeConnector, staticEntitlementConnector SubTypeConnector, booleanEntitlementConnector SubTypeConnector, publisher eventbus.Publisher, ) Connector
type CreateEntitlementInputs ¶
type CreateEntitlementInputs struct {
Namespace string `json:"namespace"`
FeatureID *string `json:"featureId"`
FeatureKey *string `json:"featureKey"`
SubjectKey string `json:"subjectKey"`
EntitlementType EntitlementType `json:"type"`
Metadata map[string]string `json:"metadata,omitempty"`
MeasureUsageFrom *MeasureUsageFromInput `json:"measureUsageFrom,omitempty"`
IssueAfterReset *float64 `json:"issueAfterReset,omitempty"`
IssueAfterResetPriority *uint8 `json:"issueAfterResetPriority,omitempty"`
IsSoftLimit *bool `json:"isSoftLimit,omitempty"`
Config []byte `json:"config,omitempty"`
UsagePeriod *UsagePeriod `json:"usagePeriod,omitempty"`
PreserveOverageAtReset *bool `json:"preserveOverageAtReset,omitempty"`
}
func (CreateEntitlementInputs) GetType ¶
func (c CreateEntitlementInputs) GetType() EntitlementType
type CreateEntitlementRepoInputs ¶
type CreateEntitlementRepoInputs struct {
Namespace string `json:"namespace"`
FeatureID string `json:"featureId"`
FeatureKey string `json:"featureKey"`
SubjectKey string `json:"subjectKey"`
EntitlementType EntitlementType `json:"type"`
Metadata map[string]string `json:"metadata,omitempty"`
MeasureUsageFrom *time.Time `json:"measureUsageFrom,omitempty"`
IssueAfterReset *float64 `json:"issueAfterReset,omitempty"`
IssueAfterResetPriority *uint8 `json:"issueAfterResetPriority,omitempty"`
IsSoftLimit *bool `json:"isSoftLimit,omitempty"`
Config []byte `json:"config,omitempty"`
UsagePeriod *UsagePeriod `json:"usagePeriod,omitempty"`
CurrentUsagePeriod *recurrence.Period `json:"currentUsagePeriod,omitempty"`
PreserveOverageAtReset *bool `json:"preserveOverageAtReset,omitempty"`
}
type Entitlement ¶
type Entitlement struct {
GenericProperties
// All none-core fields are optional
// metered
MeasureUsageFrom *time.Time `json:"measureUsageFrom,omitempty"`
IssueAfterReset *float64 `json:"issueAfterReset,omitempty"`
IssueAfterResetPriority *uint8 `json:"issueAfterResetPriority,omitempty"`
IsSoftLimit *bool `json:"isSoftLimit,omitempty"`
LastReset *time.Time `json:"lastReset,omitempty"`
PreserveOverageAtReset *bool `json:"preserveOverageAtReset,omitempty"`
// static
Config []byte `json:"config,omitempty"`
}
Normalized representation of an entitlement in the system
func (Entitlement) GetType ¶
func (e Entitlement) GetType() EntitlementType
type EntitlementCreatedEvent ¶
type EntitlementCreatedEvent entitlementEvent
func (EntitlementCreatedEvent) EventMetadata ¶
func (e EntitlementCreatedEvent) EventMetadata() metadata.EventMetadata
func (EntitlementCreatedEvent) EventName ¶
func (e EntitlementCreatedEvent) EventName() string
func (EntitlementCreatedEvent) Validate ¶
func (e EntitlementCreatedEvent) Validate() error
type EntitlementDeletedEvent ¶
type EntitlementDeletedEvent entitlementEvent
func (EntitlementDeletedEvent) EventMetadata ¶
func (e EntitlementDeletedEvent) EventMetadata() metadata.EventMetadata
func (EntitlementDeletedEvent) EventName ¶
func (e EntitlementDeletedEvent) EventName() string
func (EntitlementDeletedEvent) Validate ¶
func (e EntitlementDeletedEvent) Validate() error
type EntitlementRepo ¶
type EntitlementRepo interface {
// Entitlement Management
GetEntitlementsOfSubject(ctx context.Context, namespace string, subjectKey models.SubjectKey) ([]Entitlement, error)
CreateEntitlement(ctx context.Context, entitlement CreateEntitlementRepoInputs) (*Entitlement, error)
GetEntitlement(ctx context.Context, entitlementID models.NamespacedID) (*Entitlement, error)
GetEntitlementOfSubject(ctx context.Context, namespace string, subjectKey string, idOrFeatureKey string) (*Entitlement, error)
DeleteEntitlement(ctx context.Context, entitlementID models.NamespacedID) error
ListEntitlements(ctx context.Context, params ListEntitlementsParams) (pagination.PagedResponse[Entitlement], error)
ListNamespacesWithActiveEntitlements(ctx context.Context, includeDeletedAfter time.Time) ([]string, error)
HasEntitlementForMeter(ctx context.Context, namespace string, meterSlug string) (bool, error)
// FIXME: This is a terrbile hack
LockEntitlementForTx(ctx context.Context, entitlementID models.NamespacedID) error
UpdateEntitlementUsagePeriod(ctx context.Context, entitlementID models.NamespacedID, params UpdateEntitlementUsagePeriodParams) error
ListEntitlementsWithExpiredUsagePeriod(ctx context.Context, namespaces []string, highwatermark time.Time) ([]Entitlement, error)
entutils.TxCreator
entutils.TxUser[EntitlementRepo]
}
type EntitlementType ¶
type EntitlementType string
const ( // EntitlementTypeMetered represents entitlements where access is determined by usage and balance calculations EntitlementTypeMetered EntitlementType = "metered" // EntitlementTypeStatic represents entitlements where access is described by a static configuration EntitlementTypeStatic EntitlementType = "static" // EntitlementTypeBoolean represents boolean access EntitlementTypeBoolean EntitlementType = "boolean" )
func (EntitlementType) StrValues ¶
func (e EntitlementType) StrValues() []string
func (EntitlementType) String ¶
func (e EntitlementType) String() string
func (EntitlementType) Values ¶
func (e EntitlementType) Values() []EntitlementType
type EntitlementValue ¶
type EntitlementValue interface {
HasAccess() bool
}
type GenericProperties ¶
type GenericProperties struct {
models.NamespacedModel
models.ManagedModel
Metadata map[string]string `json:"metadata,omitempty"`
ID string `json:"id,omitempty"`
FeatureID string `json:"featureId,omitempty"`
FeatureKey string `json:"featureKey,omitempty"`
SubjectKey string `json:"subjectKey,omitempty"`
EntitlementType EntitlementType `json:"type,omitempty"`
UsagePeriod *UsagePeriod `json:"usagePeriod,omitempty"`
CurrentUsagePeriod *recurrence.Period `json:"currentUsagePeriod,omitempty"`
}
GenericProperties is the core fields of an entitlement that are always applicable regadless of type
type InvalidFeatureError ¶
func (*InvalidFeatureError) Error ¶
func (e *InvalidFeatureError) Error() string
type InvalidValueError ¶
type InvalidValueError struct {
Message string
Type EntitlementType
}
func (*InvalidValueError) Error ¶
func (e *InvalidValueError) Error() string
type ListEntitlementsOrderBy ¶
type ListEntitlementsOrderBy string
const ( ListEntitlementsOrderByCreatedAt ListEntitlementsOrderBy = "created_at" ListEntitlementsOrderByUpdatedAt ListEntitlementsOrderBy = "updated_at" )
func (ListEntitlementsOrderBy) StrValues ¶
func (o ListEntitlementsOrderBy) StrValues() []string
func (ListEntitlementsOrderBy) Values ¶
func (o ListEntitlementsOrderBy) Values() []ListEntitlementsOrderBy
type ListEntitlementsParams ¶
type ListEntitlementsParams struct {
IDs []string
Namespaces []string
SubjectKeys []string
FeatureIDs []string
FeatureKeys []string
FeatureIDsOrKeys []string
EntitlementTypes []EntitlementType
OrderBy ListEntitlementsOrderBy
Order sortx.Order
IncludeDeleted bool
IncludeDeletedAfter time.Time
Page pagination.Page
// will be deprecated
Limit int
// will be deprecated
Offset int
}
type MeasureUsageFromEnum ¶
type MeasureUsageFromEnum string
const ( MeasureUsageFromCurrentPeriodStart MeasureUsageFromEnum = "CURRENT_PERIOD_START" MeasureUsageFromNow MeasureUsageFromEnum = "NOW" )
func (MeasureUsageFromEnum) Validate ¶
func (e MeasureUsageFromEnum) Validate() error
func (MeasureUsageFromEnum) Values ¶
func (e MeasureUsageFromEnum) Values() []MeasureUsageFromEnum
type MeasureUsageFromInput ¶
type MeasureUsageFromInput struct {
// contains filtered or unexported fields
}
func (*MeasureUsageFromInput) FromEnum ¶
func (m *MeasureUsageFromInput) FromEnum(e MeasureUsageFromEnum, p UsagePeriod, t time.Time) error
func (*MeasureUsageFromInput) FromTime ¶
func (m *MeasureUsageFromInput) FromTime(t time.Time) error
func (MeasureUsageFromInput) Get ¶
func (m MeasureUsageFromInput) Get() time.Time
type NotFoundError ¶
type NotFoundError struct {
EntitlementID models.NamespacedID
}
func (*NotFoundError) Error ¶
func (e *NotFoundError) Error() string
type SubTypeConnector ¶
type SubTypeConnector interface {
GetValue(entitlement *Entitlement, at time.Time) (EntitlementValue, error)
// Runs before creating the entitlement, building the Repository inputs.
// If it returns an error the operation has to fail.
BeforeCreate(entitlement CreateEntitlementInputs, feature productcatalog.Feature) (*CreateEntitlementRepoInputs, error)
// Runs after entitlement creation.
// If it returns an error the operation has to fail.
AfterCreate(ctx context.Context, entitlement *Entitlement) error
}
type TypedEntitlement ¶
type TypedEntitlement interface {
GetType() EntitlementType
}
type UpdateEntitlementUsagePeriodParams ¶
type UpdateEntitlementUsagePeriodParams struct {
NewAnchor *time.Time
CurrentUsagePeriod recurrence.Period
}
type UsagePeriod ¶
type UsagePeriod recurrence.Recurrence
func (UsagePeriod) GetCurrentPeriodAt ¶
func (u UsagePeriod) GetCurrentPeriodAt(at time.Time) (recurrence.Period, error)
The returned period is exclusive at the end end inclusive in the start
type WrongTypeError ¶
type WrongTypeError struct {
Expected EntitlementType
Actual EntitlementType
}
func (*WrongTypeError) Error ¶
func (e *WrongTypeError) Error() string
Source Files
¶
Click to show internal directories.
Click to hide internal directories.