dtclient

package
v2.13.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 4, 2024 License: Apache-2.0 Imports: 35 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var ErrSettingNotFound = errors.New("settings object not found")

ErrSettingNotFound is returned when no settings 2.0 object could be found

Functions

func WithAutoServerVersion

func WithAutoServerVersion() func(client *DynatraceClient)

WithAutoServerVersion can be used to let the client automatically determine the Dynatrace server version during creation using newDynatraceClient. If the server version is already known WithServerVersion should be used

func WithCachingDisabled added in v2.6.0

func WithCachingDisabled(disabled bool) func(client *DynatraceClient)

WithCachingDisabled allows disabling the client's builtin caching mechanism for classic configs, schema constraints and settings objects. Disabling the caching is recommended in situations where configs are fetched immediately after their creation (e.g. in test scenarios)

func WithClientRequestLimiter

func WithClientRequestLimiter(limiter *concurrency.Limiter) func(client *DynatraceClient)

WithClientRequestLimiter specifies that a specifies the limiter to be used for limiting parallel client requests

func WithCustomUserAgentString

func WithCustomUserAgentString(userAgent string) func(client *DynatraceClient)

WithCustomUserAgentString allows to configure a custom user-agent string that the Client will send with each HTTP request If none is set, the default Monaco CLI specific user-agent is sent.

func WithExternalIDGenerator

func WithExternalIDGenerator(g idutils.ExternalIDGenerator) func(client *DynatraceClient)

func WithRetrySettings

func WithRetrySettings(retrySettings rest.RetrySettings) func(*DynatraceClient)

WithRetrySettings sets the retry settings to be used by the DynatraceClient

func WithServerVersion

func WithServerVersion(serverVersion version.Version) func(client *DynatraceClient)

WithServerVersion sets the Dynatrace version of the Dynatrace server/tenant the client will be interacting with

Types

type Client

type Client interface {
	ConfigClient
	SettingsClient
}

Client provides the functionality for performing basic CRUD operations on any Dynatrace API supported by monaco. It encapsulates the configuration-specific inconsistencies of certain APIs in one place to provide a common interface to work with. After all: A user of Client shouldn't care about the implementation details of each individual Dynatrace API. Its design is intentionally not dependent on the Config and Environment interfaces included in monaco. This makes sure, that Client can be used as a base for future tooling, which relies on a standardized way to access Dynatrace APIs.

type ConfigClient

type ConfigClient interface {
	// ListConfigs lists the available configs for an API.
	// It calls the underlying GET endpoint of the API. E.g. for alerting profiles this would be:
	//    GET <environment-url>/api/config/v1/alertingProfiles
	// The result is expressed using a list of Value (id and name tuples).
	ListConfigs(ctx context.Context, a api.API) (values []Value, err error)

	// ReadConfigById reads a Dynatrace config identified by id from the given API.
	// It calls the underlying GET endpoint for the API. E.g. for alerting profiles this would be:
	//    GET <environment-url>/api/config/v1/alertingProfiles/<id> ... to get the alerting profile
	ReadConfigById(a api.API, id string) (json []byte, err error)

	// UpsertConfigByName creates a given Dynatrace config if it doesn't exist and updates it otherwise using its name.
	// It calls the underlying GET, POST, and PUT endpoints for the API. E.g. for alerting profiles this would be:
	//    GET <environment-url>/api/config/v1/alertingProfiles ... to check if the config is already available
	//    POST <environment-url>/api/config/v1/alertingProfiles ... afterwards, if the config is not yet available
	//    PUT <environment-url>/api/config/v1/alertingProfiles/<id> ... instead of POST, if the config is already available
	UpsertConfigByName(ctx context.Context, a api.API, name string, payload []byte) (entity DynatraceEntity, err error)

	// UpsertConfigByNonUniqueNameAndId creates a given Dynatrace config if it doesn't exist and updates it based on specific rules if it does not
	// - if only one config with the name exist, behave like any other type and just update this entity
	// - if an exact match is found (same name and same generated UUID) update that entity
	// - if several configs exist, but non match the generated UUID create a new entity with generated UUID
	// It calls the underlying GET and PUT endpoints for the API. E.g. for alerting profiles this would be:
	//	 GET <environment-url>/api/config/v1/alertingProfiles ... to check if the config is already available
	//	 PUT <environment-url>/api/config/v1/alertingProfiles/<id> ... with the given (or found by unique name) entity ID
	UpsertConfigByNonUniqueNameAndId(ctx context.Context, a api.API, entityID string, name string, payload []byte, duplicate bool) (entity DynatraceEntity, err error)

	// DeleteConfigById removes a given config for a given API using its id.
	// It calls the DELETE endpoint for the API. E.g. for alerting profiles this would be:
	//    DELETE <environment-url>/api/config/v1/alertingProfiles/<id> ... to delete the config
	DeleteConfigById(a api.API, id string) error

	// ConfigExistsByName checks if a config with the given name exists for the given API.
	// It calls the underlying GET endpoint for the API. E.g. for alerting profiles this would be:
	//    GET <environment-url>/api/config/v1/alertingProfiles
	ConfigExistsByName(ctx context.Context, a api.API, name string) (exists bool, id string, err error)
}

