package wavefront

import (
	"context"
	"reflect"

	"github.com/pkg/errors"
	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)

type DerivedMetric struct {
	pulumi.CustomResourceState

	AdditionalInformation pulumi.StringPtrOutput `pulumi:"additionalInformation"`

	Minutes pulumi.IntOutput `pulumi:"minutes"`

	Name pulumi.StringOutput `pulumi:"name"`

	Query pulumi.StringOutput `pulumi:"query"`

	Tags pulumi.StringArrayOutput `pulumi:"tags"`
}

func NewDerivedMetric(ctx *pulumi.Context,
	name string, args *DerivedMetricArgs, opts ...pulumi.ResourceOption) (*DerivedMetric, error) {
	if args == nil {
		return nil, errors.New("missing one or more required arguments")
	}

	if args.Minutes == nil {
		return nil, errors.New("invalid value for required argument 'Minutes'")
	}
	if args.Query == nil {
		return nil, errors.New("invalid value for required argument 'Query'")
	}
	var resource DerivedMetric
	err := ctx.RegisterResource("wavefront:index/derivedMetric:DerivedMetric", name, args, &resource, opts...)
	if err != nil {
		return nil, err
	}
	return &resource, nil
}

func GetDerivedMetric(ctx *pulumi.Context,
	name string, id pulumi.IDInput, state *DerivedMetricState, opts ...pulumi.ResourceOption) (*DerivedMetric, error) {
	var resource DerivedMetric
	err := ctx.ReadResource("wavefront:index/derivedMetric:DerivedMetric", name, id, state, &resource, opts...)
	if err != nil {
		return nil, err
	}
	return &resource, nil
}

type derivedMetricState struct {

	AdditionalInformation *string `pulumi:"additionalInformation"`

	Minutes *int `pulumi:"minutes"`

	Name *string `pulumi:"name"`

	Query *string `pulumi:"query"`

	Tags []string `pulumi:"tags"`
}

type DerivedMetricState struct {

	AdditionalInformation pulumi.StringPtrInput

	Minutes pulumi.IntPtrInput

	Name pulumi.StringPtrInput

	Query pulumi.StringPtrInput

	Tags pulumi.StringArrayInput
}

func (DerivedMetricState) ElementType() reflect.Type {
	return reflect.TypeOf((*derivedMetricState)(nil)).Elem()
}

type derivedMetricArgs struct {

	AdditionalInformation *string `pulumi:"additionalInformation"`

	Minutes int `pulumi:"minutes"`

	Name *string `pulumi:"name"`

	Query string `pulumi:"query"`

	Tags []string `pulumi:"tags"`
}

type DerivedMetricArgs struct {

	AdditionalInformation pulumi.StringPtrInput

	Minutes pulumi.IntInput

	Name pulumi.StringPtrInput

	Query pulumi.StringInput

	Tags pulumi.StringArrayInput
}

func (DerivedMetricArgs) ElementType() reflect.Type {
	return reflect.TypeOf((*derivedMetricArgs)(nil)).Elem()
}

type DerivedMetricInput interface {
	pulumi.Input

	ToDerivedMetricOutput() DerivedMetricOutput
	ToDerivedMetricOutputWithContext(ctx context.Context) DerivedMetricOutput
}

func (*DerivedMetric) ElementType() reflect.Type {
	return reflect.TypeOf((*DerivedMetric)(nil))
}

func (i *DerivedMetric) ToDerivedMetricOutput() DerivedMetricOutput {
	return i.ToDerivedMetricOutputWithContext(context.Background())
}

func (i *DerivedMetric) ToDerivedMetricOutputWithContext(ctx context.Context) DerivedMetricOutput {
	return pulumi.ToOutputWithContext(ctx, i).(DerivedMetricOutput)
}

func (i *DerivedMetric) ToDerivedMetricPtrOutput() DerivedMetricPtrOutput {
	return i.ToDerivedMetricPtrOutputWithContext(context.Background())
}

func (i *DerivedMetric) ToDerivedMetricPtrOutputWithContext(ctx context.Context) DerivedMetricPtrOutput {
	return pulumi.ToOutputWithContext(ctx, i).(DerivedMetricPtrOutput)
}

