// Code generated by azure-service-operator-codegen. DO NOT EDIT.
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.
package arm

import (
	"github.com/Azure/azure-service-operator/v2/pkg/genruntime"
	"k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
)

type DataCollectionRule_Spec struct {
	// Identity: Managed service identity of the resource.
	Identity *ManagedServiceIdentity `json:"identity,omitempty"`

	// Kind: The kind of the resource.
	Kind *DataCollectionRule_Kind_Spec `json:"kind,omitempty"`

	// Location: The geo-location where the resource lives.
	Location *string `json:"location,omitempty"`
	Name     string  `json:"name,omitempty"`

	// Properties: Resource properties.
	Properties *DataCollectionRuleSpec `json:"properties,omitempty"`

	// Tags: Resource tags.
	Tags map[string]string `json:"tags,omitempty"`
}

var _ genruntime.ARMResourceSpec = &DataCollectionRule_Spec{}

// GetAPIVersion returns the ARM API version of the resource. This is always "2023-03-11"
func (rule DataCollectionRule_Spec) GetAPIVersion() string {
	return "2023-03-11"
}

// GetName returns the Name of the resource
func (rule *DataCollectionRule_Spec) GetName() string {
	return rule.Name
}

// GetType returns the ARM Type of the resource. This is always "Microsoft.Insights/dataCollectionRules"
func (rule *DataCollectionRule_Spec) GetType() string {
	return "Microsoft.Insights/dataCollectionRules"
}

// +kubebuilder:validation:Enum={"Linux","Windows"}
type DataCollectionRule_Kind_Spec string

const (
	DataCollectionRule_Kind_Spec_Linux   = DataCollectionRule_Kind_Spec("Linux")
	DataCollectionRule_Kind_Spec_Windows = DataCollectionRule_Kind_Spec("Windows")
)

// Mapping from string to DataCollectionRule_Kind_Spec
var dataCollectionRule_Kind_Spec_Values = map[string]DataCollectionRule_Kind_Spec{
	"linux":   DataCollectionRule_Kind_Spec_Linux,
	"windows": DataCollectionRule_Kind_Spec_Windows,
}

// Definition of what monitoring data to collect and where that data should be sent.
type DataCollectionRuleSpec struct {
	// AgentSettings: Agent settings used to modify agent behavior on a given host
	AgentSettings *AgentSettingsSpec `json:"agentSettings,omitempty"`

	// DataCollectionEndpointId: The resource ID of the data collection endpoint that this rule can be used with.
	DataCollectionEndpointId *string `json:"dataCollectionEndpointId,omitempty"`

	// DataFlows: The specification of data flows.
	DataFlows []DataFlow `json:"dataFlows,omitempty"`

	// DataSources: The specification of data sources.
	// This property is optional and can be omitted if the rule is meant to be used via direct calls to the provisioned
	// endpoint.
	DataSources *DataSourcesSpec `json:"dataSources,omitempty"`

	// Description: Description of the data collection rule.
	Description *string `json:"description,omitempty"`

	// Destinations: The specification of destinations.
	Destinations *DestinationsSpec `json:"destinations,omitempty"`

	// References: Defines all the references that may be used in other sections of the DCR
	References *ReferencesSpec `json:"references,omitempty"`

	// StreamDeclarations: Declaration of custom streams used in this rule.
	StreamDeclarations map[string]StreamDeclaration `json:"streamDeclarations,omitempty"`
}

// An agent setting
type AgentSettingsSpec struct {
	// Logs: All the settings that are applicable to the logs agent (AMA)
	Logs []AgentSetting `json:"logs,omitempty"`
}

// Definition of which streams are sent to which destinations.
type DataFlow struct {
	// BuiltInTransform: The builtIn transform to transform stream data
	BuiltInTransform *string `json:"builtInTransform,omitempty"`

	// CaptureOverflow: Flag to enable overflow column in LA destinations
	CaptureOverflow *bool `json:"captureOverflow,omitempty"`

	// Destinations: List of destinations for this data flow.
	Destinations []string `json:"destinations,omitempty"`

	// OutputStream: The output stream of the transform. Only required if the transform changes data to a different stream.
	OutputStream *string `json:"outputStream,omitempty"`

	// Streams: List of streams for this data flow.
	Streams []DataFlow_Streams `json:"streams,omitempty"`

	// TransformKql: The KQL query to transform stream data.
	TransformKql *string `json:"transformKql,omitempty"`
}

// Specification of data sources that will be collected.
type DataSourcesSpec struct {
	// DataImports: Specifications of pull based data sources
	DataImports *DataImportSources `json:"dataImports,omitempty"`

	// Extensions: The list of Azure VM extension data source configurations.
	Extensions []ExtensionDataSource `json:"extensions,omitempty"`

	// IisLogs: The list of IIS logs source configurations.
	IisLogs []IisLogsDataSource `json:"iisLogs,omitempty"`

	// LogFiles: The list of Log files source configurations.
	LogFiles []LogFilesDataSource `json:"logFiles,omitempty"`

	// PerformanceCounters: The list of performance counter data source configurations.
	PerformanceCounters []PerfCounterDataSource `json:"performanceCounters,omitempty"`

	// PlatformTelemetry: The list of platform telemetry configurations
	PlatformTelemetry []PlatformTelemetryDataSource `json:"platformTelemetry,omitempty"`

	// PrometheusForwarder: The list of Prometheus forwarder data source configurations.
	PrometheusForwarder []PrometheusForwarderDataSource `json:"prometheusForwarder,omitempty"`

	// Syslog: The list of Syslog data source configurations.
	Syslog []SyslogDataSource `json:"syslog,omitempty"`

	// WindowsEventLogs: The list of Windows Event Log data source configurations.
	WindowsEventLogs []WindowsEventLogDataSource `json:"windowsEventLogs,omitempty"`

	// WindowsFirewallLogs: The list of Windows Firewall logs source configurations.
	WindowsFirewallLogs []WindowsFirewallLogsDataSource `json:"windowsFirewallLogs,omitempty"`
}

