func NewDesc(fqName string, help string, variableLabels []string, constLabels Labels,
	stabilityLevel StabilityLevel, deprecatedVersion string) *Desc {
	d := &Desc{
		fqName:            fqName,
		help:              help,
		annotatedHelp:     help,
		variableLabels:    variableLabels,
		constLabels:       constLabels,
		stabilityLevel:    stabilityLevel,
		deprecatedVersion: deprecatedVersion,
	}
	d.stabilityLevel.setDefaults()
	return d
}
NewDesc extends prometheus.NewDesc with stability support.

The stabilityLevel should be valid stability label, such as "metrics.ALPHA"
and "metrics.STABLE"(Maybe "metrics.BETA" in future). Default value "metrics.ALPHA"
will be used in case of empty or invalid stability label.

The deprecatedVersion represents in which version this Metric be deprecated.
The deprecation policy outlined by the control plane metrics stability KEP.
package metrics
import (
	"fmt"
	"sync"
	"github.com/blang/semver"
	"github.com/prometheus/client_golang/prometheus"
	"k8s.io/klog/v2"
)
type Desc struct {
	fqName string
	help string
	constLabels Labels
	variableLabels []string
	promDesc      *prometheus.Desc
	annotatedHelp string
	stabilityLevel StabilityLevel
	deprecatedVersion string
	isDeprecated        bool
	isHidden            bool
	isCreated           bool
	createLock          sync.RWMutex
	markDeprecationOnce sync.Once
	createOnce          sync.Once
	deprecateOnce       sync.Once
	hideOnce            sync.Once
	annotateOnce        sync.Once
}