// Code generated by applyconfiguration-gen. DO NOT EDIT.

package v1alpha1

// NodeExporterCollectorConfigApplyConfiguration represents a declarative configuration of the NodeExporterCollectorConfig type for use
// with apply.
//
// NodeExporterCollectorConfig defines settings for individual collectors
// of the node-exporter agent. Each collector can be individually set to collect or not collect metrics.
// At least one collector must be specified.
type NodeExporterCollectorConfigApplyConfiguration struct {
	// cpuFreq configures the cpufreq collector, which collects CPU frequency statistics.
	// cpuFreq is optional.
	// When omitted, this means no opinion and the platform is left to choose a reasonable default,
	// which is subject to change over time. The current default is disabled.
	// Consider enabling when you need to observe CPU frequency scaling; expect higher CPU usage on
	// many-core nodes when collectionPolicy is Collect.
	CpuFreq *NodeExporterCollectorCpufreqConfigApplyConfiguration `json:"cpuFreq,omitempty"`
	// tcpStat configures the tcpstat collector, which collects TCP connection statistics.
	// tcpStat is optional.
	// When omitted, this means no opinion and the platform is left to choose a reasonable default,
	// which is subject to change over time. The current default is disabled.
	// Enable when debugging TCP connection behavior or capacity at the node level.
	TcpStat *NodeExporterCollectorTcpStatConfigApplyConfiguration `json:"tcpStat,omitempty"`
	// ethtool configures the ethtool collector, which collects ethernet device statistics.
	// ethtool is optional.
	// When omitted, this means no opinion and the platform is left to choose a reasonable default,
	// which is subject to change over time. The current default is disabled.
	// Enable when you need NIC driver-level ethtool metrics beyond generic netdev counters.
	Ethtool *NodeExporterCollectorEthtoolConfigApplyConfiguration `json:"ethtool,omitempty"`
	// netDev configures the netdev collector, which collects network device statistics.
	// netDev is optional.
	// When omitted, this means no opinion and the platform is left to choose a reasonable default,
	// which is subject to change over time. The current default is enabled.
	// Turn off if you must reduce per-interface metric cardinality on hosts with many virtual interfaces.
	NetDev *NodeExporterCollectorNetDevConfigApplyConfiguration `json:"netDev,omitempty"`
	// netClass configures the netclass collector, which collects information about network devices.
	// netClass is optional.
	// When omitted, this means no opinion and the platform is left to choose a reasonable default,
	// which is subject to change over time. The current default is enabled with netlink mode active.
	// Use statsGatherer when sysfs vs netlink implementation matters or when matching node_exporter tuning.
	NetClass *NodeExporterCollectorNetClassConfigApplyConfiguration `json:"netClass,omitempty"`
	// buddyInfo configures the buddyinfo collector, which collects statistics about memory
	// fragmentation from the node_buddyinfo_blocks metric. This metric collects data from /proc/buddyinfo.
	// buddyInfo is optional.
	// When omitted, this means no opinion and the platform is left to choose a reasonable default,
	// which is subject to change over time. The current default is disabled.
	// Enable when investigating kernel memory fragmentation; typically for advanced troubleshooting only.
	BuddyInfo *NodeExporterCollectorBuddyInfoConfigApplyConfiguration `json:"buddyInfo,omitempty"`
	// mountStats configures the mountstats collector, which collects statistics about NFS volume
	// I/O activities.
	// mountStats is optional.
	// When omitted, this means no opinion and the platform is left to choose a reasonable default,
	// which is subject to change over time. The current default is disabled.
	// Enabling this collector may produce metrics with high cardinality. If you enable this
	// collector, closely monitor the prometheus-k8s deployment for excessive memory usage.
	// Enable when you care about per-mount NFS client statistics.
	MountStats *NodeExporterCollectorMountStatsConfigApplyConfiguration `json:"mountStats,omitempty"`
	// ksmd configures the ksmd collector, which collects statistics from the kernel same-page
	// merger daemon.
	// ksmd is optional.
	// When omitted, this means no opinion and the platform is left to choose a reasonable default,
	// which is subject to change over time. The current default is disabled.
	// Enable on nodes where KSM is in use and you want visibility into merging activity.
	Ksmd *NodeExporterCollectorKSMDConfigApplyConfiguration `json:"ksmd,omitempty"`
	// processes configures the processes collector, which collects statistics from processes and
	// threads running in the system.
	// processes is optional.
	// When omitted, this means no opinion and the platform is left to choose a reasonable default,
	// which is subject to change over time. The current default is disabled.
	// Enable for process/thread-level insight; can be expensive on busy nodes.
	Processes *NodeExporterCollectorProcessesConfigApplyConfiguration `json:"processes,omitempty"`
	// systemd configures the systemd collector, which collects statistics on the systemd daemon
	// and its managed services.
	// systemd is optional.
	// When omitted, this means no opinion and the platform is left to choose a reasonable default,
	// which is subject to change over time. The current default is disabled.
	// Enabling this collector with a long list of selected units may produce metrics with high
	// cardinality. If you enable this collector, closely monitor the prometheus-k8s deployment
	// for excessive memory usage.
	// Enable when you need metrics for specific units; scope units carefully.
	Systemd *NodeExporterCollectorSystemdConfigApplyConfiguration `json:"systemd,omitempty"`
	// softirqs configures the softirqs collector, which exposes detailed softirq statistics
	// from /proc/softirqs.
	// softirqs is optional.
	// When omitted, this means no opinion and the platform is left to choose a reasonable default,
	// which is subject to change over time. The current default is disabled.
	// Enable when you need visibility into kernel softirq processing across CPUs.
	Softirqs *NodeExporterCollectorSoftirqsConfigApplyConfiguration `json:"softirqs,omitempty"`
}