// Specification of destinations that can be used in data flows.
type DestinationsSpec struct {
	// AzureDataExplorer: List of Azure Data Explorer destinations.
	AzureDataExplorer []AdxDestination `json:"azureDataExplorer,omitempty"`

	// AzureMonitorMetrics: Azure Monitor Metrics destination.
	AzureMonitorMetrics *AzureMonitorMetricsDestination `json:"azureMonitorMetrics,omitempty"`

	// EventHubs: List of Event Hubs destinations.
	EventHubs []EventHubDestination `json:"eventHubs,omitempty"`

	// EventHubsDirect: List of Event Hubs Direct destinations.
	EventHubsDirect []EventHubDirectDestination `json:"eventHubsDirect,omitempty"`

	// LogAnalytics: List of Log Analytics destinations.
	LogAnalytics []LogAnalyticsDestination `json:"logAnalytics,omitempty"`

	// MicrosoftFabric: List of Microsoft Fabric destinations.
	MicrosoftFabric []MicrosoftFabricDestination `json:"microsoftFabric,omitempty"`

	// MonitoringAccounts: List of monitoring account destinations.
	MonitoringAccounts []MonitoringAccountDestination `json:"monitoringAccounts,omitempty"`

	// StorageAccounts: List of storage accounts destinations.
	StorageAccounts []StorageBlobDestination `json:"storageAccounts,omitempty"`

	// StorageBlobsDirect: List of Storage Blob Direct destinations. To be used only for sending data directly to store from
	// the agent.
	StorageBlobsDirect []StorageBlobDestination `json:"storageBlobsDirect,omitempty"`

	// StorageTablesDirect: List of Storage Table Direct destinations.
	StorageTablesDirect []StorageTableDestination `json:"storageTablesDirect,omitempty"`
}

// This section defines all the references that may be used in other sections of the DCR
type ReferencesSpec struct {
	// EnrichmentData: All the enrichment data sources referenced in data flows
	EnrichmentData *EnrichmentData `json:"enrichmentData,omitempty"`
}

// Declaration of a custom stream.
type StreamDeclaration struct {
	// Columns: List of columns used by data in this stream.
	Columns []ColumnDefinition `json:"columns,omitempty"`
}

// Azure Data Explorer (Adx) destination.
type AdxDestination struct {
	// DatabaseName: The name of the database to which data will be ingested.
	DatabaseName *string `json:"databaseName,omitempty"`

	// Name: A friendly name for the destination.
	// This name should be unique across all destinations (regardless of type) within the data collection rule.
	Name *string `json:"name,omitempty"`

	// ResourceId: The ARM resource id of the Adx resource.
	ResourceId *string `json:"resourceId,omitempty"`
}

// A setting used to control an agent behavior on a host machine
type AgentSetting struct {
	// Name: The name of the setting.
	// Must be part of the list of supported settings
	Name *AgentSetting_Name `json:"name,omitempty"`

	// Value: The value of the setting
	Value *string `json:"value,omitempty"`
}

// Azure Monitor Metrics destination.
type AzureMonitorMetricsDestination struct {
	// Name: A friendly name for the destination.
	// This name should be unique across all destinations (regardless of type) within the data collection rule.
	Name *string `json:"name,omitempty"`
}

// Definition of custom data column.
type ColumnDefinition struct {
	// Name: The name of the column.
	Name *string `json:"name,omitempty"`

	// Type: The type of the column data.
	Type *ColumnDefinition_Type `json:"type,omitempty"`
}

// +kubebuilder:validation:Enum={"Microsoft-Event","Microsoft-InsightsMetrics","Microsoft-Perf","Microsoft-Syslog","Microsoft-WindowsEvent"}
type DataFlow_Streams string

const (
	DataFlow_Streams_MicrosoftEvent           = DataFlow_Streams("Microsoft-Event")
	DataFlow_Streams_MicrosoftInsightsMetrics = DataFlow_Streams("Microsoft-InsightsMetrics")
	DataFlow_Streams_MicrosoftPerf            = DataFlow_Streams("Microsoft-Perf")
	DataFlow_Streams_MicrosoftSyslog          = DataFlow_Streams("Microsoft-Syslog")
	DataFlow_Streams_MicrosoftWindowsEvent    = DataFlow_Streams("Microsoft-WindowsEvent")
)

// Mapping from string to DataFlow_Streams
var dataFlow_Streams_Values = map[string]DataFlow_Streams{
	"microsoft-event":           DataFlow_Streams_MicrosoftEvent,
	"microsoft-insightsmetrics": DataFlow_Streams_MicrosoftInsightsMetrics,
	"microsoft-perf":            DataFlow_Streams_MicrosoftPerf,
	"microsoft-syslog":          DataFlow_Streams_MicrosoftSyslog,
	"microsoft-windowsevent":    DataFlow_Streams_MicrosoftWindowsEvent,
}

type DataImportSources struct {
	// EventHub: Definition of Event Hub configuration.
	EventHub *EventHubDataSource `json:"eventHub,omitempty"`
}

// All the enrichment data sources referenced in data flows
type EnrichmentData struct {
	// StorageBlobs: All the storage blobs used as enrichment data sources
	StorageBlobs []StorageBlob `json:"storageBlobs,omitempty"`
}

type EventHubDestination struct {
	// EventHubResourceId: The resource ID of the event hub.
	EventHubResourceId *string `json:"eventHubResourceId,omitempty"`

	// Name: A friendly name for the destination.
	// This name should be unique across all destinations (regardless of type) within the data collection rule.
	Name *string `json:"name,omitempty"`
}

type EventHubDirectDestination struct {
	// EventHubResourceId: The resource ID of the event hub.
	EventHubResourceId *string `json:"eventHubResourceId,omitempty"`

	// Name: A friendly name for the destination.
	// This name should be unique across all destinations (regardless of type) within the data collection rule.
	Name *string `json:"name,omitempty"`
}

// Definition of which data will be collected from a separate VM extension that integrates with the Azure Monitor
// Agent.
// Collected from either Windows and Linux machines, depending on which extension is defined.
type ExtensionDataSource struct {
	// ExtensionName: The name of the VM extension.
	ExtensionName *string `json:"extensionName,omitempty"`

	// ExtensionSettings: The extension settings. The format is specific for particular extension.
	ExtensionSettings map[string]v1.JSON `json:"extensionSettings,omitempty"`

	// InputDataSources: The list of data sources this extension needs data from.
	InputDataSources []string `json:"inputDataSources,omitempty"`

	// Name: A friendly name for the data source.
	// This name should be unique across all data sources (regardless of type) within the data collection rule.
	Name *string `json:"name,omitempty"`

	// Streams: List of streams that this data source will be sent to.
	// A stream indicates what schema will be used for this data and usually what table in Log Analytics the data will be sent
	// to.
	Streams []ExtensionDataSource_Streams `json:"streams,omitempty"`
}

// Enables IIS logs to be collected by this data collection rule.
type IisLogsDataSource struct {
	// LogDirectories: Absolute paths file location
	LogDirectories []string `json:"logDirectories,omitempty"`

	// Name: A friendly name for the data source.
	// This name should be unique across all data sources (regardless of type) within the data collection rule.
	Name *string `json:"name,omitempty"`

	// Streams: IIS streams
	Streams []string `json:"streams,omitempty"`

	// TransformKql: The KQL query to transform the data source.
	TransformKql *string `json:"transformKql,omitempty"`
}

// Log Analytics destination.
type LogAnalyticsDestination struct {
	// Name: A friendly name for the destination.
	// This name should be unique across all destinations (regardless of type) within the data collection rule.
	Name *string `json:"name,omitempty"`

	// WorkspaceResourceId: The resource ID of the Log Analytics workspace.
	WorkspaceResourceId *string `json:"workspaceResourceId,omitempty"`
}

// Definition of which custom log files will be collected by this data collection rule
type LogFilesDataSource struct {
	// FilePatterns: File Patterns where the log files are located
	FilePatterns []string `json:"filePatterns,omitempty"`

	// Format: The data format of the log files
	Format *LogFilesDataSource_Format `json:"format,omitempty"`

	// Name: A friendly name for the data source.
	// This name should be unique across all data sources (regardless of type) within the data collection rule.
	Name *string `json:"name,omitempty"`

	// Settings: The log files specific settings.
	Settings *LogFileSettings `json:"settings,omitempty"`

	// Streams: List of streams that this data source will be sent to.
	// A stream indicates what schema will be used for this data source
	Streams []string `json:"streams,omitempty"`

	// TransformKql: The KQL query to transform the data source.
	TransformKql *string `json:"transformKql,omitempty"`
}

// Microsoft Fabric destination (non-Azure).
type MicrosoftFabricDestination struct {
	// ArtifactId: The artifact id of the Microsoft Fabric resource.
	ArtifactId *string `json:"artifactId,omitempty"`

	// DatabaseName: The name of the database to which data will be ingested.
	DatabaseName *string `json:"databaseName,omitempty"`

	// IngestionUri: The ingestion uri of the Microsoft Fabric resource.
	IngestionUri *string `json:"ingestionUri,omitempty"`

	// Name: A friendly name for the destination.
	// This name should be unique across all destinations (regardless of type) within the data collection rule.
	Name *string `json:"name,omitempty"`

	// TenantId: The tenant id of the Microsoft Fabric resource.
	TenantId *string `json:"tenantId,omitempty"`
}

// Monitoring account destination.
type MonitoringAccountDestination struct {
	// AccountResourceId: The resource ID of the monitoring account.
	AccountResourceId *string `json:"accountResourceId,omitempty"`

	// Name: A friendly name for the destination.
	// This name should be unique across all destinations (regardless of type) within the data collection rule.
	Name *string `json:"name,omitempty"`
}

// Definition of which performance counters will be collected and how they will be collected by this data collection
// rule.
// Collected from both Windows and Linux machines where the counter is present.
type PerfCounterDataSource struct {
	// CounterSpecifiers: A list of specifier names of the performance counters you want to collect.
	// Use a wildcard (*) to collect a counter for all instances.
	// To get a list of performance counters on Windows, run the command 'typeperf'.
	CounterSpecifiers []string `json:"counterSpecifiers,omitempty"`

	// Name: A friendly name for the data source.
	// This name should be unique across all data sources (regardless of type) within the data collection rule.
	Name *string `json:"name,omitempty"`

	// SamplingFrequencyInSeconds: The number of seconds between consecutive counter measurements (samples).
	SamplingFrequencyInSeconds *int `json:"samplingFrequencyInSeconds,omitempty"`

	// Streams: List of streams that this data source will be sent to.
	// A stream indicates what schema will be used for this data and usually what table in Log Analytics the data will be sent
	// to.
	Streams []PerfCounterDataSource_Streams `json:"streams,omitempty"`

	// TransformKql: The KQL query to transform the data source.
	TransformKql *string `json:"transformKql,omitempty"`
}

// Definition of platform telemetry data source configuration
type PlatformTelemetryDataSource struct {
	// Name: A friendly name for the data source.
	// This name should be unique across all data sources (regardless of type) within the data collection rule.
	Name *string `json:"name,omitempty"`

	// Streams: List of platform telemetry streams to collect
	Streams []string `json:"streams,omitempty"`
}

// Definition of Prometheus metrics forwarding configuration.
type PrometheusForwarderDataSource struct {
	// LabelIncludeFilter: The list of label inclusion filters in the form of label "name-value" pairs.
	// Currently only one label is supported: 'microsoft_metrics_include_label'.
	// Label values are matched case-insensitively.
	LabelIncludeFilter map[string]string `json:"labelIncludeFilter,omitempty"`

	// Name: A friendly name for the data source.
	// This name should be unique across all data sources (regardless of type) within the data collection rule.
	Name *string `json:"name,omitempty"`

	// Streams: List of streams that this data source will be sent to.
	Streams []PrometheusForwarderDataSource_Streams `json:"streams,omitempty"`
}

type StorageBlobDestination struct {
	// ContainerName: The container name of the Storage Blob.
	ContainerName *string `json:"containerName,omitempty"`

	// Name: A friendly name for the destination.
	// This name should be unique across all destinations (regardless of type) within the data collection rule.
	Name *string `json:"name,omitempty"`

	// StorageAccountResourceId: The resource ID of the storage account.
	StorageAccountResourceId *string `json:"storageAccountResourceId,omitempty"`
}

type StorageTableDestination struct {
	// Name: A friendly name for the destination.
	// This name should be unique across all destinations (regardless of type) within the data collection rule.
	Name *string `json:"name,omitempty"`

	// StorageAccountResourceId: The resource ID of the storage account.
	StorageAccountResourceId *string `json:"storageAccountResourceId,omitempty"`

	// TableName: The name of the Storage Table.
	TableName *string `json:"tableName,omitempty"`
}

// Definition of which syslog data will be collected and how it will be collected.
// Only collected from Linux machines.
type SyslogDataSource struct {
	// FacilityNames: The list of facility names.
	FacilityNames []SyslogDataSource_FacilityNames `json:"facilityNames,omitempty"`

	// LogLevels: The log levels to collect.
	LogLevels []SyslogDataSource_LogLevels `json:"logLevels,omitempty"`

	// Name: A friendly name for the data source.
	// This name should be unique across all data sources (regardless of type) within the data collection rule.
	Name *string `json:"name,omitempty"`

	// Streams: List of streams that this data source will be sent to.
	// A stream indicates what schema will be used for this data and usually what table in Log Analytics the data will be sent
	// to.
	Streams []SyslogDataSource_Streams `json:"streams,omitempty"`

	// TransformKql: The KQL query to transform the data source.
	TransformKql *string `json:"transformKql,omitempty"`
}

// Definition of which Windows Event Log events will be collected and how they will be collected.
// Only collected from
// Windows machines.
type WindowsEventLogDataSource struct {
	// Name: A friendly name for the data source.
	// This name should be unique across all data sources (regardless of type) within the data collection rule.
	Name *string `json:"name,omitempty"`

	// Streams: List of streams that this data source will be sent to.
	// A stream indicates what schema will be used for this data and usually what table in Log Analytics the data will be sent
	// to.
	Streams []WindowsEventLogDataSource_Streams `json:"streams,omitempty"`

	// TransformKql: The KQL query to transform the data source.
	TransformKql *string `json:"transformKql,omitempty"`

	// XPathQueries: A list of Windows Event Log queries in XPATH format.
	XPathQueries []string `json:"xPathQueries,omitempty"`
}

// Enables Firewall logs to be collected by this data collection rule.
type WindowsFirewallLogsDataSource struct {
	// Name: A friendly name for the data source.
	// This name should be unique across all data sources (regardless of type) within the data collection rule.
	Name *string `json:"name,omitempty"`

	// ProfileFilter: Firewall logs profile filter
	ProfileFilter []WindowsFirewallLogsDataSource_ProfileFilter `json:"profileFilter,omitempty"`

	// Streams: Firewall logs streams
	Streams []string `json:"streams,omitempty"`
}

// +kubebuilder:validation:Enum={"MaxDiskQuotaInMB","UseTimeReceivedForForwardedEvents"}
type AgentSetting_Name string

const (
	AgentSetting_Name_MaxDiskQuotaInMB                  = AgentSetting_Name("MaxDiskQuotaInMB")
	AgentSetting_Name_UseTimeReceivedForForwardedEvents = AgentSetting_Name("UseTimeReceivedForForwardedEvents")
)

// Mapping from string to AgentSetting_Name
var agentSetting_Name_Values = map[string]AgentSetting_Name{
	"maxdiskquotainmb":                  AgentSetting_Name_MaxDiskQuotaInMB,
	"usetimereceivedforforwardedevents": AgentSetting_Name_UseTimeReceivedForForwardedEvents,
}

// +kubebuilder:validation:Enum={"boolean","datetime","dynamic","int","long","real","string"}
type ColumnDefinition_Type string

const (
	ColumnDefinition_Type_Boolean  = ColumnDefinition_Type("boolean")
	ColumnDefinition_Type_Datetime = ColumnDefinition_Type("datetime")
	ColumnDefinition_Type_Dynamic  = ColumnDefinition_Type("dynamic")
	ColumnDefinition_Type_Int      = ColumnDefinition_Type("int")
	ColumnDefinition_Type_Long     = ColumnDefinition_Type("long")
	ColumnDefinition_Type_Real     = ColumnDefinition_Type("real")
	ColumnDefinition_Type_String   = ColumnDefinition_Type("string")
)

// Mapping from string to ColumnDefinition_Type
var columnDefinition_Type_Values = map[string]ColumnDefinition_Type{
	"boolean":  ColumnDefinition_Type_Boolean,
	"datetime": ColumnDefinition_Type_Datetime,
	"dynamic":  ColumnDefinition_Type_Dynamic,
	"int":      ColumnDefinition_Type_Int,
	"long":     ColumnDefinition_Type_Long,
	"real":     ColumnDefinition_Type_Real,
	"string":   ColumnDefinition_Type_String,
}

type EventHubDataSource struct {
	// ConsumerGroup: Event Hub consumer group name
	ConsumerGroup *string `json:"consumerGroup,omitempty"`

	// Name: A friendly name for the data source.
	// This name should be unique across all data sources (regardless of type) within the data collection rule.
	Name *string `json:"name,omitempty"`

	// Stream: The stream to collect from EventHub
	Stream *string `json:"stream,omitempty"`
}

// +kubebuilder:validation:Enum={"Microsoft-Event","Microsoft-InsightsMetrics","Microsoft-Perf","Microsoft-Syslog","Microsoft-WindowsEvent"}
type ExtensionDataSource_Streams string

const (
	ExtensionDataSource_Streams_MicrosoftEvent           = ExtensionDataSource_Streams("Microsoft-Event")
	ExtensionDataSource_Streams_MicrosoftInsightsMetrics = ExtensionDataSource_Streams("Microsoft-InsightsMetrics")
	ExtensionDataSource_Streams_MicrosoftPerf            = ExtensionDataSource_Streams("Microsoft-Perf")
	ExtensionDataSource_Streams_MicrosoftSyslog          = ExtensionDataSource_Streams("Microsoft-Syslog")
	ExtensionDataSource_Streams_MicrosoftWindowsEvent    = ExtensionDataSource_Streams("Microsoft-WindowsEvent")
)

// Mapping from string to ExtensionDataSource_Streams
var extensionDataSource_Streams_Values = map[string]ExtensionDataSource_Streams{
	"microsoft-event":           ExtensionDataSource_Streams_MicrosoftEvent,
	"microsoft-insightsmetrics": ExtensionDataSource_Streams_MicrosoftInsightsMetrics,
	"microsoft-perf":            ExtensionDataSource_Streams_MicrosoftPerf,
	"microsoft-syslog":          ExtensionDataSource_Streams_MicrosoftSyslog,
	"microsoft-windowsevent":    ExtensionDataSource_Streams_MicrosoftWindowsEvent,
}

// +kubebuilder:validation:Enum={"json","text"}
type LogFilesDataSource_Format string

const (
	LogFilesDataSource_Format_Json = LogFilesDataSource_Format("json")
	LogFilesDataSource_Format_Text = LogFilesDataSource_Format("text")
)

// Mapping from string to LogFilesDataSource_Format
var logFilesDataSource_Format_Values = map[string]LogFilesDataSource_Format{
	"json": LogFilesDataSource_Format_Json,
	"text": LogFilesDataSource_Format_Text,
}

// Settings for different log file formats
type LogFileSettings struct {
	// Text: Text settings
	Text *LogFileTextSettings `json:"text,omitempty"`
}

// +kubebuilder:validation:Enum={"Microsoft-InsightsMetrics","Microsoft-Perf"}
type PerfCounterDataSource_Streams string

