func (d *Desc) String() string {
	if d.isCreated {
		return d.promDesc.String()
	}
	return prometheus.NewDesc(d.fqName, d.help, d.variableLabels, prometheus.Labels(d.constLabels)).String()
}
String formats the Desc as a string.
The stability metadata maybe annotated in 'HELP' section if called after registry,
otherwise not.
e.g. "Desc{fqName: "normal_stable_descriptor", help: "[STABLE] this is a stable descriptor", constLabels: {}, variableLabels: []}"
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
}
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
}