// NodeExporterCollectorConfigApplyConfiguration constructs a declarative configuration of the NodeExporterCollectorConfig type for use with
// apply.
func NodeExporterCollectorConfig() *NodeExporterCollectorConfigApplyConfiguration {
	return &NodeExporterCollectorConfigApplyConfiguration{}
}

// WithCpuFreq sets the CpuFreq field in the declarative configuration to the given value
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
// If called multiple times, the CpuFreq field is set to the value of the last call.
func (b *NodeExporterCollectorConfigApplyConfiguration) WithCpuFreq(value *NodeExporterCollectorCpufreqConfigApplyConfiguration) *NodeExporterCollectorConfigApplyConfiguration {
	b.CpuFreq = value
	return b
}

// WithTcpStat sets the TcpStat field in the declarative configuration to the given value
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
// If called multiple times, the TcpStat field is set to the value of the last call.
func (b *NodeExporterCollectorConfigApplyConfiguration) WithTcpStat(value *NodeExporterCollectorTcpStatConfigApplyConfiguration) *NodeExporterCollectorConfigApplyConfiguration {
	b.TcpStat = value
	return b
}

// WithEthtool sets the Ethtool field in the declarative configuration to the given value
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
// If called multiple times, the Ethtool field is set to the value of the last call.
func (b *NodeExporterCollectorConfigApplyConfiguration) WithEthtool(value *NodeExporterCollectorEthtoolConfigApplyConfiguration) *NodeExporterCollectorConfigApplyConfiguration {
	b.Ethtool = value
	return b
}

// WithNetDev sets the NetDev field in the declarative configuration to the given value
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
// If called multiple times, the NetDev field is set to the value of the last call.
func (b *NodeExporterCollectorConfigApplyConfiguration) WithNetDev(value *NodeExporterCollectorNetDevConfigApplyConfiguration) *NodeExporterCollectorConfigApplyConfiguration {
	b.NetDev = value
	return b
}

// WithNetClass sets the NetClass field in the declarative configuration to the given value
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
// If called multiple times, the NetClass field is set to the value of the last call.
func (b *NodeExporterCollectorConfigApplyConfiguration) WithNetClass(value *NodeExporterCollectorNetClassConfigApplyConfiguration) *NodeExporterCollectorConfigApplyConfiguration {
	b.NetClass = value
	return b
}

// WithBuddyInfo sets the BuddyInfo field in the declarative configuration to the given value
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
// If called multiple times, the BuddyInfo field is set to the value of the last call.
func (b *NodeExporterCollectorConfigApplyConfiguration) WithBuddyInfo(value *NodeExporterCollectorBuddyInfoConfigApplyConfiguration) *NodeExporterCollectorConfigApplyConfiguration {
	b.BuddyInfo = value
	return b
}

// WithMountStats sets the MountStats field in the declarative configuration to the given value
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
// If called multiple times, the MountStats field is set to the value of the last call.
func (b *NodeExporterCollectorConfigApplyConfiguration) WithMountStats(value *NodeExporterCollectorMountStatsConfigApplyConfiguration) *NodeExporterCollectorConfigApplyConfiguration {
	b.MountStats = value
	return b
}

// WithKsmd sets the Ksmd field in the declarative configuration to the given value
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
// If called multiple times, the Ksmd field is set to the value of the last call.
func (b *NodeExporterCollectorConfigApplyConfiguration) WithKsmd(value *NodeExporterCollectorKSMDConfigApplyConfiguration) *NodeExporterCollectorConfigApplyConfiguration {
	b.Ksmd = value
	return b
}

// WithProcesses sets the Processes field in the declarative configuration to the given value
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
// If called multiple times, the Processes field is set to the value of the last call.
func (b *NodeExporterCollectorConfigApplyConfiguration) WithProcesses(value *NodeExporterCollectorProcessesConfigApplyConfiguration) *NodeExporterCollectorConfigApplyConfiguration {
	b.Processes = value
	return b
}

// WithSystemd sets the Systemd field in the declarative configuration to the given value
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
// If called multiple times, the Systemd field is set to the value of the last call.
func (b *NodeExporterCollectorConfigApplyConfiguration) WithSystemd(value *NodeExporterCollectorSystemdConfigApplyConfiguration) *NodeExporterCollectorConfigApplyConfiguration {
	b.Systemd = value
	return b
}

// WithSoftirqs sets the Softirqs field in the declarative configuration to the given value
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
// If called multiple times, the Softirqs field is set to the value of the last call.
func (b *NodeExporterCollectorConfigApplyConfiguration) WithSoftirqs(value *NodeExporterCollectorSoftirqsConfigApplyConfiguration) *NodeExporterCollectorConfigApplyConfiguration {
	b.Softirqs = value
	return b
}