ConfigClient is responsible for the classic Dynatrace configs. For settings objects, the SettingsClient is responsible. Each config endpoint is described by an [API] object to describe endpoints, structure, and behavior.

type DataEntry

type DataEntry struct {
	Name    string
	Id      string
	Owner   string
	Payload []byte
}

type DownloadSettingsObject

type DownloadSettingsObject struct {
	ExternalId       string                    `json:"externalId"`
	SchemaVersion    string                    `json:"schemaVersion"`
	SchemaId         string                    `json:"schemaId"`
	ObjectId         string                    `json:"objectId"`
	Scope            string                    `json:"scope"`
	Value            json.RawMessage           `json:"value"`
	ModificationInfo *SettingsModificationInfo `json:"modificationInfo"`
}

DownloadSettingsObject is the response type for the ListSettings operation

type DummyClient

type DummyClient struct {
	Fs               afero.Fs
	RequestOutputDir string
	// contains filtered or unexported fields
}

func (*DummyClient) ConfigExistsByName

func (c *DummyClient) ConfigExistsByName(_ context.Context, a api.API, name string) (exists bool, id string, err error)

func (*DummyClient) CreatedObjects added in v2.6.0

func (c *DummyClient) CreatedObjects() int

func (*DummyClient) DeleteConfigById

func (c *DummyClient) DeleteConfigById(a api.API, id string) error

func (*DummyClient) DeleteSettings

func (c *DummyClient) DeleteSettings(_ string) error

func (*DummyClient) FetchSchemasConstraints added in v2.6.0

func (c *DummyClient) FetchSchemasConstraints(_ string) (constraints SchemaConstraints, err error)

func (*DummyClient) GetEntries added in v2.6.0

func (c *DummyClient) GetEntries(a api.API) ([]DataEntry, bool)

func (*DummyClient) GetSettingById

func (c *DummyClient) GetSettingById(_ string) (*DownloadSettingsObject, error)

func (*DummyClient) ListConfigs

func (c *DummyClient) ListConfigs(_ context.Context, a api.API) (values []Value, err error)

func (*DummyClient) ListSchemas

func (c *DummyClient) ListSchemas() (SchemaList, error)

func (*DummyClient) ListSettings

func (*DummyClient) ReadConfigById

func (c *DummyClient) ReadConfigById(a api.API, id string) ([]byte, error)

func (*DummyClient) UpsertConfigByName

func (c *DummyClient) UpsertConfigByName(_ context.Context, a api.API, name string, data []byte) (entity DynatraceEntity, err error)

func (*DummyClient) UpsertConfigByNonUniqueNameAndId

func (c *DummyClient) UpsertConfigByNonUniqueNameAndId(_ context.Context, a api.API, entityId string, name string, data []byte, _ bool) (entity DynatraceEntity, err error)

func (*DummyClient) UpsertSettings

type DynatraceClient

type DynatraceClient struct {
	// contains filtered or unexported fields
}

DynatraceClient is the default implementation of the HTTP client targeting the relevant Dynatrace APIs for Monaco

func NewClassicClient