type DerivedMetricPtrInput interface {
	pulumi.Input

	ToDerivedMetricPtrOutput() DerivedMetricPtrOutput
	ToDerivedMetricPtrOutputWithContext(ctx context.Context) DerivedMetricPtrOutput
}

type derivedMetricPtrType DerivedMetricArgs

func (*derivedMetricPtrType) ElementType() reflect.Type {
	return reflect.TypeOf((**DerivedMetric)(nil))
}

func (i *derivedMetricPtrType) ToDerivedMetricPtrOutput() DerivedMetricPtrOutput {
	return i.ToDerivedMetricPtrOutputWithContext(context.Background())
}

func (i *derivedMetricPtrType) ToDerivedMetricPtrOutputWithContext(ctx context.Context) DerivedMetricPtrOutput {
	return pulumi.ToOutputWithContext(ctx, i).(DerivedMetricPtrOutput)
}

type DerivedMetricArrayInput interface {
	pulumi.Input

	ToDerivedMetricArrayOutput() DerivedMetricArrayOutput
	ToDerivedMetricArrayOutputWithContext(context.Context) DerivedMetricArrayOutput
}

type DerivedMetricArray []DerivedMetricInput

func (DerivedMetricArray) ElementType() reflect.Type {
	return reflect.TypeOf((*[]*DerivedMetric)(nil)).Elem()
}

func (i DerivedMetricArray) ToDerivedMetricArrayOutput() DerivedMetricArrayOutput {
	return i.ToDerivedMetricArrayOutputWithContext(context.Background())
}

func (i DerivedMetricArray) ToDerivedMetricArrayOutputWithContext(ctx context.Context) DerivedMetricArrayOutput {
	return pulumi.ToOutputWithContext(ctx, i).(DerivedMetricArrayOutput)
}

type DerivedMetricMapInput interface {
	pulumi.Input

	ToDerivedMetricMapOutput() DerivedMetricMapOutput
	ToDerivedMetricMapOutputWithContext(context.Context) DerivedMetricMapOutput
}

type DerivedMetricMap map[string]DerivedMetricInput

func (DerivedMetricMap) ElementType() reflect.Type {
	return reflect.TypeOf((*map[string]*DerivedMetric)(nil)).Elem()
}

func (i DerivedMetricMap) ToDerivedMetricMapOutput() DerivedMetricMapOutput {
	return i.ToDerivedMetricMapOutputWithContext(context.Background())
}

func (i DerivedMetricMap) ToDerivedMetricMapOutputWithContext(ctx context.Context) DerivedMetricMapOutput {
	return pulumi.ToOutputWithContext(ctx, i).(DerivedMetricMapOutput)
}

type DerivedMetricOutput struct{ *pulumi.OutputState }

func (DerivedMetricOutput) ElementType() reflect.Type {
	return reflect.TypeOf((*DerivedMetric)(nil))
}

func (o DerivedMetricOutput) ToDerivedMetricOutput() DerivedMetricOutput {
	return o
}

func (o DerivedMetricOutput) ToDerivedMetricOutputWithContext(ctx context.Context) DerivedMetricOutput {
	return o
}

func (o DerivedMetricOutput) ToDerivedMetricPtrOutput() DerivedMetricPtrOutput {
	return o.ToDerivedMetricPtrOutputWithContext(context.Background())
}

func (o DerivedMetricOutput) ToDerivedMetricPtrOutputWithContext(ctx context.Context) DerivedMetricPtrOutput {
	return o.ApplyTWithContext(ctx, func(_ context.Context, v DerivedMetric) *DerivedMetric {
		return &v
	}).(DerivedMetricPtrOutput)
}

type DerivedMetricPtrOutput struct{ *pulumi.OutputState }

func (DerivedMetricPtrOutput) ElementType() reflect.Type {
	return reflect.TypeOf((**DerivedMetric)(nil))
}

func (o DerivedMetricPtrOutput) ToDerivedMetricPtrOutput() DerivedMetricPtrOutput {
	return o
}

func (o DerivedMetricPtrOutput) ToDerivedMetricPtrOutputWithContext(ctx context.Context) DerivedMetricPtrOutput {
	return o
}

func (o DerivedMetricPtrOutput) Elem() DerivedMetricOutput {
	return o.ApplyT(func(v *DerivedMetric) DerivedMetric {
		if v != nil {
			return *v
		}
		var ret DerivedMetric
		return ret
	}).(DerivedMetricOutput)
}

type DerivedMetricArrayOutput struct{ *pulumi.OutputState }

func (DerivedMetricArrayOutput) ElementType() reflect.Type {
	return reflect.TypeOf((*[]DerivedMetric)(nil))
}

func (o DerivedMetricArrayOutput) ToDerivedMetricArrayOutput() DerivedMetricArrayOutput {
	return o
}

func (o DerivedMetricArrayOutput) ToDerivedMetricArrayOutputWithContext(ctx context.Context) DerivedMetricArrayOutput {
	return o
}

func (o DerivedMetricArrayOutput) Index(i pulumi.IntInput) DerivedMetricOutput {
	return pulumi.All(o, i).ApplyT(func(vs []interface{}) DerivedMetric {
		return vs[0].([]DerivedMetric)[vs[1].(int)]
	}).(DerivedMetricOutput)
}

type DerivedMetricMapOutput struct{ *pulumi.OutputState }

func (DerivedMetricMapOutput) ElementType() reflect.Type {
	return reflect.TypeOf((*map[string]DerivedMetric)(nil))
}

func (o DerivedMetricMapOutput) ToDerivedMetricMapOutput() DerivedMetricMapOutput {
	return o
}

func (o DerivedMetricMapOutput) ToDerivedMetricMapOutputWithContext(ctx context.Context) DerivedMetricMapOutput {
	return o
}

func (o DerivedMetricMapOutput) MapIndex(k pulumi.StringInput) DerivedMetricOutput {
	return pulumi.All(o, k).ApplyT(func(vs []interface{}) DerivedMetric {
		return vs[0].(map[string]DerivedMetric)[vs[1].(string)]
	}).(DerivedMetricOutput)
}

func init() {
	pulumi.RegisterInputType(reflect.TypeOf((*DerivedMetricInput)(nil)).Elem(), &DerivedMetric{})
	pulumi.RegisterInputType(reflect.TypeOf((*DerivedMetricPtrInput)(nil)).Elem(), &DerivedMetric{})
	pulumi.RegisterInputType(reflect.TypeOf((*DerivedMetricArrayInput)(nil)).Elem(), DerivedMetricArray{})
	pulumi.RegisterInputType(reflect.TypeOf((*DerivedMetricMapInput)(nil)).Elem(), DerivedMetricMap{})
	pulumi.RegisterOutputType(DerivedMetricOutput{})
	pulumi.RegisterOutputType(DerivedMetricPtrOutput{})
	pulumi.RegisterOutputType(DerivedMetricArrayOutput{})
	pulumi.RegisterOutputType(DerivedMetricMapOutput{})
}
// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***

package wavefront

import (
	"context"
	"reflect"

	"github.com/pkg/errors"
	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)

// Provides a Wavefront Derived Metric Resource. This allows derived metrics to be created,
// updated, and deleted.
//
// ## Example Usage
//
// ```go
// package main
//
// import (
// 	"github.com/pulumi/pulumi-wavefront/sdk/go/wavefront"
// 	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
// )
//
// func main() {
// 	pulumi.Run(func(ctx *pulumi.Context) error {
// 		_, err := wavefront.NewDerivedMetric(ctx, "derived", &wavefront.DerivedMetricArgs{
// 			Minutes: pulumi.Int(5),
// 			Query:   pulumi.String("aliasMetric(5, \"some.metric\")"),
// 		})
// 		if err != nil {
// 			return err
// 		}
// 		return nil
// 	})
// }
// ```
//
// ## Import
//
// Derived Metrics can be imported using the `id`, e.g.
//
// ```sh
//  $ pulumi import wavefront:index/derivedMetric:DerivedMetric derived_metric 1577102900578
// ```
type DerivedMetric struct {
	pulumi.CustomResourceState

	// User-supplied additional explanatory information for the derived metric
	AdditionalInformation pulumi.StringPtrOutput `pulumi:"additionalInformation"`
	// How frequently the query generating the derived metric is run
	Minutes pulumi.IntOutput `pulumi:"minutes"`
	// The name of the Derived Metric in Wavefront
	Name pulumi.StringOutput `pulumi:"name"`
	// A Wavefront query that is evaluated at regular intervals (default `1m`)
	Query pulumi.StringOutput `pulumi:"query"`
	// A set of tags to assign to this resource.
	Tags pulumi.StringArrayOutput `pulumi:"tags"`
}

// NewDerivedMetric registers a new resource with the given unique name, arguments, and options.
func NewDerivedMetric(ctx *pulumi.Context,
	name string, args *DerivedMetricArgs, opts ...pulumi.ResourceOption) (*DerivedMetric, error) {
	if args == nil {
		return nil, errors.New("missing one or more required arguments")
	}

	if args.Minutes == nil {
		return nil, errors.New("invalid value for required argument 'Minutes'")
	}
	if args.Query == nil {
		return nil, errors.New("invalid value for required argument 'Query'")
	}
	var resource DerivedMetric
	err := ctx.RegisterResource("wavefront:index/derivedMetric:DerivedMetric", name, args, &resource, opts...)
	if err != nil {
		return nil, err
	}
	return &resource, nil
}

// GetDerivedMetric gets an existing DerivedMetric resource's state with the given name, ID, and optional
// state properties that are used to uniquely qualify the lookup (nil if not required).
func GetDerivedMetric(ctx *pulumi.Context,
	name string, id pulumi.IDInput, state *DerivedMetricState, opts ...pulumi.ResourceOption) (*DerivedMetric, error) {
	var resource DerivedMetric
	err := ctx.ReadResource("wavefront:index/derivedMetric:DerivedMetric", name, id, state, &resource, opts...)
	if err != nil {
		return nil, err
	}
	return &resource, nil
}

// Input properties used for looking up and filtering DerivedMetric resources.
type derivedMetricState struct {
	// User-supplied additional explanatory information for the derived metric
	AdditionalInformation *string `pulumi:"additionalInformation"`
	// How frequently the query generating the derived metric is run
	Minutes *int `pulumi:"minutes"`
	// The name of the Derived Metric in Wavefront
	Name *string `pulumi:"name"`
	// A Wavefront query that is evaluated at regular intervals (default `1m`)
	Query *string `pulumi:"query"`
	// A set of tags to assign to this resource.
	Tags []string `pulumi:"tags"`
}

type DerivedMetricState struct {
	// User-supplied additional explanatory information for the derived metric
	AdditionalInformation pulumi.StringPtrInput
	// How frequently the query generating the derived metric is run
	Minutes pulumi.IntPtrInput
	// The name of the Derived Metric in Wavefront
	Name pulumi.StringPtrInput
	// A Wavefront query that is evaluated at regular intervals (default `1m`)
	Query pulumi.StringPtrInput
	// A set of tags to assign to this resource.
	Tags pulumi.StringArrayInput
}

func (DerivedMetricState) ElementType() reflect.Type {
	return reflect.TypeOf((*derivedMetricState)(nil)).Elem()
}

type derivedMetricArgs struct {
	// User-supplied additional explanatory information for the derived metric
	AdditionalInformation *string `pulumi:"additionalInformation"`
	// How frequently the query generating the derived metric is run
	Minutes int `pulumi:"minutes"`
	// The name of the Derived Metric in Wavefront
	Name *string `pulumi:"name"`
	// A Wavefront query that is evaluated at regular intervals (default `1m`)
	Query string `pulumi:"query"`
	// A set of tags to assign to this resource.
	Tags []string `pulumi:"tags"`
}

// The set of arguments for constructing a DerivedMetric resource.
type DerivedMetricArgs struct {
	// User-supplied additional explanatory information for the derived metric
	AdditionalInformation pulumi.StringPtrInput
	// How frequently the query generating the derived metric is run
	Minutes pulumi.IntInput
	// The name of the Derived Metric in Wavefront
	Name pulumi.StringPtrInput
	// A Wavefront query that is evaluated at regular intervals (default `1m`)
	Query pulumi.StringInput
	// A set of tags to assign to this resource.
	Tags pulumi.StringArrayInput
}

func (DerivedMetricArgs) ElementType() reflect.Type {
	return reflect.TypeOf((*derivedMetricArgs)(nil)).Elem()
}

type DerivedMetricInput interface {
	pulumi.Input

	ToDerivedMetricOutput() DerivedMetricOutput
	ToDerivedMetricOutputWithContext(ctx context.Context) DerivedMetricOutput
}