const (
	PerfCounterDataSource_Streams_MicrosoftInsightsMetrics = PerfCounterDataSource_Streams("Microsoft-InsightsMetrics")
	PerfCounterDataSource_Streams_MicrosoftPerf            = PerfCounterDataSource_Streams("Microsoft-Perf")
)

// Mapping from string to PerfCounterDataSource_Streams
var perfCounterDataSource_Streams_Values = map[string]PerfCounterDataSource_Streams{
	"microsoft-insightsmetrics": PerfCounterDataSource_Streams_MicrosoftInsightsMetrics,
	"microsoft-perf":            PerfCounterDataSource_Streams_MicrosoftPerf,
}

// +kubebuilder:validation:Enum={"Microsoft-PrometheusMetrics"}
type PrometheusForwarderDataSource_Streams string

const PrometheusForwarderDataSource_Streams_MicrosoftPrometheusMetrics = PrometheusForwarderDataSource_Streams("Microsoft-PrometheusMetrics")

// Mapping from string to PrometheusForwarderDataSource_Streams
var prometheusForwarderDataSource_Streams_Values = map[string]PrometheusForwarderDataSource_Streams{
	"microsoft-prometheusmetrics": PrometheusForwarderDataSource_Streams_MicrosoftPrometheusMetrics,
}

type StorageBlob struct {
	// BlobUrl: Url of the storage blob
	BlobUrl *string `json:"blobUrl,omitempty"`

	// LookupType: The type of lookup to perform on the blob
	LookupType *StorageBlob_LookupType `json:"lookupType,omitempty"`

	// Name: The name of the enrichment data source used as an alias when referencing this data source in data flows
	Name *string `json:"name,omitempty"`

	// ResourceId: Resource Id of the storage account that hosts the blob
	ResourceId *string `json:"resourceId,omitempty"`
}

// +kubebuilder:validation:Enum={"alert","audit","auth","authpriv","clock","cron","daemon","ftp","kern","local0","local1","local2","local3","local4","local5","local6","local7","lpr","mail","mark","news","nopri","ntp","*","syslog","user","uucp"}
type SyslogDataSource_FacilityNames string

const (
	SyslogDataSource_FacilityNames_Alert    = SyslogDataSource_FacilityNames("alert")
	SyslogDataSource_FacilityNames_Audit    = SyslogDataSource_FacilityNames("audit")
	SyslogDataSource_FacilityNames_Auth     = SyslogDataSource_FacilityNames("auth")
	SyslogDataSource_FacilityNames_Authpriv = SyslogDataSource_FacilityNames("authpriv")
	SyslogDataSource_FacilityNames_Clock    = SyslogDataSource_FacilityNames("clock")
	SyslogDataSource_FacilityNames_Cron     = SyslogDataSource_FacilityNames("cron")
	SyslogDataSource_FacilityNames_Daemon   = SyslogDataSource_FacilityNames("daemon")
	SyslogDataSource_FacilityNames_Ftp      = SyslogDataSource_FacilityNames("ftp")
	SyslogDataSource_FacilityNames_Kern     = SyslogDataSource_FacilityNames("kern")
	SyslogDataSource_FacilityNames_Local0   = SyslogDataSource_FacilityNames("local0")
	SyslogDataSource_FacilityNames_Local1   = SyslogDataSource_FacilityNames("local1")
	SyslogDataSource_FacilityNames_Local2   = SyslogDataSource_FacilityNames("local2")
	SyslogDataSource_FacilityNames_Local3   = SyslogDataSource_FacilityNames("local3")
	SyslogDataSource_FacilityNames_Local4   = SyslogDataSource_FacilityNames("local4")
	SyslogDataSource_FacilityNames_Local5   = SyslogDataSource_FacilityNames("local5")
	SyslogDataSource_FacilityNames_Local6   = SyslogDataSource_FacilityNames("local6")
	SyslogDataSource_FacilityNames_Local7   = SyslogDataSource_FacilityNames("local7")
	SyslogDataSource_FacilityNames_Lpr      = SyslogDataSource_FacilityNames("lpr")
	SyslogDataSource_FacilityNames_Mail     = SyslogDataSource_FacilityNames("mail")
	SyslogDataSource_FacilityNames_Mark     = SyslogDataSource_FacilityNames("mark")
	SyslogDataSource_FacilityNames_News     = SyslogDataSource_FacilityNames("news")
	SyslogDataSource_FacilityNames_Nopri    = SyslogDataSource_FacilityNames("nopri")
	SyslogDataSource_FacilityNames_Ntp      = SyslogDataSource_FacilityNames("ntp")
	SyslogDataSource_FacilityNames_Star     = SyslogDataSource_FacilityNames("*")
	SyslogDataSource_FacilityNames_Syslog   = SyslogDataSource_FacilityNames("syslog")
	SyslogDataSource_FacilityNames_User     = SyslogDataSource_FacilityNames("user")
	SyslogDataSource_FacilityNames_Uucp     = SyslogDataSource_FacilityNames("uucp")
)