func NewClassicClient(dtURL string, client *rest.Client, opts ...func(dynatraceClient *DynatraceClient)) (*DynatraceClient, error)

NewClassicClient creates a new dynatrace client to be used for classic environments

func NewPlatformClient

func NewPlatformClient(dtURL string, classicURL string, client *rest.Client, classicClient *rest.Client, opts ...func(dynatraceClient *DynatraceClient)) (*DynatraceClient, error)

NewPlatformClient creates a new dynatrace client to be used for platform enabled environments

func (*DynatraceClient) ConfigExistsByName

func (d *DynatraceClient) ConfigExistsByName(ctx context.Context, api api.API, name string) (exists bool, id string, err error)

func (*DynatraceClient) DeleteConfigById

func (d *DynatraceClient) DeleteConfigById(api api.API, id string) (err error)

func (*DynatraceClient) DeleteSettings

func (d *DynatraceClient) DeleteSettings(objectID string) (err error)

func (*DynatraceClient) FetchSchemasConstraints added in v2.6.0

func (d *DynatraceClient) FetchSchemasConstraints(schemaID string) (constraints SchemaConstraints, err error)

func (*DynatraceClient) GetSettingById

func (d *DynatraceClient) GetSettingById(objectId string) (res *DownloadSettingsObject, err error)

func (*DynatraceClient) ListConfigs

func (d *DynatraceClient) ListConfigs(ctx context.Context, api api.API) (values []Value, err error)

func (*DynatraceClient) ListSchemas

func (d *DynatraceClient) ListSchemas() (schemas SchemaList, err error)

func (*DynatraceClient) ListSettings

func (d *DynatraceClient) ListSettings(ctx context.Context, schemaId string, opts ListSettingsOptions) (res []DownloadSettingsObject, err error)

func (*DynatraceClient) ReadConfigById

func (d *DynatraceClient) ReadConfigById(api api.API, id string) (json []byte, err error)

func (*DynatraceClient) UpsertConfigByName

func (d *DynatraceClient) UpsertConfigByName(ctx context.Context, api api.API, name string, payload []byte) (entity DynatraceEntity, err error)

func (*DynatraceClient) UpsertConfigByNonUniqueNameAndId

func (d *DynatraceClient) UpsertConfigByNonUniqueNameAndId(ctx context.Context, api api.API, entityId string, name string, payload []byte, duplicate bool) (entity DynatraceEntity, err error)

func (*DynatraceClient) UpsertSettings

func (d *DynatraceClient) UpsertSettings(ctx context.Context, obj SettingsObject, options UpsertSettingsOptions) (result DynatraceEntity, err error)

type DynatraceEntity

type DynatraceEntity struct {
	Id          string `json:"id"`
	Name        string `json:"name"`
	Description string `json:"description"`
}

type KeyUserActionsMobileResponse added in v2.10.1

type KeyUserActionsMobileResponse struct {
	KeyUserActions []struct {
		Name string `json:"name"`
	} `json:"keyUserActions"`
}

type ListSettingsFilter

type ListSettingsFilter func(DownloadSettingsObject) bool

ListSettingsFilter can be used to filter fetched settings objects with custom criteria, e.g. o.ExternalId == ""

type ListSettingsOptions

type ListSettingsOptions struct {
	// DiscardValue specifies whether the value field of the returned
	// settings object shall be included in the payload
	DiscardValue bool
	// ListSettingsFilter can be set to pre-filter the result given a special logic
	Filter ListSettingsFilter
}

ListSettingsOptions are additional options for the ListSettings method of the Settings client

type Properties

type Properties struct {
	Version *string `json:"version"`
}

type SchemaConstraints added in v2.6.0

type SchemaConstraints struct {
	SchemaId         string
	UniqueProperties [][]string
}

type SchemaList

type SchemaList []struct {
	SchemaId string `json:"schemaId"`
}

type SchemaListResponse

type SchemaListResponse struct {
	Items      SchemaList `json:"items"`
	TotalCount int        `json:"totalCount"`
}

SchemaListResponse is the response type returned by the ListSchemas operation

type SettingsClient