func (*DerivedMetric) ElementType() reflect.Type {
	return reflect.TypeOf((*DerivedMetric)(nil))
}

func (i *DerivedMetric) ToDerivedMetricOutput() DerivedMetricOutput {
	return i.ToDerivedMetricOutputWithContext(context.Background())
}

func (i *DerivedMetric) ToDerivedMetricOutputWithContext(ctx context.Context) DerivedMetricOutput {
	return pulumi.ToOutputWithContext(ctx, i).(DerivedMetricOutput)
}

func (i *DerivedMetric) ToDerivedMetricPtrOutput() DerivedMetricPtrOutput {
	return i.ToDerivedMetricPtrOutputWithContext(context.Background())
}

func (i *DerivedMetric) ToDerivedMetricPtrOutputWithContext(ctx context.Context) DerivedMetricPtrOutput {
	return pulumi.ToOutputWithContext(ctx, i).(DerivedMetricPtrOutput)
}

type DerivedMetricPtrInput interface {
	pulumi.Input

	ToDerivedMetricPtrOutput() DerivedMetricPtrOutput
	ToDerivedMetricPtrOutputWithContext(ctx context.Context) DerivedMetricPtrOutput
}

type derivedMetricPtrType DerivedMetricArgs

func (*derivedMetricPtrType) ElementType() reflect.Type {
	return reflect.TypeOf((**DerivedMetric)(nil))
}

func (i *derivedMetricPtrType) ToDerivedMetricPtrOutput() DerivedMetricPtrOutput {
	return i.ToDerivedMetricPtrOutputWithContext(context.Background())
}

func (i *derivedMetricPtrType) ToDerivedMetricPtrOutputWithContext(ctx context.Context) DerivedMetricPtrOutput {
	return pulumi.ToOutputWithContext(ctx, i).(DerivedMetricPtrOutput)
}

// DerivedMetricArrayInput is an input type that accepts DerivedMetricArray and DerivedMetricArrayOutput values.
// You can construct a concrete instance of `DerivedMetricArrayInput` via:
//
//          DerivedMetricArray{ DerivedMetricArgs{...} }
type DerivedMetricArrayInput interface {
	pulumi.Input

	ToDerivedMetricArrayOutput() DerivedMetricArrayOutput
	ToDerivedMetricArrayOutputWithContext(context.Context) DerivedMetricArrayOutput
}

type DerivedMetricArray []DerivedMetricInput

func (DerivedMetricArray) ElementType() reflect.Type {
	return reflect.TypeOf((*[]*DerivedMetric)(nil)).Elem()
}

func (i DerivedMetricArray) ToDerivedMetricArrayOutput() DerivedMetricArrayOutput {
	return i.ToDerivedMetricArrayOutputWithContext(context.Background())
}

func (i DerivedMetricArray) ToDerivedMetricArrayOutputWithContext(ctx context.Context) DerivedMetricArrayOutput {
	return pulumi.ToOutputWithContext(ctx, i).(DerivedMetricArrayOutput)
}

// DerivedMetricMapInput is an input type that accepts DerivedMetricMap and DerivedMetricMapOutput values.
// You can construct a concrete instance of `DerivedMetricMapInput` via:
//
//          DerivedMetricMap{ "key": DerivedMetricArgs{...} }
type DerivedMetricMapInput interface {
	pulumi.Input

	ToDerivedMetricMapOutput() DerivedMetricMapOutput
	ToDerivedMetricMapOutputWithContext(context.Context) DerivedMetricMapOutput
}

type DerivedMetricMap map[string]DerivedMetricInput

func (DerivedMetricMap) ElementType() reflect.Type {
	return reflect.TypeOf((*map[string]*DerivedMetric)(nil)).Elem()
}

func (i DerivedMetricMap) ToDerivedMetricMapOutput() DerivedMetricMapOutput {
	return i.ToDerivedMetricMapOutputWithContext(context.Background())
}

func (i DerivedMetricMap) ToDerivedMetricMapOutputWithContext(ctx context.Context) DerivedMetricMapOutput {
	return pulumi.ToOutputWithContext(ctx, i).(DerivedMetricMapOutput)
}

type DerivedMetricOutput struct{ *pulumi.OutputState }

func (DerivedMetricOutput) ElementType() reflect.Type {
	return reflect.TypeOf((*DerivedMetric)(nil))
}

func (o DerivedMetricOutput) ToDerivedMetricOutput() DerivedMetricOutput {
	return o
}

func (o DerivedMetricOutput) ToDerivedMetricOutputWithContext(ctx context.Context) DerivedMetricOutput {
	return o
}

func (o DerivedMetricOutput) ToDerivedMetricPtrOutput() DerivedMetricPtrOutput {
	return o.ToDerivedMetricPtrOutputWithContext(context.Background())
}

func (o DerivedMetricOutput) ToDerivedMetricPtrOutputWithContext(ctx context.Context) DerivedMetricPtrOutput {
	return o.ApplyTWithContext(ctx, func(_ context.Context, v DerivedMetric) *DerivedMetric {
		return &v
	}).(DerivedMetricPtrOutput)
}

type DerivedMetricPtrOutput struct{ *pulumi.OutputState }

func (DerivedMetricPtrOutput) ElementType() reflect.Type {
	return reflect.TypeOf((**DerivedMetric)(nil))
}

func (o DerivedMetricPtrOutput) ToDerivedMetricPtrOutput() DerivedMetricPtrOutput {
	return o
}

func (o DerivedMetricPtrOutput) ToDerivedMetricPtrOutputWithContext(ctx context.Context) DerivedMetricPtrOutput {
	return o
}

func (o DerivedMetricPtrOutput) Elem() DerivedMetricOutput {
	return o.ApplyT(func(v *DerivedMetric) DerivedMetric {
		if v != nil {
			return *v
		}
		var ret DerivedMetric
		return ret
	}).(DerivedMetricOutput)
}

type DerivedMetricArrayOutput struct{ *pulumi.OutputState }

func (DerivedMetricArrayOutput) ElementType() reflect.Type {
	return reflect.TypeOf((*[]DerivedMetric)(nil))
}

func (o DerivedMetricArrayOutput) ToDerivedMetricArrayOutput() DerivedMetricArrayOutput {
	return o
}

func (o DerivedMetricArrayOutput) ToDerivedMetricArrayOutputWithContext(ctx context.Context) DerivedMetricArrayOutput {
	return o
}

func (o DerivedMetricArrayOutput) Index(i pulumi.IntInput) DerivedMetricOutput {
	return pulumi.All(o, i).ApplyT(func(vs []interface{}) DerivedMetric {
		return vs[0].([]DerivedMetric)[vs[1].(int)]
	}).(DerivedMetricOutput)
}

type DerivedMetricMapOutput struct{ *pulumi.OutputState }

func (DerivedMetricMapOutput) ElementType() reflect.Type {
	return reflect.TypeOf((*map[string]DerivedMetric)(nil))
}

func (o DerivedMetricMapOutput) ToDerivedMetricMapOutput() DerivedMetricMapOutput {
	return o
}

func (o DerivedMetricMapOutput) ToDerivedMetricMapOutputWithContext(ctx context.Context) DerivedMetricMapOutput {
	return o
}

func (o DerivedMetricMapOutput) MapIndex(k pulumi.StringInput) DerivedMetricOutput {
	return pulumi.All(o, k).ApplyT(func(vs []interface{}) DerivedMetric {
		return vs[0].(map[string]DerivedMetric)[vs[1].(string)]
	}).(DerivedMetricOutput)
}

func init() {
	pulumi.RegisterInputType(reflect.TypeOf((*DerivedMetricInput)(nil)).Elem(), &DerivedMetric{})
	pulumi.RegisterInputType(reflect.TypeOf((*DerivedMetricPtrInput)(nil)).Elem(), &DerivedMetric{})
	pulumi.RegisterInputType(reflect.TypeOf((*DerivedMetricArrayInput)(nil)).Elem(), DerivedMetricArray{})
	pulumi.RegisterInputType(reflect.TypeOf((*DerivedMetricMapInput)(nil)).Elem(), DerivedMetricMap{})
	pulumi.RegisterOutputType(DerivedMetricOutput{})
	pulumi.RegisterOutputType(DerivedMetricPtrOutput{})
	pulumi.RegisterOutputType(DerivedMetricArrayOutput{})
	pulumi.RegisterOutputType(DerivedMetricMapOutput{})
}