// Mapping from string to SyslogDataSource_FacilityNames
var syslogDataSource_FacilityNames_Values = map[string]SyslogDataSource_FacilityNames{
	"alert":    SyslogDataSource_FacilityNames_Alert,
	"audit":    SyslogDataSource_FacilityNames_Audit,
	"auth":     SyslogDataSource_FacilityNames_Auth,
	"authpriv": SyslogDataSource_FacilityNames_Authpriv,
	"clock":    SyslogDataSource_FacilityNames_Clock,
	"cron":     SyslogDataSource_FacilityNames_Cron,
	"daemon":   SyslogDataSource_FacilityNames_Daemon,
	"ftp":      SyslogDataSource_FacilityNames_Ftp,
	"kern":     SyslogDataSource_FacilityNames_Kern,
	"local0":   SyslogDataSource_FacilityNames_Local0,
	"local1":   SyslogDataSource_FacilityNames_Local1,
	"local2":   SyslogDataSource_FacilityNames_Local2,
	"local3":   SyslogDataSource_FacilityNames_Local3,
	"local4":   SyslogDataSource_FacilityNames_Local4,
	"local5":   SyslogDataSource_FacilityNames_Local5,
	"local6":   SyslogDataSource_FacilityNames_Local6,
	"local7":   SyslogDataSource_FacilityNames_Local7,
	"lpr":      SyslogDataSource_FacilityNames_Lpr,
	"mail":     SyslogDataSource_FacilityNames_Mail,
	"mark":     SyslogDataSource_FacilityNames_Mark,
	"news":     SyslogDataSource_FacilityNames_News,
	"nopri":    SyslogDataSource_FacilityNames_Nopri,
	"ntp":      SyslogDataSource_FacilityNames_Ntp,
	"*":        SyslogDataSource_FacilityNames_Star,
	"syslog":   SyslogDataSource_FacilityNames_Syslog,
	"user":     SyslogDataSource_FacilityNames_User,
	"uucp":     SyslogDataSource_FacilityNames_Uucp,
}

// +kubebuilder:validation:Enum={"Alert","Critical","Debug","Emergency","Error","Info","Notice","*","Warning"}
type SyslogDataSource_LogLevels string

const (
	SyslogDataSource_LogLevels_Alert     = SyslogDataSource_LogLevels("Alert")
	SyslogDataSource_LogLevels_Critical  = SyslogDataSource_LogLevels("Critical")
	SyslogDataSource_LogLevels_Debug     = SyslogDataSource_LogLevels("Debug")
	SyslogDataSource_LogLevels_Emergency = SyslogDataSource_LogLevels("Emergency")
	SyslogDataSource_LogLevels_Error     = SyslogDataSource_LogLevels("Error")
	SyslogDataSource_LogLevels_Info      = SyslogDataSource_LogLevels("Info")
	SyslogDataSource_LogLevels_Notice    = SyslogDataSource_LogLevels("Notice")
	SyslogDataSource_LogLevels_Star      = SyslogDataSource_LogLevels("*")
	SyslogDataSource_LogLevels_Warning   = SyslogDataSource_LogLevels("Warning")
)

// Mapping from string to SyslogDataSource_LogLevels
var syslogDataSource_LogLevels_Values = map[string]SyslogDataSource_LogLevels{
	"alert":     SyslogDataSource_LogLevels_Alert,
	"critical":  SyslogDataSource_LogLevels_Critical,
	"debug":     SyslogDataSource_LogLevels_Debug,
	"emergency": SyslogDataSource_LogLevels_Emergency,
	"error":     SyslogDataSource_LogLevels_Error,
	"info":      SyslogDataSource_LogLevels_Info,
	"notice":    SyslogDataSource_LogLevels_Notice,
	"*":         SyslogDataSource_LogLevels_Star,
	"warning":   SyslogDataSource_LogLevels_Warning,
}

// +kubebuilder:validation:Enum={"Microsoft-Syslog"}
type SyslogDataSource_Streams string

const SyslogDataSource_Streams_MicrosoftSyslog = SyslogDataSource_Streams("Microsoft-Syslog")

// Mapping from string to SyslogDataSource_Streams
var syslogDataSource_Streams_Values = map[string]SyslogDataSource_Streams{
	"microsoft-syslog": SyslogDataSource_Streams_MicrosoftSyslog,
}

// +kubebuilder:validation:Enum={"Microsoft-Event","Microsoft-WindowsEvent"}
type WindowsEventLogDataSource_Streams string

const (
	WindowsEventLogDataSource_Streams_MicrosoftEvent        = WindowsEventLogDataSource_Streams("Microsoft-Event")
	WindowsEventLogDataSource_Streams_MicrosoftWindowsEvent = WindowsEventLogDataSource_Streams("Microsoft-WindowsEvent")
)

// Mapping from string to WindowsEventLogDataSource_Streams
var windowsEventLogDataSource_Streams_Values = map[string]WindowsEventLogDataSource_Streams{
	"microsoft-event":        WindowsEventLogDataSource_Streams_MicrosoftEvent,
	"microsoft-windowsevent": WindowsEventLogDataSource_Streams_MicrosoftWindowsEvent,
}

// +kubebuilder:validation:Enum={"Domain","Private","Public"}
type WindowsFirewallLogsDataSource_ProfileFilter string

const (
	WindowsFirewallLogsDataSource_ProfileFilter_Domain  = WindowsFirewallLogsDataSource_ProfileFilter("Domain")
	WindowsFirewallLogsDataSource_ProfileFilter_Private = WindowsFirewallLogsDataSource_ProfileFilter("Private")
	WindowsFirewallLogsDataSource_ProfileFilter_Public  = WindowsFirewallLogsDataSource_ProfileFilter("Public")
)

// Mapping from string to WindowsFirewallLogsDataSource_ProfileFilter
var windowsFirewallLogsDataSource_ProfileFilter_Values = map[string]WindowsFirewallLogsDataSource_ProfileFilter{
	"domain":  WindowsFirewallLogsDataSource_ProfileFilter_Domain,
	"private": WindowsFirewallLogsDataSource_ProfileFilter_Private,
	"public":  WindowsFirewallLogsDataSource_ProfileFilter_Public,
}

// Settings for text log files
type LogFileTextSettings struct {
	// RecordStartTimestampFormat: One of the supported timestamp formats
	RecordStartTimestampFormat *LogFileTextSettings_RecordStartTimestampFormat `json:"recordStartTimestampFormat,omitempty"`
}

// +kubebuilder:validation:Enum={"Cidr","String"}
type StorageBlob_LookupType string

const (
	StorageBlob_LookupType_Cidr   = StorageBlob_LookupType("Cidr")
	StorageBlob_LookupType_String = StorageBlob_LookupType("String")
)

// Mapping from string to StorageBlob_LookupType
var storageBlob_LookupType_Values = map[string]StorageBlob_LookupType{
	"cidr":   StorageBlob_LookupType_Cidr,
	"string": StorageBlob_LookupType_String,
}

// +kubebuilder:validation:Enum={"dd/MMM/yyyy:HH:mm:ss zzz","ddMMyy HH:mm:ss","ISO 8601","M/D/YYYY HH:MM:SS AM/PM","MMM d hh:mm:ss","Mon DD, YYYY HH:MM:SS","YYYY-MM-DD HH:MM:SS","yyMMdd HH:mm:ss","yyyy-MM-ddTHH:mm:ssK"}
type LogFileTextSettings_RecordStartTimestampFormat string

const (
	LogFileTextSettings_RecordStartTimestampFormat_DdMMMYyyyHHMmSsZzz = LogFileTextSettings_RecordStartTimestampFormat("dd/MMM/yyyy:HH:mm:ss zzz")
	LogFileTextSettings_RecordStartTimestampFormat_DdMMyyHHMmSs       = LogFileTextSettings_RecordStartTimestampFormat("ddMMyy HH:mm:ss")
	LogFileTextSettings_RecordStartTimestampFormat_ISO8601            = LogFileTextSettings_RecordStartTimestampFormat("ISO 8601")
	LogFileTextSettings_RecordStartTimestampFormat_MDYYYYHHMMSSAMPM   = LogFileTextSettings_RecordStartTimestampFormat("M/D/YYYY HH:MM:SS AM/PM")
	LogFileTextSettings_RecordStartTimestampFormat_MMMDHhMmSs         = LogFileTextSettings_RecordStartTimestampFormat("MMM d hh:mm:ss")
	LogFileTextSettings_RecordStartTimestampFormat_MonDDYYYYHHMMSS    = LogFileTextSettings_RecordStartTimestampFormat("Mon DD, YYYY HH:MM:SS")
	LogFileTextSettings_RecordStartTimestampFormat_YYYYMMDDHHMMSS     = LogFileTextSettings_RecordStartTimestampFormat("YYYY-MM-DD HH:MM:SS")
	LogFileTextSettings_RecordStartTimestampFormat_YyMMddHHMmSs       = LogFileTextSettings_RecordStartTimestampFormat("yyMMdd HH:mm:ss")
	LogFileTextSettings_RecordStartTimestampFormat_YyyyMMDdTHHMmSsK   = LogFileTextSettings_RecordStartTimestampFormat("yyyy-MM-ddTHH:mm:ssK")
)

// Mapping from string to LogFileTextSettings_RecordStartTimestampFormat
var logFileTextSettings_RecordStartTimestampFormat_Values = map[string]LogFileTextSettings_RecordStartTimestampFormat{
	"dd/mmm/yyyy:hh:mm:ss zzz": LogFileTextSettings_RecordStartTimestampFormat_DdMMMYyyyHHMmSsZzz,
	"ddmmyy hh:mm:ss":          LogFileTextSettings_RecordStartTimestampFormat_DdMMyyHHMmSs,
	"iso 8601":                 LogFileTextSettings_RecordStartTimestampFormat_ISO8601,
	"m/d/yyyy hh:mm:ss am/pm":  LogFileTextSettings_RecordStartTimestampFormat_MDYYYYHHMMSSAMPM,
	"mmm d hh:mm:ss":           LogFileTextSettings_RecordStartTimestampFormat_MMMDHhMmSs,
	"mon dd, yyyy hh:mm:ss":    LogFileTextSettings_RecordStartTimestampFormat_MonDDYYYYHHMMSS,
	"yyyy-mm-dd hh:mm:ss":      LogFileTextSettings_RecordStartTimestampFormat_YYYYMMDDHHMMSS,
	"yymmdd hh:mm:ss":          LogFileTextSettings_RecordStartTimestampFormat_YyMMddHHMmSs,
	"yyyy-mm-ddthh:mm:ssk":     LogFileTextSettings_RecordStartTimestampFormat_YyyyMMDdTHHMmSsK,
}