type SettingsClient interface {
	// UpsertSettings either creates the supplied object, or updates an existing one.
	// First, we try to find the external-id of the object. If we can't find it, we create the object, if we find it, we
	// update the object.
	UpsertSettings(context.Context, SettingsObject, UpsertSettingsOptions) (DynatraceEntity, error)

	// ListSchemas returns all schemas that the Dynatrace environment reports
	ListSchemas() (SchemaList, error)

	FetchSchemasConstraints(schemaID string) (SchemaConstraints, error)

	// ListSettings returns all settings objects for a given schema.
	ListSettings(context.Context, string, ListSettingsOptions) ([]DownloadSettingsObject, error)

	// GetSettingById returns the setting with the given object ID
	GetSettingById(string) (*DownloadSettingsObject, error)

	// DeleteSettings deletes a settings object giving its object ID
	DeleteSettings(string) error
}

SettingsClient is the abstraction layer for CRUD operations on the Dynatrace Settings API. Its design is intentionally not dependent on Monaco objects.

This interface exclusively accesses the settings api of Dynatrace.

The base mechanism for all methods is the same: We identify objects to be updated/deleted by their external-id. If an object can not be found using its external-id, we assume that it does not exist. More documentation is written in each method's documentation.

type SettingsModificationInfo

type SettingsModificationInfo struct {
	Deletable          bool          `json:"deletable"`
	Modifiable         bool          `json:"modifiable"`
	Movable            bool          `json:"movable"`
	ModifiablePaths    []interface{} `json:"modifiablePaths"`
	NonModifiablePaths []interface{} `json:"nonModifiablePaths"`
}

type SettingsObject

type SettingsObject struct {
	// Coordinate holds all the information for Monaco to identify a settings object
	Coordinate coordinate.Coordinate
	// SchemaId is the Dynatrace settings schema ID
	SchemaId,

	SchemaVersion,

	Scope string
	// Content is the rendered config for the given settings object
	Content []byte
	// OriginObjectId is the object id of the Settings object when it was downloaded from an environment
	OriginObjectId string
}

SettingsObject contains all the information necessary to create/update a settings object

type SyntheticEntity

type SyntheticEntity struct {
	EntityId string `json:"entityId"`
}

type SyntheticLocationResponse

type SyntheticLocationResponse struct {
	Locations []SyntheticValue `json:"locations"`
}

type SyntheticMonitorsResponse

type SyntheticMonitorsResponse struct {
	Monitors []SyntheticValue `json:"monitors"`
}

type SyntheticValue

type SyntheticValue struct {
	Name          string    `json:"name"`
	EntityId      string    `json:"entityId"`
	Type          string    `json:"type"`
	CloudPlatform *string   `json:"cloudPlatform"`
	Ips           *[]string `json:"ips"`
	Stage         *string   `json:"stage"`
	Enabled       *bool     `json:"enabled"`
}

type UpsertSettingsOptions added in v2.8.1

type UpsertSettingsOptions struct {
	OverrideRetry *rest.RetrySetting
}

type UserActionAndSessionPropertyEntry added in v2.11.0

type UserActionAndSessionPropertyEntry struct {
	Key         string `json:"key"`
	DisplayName string `json:"displayName"`
}

type UserActionAndSessionPropertyResponse added in v2.11.0

type UserActionAndSessionPropertyResponse struct {
	SessionProperties    []UserActionAndSessionPropertyEntry `json:"sessionProperties"`
	UserActionProperties []UserActionAndSessionPropertyEntry `json:"userActionProperties"`
}

type Value

type Value struct {
	Id   string `json:"id"`
	Name string `json:"name"`

	// Owner is used by dashboards to indicate the creator of the dashboard. We use it to filter Dynatrace created dashboards.
	Owner *string `json:"owner,omitempty"`

	// Type is used by synthetic-locations to indicate whether it is a PRIVATE location or not.
	Type *string `json:"type,omitempty"`

	// CustomFields holds additional fields. Note that this is not set automatically but would need to be populated
	// when unmarshalling the payload
	CustomFields map[string]any `json:"-"`
}

type ValuesResponse

type ValuesResponse struct {
	Values []Value `json:"values"`
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL