Repository: NetApp/harvest
Pull request #876 (2022-02-23 14:17:58)

feat: security apis as normal rest calls
<img width="1964" alt="image" src="https://user-images.githubusercontent.com/83282894/155336821-fa3afa56-8a29-4b56-8886-cf3b0a0e6936.png">

![image](https://user-images.githubusercontent.com/83282894/155336895-cce88105-5937-4ad6-a945-b46a21cd2498.png)


![image](https://user-images.githubusercontent.com/83282894/155336938-d2c524a1-613f-4e79-a06b-293b13701964.png)


Hardikl: Changes for part-1:
- Cluster compliance 
Pending: 
      1. log forward --> just testing pending
      2. certificate validity --> cert processing 
      3. complient. --> Oring all fields
      4. certificate issue type  --> cert processing 
      5. ocsp. --> deprecated
- SVM Compliance
Pending: 
      1. fpolicy --> just testing pending



<img width="1979" alt="image" src="https://user-images.githubusercontent.com/83282894/157238365-f2446e1a-5867-41fc-88be-3ca9a16ba342.png">



New things added:
--> Modification in value_to_num plugin to support contains regex:
Example: 
```
      value_to_num:
        - samluser methods online *saml* `0`
```
Hardikl: UI comparison:
1. Cluster Compliance

UM:
<img width="385" alt="image" src="https://user-images.githubusercontent.com/83282894/158782378-f63edf72-dd8a-48f4-a462-a86f9b15f1c7.png">

<img width="1571" alt="image" src="https://user-images.githubusercontent.com/83282894/158782486-0fa57c85-da8e-4910-921f-44f9dc833dac.png">

Harvest:
<img width="1716" alt="image" src="https://user-images.githubusercontent.com/83282894/158782622-51cd3ecc-65f6-4bdc-8ea7-88e48b742373.png">

3. Storage VMs Compliance:

UM:
<img width="390" alt="image" src="https://user-images.githubusercontent.com/83282894/158782874-2fd556ae-21ad-4dba-9846-f24d139d91cb.png">

<img width="1540" alt="image" src="https://user-images.githubusercontent.com/83282894/158782968-e8d5802c-6026-496e-9598-7fcb069d73c2.png">

Harvest:
<img width="1707" alt="image" src="https://user-images.githubusercontent.com/83282894/158783022-62ee53cb-220f-4e1c-bd72-c4d50555ed22.png">

3. Cluster Authentication And Certificates

UM:
<img width="415" alt="image" src="https://user-images.githubusercontent.com/83282894/158783123-6dc41142-1ef2-4d25-b8ea-097ffbe773d5.png">

Harvest:
<img width="1718" alt="image" src="https://user-images.githubusercontent.com/83282894/158783198-f3dbe994-ff57-491d-939b-7523a793ddaf.png">


Hardikl: 4. Volume encryption:

UM:
<img width="352" alt="image" src="https://user-images.githubusercontent.com/83282894/158988387-322d3b41-64ec-4ade-b556-18d7e16f51c9.png">

<img width="1799" alt="image" src="https://user-images.githubusercontent.com/83282894/158988438-17bb7cbe-3028-4d63-995a-4195b2511d3a.png">

Harvest:
<img width="1962" alt="image" src="https://user-images.githubusercontent.com/83282894/158988604-3d6a8fe1-c58a-46dd-9c2c-372dc8dfe659.png">

5. Storage VM and Volume Anti-ransomware Status

UM:
<img width="887" alt="image" src="https://user-images.githubusercontent.com/83282894/158988677-575fcb9c-4afb-4b0a-b557-ecea4ba9551a.png">

<img width="1798" alt="image" src="https://user-images.githubusercontent.com/83282894/158988722-0578140a-5d79-467d-b325-419c5f5e3e4b.png">

<img width="1800" alt="image" src="https://user-images.githubusercontent.com/83282894/158988751-4afedc0a-4fa6-486d-b522-fc8a0a0502ed.png">

Harvest:
<img width="1964" alt="image" src="https://user-images.githubusercontent.com/83282894/158988842-edc40538-16d6-49b7-bdd5-a70691eb1935.png">


Patch:
diff --git a/cmd/collectors/rest/plugins/certificate/certificate.go b/cmd/collectors/rest/plugins/certificate/certificate.go
new file mode 100644
index 00000000..efd788ec
--- /dev/null
+++ b/cmd/collectors/rest/plugins/certificate/certificate.go
@@ -0,0 +1,248 @@
+/*
+ * Copyright NetApp Inc, 2022 All rights reserved
+ */
+
+package certificate
+
+import (
+	"crypto/x509"
+	"encoding/pem"
+	"github.com/tidwall/gjson"
+	"goharvest2/cmd/collectors/rest/plugins"
+	"goharvest2/cmd/poller/plugin"
+	"goharvest2/cmd/tools/rest"
+	"goharvest2/pkg/conf"
+	"goharvest2/pkg/dict"
+	"goharvest2/pkg/matrix"
+	"goharvest2/pkg/tree/node"
+	"time"
+)
+
+const DefaultPluginDuration = 30 * time.Minute
+const DefaultDataPollDuration = 3 * time.Minute
+
+type Certificate struct {
+	*plugin.AbstractPlugin
+	data                 *matrix.Matrix
+	instanceKeys         map[string]string
+	instanceLabels       map[string]*dict.Dict
+	pluginInvocationRate int
+	currentVal           int
+	client               *rest.Client
+	query                string
+}
+
+func New(p *plugin.AbstractPlugin) plugin.Plugin {
+	return &Certificate{AbstractPlugin: p}
+}
+
+func (my *Certificate) Init() error {
+
+	var err error
+
+	if err = my.InitAbc(); err != nil {
+		return err
+	}
+
+	timeout := rest.DefaultTimeout * time.Second
+	if my.client, err = rest.New(conf.ZapiPoller(my.ParentParams), timeout); err != nil {
+		my.Logger.Error().Stack().Err(err).Msg("connecting")
+		return err
+	}
+
+	if err = my.client.Init(5); err != nil {
+		return err
+	}
+
+	// Assigned the value to currentVal so that plugin would be invoked first time to populate cache.
+	if my.currentVal, err = my.setPluginInterval(); err != nil {
+		my.Logger.Error().Err(err).Stack().Msg("Failed while setting the plugin interval")
+		return err
+	}
+
+	return nil
+}
+
+func (my *Certificate) Run(data *matrix.Matrix) ([]*matrix.Matrix, error) {
+
+	var (
+		adminVserver       string
+		adminVserverSerial string
+		err                error
+	)
+
+	if my.currentVal >= my.pluginInvocationRate {
+		my.currentVal = 0
+
+		// invoke private vserver cli rest and get admin vserver name
+		if adminVserver, err = my.GetAdminVserver(); err != nil {
+			my.Logger.Warn().Stack().Err(err).Msg("Failed to collect admin vserver")
+			return nil, nil
+		}
+
+		// invoke private ssl cli rest and get admin vserver's serial number
+		if adminVserverSerial, err = my.GetSecuritySsl(adminVserver); err != nil {
+			my.Logger.Warn().Stack().Err(err).Msg("Failed to collect admin vserver's serial number")
+			return nil, nil
+		}
+
+		// update certificate instance based on admin vaserver serial
+		for _, certificateInstance := range data.GetInstances() {
+			if certificateInstance.IsExportable() {
+				certificateInstance.SetExportable(false)
+				serialNumber := certificateInstance.GetLabel("serial_number")
+
+				if serialNumber == adminVserverSerial {
+					certificateInstance.SetExportable(true)
+					my.setCertificateIssuerType(certificateInstance)
+					my.setCertificateValidity(data, certificateInstance)
+				}
+			}
+		}
+
+	}
+
+	my.currentVal++
+	return nil, nil
+}
+
+func (my *Certificate) setCertificateIssuerType(instance *matrix.Instance) {
+	var (
+		cert *x509.Certificate
+		err  error
+	)
+
+	certificatePEM := instance.GetLabel("certificatePEM")
+	certUuid := instance.GetLabel("uuid")
+
+	if certificatePEM == "" {
+		my.Logger.Warn().Str("uuid", certUuid).Msg("Certificate is not found")
+		instance.SetLabel("certificateIssuerType", "unknown")
+	} else {
+		instance.SetLabel("certificateIssuerType", "self_signed")
+		certDecoded, _ := pem.Decode([]byte(certificatePEM))
+		if certDecoded == nil {
+			my.Logger.Warn().Msg("PEM formatted object is not a X.509 certificate. Only PEM formatted X.509 certificate input is allowed")
+			instance.SetLabel("certificateIssuerType", "unknown")
+			return
+		}
+
+		if cert, err = x509.ParseCertificate(certDecoded.Bytes); err != nil {
+			my.Logger.Warn().Msg("PEM formatted object is not a X.509 certificate. Only PEM formatted X.509 certificate input is allowed")
+			instance.SetLabel("certificateIssuerType", "unknown")
+			return
+		}
+
+		// Verifies if certificate is self-issued. This is true if the subject and issuer are equal.
+		if cert.Subject.String() == cert.Issuer.String() {
+			// Verifies if certificate is self-signed. This is true if the certificate is signed using its own public key.
+			if err = cert.CheckSignature(x509.SHA256WithRSA, cert.RawTBSCertificate, cert.Signature); err != nil {
+				// Any verification exception means it is not signed with the give key. i.e. not self-signed
+				instance.SetLabel("certificateIssuerType", "ca_signed")
+			}
+		}
+	}
+}
+
+func (my *Certificate) setCertificateValidity(data *matrix.Matrix, instance *matrix.Instance) {
+	var (
+		expiryTimeMetric matrix.Metric
+	)
+
+	instance.SetLabel("certificateExpiryStatus", "unknown")
+
+	if expiryTimeMetric = data.GetMetric("expiry_time"); expiryTimeMetric == nil {
+		my.Logger.Error().Stack().Msg("missing expiry time metric")
+		return
+	}
+
+	if expiryTime, ok := expiryTimeMetric.GetValueFloat64(instance); ok {
+		// convert expiryTime from float64 to int64 and find difference
+		timestampDiff := time.Unix(int64(expiryTime), 0).Sub(time.Now()).Hours()
+
+		if timestampDiff <= 0 {
+			instance.SetLabel("certificateExpiryStatus", "expired")
+		} else {
+			// daysRemaining will be more than 0 if it has reached this point, convert to days
+			daysRemaining := timestampDiff / 24
+			if daysRemaining < 60 {
+				instance.SetLabel("certificateExpiryStatus", "expiring")
+			} else {
+				instance.SetLabel("certificateExpiryStatus", "active")
+			}
+		}
+	}
+
+}
+
+func (my *Certificate) setPluginInterval() (int, error) {
+
+	volumeDataInterval := my.getDataInterval(my.ParentParams, DefaultDataPollDuration)
+	pluginDataInterval := my.getDataInterval(my.Params, DefaultPluginDuration)
+	my.Logger.Debug().Float64("VolumeDataInterval", volumeDataInterval).Float64("PluginDataInterval", pluginDataInterval).Msg("Poll intervals in seconds")
+	my.pluginInvocationRate = int(pluginDataInterval / volumeDataInterval)
+
+	return my.pluginInvocationRate, nil
+}
+
+func (my *Certificate) getDataInterval(param *node.Node, defaultInterval time.Duration) float64 {
+	var dataIntervalStr = ""
+	schedule := param.GetChildS("schedule")
+	if schedule != nil {
+		dataInterval := schedule.GetChildS("data")
+		if dataInterval != nil {
+			dataIntervalStr = dataInterval.GetContentS()
+			if durationVal, err := time.ParseDuration(dataIntervalStr); err == nil {
+				return durationVal.Seconds()
+			} else {
+				my.Logger.Error().Stack().Err(err).Str("dataInterval", dataIntervalStr).Msg("Failed to parse duration")
+			}
+		}
+	}
+	return defaultInterval.Seconds()
+}
+
+func (my *Certificate) GetAdminVserver() (string, error) {
+
+	var (
+		result       []gjson.Result
+		err          error
+		adminVserver string
+	)
+
+	query := "api/private/cli/vserver"
+	href := rest.BuildHref("", "type", []string{"type=admin"}, "", "", "", "", query)
+
+	if result, err = plugins.InvokeRestCall(my.client, query, href, my.Logger); err != nil {
+		return "", err
+	}
+
+	// This should be one iteration only as cluster can have one admin vserver
+	for _, svm := range result {
+		adminVserver = svm.Get("vserver").String()
+	}
+	return adminVserver, nil
+}
+
+func (my *Certificate) GetSecuritySsl(adminSvm string) (string, error) {
+
+	var (
+		result      []gjson.Result
+		err         error
+		adminSerial string
+	)
+
+	query := "api/private/cli/security/ssl"
+	href := rest.BuildHref("", "serial", []string{"vserver=" + adminSvm}, "", "", "", "", query)
+
+	if result, err = plugins.InvokeRestCall(my.client, query, href, my.Logger); err != nil {
+		return "", err
+	}
+
+	// This should be one iteration only as cluster can have one admin vserver
+	for _, ssl := range result {
+		adminSerial = ssl.Get("serial").String()
+	}
+
+	return adminSerial, nil
+}
diff --git a/cmd/collectors/rest/plugins/qtree/qtree.go b/cmd/collectors/rest/plugins/qtree/qtree.go
index 57394185..b6833b59 100644
--- a/cmd/collectors/rest/plugins/qtree/qtree.go
+++ b/cmd/collectors/rest/plugins/qtree/qtree.go
@@ -5,8 +5,8 @@
 package qtree
 
 import (
-	"encoding/json"
 	"github.com/tidwall/gjson"
+	"goharvest2/cmd/collectors/rest/plugins"
 	"goharvest2/cmd/poller/plugin"
 	"goharvest2/cmd/tools/rest"
 	"goharvest2/pkg/conf"
@@ -104,8 +104,7 @@ func (my *Qtree) Init() error {
 
 func (my *Qtree) Run(data *matrix.Matrix) ([]*matrix.Matrix, error) {
 	var (
-		records       []interface{}
-		content       []byte
+		result        []gjson.Result
 		quotaInstance *matrix.Instance
 		output        []*matrix.Matrix
 		err           error
@@ -120,34 +119,11 @@ func (my *Qtree) Run(data *matrix.Matrix) ([]*matrix.Matrix, error) {
 
 	href := rest.BuildHref("", "*", nil, "", "", "", "", my.query)
 
-	err = rest.FetchData(my.client, href, &records)
-	if err != nil {
-		my.Logger.Error().Stack().Err(err).Str("href", href).Msg("Failed to fetch data")
+	if result, err = plugins.InvokeRestCall(my.client, my.query, href, my.Logger); err != nil {
 		return nil, err
 	}
 
-	all := rest.Pagination{
-		Records:    records,
-		NumRecords: len(records),
-	}
-
-	content, err = json.Marshal(all)
-	if err != nil {
-		my.Logger.Error().Err(err).Str("ApiPath", my.query).Msg("Unable to marshal rest pagination")
-	}
-
-	if !gjson.ValidBytes(content) {
-		my.Logger.Error().Err(err).Str("Api", my.query).Msg("Invalid json")
-		return nil, errors.New(errors.API_RESPONSE, "Invalid json")
-	}
-
-	results := gjson.GetManyBytes(content, "num_records", "records")
-	numRecords := results[0]
-	if numRecords.Int() == 0 {
-		return nil, errors.New(errors.ERR_NO_INSTANCE, "no "+my.query+" instances on cluster")
-	}
-
-	for _, quota := range results[1].Array() {
+	for _, quota := range result {
 		var tree string
 
 		if !quota.IsObject() {
diff --git a/cmd/collectors/rest/plugins/snapmirror/snapmirror.go b/cmd/collectors/rest/plugins/snapmirror/snapmirror.go
index 035adc6b..7c893d48 100644
--- a/cmd/collectors/rest/plugins/snapmirror/snapmirror.go
+++ b/cmd/collectors/rest/plugins/snapmirror/snapmirror.go
@@ -4,13 +4,11 @@
 package snapmirror
 
 import (
-	"encoding/json"
 	"github.com/tidwall/gjson"
 	"goharvest2/cmd/collectors/rest/plugins"
 	"goharvest2/cmd/poller/plugin"
 	"goharvest2/cmd/tools/rest"
 	"goharvest2/pkg/conf"
-	"goharvest2/pkg/errors"
 	"goharvest2/pkg/matrix"
 	"time"
 )
@@ -75,44 +73,19 @@ func (my *SnapMirror) Run(data *matrix.Matrix) ([]*matrix.Matrix, error) {
 
 func (my *SnapMirror) updateNodeCache() error {
 	var (
-		records []interface{}
-		content []byte
-		err     error
+		result []gjson.Result
+		err    error
 	)
 
 	// Clean svmVolToNode map
 	my.svmVolToNode = make(map[string]string)
-
 	href := rest.BuildHref("", "node", nil, "", "", "", "", my.query)
 
-	err = rest.FetchData(my.client, href, &records)
-	if err != nil {
-		my.Logger.Error().Stack().Err(err).Str("href", href).Msg("Failed to fetch data")
+	if result, err = plugins.InvokeRestCall(my.client, my.query, href, my.Logger); err != nil {
 		return err
 	}
 
-	all := rest.Pagination{
-		Records:    records,
-		NumRecords: len(records),
-	}
-
-	content, err = json.Marshal(all)
-	if err != nil {
-		my.Logger.Error().Err(err).Str("ApiPath", my.query).Msg("Unable to marshal rest pagination")
-	}
-
-	if !gjson.ValidBytes(content) {
-		my.Logger.Error().Err(err).Str("Api", my.query).Msg("Invalid json")
-		return errors.New(errors.API_RESPONSE, "Invalid json")
-	}
-
-	results := gjson.GetManyBytes(content, "num_records", "records")
-	numRecords := results[0]
-	if numRecords.Int() == 0 {
-		return errors.New(errors.ERR_NO_INSTANCE, "no "+my.query+" instances on cluster")
-	}
-
-	for _, volume := range results[1].Array() {
+	for _, volume := range result {
 		volumeName := volume.Get("volume").String()
 		vserverName := volume.Get("vserver").String()
 		nodeName := volume.Get("node").String()
diff --git a/cmd/collectors/rest/plugins/svm/svm.go b/cmd/collectors/rest/plugins/svm/svm.go
new file mode 100644
index 00000000..0d150898
--- /dev/null
+++ b/cmd/collectors/rest/plugins/svm/svm.go
@@ -0,0 +1,47 @@
+/*
+ * Copyright NetApp Inc, 2022 All rights reserved
+ */
+
+package svm
+
+import (
+	"goharvest2/cmd/poller/plugin"
+	"goharvest2/pkg/matrix"
+	"strings"
+)
+
+type SVM struct {
+	*plugin.AbstractPlugin
+}
+
+func New(p *plugin.AbstractPlugin) plugin.Plugin {
+	return &SVM{AbstractPlugin: p}
+}
+
+func (my *SVM) Run(data *matrix.Matrix) ([]*matrix.Matrix, error) {
+	my.setNameservice(data)
+	return nil, nil
+}
+
+func (my *SVM) setNameservice(data *matrix.Matrix) {
+	for _, instance := range data.GetInstances() {
+		requiredNSDb := false
+		requiredNSSource := false
+		ns := instance.GetLabel("nameservice_switch")
+		nisDomain := instance.GetLabel("nis_domain")
+
+		if strings.Contains(ns, "passwd") || strings.Contains(ns, "group") || strings.Contains(ns, "netgroup") {
+			requiredNSDb = true
+			if strings.Contains(ns, "nis") {
+				requiredNSSource = true
+			}
+		}
+
+		if nisDomain != "" && requiredNSDb && requiredNSSource {
+			instance.SetLabel("nis_authentication_enabled", "true")
+		} else {
+			instance.SetLabel("nis_authentication_enabled", "false")
+		}
+	}
+
+}
diff --git a/cmd/collectors/rest/plugins/util.go b/cmd/collectors/rest/plugins/util.go
index 72a1e458..0d540818 100644
--- a/cmd/collectors/rest/plugins/util.go
+++ b/cmd/collectors/rest/plugins/util.go
@@ -1,6 +1,11 @@
 package plugins
 
 import (
+	"encoding/json"
+	"github.com/tidwall/gjson"
+	"goharvest2/cmd/tools/rest"
+	"goharvest2/pkg/errors"
+	"goharvest2/pkg/logging"
 	"goharvest2/pkg/matrix"
 	"strings"
 )
@@ -60,3 +65,41 @@ func UpdateProtectedFields(instance *matrix.Instance) {
 		instance.SetLabel("derived_relationship_type", relationshipType)
 	}
 }
+
+func InvokeRestCall(client *rest.Client, query string, href string, logger *logging.Logger) ([]gjson.Result, error) {
+	var (
+		records []interface{}
+		content []byte
+		err     error
+	)
+
+	err = rest.FetchData(client, href, &records)
+	if err != nil {
+		logger.Error().Stack().Err(err).Str("href", href).Msg("Failed to fetch data")
+		return []gjson.Result{}, err
+	}
+
+	all := rest.Pagination{
+		Records:    records,
+		NumRecords: len(records),
+	}
+
+	content, err = json.Marshal(all)
+	if err != nil {
+		logger.Error().Err(err).Str("ApiPath", query).Msg("Unable to marshal rest pagination")
+		return []gjson.Result{}, err
+	}
+
+	if !gjson.ValidBytes(content) {
+		logger.Error().Err(err).Str("Api", query).Msg("Invalid json")
+		return []gjson.Result{}, errors.New(errors.API_RESPONSE, "Invalid json")
+	}
+
+	results := gjson.GetManyBytes(content, "num_records", "records")
+	numRecords := results[0]
+	if numRecords.Int() == 0 {
+		return []gjson.Result{}, errors.New(errors.ERR_NO_INSTANCE, "no "+query+" instances on cluster")
+	}
+
+	return results[1].Array(), nil
+}
diff --git a/cmd/collectors/rest/plugins/volume/volume.go b/cmd/collectors/rest/plugins/volume/volume.go
index cc13f27e..49024dda 100644
--- a/cmd/collectors/rest/plugins/volume/volume.go
+++ b/cmd/collectors/rest/plugins/volume/volume.go
@@ -5,14 +5,12 @@
 package volume
 
 import (
-	"encoding/json"
 	"github.com/tidwall/gjson"
 	"goharvest2/cmd/collectors/rest/plugins"
 	"goharvest2/cmd/poller/plugin"
 	"goharvest2/cmd/tools/rest"
 	"goharvest2/pkg/conf"
 	"goharvest2/pkg/dict"
-	"goharvest2/pkg/errors"
 	"goharvest2/pkg/matrix"
 	"goharvest2/pkg/tree/node"
 	"strconv"
@@ -36,6 +34,7 @@ type Volume struct {
 	outgoingSM           map[string][]string
 	incomingSM           map[string]string
 	isHealthySM          map[string]bool
+	aggrsMap             map[string]string // aggregate-uuid -> aggregate-name map
 }
 
 func New(p *plugin.AbstractPlugin) plugin.Plugin {
@@ -68,6 +67,7 @@ func (my *Volume) Init() error {
 	my.outgoingSM = make(map[string][]string)
 	my.incomingSM = make(map[string]string)
 	my.isHealthySM = make(map[string]bool)
+	my.aggrsMap = make(map[string]string)
 
 	// Assigned the value to currentVal so that plugin would be invoked first time to populate cache.
 	if my.currentVal, err = my.setPluginInterval(); err != nil {
@@ -90,13 +90,21 @@ func (my *Volume) Run(data *matrix.Matrix) ([]*matrix.Matrix, error) {
 	if my.currentVal >= my.pluginInvocationRate {
 		my.currentVal = 0
 
-		// invoke snapmirror zapi and populate info in source and destination snapmirror maps
+		// invoke snapmirror rest and populate info in source and destination snapmirror maps
 		if smSourceMap, smDestinationMap, err := my.GetSnapMirrors(); err != nil {
 			my.Logger.Warn().Stack().Err(err).Msg("Failed to collect snapmirror data")
 		} else {
 			// update internal cache based on volume and SM maps
 			my.updateMaps(data, smSourceMap, smDestinationMap)
 		}
+
+		// invoke disk rest and populate info in aggrsMap
+		if disks, err := my.getDiskData(); err != nil {
+			my.Logger.Warn().Stack().Err(err).Msg("Failed to collect disk data")
+		} else {
+			// update aggrsMap based on disk data
+			my.updateAggrMap(disks)
+		}
 	}
 
 	// update volume instance labels
@@ -133,46 +141,21 @@ func (my *Volume) getDataInterval(param *node.Node, defaultInterval time.Duratio
 
 func (my *Volume) GetSnapMirrors() (map[string][]*matrix.Instance, map[string]*matrix.Instance, error) {
 	var (
-		records []interface{}
-		content []byte
-		err     error
+		result []gjson.Result
+		err    error
 	)
 
 	smSourceMap := make(map[string][]*matrix.Instance)
 	smDestinationMap := make(map[string]*matrix.Instance)
 
 	snapmirrorData := matrix.New(my.Parent+".SnapMirror", "sm", "sm")
-
 	href := rest.BuildHref("", strings.Join(my.snapmirrorFields, ","), nil, "", "", "", "", my.query)
 
-	err = rest.FetchData(my.client, href, &records)
-	if err != nil {
-		my.Logger.Error().Stack().Err(err).Str("href", href).Msg("Failed to fetch data")
+	if result, err = plugins.InvokeRestCall(my.client, my.query, href, my.Logger); err != nil {
 		return nil, nil, err
 	}
 
-	all := rest.Pagination{
-		Records:    records,
-		NumRecords: len(records),
-	}
-
-	content, err = json.Marshal(all)
-	if err != nil {
-		my.Logger.Error().Err(err).Str("ApiPath", my.query).Msg("Unable to marshal rest pagination")
-	}
-
-	if !gjson.ValidBytes(content) {
-		my.Logger.Error().Err(err).Str("Api", my.query).Msg("Invalid json")
-		return nil, nil, errors.New(errors.API_RESPONSE, "Invalid json")
-	}
-
-	results := gjson.GetManyBytes(content, "num_records", "records")
-	numRecords := results[0]
-	if numRecords.Int() == 0 {
-		return nil, nil, errors.New(errors.ERR_NO_INSTANCE, "no "+my.query+" instances on cluster")
-	}
-
-	for _, snapMirror := range results[1].Array() {
+	for _, snapMirror := range result {
 
 		relationshipId := snapMirror.Get("relationship_id").String()
 		groupType := snapMirror.Get("relationship_group_type").String()
@@ -272,6 +255,7 @@ func (my *Volume) updateVolumeLabels(data *matrix.Matrix) {
 		volumeName := volume.GetLabel("volume")
 		svmName := volume.GetLabel("svm")
 		volumeType := volume.GetLabel("type")
+		aggrUuid := volume.GetLabel("aggrUuid")
 		key := volumeName + "-" + svmName
 
 		// Update protectionRole label in volume
@@ -308,5 +292,34 @@ func (my *Volume) updateVolumeLabels(data *matrix.Matrix) {
 			volume.SetLabel("all_sm_healthy", strconv.FormatBool(healthy))
 		}
 
+		_, exist := my.aggrsMap[aggrUuid]
+		volume.SetLabel("isHardwareEncrypted", strconv.FormatBool(exist))
+	}
+}
+
+func (my *Volume) getDiskData() ([]gjson.Result, error) {
+	var (
+		result []gjson.Result
+		err    error
+	)
+
+	diskFields := []string{"aggregates.name", "aggregates.uuid"}
+	query := "api/storage/disks"
+	href := rest.BuildHref("", strings.Join(diskFields, ","), []string{"protection_mode=!data|full"}, "", "", "", "", query)
+
+	if result, err = plugins.InvokeRestCall(my.client, query, href, my.Logger); err != nil {
+		return nil, err
+	}
+	return result, nil
+}
+
+func (my *Volume) updateAggrMap(disks []gjson.Result) {
+	// Clean aggrsMap map
+	my.aggrsMap = make(map[string]string)
+
+	for _, disk := range disks {
+		aggrName := disk.Get("aggregates.name").String()
+		aggrUuid := disk.Get("aggregates.uuid").String()
+		my.aggrsMap[aggrUuid] = aggrName
 	}
 }
diff --git a/cmd/collectors/rest/rest.go b/cmd/collectors/rest/rest.go
index 026233cb..695ee7ce 100644
--- a/cmd/collectors/rest/rest.go
+++ b/cmd/collectors/rest/rest.go
@@ -4,10 +4,12 @@ import (
 	"encoding/json"
 	"fmt"
 	"github.com/tidwall/gjson"
+	"goharvest2/cmd/collectors/rest/plugins/certificate"
 	"goharvest2/cmd/collectors/rest/plugins/disk"
 	"goharvest2/cmd/collectors/rest/plugins/qtree"
 	"goharvest2/cmd/collectors/rest/plugins/shelf"
 	"goharvest2/cmd/collectors/rest/plugins/snapmirror"
+	"goharvest2/cmd/collectors/rest/plugins/svm"
 	"goharvest2/cmd/collectors/rest/plugins/volume"
 	"goharvest2/cmd/poller/collector"
 	"goharvest2/cmd/poller/plugin"
@@ -337,8 +339,8 @@ func (r *Rest) processEndPoints() error {
 		href := rest.BuildHref(r.query(endpoint), strings.Join(r.fields(endpoint), ","), nil, "", "", "", r.Prop.ReturnTimeOut, r.query(endpoint))
 
 		if records, err = r.GetRestData(href); err != nil {
-			r.Logger.Error().Stack().Err(err).Msg("Failed to fetch data")
-			return err
+			r.Logger.Error().Stack().Err(err).Str("ApiPath", endpoint.prop.Query).Msg("Failed to fetch data")
+			continue
 		}
 
 		all := rest.Pagination{
@@ -349,16 +351,19 @@ func (r *Rest) processEndPoints() error {
 		content, err = json.Marshal(all)
 		if err != nil {
 			r.Logger.Error().Err(err).Str("ApiPath", endpoint.prop.Query).Msg("Unable to marshal rest pagination")
+			continue
 		}
 
 		if !gjson.ValidBytes(content) {
-			return fmt.Errorf("json is not valid for: %s", endpoint.prop.Query)
+			r.Logger.Error().Str("ApiPath", endpoint.prop.Query).Msg("Invalid json")
+			continue
 		}
 
 		results := gjson.GetManyBytes(content, "num_records", "records")
 		numRecords := results[0]
 		if numRecords.Int() == 0 {
-			return errors.New(errors.ERR_NO_INSTANCE, "no "+endpoint.prop.Query+" instances on cluster")
+			r.Logger.Warn().Str("ApiPath", endpoint.prop.Query).Msg("no " + endpoint.prop.Query + " instances on cluster")
+			continue
 		}
 
 		r.HandleResults(results[1], endpoint.prop, false)
@@ -388,6 +393,10 @@ func (r *Rest) LoadPlugin(kind string, abc *plugin.AbstractPlugin) plugin.Plugin
 		return snapmirror.New(abc)
 	case "Volume":
 		return volume.New(abc)
+	case "Certificate":
+		return certificate.New(abc)
+	case "SVM":
+		return svm.New(abc)
 	default:
 		r.Logger.Warn().Str("kind", kind).Msg("no rest plugin found ")
 	}
diff --git a/cmd/poller/plugin/label_agent/label_agent.go b/cmd/poller/plugin/label_agent/label_agent.go
index b18646ae..8369b2a3 100644
--- a/cmd/poller/plugin/label_agent/label_agent.go
+++ b/cmd/poller/plugin/label_agent/label_agent.go
@@ -29,6 +29,7 @@ type LabelAgent struct {
 	includeRegexRules    []includeRegexRule
 	valueToNumRules      []valueToNumRule
 	computeMetricRules   []computeMetricRule
+	valueToNumRegexRules []valueToNumRegexRule
 }
 
 func New(p *plugin.AbstractPlugin) plugin.Plugin {
@@ -234,18 +235,20 @@ func (me *LabelAgent) excludeRegex(matrix *matrix.Matrix) error {
 // if label is not equal to value, set instance as non-exportable
 func (me *LabelAgent) includeEquals(matrix *matrix.Matrix) error {
 	for _, instance := range matrix.GetInstances() {
-		isExport := false
-		for _, r := range me.includeEqualsRules {
-			if instance.GetLabel(r.label) == r.value {
-				isExport = true
-				me.Logger.Trace().Str("label", r.label).
-					Str("value", r.value).
-					Str("instance labels", instance.GetLabels().String()).
-					Msg("includeEquals: included")
-				break
+		if instance.IsExportable() {
+			isExport := false
+			for _, r := range me.includeEqualsRules {
+				if instance.GetLabel(r.label) == r.value {
+					isExport = true
+					me.Logger.Trace().Str("label", r.label).
+						Str("value", r.value).
+						Str("instance labels", instance.GetLabels().String()).
+						Msg("includeEquals: included")
+					break
+				}
 			}
+			instance.SetExportable(isExport)
 		}
-		instance.SetExportable(isExport)
 	}
 	return nil
 }
@@ -253,18 +256,20 @@ func (me *LabelAgent) includeEquals(matrix *matrix.Matrix) error {
 // if label does not contains value, set instance as non-exportable
 func (me *LabelAgent) includeContains(matrix *matrix.Matrix) error {
 	for _, instance := range matrix.GetInstances() {
-		isExport := false
-		for _, r := range me.includeContainsRules {
-			if strings.Contains(instance.GetLabel(r.label), r.value) {
-				isExport = true
-				me.Logger.Trace().Str("label", r.label).
-					Str("value", r.value).
-					Str("instance labels", instance.GetLabels().String()).
-					Msg("includeContains: included")
-				break
+		if instance.IsExportable() {
+			isExport := false
+			for _, r := range me.includeContainsRules {
+				if strings.Contains(instance.GetLabel(r.label), r.value) {
+					isExport = true
+					me.Logger.Trace().Str("label", r.label).
+						Str("value", r.value).
+						Str("instance labels", instance.GetLabels().String()).
+						Msg("includeContains: included")
+					break
+				}
 			}
+			instance.SetExportable(isExport)
 		}
-		instance.SetExportable(isExport)
 	}
 	return nil
 }
@@ -274,23 +279,25 @@ func (me *LabelAgent) includeContains(matrix *matrix.Matrix) error {
 // if an instance does not match the regex label it will not be exported
 func (me *LabelAgent) includeRegex(matrix *matrix.Matrix) error {
 	for _, instance := range matrix.GetInstances() {
-		isExport := false
-		for _, r := range me.includeRegexRules {
-			if r.reg.MatchString(instance.GetLabel(r.label)) {
-				isExport = true
-				me.Logger.Trace().Str("label", r.label).
-					Str("regex", r.reg.String()).
-					Str("instance labels", instance.GetLabels().String()).
-					Msg("includeRegex: included")
-				break
+		if instance.IsExportable() {
+			isExport := false
+			for _, r := range me.includeRegexRules {
+				if r.reg.MatchString(instance.GetLabel(r.label)) {
+					isExport = true
+					me.Logger.Trace().Str("label", r.label).
+						Str("regex", r.reg.String()).
+						Str("instance labels", instance.GetLabels().String()).
+						Msg("includeRegex: included")
+					break
+				}
 			}
+			instance.SetExportable(isExport)
 		}
-		instance.SetExportable(isExport)
 	}
 	return nil
 }
 
-func (me *LabelAgent) mapValues(m *matrix.Matrix) error {
+func (me *LabelAgent) mapValueToNum(m *matrix.Matrix) error {
 
 	var (
 		metric matrix.Metric
@@ -350,6 +357,8 @@ func (me *LabelAgent) computeMetrics(m *matrix.Matrix) error {
 			if firstMetricVal = m.GetMetric(r.metricNames[0]); firstMetricVal != nil {
 				if val, ok := firstMetricVal.GetValueFloat64(instance); ok {
 					result = val
+				} else {
+					continue
 				}
 			} else {
 				me.Logger.Warn().Stack().Err(err).Str("metricName", r.metricNames[0]).Msg("computeMetrics: metric not found")
@@ -391,3 +400,34 @@ func (me *LabelAgent) computeMetrics(m *matrix.Matrix) error {
 	}
 	return nil
 }
+
+func (me *LabelAgent) mapValueToNumRegex(m *matrix.Matrix) error {
+	var (
+		metric matrix.Metric
+		err    error
+	)
+
+	// map values for value_to_num mapping rules
+	for _, r := range me.valueToNumRegexRules {
+		if metric = m.GetMetric(r.metric); metric == nil {
+			if metric, err = m.NewMetricUint8(r.metric); err != nil {
+				me.Logger.Error().Stack().Err(err).Msgf("valueToNumRegexMapping: new metric [%s]:", r.metric)
+				return err
+			} else {
+				metric.SetProperty("value_to_num_regex mapping")
+			}
+		}
+
+		for key, instance := range m.GetInstances() {
+			value := instance.GetLabel(r.label)
+			if r.reg[0].MatchString(value) || r.reg[1].MatchString(value) {
+				_ = metric.SetValueUint8(instance, uint8(1))
+				me.Logger.Trace().Msgf("valueToNumRegexMapping: [%s] [%s] mapped (%s) value to %d, regex1: %s, regex2: %s", r.metric, key, value, 1, r.reg[0], r.reg[1])
+			} else if r.hasDefault {
+				_ = metric.SetValueUint8(instance, r.defaultValue)
+				me.Logger.Trace().Msgf("valueToNumRegexMapping: [%s] [%s] mapped (%s) value to default %d, regex1: %s, regex2: %s", r.metric, key, value, r.defaultValue, r.reg[0], r.reg[1])
+			}
+		}
+	}
+	return nil
+}
diff --git a/cmd/poller/plugin/label_agent/parse_rules.go b/cmd/poller/plugin/label_agent/parse_rules.go
index c24dda2f..67166465 100644
--- a/cmd/poller/plugin/label_agent/parse_rules.go
+++ b/cmd/poller/plugin/label_agent/parse_rules.go
@@ -22,9 +22,13 @@ func (me *LabelAgent) parseRules() int {
 	me.excludeEqualsRules = make([]excludeEqualsRule, 0)
 	me.excludeContainsRules = make([]excludeContainsRule, 0)
 	me.excludeRegexRules = make([]excludeRegexRule, 0)
+	me.includeEqualsRules = make([]includeEqualsRule, 0)
+	me.includeContainsRules = make([]includeContainsRule, 0)
+	me.includeRegexRules = make([]includeRegexRule, 0)
 	me.splitPairsRules = make([]splitPairsRule, 0)
 	me.valueToNumRules = make([]valueToNumRule, 0)
 	me.computeMetricRules = make([]computeMetricRule, 0)
+	me.valueToNumRegexRules = make([]valueToNumRegexRule, 0)
 
 	for _, c := range me.Params.GetChildren() {
 		name := c.GetNameS()
@@ -63,6 +67,8 @@ func (me *LabelAgent) parseRules() int {
 				me.parseValueToNumRule(rule)
 			case "compute_metric":
 				me.parseComputeMetricRule(rule)
+			case "value_to_num_regex":
+				me.parseValueToNumRegexRule(rule)
 			default:
 				me.Logger.Warn().
 					Str("object", me.ParentParams.GetChildContentS("object")).
@@ -139,7 +145,7 @@ func (me *LabelAgent) parseRules() int {
 			}
 		case "value_to_num":
 			if len(me.valueToNumRules) != 0 {
-				me.actions = append(me.actions, me.mapValues)
+				me.actions = append(me.actions, me.mapValueToNum)
 				count += len(me.valueToNumRules)
 			}
 		case "compute_metric":
@@ -147,6 +153,11 @@ func (me *LabelAgent) parseRules() int {
 				me.actions = append(me.actions, me.computeMetrics)
 				count += len(me.computeMetricRules)
 			}
+		case "value_to_num_regex":
+			if len(me.valueToNumRegexRules) != 0 {
+				me.actions = append(me.actions, me.mapValueToNumRegex)
+				count += len(me.valueToNumRegexRules)
+			}
 		default:
 			me.Logger.Warn().
 				Str("object", me.ParentParams.GetChildContentS("object")).
@@ -542,3 +553,49 @@ func (me *LabelAgent) parseComputeMetricRule(rule string) {
 	}
 	me.Logger.Warn().Msgf("(compute_metric) rule has invalid format [%s]", rule)
 }
+
+type valueToNumRegexRule struct {
+	metric       string
+	label        string
+	defaultValue uint8
+	hasDefault   bool
+	reg          []*regexp.Regexp
+}
+
+// example rule:
+// metric label zapi_value rest_value `default_value`
+// status state ^normal$ ^ok$ `0`
+// will create a new metric "status" of type uint8
+// if value of label "state" contains normal or ok
+// the metric value will be 1, otherwise it will be 0.
+
+func (me *LabelAgent) parseValueToNumRegexRule(rule string) {
+	var err error
+
+	if fields := strings.Fields(rule); len(fields) == 4 || len(fields) == 5 {
+		r := valueToNumRegexRule{metric: fields[0], label: fields[1], reg: make([]*regexp.Regexp, 2)}
+		if r.reg[0], err = regexp.Compile(fields[2]); err != nil {
+			me.Logger.Error().Stack().Err(err).Str("regex", r.reg[0].String()).Str("value", fields[2]).Msg("(value_to_num_regex) compile regex:")
+		}
+
+		if r.reg[1], err = regexp.Compile(fields[3]); err != nil {
+			me.Logger.Error().Stack().Err(err).Str("regex", r.reg[1].String()).Str("value", fields[3]).Msg("(value_to_num_regex) compile regex:")
+		}
+
+		if len(fields) == 5 {
+			fields[4] = strings.TrimPrefix(strings.TrimSuffix(fields[4], "`"), "`")
+			if v, err := strconv.ParseUint(fields[4], 10, 8); err != nil {
+				me.Logger.Error().Stack().Err(err).Msgf("(value_to_num_regex) parse default value (%s): ", fields[4])
+				return
+			} else {
+				r.hasDefault = true
+				r.defaultValue = uint8(v)
+			}
+		}
+
+		me.valueToNumRegexRules = append(me.valueToNumRegexRules, r)
+		me.Logger.Debug().Msgf("(value_to_num_regex) parsed rule [%v]", r)
+		return
+	}
+	me.Logger.Warn().Msgf("(value_to_num_regex) rule has invalid format [%s]", rule)
+}
diff --git a/conf/rest/9.12.0/clusterpeer.yaml b/conf/rest/9.12.0/clusterpeer.yaml
new file mode 100644
index 00000000..a905b2d5
--- /dev/null
+++ b/conf/rest/9.12.0/clusterpeer.yaml
@@ -0,0 +1,16 @@
+
+name:             ClusterPeer
+query:            api/cluster/peers
+object:           cluster_peer
+
+counters:
+  - ^^uuid
+  - ^name                => name
+  - ^encryption.state    => encryption_state
+
+export_options:
+  instance_keys:
+    - uuid
+  instance_labels:
+    - name
+    - encryption_state
diff --git a/conf/rest/9.12.0/ntpserver.yaml b/conf/rest/9.12.0/ntpserver.yaml
new file mode 100644
index 00000000..3b9487a3
--- /dev/null
+++ b/conf/rest/9.12.0/ntpserver.yaml
@@ -0,0 +1,15 @@
+
+name:             NtpServer
+query:            api/cluster/ntp/servers
+object:           ntpserver
+
+counters:
+  - ^^server                  => servers
+  - ^authentication_enabled   => authentication
+
+
+export_options:
+  instance_keys:
+    - servers
+  instance_labels:
+    - authentication
\ No newline at end of file
diff --git a/conf/rest/9.12.0/security.yaml b/conf/rest/9.12.0/security.yaml
new file mode 100644
index 00000000..2ffd6acd
--- /dev/null
+++ b/conf/rest/9.12.0/security.yaml
@@ -0,0 +1,16 @@
+
+name:             Security
+query:            api/security
+object:           security
+
+counters:
+  - ^management_protocols.telnet_enabled     => telnet_enabled
+  - ^management_protocols.rsh_enabled        => rsh_enabled
+  - ^fips.enabled                            => fips_enabled
+
+export_options:
+  instance_keys:
+    - fips_enabled
+  instance_labels:
+    - telnet_enabled
+    - rsh_enabled
diff --git a/conf/rest/9.12.0/security_account.yaml b/conf/rest/9.12.0/security_account.yaml
new file mode 100644
index 00000000..b086dfcd
--- /dev/null
+++ b/conf/rest/9.12.0/security_account.yaml
@@ -0,0 +1,32 @@
+
+name:             SecurityAccount
+query:            api/security/accounts
+object:           security_account
+
+counters:
+  - ^^name                                      => user_name
+  - ^role.name                                  => role_name
+  - ^password_hash_algorithm                    => hash_algorithm
+  - ^locked                                     => locked
+  - ^applications.#.application                 => applications
+  - ^applications.#.authentication_methods.0    => methods
+
+
+plugins:
+  - LabelAgent:
+      value_to_num_regex:
+        - samluser methods .*online.*$ .*saml.*$ `0`
+        - ldapuser methods .*online.*$ .*nsswitch.*$ `0`
+        - certificateuser methods .*online.*$ .*certificate.*$ `0`
+        - localuser methods .*online.*$ .*password.*$ `0`
+        - activediruser methods .*online.*$ .*domain.*$ `0`
+
+export_options:
+  instance_keys:
+    - user_name
+  instance_labels:
+    - role_name
+    - hash_algorithm
+    - locked
+    - applications
+    - methods
diff --git a/conf/rest/9.12.0/security_audit_dest.yaml b/conf/rest/9.12.0/security_audit_dest.yaml
new file mode 100644
index 00000000..7ffb1981
--- /dev/null
+++ b/conf/rest/9.12.0/security_audit_dest.yaml
@@ -0,0 +1,19 @@
+
+name:             SecurityAuditDestination
+query:            api/security/audit/destinations
+object:           security_audit_destination
+
+counters:
+  - ^protocol     => protocol
+
+only_cluster_instance: true
+
+plugins:
+  - LabelAgent:
+      value_to_num:
+        - status protocol true true `0`
+
+export_options:
+  include_all_labels: true
+
+# Need to test
\ No newline at end of file
diff --git a/conf/rest/9.12.0/security_certificate.yaml b/conf/rest/9.12.0/security_certificate.yaml
new file mode 100644
index 00000000..2d80c2b2
--- /dev/null
+++ b/conf/rest/9.12.0/security_certificate.yaml
@@ -0,0 +1,40 @@
+
+name:             SecurityCert
+query:            api/security/certificates
+object:           security_certificate
+
+counters:
+  - ^^uuid
+  - ^name
+  - ^scope                   => scope
+  - ^type                    => type
+  - ^svm.name                => svm
+  - ^public_certificate      => certificatePEM
+  - ^serial_number           => serial_number
+  - expiry_time(timestamp)   => expiry_time
+
+plugins:
+  - LabelAgent:
+      exclude_equals:
+        - scope `svm`
+      include_equals:
+#        - type `server` scope `cluster`   // TODO: To support multiple include with AND clause
+        - type `server`
+      value_to_num:
+        - status name - - `0`
+  - Certificate:
+      schedule:
+        - data: 180s  # should be multiple of data poll duration
+
+export_options:
+  instance_keys:
+    - uuid
+  instance_labels:
+    - name
+    #- certificatePEM   // Need to decide certificatePEM would be exposed or not in prometheus
+    - scope
+    - svm
+    - type
+    - certificateIssuerType
+    - serial_number
+    - certificateExpiryStatus
diff --git a/conf/rest/9.12.0/security_login.yaml b/conf/rest/9.12.0/security_login.yaml
new file mode 100644
index 00000000..4945e0c7
--- /dev/null
+++ b/conf/rest/9.12.0/security_login.yaml
@@ -0,0 +1,19 @@
+
+name:             SecurityLogin
+query:            api/security/login/messages
+object:           security_login
+
+counters:
+  - ^^uuid        => uuid
+  - ^svm.name     => svm
+  - ^scope        => scope
+  - ^banner       => banner
+
+
+export_options:
+  instance_keys:
+    - uuid
+  instance_labels:
+    - svm
+    - scope
+    - banner
diff --git a/conf/rest/9.12.0/support.yaml b/conf/rest/9.12.0/support.yaml
new file mode 100644
index 00000000..90cd709b
--- /dev/null
+++ b/conf/rest/9.12.0/support.yaml
@@ -0,0 +1,16 @@
+
+name:             Support
+query:            api/support/autosupport
+object:           support
+
+counters:
+  - ^enabled      => asup_enabled
+  - ^transport    => asup_https_configured
+  - ^is_minimal   => asup_private_dataremoved
+
+export_options:
+  instance_keys:
+    - asup_enabled
+  instance_labels:
+    - asup_https_configured
+    - asup_private_dataremoved
diff --git a/conf/rest/9.12.0/svm.yaml b/conf/rest/9.12.0/svm.yaml
new file mode 100644
index 00000000..0f5ecfa6
--- /dev/null
+++ b/conf/rest/9.12.0/svm.yaml
@@ -0,0 +1,90 @@
+name:                     SVM
+query:                    api/svm/svms
+object:                   svm
+
+counters:
+  - ^^uuid                                  => svm_uuid
+  - ^name                                   => svm
+  - ^aggregates.#.name                      => aggr
+  - ^state                                  => state
+  - ^anti_ransomware_default_volume_state   => anti_ransomware_state
+  - ^nsswitch                               => nameservice_switch
+
+
+endpoints:
+  - query: api/security/ssh/svms
+    counters:
+      - ^^svm.uuid                          => svm_uuid
+      - ^ciphers                            => ciphers
+  - query: api/protocols/cifs/services
+    counters:
+      - ^^svm.uuid                          => svm_uuid
+      - ^enabled                            => cifs_protocol_enabled
+      - ^security.smb_encryption            => smb_encryption_required
+      - ^security.smb_signing               => smb_signing_required
+      - ^security.lm_compatibility_level    => cifs_ntlm_enabled
+  - query: api/protocols/nfs/services
+    counters:
+      - ^^svm.uuid                          => svm_uuid
+      - ^enabled                            => nfs_protocol_enabled
+  - query: api/protocols/audit
+    counters:
+      - ^^svm.uuid                          => svm_uuid
+      - ^enabled                            => audit_protocol_enabled
+  - query: api/protocols/fpolicy     # need to test
+    counters:
+      - ^^svm.uuid                          => svm_uuid
+      - ^policies.enabled                   => fpolicy_enabled
+      - ^policies.name                      => fpolicy_name
+  - query: api/name-services/nis
+    counters:
+      - ^^svm.uuid                          => svm_uuid
+      - ^domain                             => nis_domain
+  - query: api/name-services/ldap
+    counters:
+      - ^^svm.uuid                          => svm_uuid
+      - ^session_security                   => ldap_session_security
+  - query: api/protocols/nfs/kerberos/interfaces
+    counters:
+      - ^^svm.uuid                          => svm_uuid
+      - ^enabled                            => nfs_kerberos_protocol_enabled
+  - query: api/protocols/san/iscsi/credentials
+    counters:
+      - ^^svm.uuid                          => svm_uuid
+      - ^authentication_type                => iscsi_authentication_type
+  - query: api/protocols/san/iscsi/services
+    counters:
+      - ^^svm.uuid                          => svm_uuid
+      - ^enabled                            => iscsi_service_enabled
+
+plugins:
+  - SVM
+  - LabelAgent:
+      value_to_num:
+        - new_status state online online `0`
+        - ldap_signed ldap_session_security sign sign `0`
+        - ldap_encrypted ldap_session_security seal seal `0`
+
+export_options:
+  instance_keys:
+    - svm
+    - aggr
+  instance_labels:
+    - state
+    - anti_ransomware_state
+    - ciphers
+    - cifs_protocol_enabled
+    - smb_encryption_required
+    - smb_signing_required
+    - cifs_ntlm_enabled
+    - nfs_protocol_enabled
+    - audit_protocol_enabled
+    - fpolicy_enabled
+    - fpolicy_name
+    - nis_domain
+    - ldap_session_security
+    - nfs_kerberos_protocol_enabled
+    - iscsi_authentication_type
+    - iscsi_service_enabled
+    - nis_authentication_enabled
+
diff --git a/conf/rest/9.12.0/volume.yaml b/conf/rest/9.12.0/volume.yaml
index 39601276..52d0fe15 100644
--- a/conf/rest/9.12.0/volume.yaml
+++ b/conf/rest/9.12.0/volume.yaml
@@ -7,10 +7,15 @@ counters:
   - ^name                                         => volume
   - ^svm.name                                     => svm
   - ^aggregates.#.name                            => aggr #zapi maps to field containing-aggregate-name while rest mapping is an array?
+  - ^aggregates.#.uuid                            => aggrUuid
   - ^style                                        => style
   - ^type                                         => type
   - ^snapshot_policy.name                         => snapshot_policy
   - ^state                                        => state
+  - ^is_svm_root                                  => svm_root
+  - ^encryption.enabled                           => isEncrypted
+  - ^anti_ransomware.state                        => antiRansomwareState
+  - ^snaplock.type                                => snaplock_type
   - autosize.maximum                              => autosize_maximum_size
   - autosize.grow_threshold                       => autosize_grow_threshold_percent
   - space.expected_available                      => space_expected_available
@@ -37,6 +42,10 @@ counters:
   - hidden_fields:
     - space
     - autosize
+    - encryption.enabled
+    - anti_ransomware.state
+    - is_svm_root
+    - snaplock.type
 
 endpoints:
   - query: api/private/cli/volume
@@ -79,9 +88,14 @@ export_options:
     - is_sis_volume
     - snapshot_policy
     - type
+    - svm_root
     - protectedByStatus
     - protectedBy
     - protectionRole
     - all_sm_healthy
+    - isEncrypted
+    - snaplock_type
+    - antiRansomwareState
+    - isHardwareEncrypted
 
 
diff --git a/conf/rest/default.yaml b/conf/rest/default.yaml
index b70091ed..88ff022b 100644
--- a/conf/rest/default.yaml
+++ b/conf/rest/default.yaml
@@ -13,8 +13,21 @@ objects:
   SnapMirror:       snapmirror.yaml
   Volume:           volume.yaml
   Subsystem:        subsystem.yaml
-  SnapshotPolicy:   snapshotPolicy.yaml
+  Snapshot:         snapshot.yaml
   Port:             port.yaml
   Qtree:            qtree.yaml
   Shelf:            shelf.yaml
-  Sensor:           sensor.yaml
\ No newline at end of file
+  Sensor:           sensor.yaml
+  SVM:              svm.yaml
+
+
+
+# for security dashboard at cluster
+  Support:                  support.yaml
+  Security:                 security.yaml
+  SecurityAccount:          security_account.yaml
+  ClusterPeer:              clusterpeer.yaml
+  SecurityCert:             security_certificate.yaml
+  SecurityLogin:            security_login.yaml
+  NtpServer:                ntpserver.yaml
+  SecurityAuditDestination: security_audit_dest.yaml  # test pending
diff --git a/grafana/dashboards/cmode/harvest_dashboard_security_details.json b/grafana/dashboards/cmode/harvest_dashboard_security_details.json
new file mode 100644
index 00000000..b0ce8fe5
--- /dev/null
+++ b/grafana/dashboards/cmode/harvest_dashboard_security_details.json
@@ -0,0 +1,4527 @@
+{
+  "__inputs": [
+    {
+      "name": "DS_PROMETHEUS",
+      "label": "Prometheus",
+      "description": "",
+      "type": "datasource",
+      "pluginId": "prometheus",
+      "pluginName": "Prometheus"
+    }
+  ],
+  "__requires": [
+    {
+      "type": "panel",
+      "id": "bargauge",
+      "name": "Bar gauge",
+      "version": ""
+    },
+    {
+      "type": "grafana",
+      "id": "grafana",
+      "name": "Grafana",
+      "version": "7.5.4"
+    },
+    {
+      "type": "datasource",
+      "id": "prometheus",
+      "name": "Prometheus",
+      "version": "1.0.0"
+    },
+    {
+      "type": "panel",
+      "id": "stat",
+      "name": "Stat",
+      "version": ""
+    },
+    {
+      "type": "panel",
+      "id": "table",
+      "name": "Table",
+      "version": ""
+    }
+  ],
+  "annotations": {
+    "list": [
+      {
+        "builtIn": 1,
+        "datasource": "-- Grafana --",
+        "enable": true,
+        "hide": true,
+        "iconColor": "rgba(0, 211, 255, 1)",
+        "name": "Annotations & Alerts",
+        "target": {
+          "limit": 100,
+          "matchAny": false,
+          "tags": [],
+          "type": "dashboard"
+        },
+        "type": "dashboard"
+      }
+    ]
+  },
+  "description": "",
+  "editable": true,
+  "gnetId": null,
+  "graphTooltip": 0,
+  "id": null,
+  "iteration": 1646736510598,
+  "links": [],
+  "panels": [
+    {
+      "collapsed": false,
+      "datasource": "${DS_PROMETHEUS}",
+      "gridPos": {
+        "h": 1,
+        "w": 24,
+        "x": 0,
+        "y": 0
+      },
+      "id": 152,
+      "panels": [],
+      "title": "Cluster Compliance",
+      "type": "row"
+    },
+    {
+      "datasource": "Prometheus",
+      "fieldConfig": {
+        "defaults": {
+          "color": {
+            "fixedColor": "green",
+            "mode": "fixed"
+          },
+          "custom": {
+            "align": "auto",
+            "displayMode": "auto",
+            "filterable": false
+          },
+          "decimals": 0,
+          "mappings": [],
+          "max": 100,
+          "min": 0,
+          "thresholds": {
+            "mode": "absolute",
+            "steps": [
+              {
+                "color": "green",
+                "value": null
+              }
+            ]
+          }
+        },
+        "overrides": [
+          {
+            "matcher": {
+              "id": "byName",
+              "options": "Compliant"
+            },
+            "properties": [
+              {
+                "id": "unit",
+                "value": "percent"
+              },
+              {
+                "id": "custom.displayMode",
+                "value": "gradient-gauge"
+              },
+              {
+                "id": "max",
+                "value": 100
+              }
+            ]
+          }
+        ]
+      },
+      "gridPos": {
+        "h": 3,
+        "w": 18,
+        "x": 0,
+        "y": 1
+      },
+      "id": 161,
+      "options": {
+        "showHeader": true,
+        "sortBy": []
+      },
+      "pluginVersion": "8.1.2",
+      "targets": [
+        {
+          "exemplar": false,
+          "expr": "count((security_certificate_labels{datacenter=\"$Datacenter\", cluster=~\"$Cluster\", certificateExpiryStatus=\"active\", certificateIssuerType=\"self_signed\"}  * on(datacenter, cluster) security_labels{datacenter=\"$Datacenter\", cluster=~\"$Cluster\", fips_enabled=\"true\",telnet_enabled=\"false\"} * on (datacenter, cluster) security_login_labels{datacenter=\"$Datacenter\", cluster=~\"$Cluster\", scope=\"cluster\", banner!=\"\"} * on (datacenter, cluster) (count by (datacenter, cluster) (ntpserver_labels{datacenter=\"$Datacenter\", cluster=~\"$Cluster\"}) == 3) * on (datacenter, cluster) support_labels{datacenter=\"$Datacenter\", cluster=~\"$Cluster\", asup_enabled=\"true\"} * on(datacenter, cluster) security_account_labels{datacenter=\"$Datacenter\", cluster=~\"$Cluster\", locked=\"true\"} * on(datacenter, cluster) (sum by (datacenter, cluster) (security_account_certificateuser{datacenter=\"$Datacenter\", cluster=~\"$Cluster\"}) > 0) * on(datacenter, cluster) (sum by (datacenter, cluster) (security_account_samluser{datacenter=\"$Datacenter\", cluster=~\"$Cluster\"}) > 0) * on(datacenter, cluster) (sum by (datacenter, cluster) (security_account_ldapeuser{datacenter=\"$Datacenter\", cluster=~\"$Cluster\"}) > 0) * on(datacenter, cluster) (sum by (datacenter, cluster) (security_account_localuser{datacenter=\"$Datacenter\", cluster=~\"$Cluster\"}) > 0) * on(datacenter, cluster) (sum by (datacenter, cluster) (security_account_activediruser{datacenter=\"$Datacenter\", cluster=~\"$Cluster\"}) > 0) * on(datacenter, cluster) (count by (datacenter, cluster, encryption_state) (cluster_peer_labels{datacenter=\"$Datacenter\", cluster=~\"$Cluster\", encryption_state!=\"\"}) > 0)) unless (count by (datacenter, cluster) (security_account_labels{datacenter=\"$Datacenter\", cluster=~\"$Cluster\", hash_algorithm=\"md5\"}) > 0) unless (count by (datacenter, cluster) (svm_labels{datacenter=\"$Datacenter\", cluster=~\"$Cluster\", ciphers=~\".*_cbc.*\"}))) or vector(0)",
+          "format": "time_series",
+          "hide": false,
+          "instant": true,
+          "interval": "",
+          "legendFormat": "CompliantCluster",
+          "refId": "A"
+        },
+        {
+          "exemplar": false,
+          "expr": "count by (datacenter)(security_labels{datacenter=\"$Datacenter\", cluster=~\"$Cluster\"}) or vector (1)",
+          "format": "time_series",
+          "hide": false,
+          "instant": true,
+          "interval": "",
+          "legendFormat": "TotalCluster",
+          "refId": "B"
+        }
+      ],
+      "transformations": [
+        {
+          "id": "calculateField",
+          "options": {
+            "alias": "",
+            "binary": {
+              "left": "CompliantCluster",
+              "operator": "/",
+              "reducer": "sum",
+              "right": "TotalCluster"
+            },
+            "mode": "binary",
+            "reduce": {
+              "include": [
+                "Saml",
+                "Certificate"
+              ],
+              "reducer": "sum"
+            }
+          }
+        },
+        {
+          "id": "calculateField",
+          "options": {
+            "alias": "Compliant",
+            "binary": {
+              "left": "CompliantCluster / TotalCluster",
+              "operator": "*",
+              "reducer": "sum",
+              "right": "100"
+            },
+            "mode": "binary",
+            "reduce": {
+              "reducer": "sum"
+            }
+          }
+        },
+        {
+          "id": "organize",
+          "options": {
+            "excludeByName": {
+              "Certificate": true,
+              "Compliant": false,
+              "Compliant / Total": false,
+              "CompliantCluster": true,
+              "CompliantCluster / TotalCluster": true,
+              "Saml": true,
+              "Saml / Certificate": false,
+              "Time": true,
+              "Total": true,
+              "TotalCluster": true,
+              "perc": true
+            },
+            "indexByName": {},
+            "renameByName": {
+              "PercentCompliant": "",
+              "Saml / Certificate": "perc",
+              "Time": ""
+            }
+          }
+        }
+      ],
+      "type": "table"
+    },
+    {
+      "cacheTimeout": null,
+      "datasource": "Prometheus",
+      "description": "",
+      "fieldConfig": {
+        "defaults": {
+          "color": {
+            "mode": "thresholds"
+          },
+          "mappings": [],
+          "noValue": "0",
+          "thresholds": {
+            "mode": "absolute",
+            "steps": [
+              {
+                "color": "semi-dark-green",
+                "value": null
+              }
+            ]
+          },
+          "unit": "short"
+        },
+        "overrides": []
+      },
+      "gridPos": {
+        "h": 3,
+        "w": 3,
+        "x": 18,
+        "y": 1
+      },
+      "id": 166,
+      "links": [],
+      "options": {
+        "colorMode": "value",
+        "graphMode": "none",
+        "justifyMode": "center",
+        "orientation": "horizontal",
+        "reduceOptions": {
+          "calcs": [
+            "lastNotNull"
+          ],
+          "fields": "",
+          "values": false
+        },
+        "text": {},
+        "textMode": "auto"
+      },
+      "pluginVersion": "8.1.2",
+      "targets": [
+        {
+          "exemplar": true,
+          "expr": "count((security_certificate_labels{datacenter=\"$Datacenter\", cluster=~\"$Cluster\", certificateExpiryStatus=\"active\", certificateIssuerType=\"self_signed\"}  * on(datacenter, cluster) security_labels{datacenter=\"$Datacenter\", cluster=~\"$Cluster\", fips_enabled=\"true\",telnet_enabled=\"false\"} * on (datacenter, cluster) security_login_labels{datacenter=\"$Datacenter\", cluster=~\"$Cluster\", scope=\"cluster\", banner!=\"\"} * on (datacenter, cluster) (count by (datacenter, cluster) (ntpserver_labels{datacenter=\"$Datacenter\", cluster=~\"$Cluster\"}) == 3) * on (datacenter, cluster) support_labels{datacenter=\"$Datacenter\", cluster=~\"$Cluster\", asup_enabled=\"true\"} * on(datacenter, cluster) security_account_labels{datacenter=\"$Datacenter\", cluster=~\"$Cluster\", locked=\"true\"} * on(datacenter, cluster) (sum by (datacenter, cluster) (security_account_certificateuser{datacenter=\"$Datacenter\", cluster=~\"$Cluster\"}) > 0) * on(datacenter, cluster) (sum by (datacenter, cluster) (security_account_samluser{datacenter=\"$Datacenter\", cluster=~\"$Cluster\"}) > 0) * on(datacenter, cluster) (sum by (datacenter, cluster) (security_account_ldapeuser{datacenter=\"$Datacenter\", cluster=~\"$Cluster\"}) > 0) * on(datacenter, cluster) (sum by (datacenter, cluster) (security_account_localuser{datacenter=\"$Datacenter\", cluster=~\"$Cluster\"}) > 0) * on(datacenter, cluster) (sum by (datacenter, cluster) (security_account_activediruser{datacenter=\"$Datacenter\", cluster=~\"$Cluster\"}) > 0) * on(datacenter, cluster) (count by (datacenter, cluster, encryption_state) (cluster_peer_labels{datacenter=\"$Datacenter\", cluster=~\"$Cluster\", encryption_state!=\"\"}) > 0)) unless (count by (datacenter, cluster) (security_account_labels{datacenter=\"$Datacenter\", cluster=~\"$Cluster\", hash_algorithm=\"md5\"}) > 0) unless (count by (datacenter, cluster) (svm_labels{datacenter=\"$Datacenter\", cluster=~\"$Cluster\", ciphers=~\".*_cbc.*\"}))) or vector(0)",
+          "format": "time_series",
+          "hide": false,
+          "instant": false,
+          "interval": "",
+          "intervalFactor": 1,
+          "legendFormat": "",
+          "refId": "A"
+        }
+      ],
+      "timeFrom": null,
+      "timeShift": null,
+      "title": "Compliant Clusters",
+      "type": "stat"
+    },
+    {
+      "cacheTimeout": null,
+      "datasource": "Prometheus",
+      "description": "",
+      "fieldConfig": {
+        "defaults": {
+          "color": {
+            "mode": "thresholds"
+          },
+          "mappings": [],
+          "noValue": "0",
+          "thresholds": {
+            "mode": "absolute",
+            "steps": [
+              {
+                "color": "orange",
+                "value": null
+              }
+            ]
+          },
+          "unit": "short"
+        },
+        "overrides": []
+      },
+      "gridPos": {
+        "h": 3,
+        "w": 3,
+        "x": 21,
+        "y": 1
+      },
+      "id": 167,
+      "links": [],
+      "options": {
+        "colorMode": "value",
+        "graphMode": "none",
+        "justifyMode": "center",
+        "orientation": "horizontal",
+        "reduceOptions": {
+          "calcs": [
+            "lastNotNull"
+          ],
+          "fields": "",
+          "values": false
+        },
+        "text": {},
+        "textMode": "auto"
+      },
+      "pluginVersion": "8.1.2",
+      "targets": [
+        {
+          "exemplar": true,
+          "expr": "count by (datacenter) (security_labels{datacenter=\"$Datacenter\",cluster=~\"$Cluster\"})",
+          "format": "table",
+          "hide": false,
+          "instant": true,
+          "interval": "",
+          "intervalFactor": 1,
+          "legendFormat": "",
+          "refId": "A"
+        },
+        {
+          "exemplar": true,
+          "expr": "count((security_certificate_labels{datacenter=\"$Datacenter\", cluster=~\"$Cluster\", certificateExpiryStatus=\"active\", certificateIssuerType=\"self_signed\"}  * on(datacenter, cluster) security_labels{datacenter=\"$Datacenter\", cluster=~\"$Cluster\", fips_enabled=\"true\",telnet_enabled=\"false\"} * on (datacenter, cluster) security_login_labels{datacenter=\"$Datacenter\", cluster=~\"$Cluster\", scope=\"cluster\", banner!=\"\"} * on (datacenter, cluster) (count by (datacenter, cluster) (ntpserver_labels{datacenter=\"$Datacenter\", cluster=~\"$Cluster\"}) == 3) * on (datacenter, cluster) support_labels{datacenter=\"$Datacenter\", cluster=~\"$Cluster\", asup_enabled=\"true\"} * on(datacenter, cluster) security_account_labels{datacenter=\"$Datacenter\", cluster=~\"$Cluster\", locked=\"true\"} * on(datacenter, cluster) (sum by (datacenter, cluster) (security_account_certificateuser{datacenter=\"$Datacenter\", cluster=~\"$Cluster\"}) > 0) * on(datacenter, cluster) (sum by (datacenter, cluster) (security_account_samluser{datacenter=\"$Datacenter\", cluster=~\"$Cluster\"}) > 0) * on(datacenter, cluster) (sum by (datacenter, cluster) (security_account_ldapeuser{datacenter=\"$Datacenter\", cluster=~\"$Cluster\"}) > 0) * on(datacenter, cluster) (sum by (datacenter, cluster) (security_account_localuser{datacenter=\"$Datacenter\", cluster=~\"$Cluster\"}) > 0) * on(datacenter, cluster) (sum by (datacenter, cluster) (security_account_activediruser{datacenter=\"$Datacenter\", cluster=~\"$Cluster\"}) > 0) * on(datacenter, cluster) (count by (datacenter, cluster, encryption_state) (cluster_peer_labels{datacenter=\"$Datacenter\", cluster=~\"$Cluster\", encryption_state!=\"\"}) > 0)) unless (count by (datacenter, cluster) (security_account_labels{datacenter=\"$Datacenter\", cluster=~\"$Cluster\", hash_algorithm=\"md5\"}) > 0) unless (count by (datacenter, cluster) (svm_labels{datacenter=\"$Datacenter\", cluster=~\"$Cluster\", ciphers=~\".*_cbc.*\"}))) or vector(0)",
+          "format": "table",
+          "hide": false,
+          "instant": true,
+          "interval": "",
+          "legendFormat": "",
+          "refId": "B"
+        }
+      ],
+      "timeFrom": null,
+      "timeShift": null,
+      "title": "Not Compliant Clusters",
+      "transformations": [
+        {
+          "id": "calculateField",
+          "options": {
+            "alias": "Not Compliant",
+            "binary": {
+              "left": "Value #A",
+              "operator": "-",
+              "reducer": "sum",
+              "right": "Value #B"
+            },
+            "mode": "binary",
+            "reduce": {
+              "include": [
+                "count((security_certificate_labels{datacenter=\"DC-02\", cluster=~\"(F8080-32-25|ocum-infinity|sti102nscluster-1)\", certificateExpiryStatus=\"active\", certificateIssuerType=\"self_signed\"}  * on(datacenter, cluster) security_labels{datacenter=\"DC-02\", cluster=~\"(F8080-32-25|ocum-infinity|sti102nscluster-1)\", fips_enabled=\"true\",telnet_enabled=\"false\"} * on (datacenter, cluster) security_login_labels{datacenter=\"DC-02\", cluster=~\"(F8080-32-25|ocum-infinity|sti102nscluster-1)\", scope=\"cluster\", banner!=\"\"} * on (datacenter, cluster) (count by (datacenter, cluster) (ntpserver_labels{datacenter=\"DC-02\", cluster=~\"(F8080-32-25|ocum-infinity|sti102nscluster-1)\"}) == 3) * on (datacenter, cluster) support_labels{datacenter=\"DC-02\", cluster=~\"(F8080-32-25|ocum-infinity|sti102nscluster-1)\", asup_enabled=\"true\"} * on(datacenter, cluster) security_account_labels{datacenter=\"DC-02\", cluster=~\"(F8080-32-25|ocum-infinity|sti102nscluster-1)\", locked=\"true\"} * on(datacenter, cluster) (sum by (datacenter, cluster) (security_account_certificateuser{datacenter=\"DC-02\", cluster=~\"(F8080-32-25|ocum-infinity|sti102nscluster-1)\"}) > 0) * on(datacenter, cluster) (sum by (datacenter, cluster) (security_account_samluser{datacenter=\"DC-02\", cluster=~\"(F8080-32-25|ocum-infinity|sti102nscluster-1)\"}) > 0) * on(datacenter, cluster) (sum by (datacenter, cluster) (security_account_ldapeuser{datacenter=\"DC-02\", cluster=~\"(F8080-32-25|ocum-infinity|sti102nscluster-1)\"}) > 0) * on(datacenter, cluster) (sum by (datacenter, cluster) (security_account_localuser{datacenter=\"DC-02\", cluster=~\"(F8080-32-25|ocum-infinity|sti102nscluster-1)\"}) > 0) * on(datacenter, cluster) (sum by (datacenter, cluster) (security_account_activediruser{datacenter=\"DC-02\", cluster=~\"(F8080-32-25|ocum-infinity|sti102nscluster-1)\"}) > 0) * on(datacenter, cluster) (count by (datacenter, cluster, encryption_state) (cluster_peer_labels{datacenter=\"DC-02\", cluster=~\"(F8080-32-25|ocum-infinity|sti102nscluster-1)\", encryption_state!=\"\"}) > 0)) unless (count by (datacenter, cluster) (security_account_labels{datacenter=\"DC-02\", cluster=~\"(F8080-32-25|ocum-infinity|sti102nscluster-1)\", hash_algorithm=\"md5\"}) > 0) unless (count by (datacenter, cluster) (svm_labels{datacenter=\"DC-02\", cluster=~\"(F8080-32-25|ocum-infinity|sti102nscluster-1)\", ciphers=~\".*_cbc.*\"}))) or vector(0)"
+              ],
+              "reducer": "sum"
+            }
+          }
+        },
+        {
+          "id": "organize",
+          "options": {
+            "excludeByName": {
+              "Time": true,
+              "Value #A": true,
+              "Value #B": true,
+              "datacenter": true
+            },
+            "indexByName": {},
+            "renameByName": {}
+          }
+        }
+      ],
+      "type": "stat"
+    },
+    {
+      "datasource": "${DS_PROMETHEUS}",
+      "fieldConfig": {
+        "defaults": {
+          "color": {
+            "fixedColor": "transparent",
+            "mode": "fixed"
+          },
+          "custom": {
+            "align": "left",
+            "displayMode": "color-background-solid",
+            "filterable": false
+          },
+          "mappings": [],
+          "thresholds": {
+            "mode": "absolute",
+            "steps": [
+              {
+                "color": "green",
+                "value": null
+              }
+            ]
+          }
+        },
+        "overrides": [
+          {
+            "matcher": {
+              "id": "byName",
+              "options": "Autosupport Https Transport"
+            },
+            "properties": [
+              {
+                "id": "mappings",
+                "value": [
+                  {
+                    "options": {
+                      "false": {
+                        "index": 0,
+                        "text": "Disabled"
+                      },
+                      "true": {
+                        "index": 1,
+                        "text": "Enabled"
+                      }
+                    },
+                    "type": "value"
+                  }
+                ]
+              },
+              {
+                "id": "custom.width",
+                "value": 231
+              },
+              {
+                "id": "custom.filterable",
+                "value": true
+              }
+            ]
+          },
+          {
+            "matcher": {
+              "id": "byName",
+              "options": "Default Admin User"
+            },
+            "properties": [
+              {
+                "id": "mappings",
+                "value": [
+                  {
+                    "options": {
+                      "false": {
+                        "index": 0,
+                        "text": "Disabled"
+                      },
+                      "true": {
+                        "index": 1,
+                        "text": "Enabled"
+                      }
+                    },
+                    "type": "value"
+                  }
+                ]
+              },
+              {
+                "id": "custom.filterable",
+                "value": true
+              },
+              {
+                "id": "custom.width",
+                "value": 165
+              }
+            ]
+          },
+          {
+            "matcher": {
+              "id": "byName",
+              "options": "MD5 in use"
+            },
+            "properties": [
+              {
+                "id": "mappings",
+                "value": [
+                  {
+                    "options": {
+                      "0": {
+                        "index": 1,
+                        "text": "No"
+                      },
+                      "1": {
+                        "index": 2,
+                        "text": "Yes"
+                      }
+                    },
+                    "type": "value"
+                  },
+                  {
+                    "options": {
+                      "match": "null",
+                      "result": {
+                        "index": 0,
+                        "text": "No"
+                      }
+                    },
+                    "type": "special"
+                  }
+                ]
+              },
+              {
+                "id": "custom.width",
+                "value": 114
+              },
+              {
+                "id": "custom.filterable",
+                "value": true
+              }
+            ]
+          },
+          {
+            "matcher": {
+              "id": "byName",
+              "options": "Remote Shell"
+            },
+            "properties": [
+              {
+                "id": "mappings",
+                "value": [
+                  {
+                    "options": {
+                      "false": {
+                        "index": 0,
+                        "text": "Disabled"
+                      },
+                      "true": {
+                        "index": 1,
+                        "text": "Enabled"
+                      }
+                    },
+                    "type": "value"
+                  },
+                  {
+                    "options": {
+                      "match": "empty",
+                      "result": {
+                        "index": 2,
+                        "text": "Disabled"
+                      }
+                    },
+                    "type": "special"
+                  },
+                  {
+                    "options": {
+                      "match": "null",
+                      "result": {
+                        "index": 3,
+                        "text": "Disabled"
+                      }
+                    },
+                    "type": "special"
+                  }
+                ]
+              },
+              {
+                "id": "custom.width",
+                "value": 122
+              },
+              {
+                "id": "custom.filterable",
+                "value": true
+              }
+            ]
+          },
+          {
+            "matcher": {
+              "id": "byName",
+              "options": "Telnet"
+            },
+            "properties": [
+              {
+                "id": "mappings",
+                "value": [
+                  {
+                    "options": {
+                      "false": {
+                        "index": 0,
+                        "text": "Disabled"
+                      },
+                      "true": {
+                        "index": 1,
+                        "text": "Enabled"
+                      }
+                    },
+                    "type": "value"
+                  },
+                  {
+                    "options": {
+                      "match": "null",
+                      "result": {
+                        "index": 2,
+                        "text": "Disabled"
+                      }
+                    },
+                    "type": "special"
+                  },
+                  {
+                    "options": {
+                      "match": "empty",
+                      "result": {
+                        "index": 3,
+                        "text": "Disabled"
+                      }
+                    },
+                    "type": "special"
+                  }
+                ]
+              },
+              {
+                "id": "custom.width",
+                "value": 99
+              },
+              {
+                "id": "custom.filterable",
+                "value": true
+              }
+            ]
+          },
+          {
+            "matcher": {
+              "id": "byName",
+              "options": "Global FIPS"
+            },
+            "properties": [
+              {
+                "id": "mappings",
+                "value": [
+                  {
+                    "options": {
+                      "false": {
+                        "index": 0,
+                        "text": "Disabled"
+                      },
+                      "true": {
+                        "index": 1,
+                        "text": "Enabled"
+                      }
+                    },
+                    "type": "value"
+                  },
+                  {
+                    "options": {
+                      "match": "null",
+                      "result": {
+                        "index": 2,
+                        "text": "Disabled"
+                      }
+                    },
+                    "type": "special"
+                  }
+                ]
+              },
+              {
+                "id": "custom.width",
+                "value": 112
+              },
+              {
+                "id": "custom.filterable",
+                "value": true
+              }
+            ]
+          },
+          {
+            "matcher": {
+              "id": "byName",
+              "options": "Insecure SSH Settings"
+            },
+            "properties": [
+              {
+                "id": "mappings",
+                "value": [
+                  {
+                    "options": {
+                      " ": {
+                        "index": 0,
+                        "text": "No"
+                      }
+                    },
+                    "type": "value"
+                  },
+                  {
+                    "options": {
+                      "match": "nan",
+                      "result": {
+                        "index": 1,
+                        "text": "Yes"
+                      }
+                    },
+                    "type": "special"
+                  }
+                ]
+              },
+              {
+                "id": "custom.filterable",
+                "value": true
+              },
+              {
+                "id": "custom.width",
+                "value": 186
+              }
+            ]
+          },
+          {
+            "matcher": {
+              "id": "byName",
+              "options": "Login Banner"
+            },
+            "properties": [
+              {
+                "id": "mappings",
+                "value": [
+                  {
+                    "options": {
+                      "match": "empty",
+                      "result": {
+                        "index": 0,
+                        "text": "Disabled"
+                      }
+                    },
+                    "type": "special"
+                  },
+                  {
+                    "options": {
+                      "match": "nan",
+                      "result": {
+                        "index": 1,
+                        "text": "Enabled"
+                      }
+                    },
+                    "type": "special"
+                  }
+                ]
+              },
+              {
+                "id": "custom.width",
+                "value": 126
+              },
+              {
+                "id": "custom.filterable",
+                "value": true
+              }
+            ]
+          },
+          {
+            "matcher": {
+              "id": "byName",
+              "options": "Network Time Protocol"
+            },
+            "properties": [
+              {
+                "id": "mappings",
+                "value": [
+                  {
+                    "options": {
+                      "0": {
+                        "index": 0,
+                        "text": "Not Configured"
+                      },
+                      "1": {
+                        "index": 1,
+                        "text": "1 out of 3"
+                      },
+                      "2": {
+                        "index": 2,
+                        "text": "2 out of 3"
+                      },
+                      "3": {
+                        "index": 3,
+                        "text": "Configured"
+                      }
+                    },
+                    "type": "value"
+                  }
+                ]
+              },
+              {
+                "id": "custom.width",
+                "value": 169
+              }
+            ]
+          },
+          {
+            "matcher": {
+              "id": "byName",
+              "options": "Local Users"
+            },
+            "properties": [
+              {
+                "id": "mappings",
+                "value": [
+                  {
+                    "options": {
+                      "0": {
+                        "index": 0,
+                        "text": "Unconfigured"
+                      }
+                    },
+                    "type": "value"
+                  },
+                  {
+                    "options": {
+                      "from": 1,
+                      "result": {
+                        "index": 1,
+                        "text": "Configured"
+                      },
+                      "to": 9999
+                    },
+                    "type": "range"
+                  }
+                ]
+              },
+              {
+                "id": "custom.width",
+                "value": 119
+              },
+              {
+                "id": "custom.filterable",
+                "value": true
+              }
+            ]
+          },
+          {
+            "matcher": {
+              "id": "byName",
+              "options": "Certificate Users"
+            },
+            "properties": [
+              {
+                "id": "mappings",
+                "value": [
+                  {
+                    "options": {
+                      "0": {
+                        "index": 0,
+                        "text": "Unconfigured"
+                      }
+                    },
+                    "type": "value"
+                  },
+                  {
+                    "options": {
+                      "from": 1,
+                      "result": {
+                        "index": 1,
+                        "text": "Configured"
+                      },
+                      "to": 9999
+                    },
+                    "type": "range"
+                  }
+                ]
+              },
+              {
+                "id": "custom.width",
+                "value": 159
+              },
+              {
+                "id": "custom.filterable",
+                "value": true
+              }
+            ]
+          },
+          {
+            "matcher": {
+              "id": "byName",
+              "options": "Saml Users"
+            },
+            "properties": [
+              {
+                "id": "mappings",
+                "value": [
+                  {
+                    "options": {
+                      "0": {
+                        "index": 0,
+                        "text": "Unconfigured"
+                      }
+                    },
+                    "type": "value"
+                  },
+                  {
+                    "options": {
+                      "from": 1,
+                      "result": {
+                        "index": 1,
+                        "text": "Configured"
+                      },
+                      "to": 9999
+                    },
+                    "type": "range"
+                  }
+                ]
+              },
+              {
+                "id": "custom.width",
+                "value": 121
+              },
+              {
+                "id": "custom.filterable",
+                "value": true
+              }
+            ]
+          },
+          {
+            "matcher": {
+              "id": "byName",
+              "options": "Ldap Users"
+            },
+            "properties": [
+              {
+                "id": "mappings",
+                "value": [
+                  {
+                    "options": {
+                      "0": {
+                        "index": 0,
+                        "text": "Unconfigured"
+                      }
+                    },
+                    "type": "value"
+                  },
+                  {
+                    "options": {
+                      "from": 1,
+                      "result": {
+                        "index": 1,
+                        "text": "Configured"
+                      },
+                      "to": 9999
+                    },
+                    "type": "range"
+                  }
+                ]
+              },
+              {
+                "id": "custom.width",
+                "value": 124
+              },
+              {
+                "id": "custom.filterable",
+                "value": true
+              }
+            ]
+          },
+          {
+            "matcher": {
+              "id": "byName",
+              "options": "Active Directory Users"
+            },
+            "properties": [
+              {
+                "id": "mappings",
+                "value": [
+                  {
+                    "options": {
+                      "0": {
+                        "index": 0,
+                        "text": "Unconfigured"
+                      }
+                    },
+                    "type": "value"
+                  },
+                  {
+                    "options": {
+                      "from": 1,
+                      "result": {
+                        "index": 1,
+                        "text": "Configured"
+                      },
+                      "to": 9999
+                    },
+                    "type": "range"
+                  }
+                ]
+              },
+              {
+                "id": "custom.filterable",
+                "value": true
+              },
+              {
+                "id": "custom.width",
+                "value": 185
+              }
+            ]
+          },
+          {
+            "matcher": {
+              "id": "byName",
+              "options": "Cluster Peering"
+            },
+            "properties": [
+              {
+                "id": "mappings",
+                "value": [
+                  {
+                    "options": {
+                      "none": {
+                        "index": 1,
+                        "text": "Not Encrypted"
+                      },
+                      "tls_psk": {
+                        "index": 2,
+                        "text": "Encrypted"
+                      }
+                    },
+                    "type": "value"
+                  },
+                  {
+                    "options": {
+                      "match": "null",
+                      "result": {
+                        "index": 0,
+                        "text": "Not Peered"
+                      }
+                    },
+                    "type": "special"
+                  }
+                ]
+              },
+              {
+                "id": "custom.filterable",
+                "value": true
+              },
+              {
+                "id": "custom.width",
+                "value": 135
+              }
+            ]
+          },
+          {
+            "matcher": {
+              "id": "byName",
+              "options": "Cluster Certificate Validity"
+            },
+            "properties": [
+              {
+                "id": "custom.filterable",
+                "value": true
+              },
+              {
+                "id": "mappings",
+                "value": [
+                  {
+                    "options": {
+                      "active": {
+                        "index": 0,
+                        "text": "Active"
+                      },
+                      "expired": {
+                        "index": 2,
+                        "text": "Expired"
+                      },
+                      "expiring": {
+                        "index": 1,
+                        "text": "Active (Expiring < 60 days)"
+                      },
+                      "unknown": {
+                        "index": 3,
+                        "text": "Unknown"
+                      }
+                    },
+                    "type": "value"
+                  }
+                ]
+              },
+              {
+                "id": "custom.width",
+                "value": 206
+              }
+            ]
+          },
+          {
+            "matcher": {
+              "id": "byName",
+              "options": "Certificate Issuer Type"
+            },
+            "properties": [
+              {
+                "id": "custom.filterable",
+                "value": true
+              },
+              {
+                "id": "mappings",
+                "value": [
+                  {
+                    "options": {
+                      "ca_signed": {
+                        "index": 1,
+                        "text": "CA-Signed"
+                      },
+                      "self_signed": {
+                        "index": 0,
+                        "text": "Self-Signed"
+                      },
+                      "unknown": {
+                        "index": 2,
+                        "text": "Unknown"
+                      }
+                    },
+                    "type": "value"
+                  }
+                ]
+              },
+              {
+                "id": "custom.width",
+                "value": 187
+              }
+            ]
+          }
+        ]
+      },
+      "gridPos": {
+        "h": 8,
+        "w": 24,
+        "x": 0,
+        "y": 4
+      },
+      "id": 94,
+      "options": {
+        "showHeader": true,
+        "sortBy": []
+      },
+      "pluginVersion": "8.1.2",
+      "targets": [
+        {
+          "exemplar": false,
+          "expr": "support_labels{datacenter=\"$Datacenter\", cluster=~\"$Cluster\", asup_https_configured=\"https\"}",
+          "format": "table",
+          "instant": true,
+          "interval": "",
+          "legendFormat": "",
+          "refId": "A"
+        },
+        {
+          "exemplar": false,
+          "expr": "security_labels{datacenter=\"$Datacenter\", cluster=~\"$Cluster\"}",
+          "format": "table",
+          "hide": false,
+          "instant": true,
+          "interval": "",
+          "legendFormat": "",
+          "refId": "B"
+        },
+        {
+          "exemplar": true,
+          "expr": "security_account_labels{datacenter=\"$Datacenter\", cluster=~\"$Cluster\", methods=~\".*password.*\",role_name=\"admin\", user_name=\"admin\"}",
+          "format": "table",
+          "hide": false,
+          "instant": true,
+          "interval": "",
+          "legendFormat": "",
+          "refId": "C"
+        },
+        {
+          "exemplar": true,
+          "expr": "count by (datacenter,cluster,hash_algorithm)(security_account_labels{datacenter=\"$Datacenter\", cluster=~\"$Cluster\", hash_algorithm=\"md5\"})",
+          "format": "table",
+          "hide": false,
+          "instant": true,
+          "interval": "",
+          "legendFormat": "",
+          "refId": "D"
+        },
+        {
+          "exemplar": true,
+          "expr": "count by (datacenter, cluster, secured)(label_join(label_replace(svm_labels{datacenter=\"$Datacenter\", cluster=~\"$Cluster\"}, \"nonsecure\", \"$1\", \"ciphers\", \"(.*)_cbc*\"), \"secured\", \" \", \"nonsecure\", \"NonSupportedField\"))",
+          "format": "table",
+          "hide": false,
+          "instant": true,
+          "interval": "",
+          "legendFormat": "",
+          "refId": "E"
+        },
+        {
+          "exemplar": true,
+          "expr": "security_login_labels{datacenter=\"$Datacenter\", cluster=~\"$Cluster\",scope=\"cluster\"}",
+          "format": "table",
+          "hide": false,
+          "instant": true,
+          "interval": "",
+          "legendFormat": "",
+          "refId": "F"
+        },
+        {
+          "exemplar": false,
+          "expr": "security_audit_destination_status{datacenter=\"$Datacenter\",cluster=~\"$Cluster\"}",
+          "format": "table",
+          "hide": false,
+          "instant": true,
+          "interval": "",
+          "legendFormat": "",
+          "refId": "H"
+        },
+        {
+          "exemplar": true,
+          "expr": "count by (datacenter, cluster) (ntpserver_labels{datacenter=\"$Datacenter\",cluster=~\"$Cluster\"})",
+          "format": "table",
+          "hide": false,
+          "instant": true,
+          "interval": "",
+          "legendFormat": "",
+          "refId": "G"
+        },
+        {
+          "exemplar": true,
+          "expr": "count by (datacenter, cluster, encryption_state) (cluster_peer_labels{datacenter=\"$Datacenter\",cluster=~\"$Cluster\", encryption_state!=\"\"})",
+          "format": "table",
+          "hide": false,
+          "instant": true,
+          "interval": "",
+          "legendFormat": "",
+          "refId": "J"
+        },
+        {
+          "exemplar": true,
+          "expr": "count by (datacenter, cluster) (security_account_localuser{datacenter=\"$Datacenter\",cluster=~\"$Cluster\"})",
+          "format": "table",
+          "hide": false,
+          "instant": true,
+          "interval": "",
+          "legendFormat": "",
+          "refId": "K"
+        },
+        {
+          "exemplar": true,
+          "expr": "count by (datacenter, cluster) (security_account_samluser{datacenter=\"$Datacenter\",cluster=~\"$Cluster\"})",
+          "format": "table",
+          "hide": false,
+          "instant": true,
+          "interval": "",
+          "legendFormat": "",
+          "refId": "I"
+        },
+        {
+          "exemplar": true,
+          "expr": "count by (datacenter, cluster) (security_account_activediruser{datacenter=\"$Datacenter\",cluster=~\"$Cluster\"})",
+          "format": "table",
+          "hide": false,
+          "instant": true,
+          "interval": "",
+          "legendFormat": "",
+          "refId": "L"
+        },
+        {
+          "exemplar": true,
+          "expr": "count by (datacenter, cluster) (security_account_ldapuser{datacenter=\"$Datacenter\",cluster=~\"$Cluster\"})",
+          "format": "table",
+          "hide": false,
+          "instant": true,
+          "interval": "",
+          "legendFormat": "",
+          "refId": "M"
+        },
+        {
+          "exemplar": true,
+          "expr": "count by (datacenter, cluster) (security_account_certificateuser{datacenter=\"$Datacenter\",cluster=~\"$Cluster\"})",
+          "format": "table",
+          "hide": false,
+          "instant": true,
+          "interval": "",
+          "legendFormat": "",
+          "refId": "N"
+        },
+        {
+          "exemplar": true,
+          "expr": "security_certificate_labels{datacenter=\"$Datacenter\",cluster=~\"$Cluster\"}",
+          "format": "table",
+          "hide": false,
+          "instant": true,
+          "interval": "",
+          "legendFormat": "",
+          "refId": "O"
+        }
+      ],
+      "title": "Cluster Compliance",
+      "transformations": [
+        {
+          "id": "filterFieldsByName",
+          "options": {
+            "include": {
+              "names": [
+                "asup_enabled",
+                "cluster",
+                "fips_enabled",
+                "rsh_enabled",
+                "telnet_enabled",
+                "locked",
+                "Value #D",
+                "secured",
+                "banner",
+                "Value #G",
+                "encryption_state",
+                "Value #K",
+                "Value #I",
+                "Value #L",
+                "Value #M",
+                "Value #N",
+                "certificateExpiryStatus",
+                "certificateIssuerType"
+              ]
+            }
+          }
+        },
+        {
+          "id": "merge",
+          "options": {}
+        },
+        {
+          "id": "organize",
+          "options": {
+            "excludeByName": {
+              "Time": true,
+              "Time 1": true,
+              "Time 2": true,
+              "Value #B": true,
+              "Value #D": false,
+              "Value #E": false,
+              "Value #G": false,
+              "__name__": true,
+              "__name__ 1": true,
+              "__name__ 2": true,
+              "datacenter": true,
+              "datacenter 1": true,
+              "datacenter 2": true,
+              "fips_enabled": false,
+              "hash_algorithm": false,
+              "instance": true,
+              "instance 1": true,
+              "instance 2": true,
+              "job": true,
+              "job 1": true,
+              "job 2": true,
+              "locked": false,
+              "methods": true
+            },
+            "indexByName": {
+              "Value #D": 10,
+              "Value #G": 6,
+              "Value #I": 12,
+              "Value #K": 16,
+              "Value #L": 13,
+              "Value #M": 14,
+              "Value #N": 15,
+              "asup_enabled": 7,
+              "banner": 5,
+              "certificateExpiryStatus": 1,
+              "certificateIssuerType": 17,
+              "cluster": 0,
+              "encryption_state": 11,
+              "fips_enabled": 2,
+              "locked": 8,
+              "rsh_enabled": 9,
+              "secured": 4,
+              "telnet_enabled": 3
+            },
+            "renameByName": {
+              "Value #A": "Autosupport Https Transport",
+              "Value #C": "Default Admin User",
+              "Value #D": "MD5 in use",
+              "Value #E": "Insecure SSH Settings",
+              "Value #F": "Login Banner",
+              "Value #G": "Network Time Protocol",
+              "Value #I": "Saml Users",
+              "Value #K": "Local Users",
+              "Value #L": "Active Directory Users",
+              "Value #M": "Ldap Users",
+              "Value #N": "Certificate Users",
+              "activediruser": "Active Directory Users",
+              "asupEnabled": "",
+              "asupHttpsConfigured": "",
+              "asup_enabled": "Autosupport Https Transport",
+              "banner": "Login Banner",
+              "certificateExpiryStatus": "Cluster Certificate Validity",
+              "certificateIssuerType": "Certificate Issuer Type",
+              "certificateuser": "Certificate Users",
+              "ciphers": "Insecure SSH Settings1",
+              "cluster": "Cluster",
+              "encryption_state": "Cluster Peering",
+              "fips_enabled": "Global FIPS",
+              "insecure": "Insecure SSH Settings",
+              "ldapuser": "Ldap Users",
+              "localuser": "Local Users",
+              "locked": "Default Admin User",
+              "ntp": "Network Time Protocol",
+              "rsh_enabled": "Remote Shell",
+              "samluser": "Saml Users",
+              "secured": "Insecure SSH Settings",
+              "telnet_enabled": "Telnet"
+            }
+          }
+        }
+      ],
+      "type": "table"
+    },
+    {
+      "collapsed": false,
+      "datasource": "Prometheus",
+      "gridPos": {
+        "h": 1,
+        "w": 24,
+        "x": 0,
+        "y": 12
+      },
+      "id": 15,
+      "panels": [],
+      "title": "Storage VMs Compliance",
+      "type": "row"
+    },
+    {
+      "datasource": "Prometheus",
+      "fieldConfig": {
+        "defaults": {
+          "color": {
+            "fixedColor": "green",
+            "mode": "fixed"
+          },
+          "custom": {
+            "align": "auto",
+            "displayMode": "auto",
+            "filterable": false
+          },
+          "decimals": 0,
+          "mappings": [],
+          "max": 100,
+          "min": 0,
+          "thresholds": {
+            "mode": "absolute",
+            "steps": [
+              {
+                "color": "green",
+                "value": null
+              }
+            ]
+          }
+        },
+        "overrides": [
+          {
+            "matcher": {
+              "id": "byName",
+              "options": "Compliant"
+            },
+            "properties": [
+              {
+                "id": "unit",
+                "value": "percent"
+              },
+              {
+                "id": "custom.displayMode",
+                "value": "gradient-gauge"
+              },
+              {
+                "id": "max",
+                "value": 100
+              }
+            ]
+          }
+        ]
+      },
+      "gridPos": {
+        "h": 3,
+        "w": 18,
+        "x": 0,
+        "y": 13
+      },
+      "id": 165,
+      "options": {
+        "showHeader": true
+      },
+      "pluginVersion": "8.1.2",
+      "targets": [
+        {
+          "exemplar": false,
+          "expr": "count(svm_labels{datacenter=\"$Datacenter\", cluster=~\"$Cluster\",svm=~\"$SVM\", audit_protocol_enabled=\"true\", ciphers!~\".*_cbc.*\", cifs_ntlm_enabled=\"\",smb_encryption_required=\"\", smb_signing_required=\"\",scsi_authentication_type!=\"chap\",nfs_kerberos_protocol_enabled=\"\",nis_authentication_enabled=\"false\"} * on(datacenter,cluster,svm) group_left() (svm_ldap_encrypted{datacenter=\"$Datacenter\", cluster=~\"$Cluster\",svm=~\"$SVM\"} < 1) * on(datacenter,cluster,svm) group_left() (svm_ldap_signed{datacenter=\"$Datacenter\", cluster=~\"$Cluster\",svm=~\"$SVM\"} < 1) * on(datacenter,cluster,svm) group_left() (security_login_labels{datacenter=\"$Datacenter\", cluster=~\"$Cluster\",svm=~\"$SVM\",banner!=\"\"})) or vector (0)",
+          "format": "time_series",
+          "hide": false,
+          "instant": true,
+          "interval": "",
+          "legendFormat": "CompliantCluster",
+          "refId": "A"
+        },
+        {
+          "exemplar": false,
+          "expr": "count(svm_labels{datacenter=\"$Datacenter\", cluster=~\"$Cluster\",svm=~\"$SVM\"}) or vector (1) ",
+          "format": "time_series",
+          "hide": false,
+          "instant": true,
+          "interval": "",
+          "legendFormat": "TotalCluster",
+          "refId": "B"
+        }
+      ],
+      "transformations": [
+        {
+          "id": "calculateField",
+          "options": {
+            "alias": "",
+            "binary": {
+              "left": "CompliantCluster",
+              "operator": "/",
+              "reducer": "sum",
+              "right": "TotalCluster"
+            },
+            "mode": "binary",
+            "reduce": {
+              "include": [
+                "Saml",
+                "Certificate"
+              ],
+              "reducer": "sum"
+            }
+          }
+        },
+        {
+          "id": "calculateField",
+          "options": {
+            "alias": "Compliant",
+            "binary": {
+              "left": "CompliantCluster / TotalCluster",
+              "operator": "*",
+              "reducer": "sum",
+              "right": "100"
+            },
+            "mode": "binary",
+            "reduce": {
+              "reducer": "sum"
+            }
+          }
+        },
+        {
+          "id": "organize",
+          "options": {
+            "excludeByName": {
+              "Certificate": true,
+              "Compliant": false,
+              "Compliant / Total": false,
+              "CompliantCluster": true,
+              "CompliantCluster / TotalCluster": true,
+              "Saml": true,
+              "Saml / Certificate": false,
+              "Time": true,
+              "Total": true,
+              "TotalCluster": true,
+              "perc": true
+            },
+            "indexByName": {},
+            "renameByName": {
+              "PercentCompliant": "",
+              "Saml / Certificate": "perc",
+              "Time": ""
+            }
+          }
+        }
+      ],
+      "type": "table"
+    },
+    {
+      "cacheTimeout": null,
+      "datasource": "Prometheus",
+      "description": "",
+      "fieldConfig": {
+        "defaults": {
+          "color": {
+            "mode": "thresholds"
+          },
+          "mappings": [],
+          "noValue": "0",
+          "thresholds": {
+            "mode": "absolute",
+            "steps": [
+              {
+                "color": "semi-dark-green",
+                "value": null
+              }
+            ]
+          },
+          "unit": "short"
+        },
+        "overrides": []
+      },
+      "gridPos": {
+        "h": 3,
+        "w": 3,
+        "x": 18,
+        "y": 13
+      },
+      "id": 168,
+      "links": [],
+      "options": {
+        "colorMode": "value",
+        "graphMode": "none",
+        "justifyMode": "center",
+        "orientation": "horizontal",
+        "reduceOptions": {
+          "calcs": [
+            "lastNotNull"
+          ],
+          "fields": "",
+          "values": false
+        },
+        "text": {},
+        "textMode": "auto"
+      },
+      "pluginVersion": "8.1.2",
+      "targets": [
+        {
+          "exemplar": true,
+          "expr": "count(svm_labels{datacenter=\"$Datacenter\", cluster=~\"$Cluster\",svm=~\"$SVM\", audit_protocol_enabled=\"true\", ciphers!~\".*_cbc.*\", cifs_ntlm_enabled=\"\",smb_encryption_required=\"\", smb_signing_required=\"\",scsi_authentication_type!=\"chap\",nfs_kerberos_protocol_enabled=\"\",nis_authentication_enabled=\"false\"} * on(datacenter,cluster,svm) group_left() (svm_ldap_encrypted{datacenter=\"$Datacenter\", cluster=~\"$Cluster\",svm=~\"$SVM\"} < 1) * on(datacenter,cluster,svm) group_left() (svm_ldap_signed{datacenter=\"$Datacenter\", cluster=~\"$Cluster\",svm=~\"$SVM\"} < 1) * on(datacenter,cluster,svm) group_left() (security_login_labels{datacenter=\"$Datacenter\", cluster=~\"$Cluster\",svm=~\"$SVM\",banner!=\"\"}))",
+          "format": "table",
+          "hide": false,
+          "instant": true,
+          "interval": "",
+          "intervalFactor": 1,
+          "legendFormat": "",
+          "refId": "A"
+        }
+      ],
+      "timeFrom": null,
+      "timeShift": null,
+      "title": "Compliant SVMs",
+      "type": "stat"
+    },
+    {
+      "cacheTimeout": null,
+      "datasource": "Prometheus",
+      "description": "",
+      "fieldConfig": {
+        "defaults": {
+          "color": {
+            "mode": "thresholds"
+          },
+          "mappings": [],
+          "noValue": "0",
+          "thresholds": {
+            "mode": "absolute",
+            "steps": [
+              {
+                "color": "orange",
+                "value": null
+              }
+            ]
+          },
+          "unit": "short"
+        },
+        "overrides": []
+      },
+      "gridPos": {
+        "h": 3,
+        "w": 3,
+        "x": 21,
+        "y": 13
+      },
+      "id": 164,
+      "links": [],
+      "options": {
+        "colorMode": "value",
+        "graphMode": "none",
+        "justifyMode": "center",
+        "orientation": "horizontal",
+        "reduceOptions": {
+          "calcs": [
+            "lastNotNull"
+          ],
+          "fields": "",
+          "values": false
+        },
+        "text": {},
+        "textMode": "auto"
+      },
+      "pluginVersion": "8.1.2",
+      "targets": [
+        {
+          "exemplar": true,
+          "expr": "count(svm_labels{datacenter=\"$Datacenter\", cluster=~\"$Cluster\",svm=~\"$SVM\"}) or vector(0)",
+          "format": "table",
+          "hide": false,
+          "instant": true,
+          "interval": "",
+          "legendFormat": "",
+          "refId": "A"
+        },
+        {
+          "exemplar": true,
+          "expr": "count(svm_labels{datacenter=\"$Datacenter\", cluster=~\"$Cluster\",svm=~\"$SVM\", audit_protocol_enabled=\"true\", ciphers!~\".*_cbc.*\", cifs_ntlm_enabled=\"\",smb_encryption_required=\"\", smb_signing_required=\"\",scsi_authentication_type!=\"chap\",nfs_kerberos_protocol_enabled=\"\",nis_authentication_enabled=\"false\"} * on(datacenter,cluster,svm) group_left() (svm_ldap_encrypted{datacenter=\"$Datacenter\", cluster=~\"$Cluster\",svm=~\"$SVM\"} < 1) * on(datacenter,cluster,svm) group_left() (svm_ldap_signed{datacenter=\"$Datacenter\", cluster=~\"$Cluster\",svm=~\"$SVM\"} < 1) * on(datacenter,cluster,svm) group_left() (security_login_labels{datacenter=\"$Datacenter\", cluster=~\"$Cluster\",svm=~\"$SVM\",banner!=\"\"})) or vector(0)",
+          "format": "table",
+          "hide": false,
+          "instant": true,
+          "interval": "",
+          "intervalFactor": 1,
+          "legendFormat": "",
+          "refId": "B"
+        }
+      ],
+      "timeFrom": null,
+      "timeShift": null,
+      "title": "Not Compliant SVMs",
+      "transformations": [
+        {
+          "id": "calculateField",
+          "options": {
+            "alias": "Not Compliant",
+            "binary": {
+              "left": "Value #A",
+              "operator": "-",
+              "reducer": "sum",
+              "right": "Value #B"
+            },
+            "mode": "binary",
+            "reduce": {
+              "reducer": "sum"
+            }
+          }
+        },
+        {
+          "id": "organize",
+          "options": {
+            "excludeByName": {
+              "Time": true,
+              "Value #A": true,
+              "Value #B": true
+            },
+            "indexByName": {},
+            "renameByName": {}
+          }
+        }
+      ],
+      "type": "stat"
+    },
+    {
+      "datasource": "${DS_PROMETHEUS}",
+      "fieldConfig": {
+        "defaults": {
+          "color": {
+            "fixedColor": "transparent",
+            "mode": "fixed"
+          },
+          "custom": {
+            "align": "left",
+            "displayMode": "color-background-solid",
+            "filterable": false
+          },
+          "mappings": [],
+          "thresholds": {
+            "mode": "absolute",
+            "steps": [
+              {
+                "color": "green",
+                "value": null
+              }
+            ]
+          }
+        },
+        "overrides": [
+          {
+            "matcher": {
+              "id": "byName",
+              "options": "cluster"
+            },
+            "properties": [
+              {
+                "id": "displayName",
+                "value": "Cluster"
+              },
+              {
+                "id": "custom.width",
+                "value": 300
+              },
+              {
+                "id": "custom.filterable",
+                "value": true
+              }
+            ]
+          },
+          {
+            "matcher": {
+              "id": "byName",
+              "options": "Login Banner"
+            },
+            "properties": [
+              {
+                "id": "mappings",
+                "value": [
+                  {
+                    "options": {
+                      "match": "empty",
+                      "result": {
+                        "index": 0,
+                        "text": "Disabled"
+                      }
+                    },
+                    "type": "special"
+                  },
+                  {
+                    "options": {
+                      "match": "null",
+                      "result": {
+                        "index": 1,
+                        "text": "Disabled"
+                      }
+                    },
+                    "type": "special"
+                  },
+                  {
+                    "options": {
+                      "match": "nan",
+                      "result": {
+                        "index": 2,
+                        "text": "Enabled"
+                      }
+                    },
+                    "type": "special"
+                  }
+                ]
+              },
+              {
+                "id": "custom.width",
+                "value": 115
+              },
+              {
+                "id": "custom.filterable",
+                "value": true
+              }
+            ]
+          },
+          {
+            "matcher": {
+              "id": "byName",
+              "options": "Audit Log"
+            },
+            "properties": [
+              {
+                "id": "mappings",
+                "value": [
+                  {
+                    "options": {
+                      "false": {
+                        "index": 1,
+                        "text": "Disabled"
+                      },
+                      "true": {
+                        "index": 0,
+                        "text": "Enabled"
+                      }
+                    },
+                    "type": "value"
+                  },
+                  {
+                    "options": {
+                      "match": "empty",
+                      "result": {
+                        "index": 2,
+                        "text": "N/A"
+                      }
+                    },
+                    "type": "special"
+                  }
+                ]
+              },
+              {
+                "id": "custom.width",
+                "value": 169
+              },
+              {
+                "id": "custom.filterable",
+                "value": true
+              }
+            ]
+          },
+          {
+            "matcher": {
+              "id": "byName",
+              "options": "LDAP Payload Signing"
+            },
+            "properties": [
+              {
+                "id": "mappings",
+                "value": [
+                  {
+                    "options": {
+                      "0": {
+                        "index": 0,
+                        "text": "Disabled"
+                      },
+                      "1": {
+                        "index": 1,
+                        "text": "Enabled"
+                      }
+                    },
+                    "type": "value"
+                  }
+                ]
+              },
+              {
+                "id": "custom.filterable",
+                "value": true
+              }
+            ]
+          },
+          {
+            "matcher": {
+              "id": "byName",
+              "options": "Insecure SSH Settings"
+            },
+            "properties": [
+              {
+                "id": "mappings",
+                "value": [
+                  {
+                    "options": {
+                      " ": {
+                        "index": 1,
+                        "text": "No"
+                      }
+                    },
+                    "type": "value"
+                  },
+                  {
+                    "options": {
+                      "match": "nan",
+                      "result": {
+                        "index": 0,
+                        "text": "Yes"
+                      }
+                    },
+                    "type": "special"
+                  }
+                ]
+              },
+              {
+                "id": "custom.filterable",
+                "value": true
+              }
+            ]
+          },
+          {
+            "matcher": {
+              "id": "byName",
+              "options": "NTML Authentication"
+            },
+            "properties": [
+              {
+                "id": "custom.width",
+                "value": 132
+              },
+              {
+                "id": "mappings",
+                "value": [
+                  {
+                    "options": {
+                      "lm_ntlm_ntlmv2_krb": {
+                        "index": 0,
+                        "text": "Enabled"
+                      },
+                      "ntlm_ntlmv2_krb": {
+                        "index": 1,
+                        "text": "Enabled"
+                      },
+                      "ntlmv2_krb": {
+                        "index": 2,
+                        "text": "Enabled"
+                      }
+                    },
+                    "type": "value"
+                  },
+                  {
+                    "options": {
+                      "match": "nan",
+                      "result": {
+                        "index": 3,
+                        "text": "Disabled"
+                      }
+                    },
+                    "type": "special"
+                  },
+                  {
+                    "options": {
+                      "match": "empty",
+                      "result": {
+                        "index": 4,
+                        "text": "N/A"
+                      }
+                    },
+                    "type": "special"
+                  }
+                ]
+              },
+              {
+                "id": "custom.filterable",
+                "value": true
+              }
+            ]
+          },
+          {
+            "matcher": {
+              "id": "byName",
+              "options": "LDAP Encryption"
+            },
+            "properties": [
+              {
+                "id": "mappings",
+                "value": [
+                  {
+                    "options": {
+                      "0": {
+                        "index": 0,
+                        "text": "Disabled"
+                      },
+                      "1": {
+                        "index": 1,
+                        "text": "Enabled"
+                      }
+                    },
+                    "type": "value"
+                  }
+                ]
+              },
+              {
+                "id": "custom.filterable",
+                "value": true
+              }
+            ]
+          },
+          {
+            "matcher": {
+              "id": "byName",
+              "options": "SMB Encryption Enabled"
+            },
+            "properties": [
+              {
+                "id": "mappings",
+                "value": [
+                  {
+                    "options": {
+                      "false": {
+                        "index": 1,
+                        "text": "Disabled"
+                      },
+                      "true": {
+                        "index": 0,
+                        "text": "Enabled"
+                      }
+                    },
+                    "type": "value"
+                  },
+                  {
+                    "options": {
+                      "match": "empty",
+                      "result": {
+                        "index": 2,
+                        "text": "N/A"
+                      }
+                    },
+                    "type": "special"
+                  }
+                ]
+              },
+              {
+                "id": "custom.filterable",
+                "value": true
+              }
+            ]
+          },
+          {
+            "matcher": {
+              "id": "byName",
+              "options": "SMB Signing Enabled"
+            },
+            "properties": [
+              {
+                "id": "mappings",
+                "value": [
+                  {
+                    "options": {
+                      "0": {
+                        "index": 0,
+                        "text": "Disabled"
+                      },
+                      "1": {
+                        "index": 1,
+                        "text": "Enabled"
+                      }
+                    },
+                    "type": "value"
+                  },
+                  {
+                    "options": {
+                      "match": "empty",
+                      "result": {
+                        "index": 2,
+                        "text": "N/A"
+                      }
+                    },
+                    "type": "special"
+                  }
+                ]
+              },
+              {
+                "id": "custom.filterable",
+                "value": true
+              }
+            ]
+          },
+          {
+            "matcher": {
+              "id": "byName",
+              "options": "Kerberos V5"
+            },
+            "properties": [
+              {
+                "id": "mappings",
+                "value": [
+                  {
+                    "options": {
+                      "false": {
+                        "index": 1,
+                        "text": "Disabled"
+                      },
+                      "true": {
+                        "index": 0,
+                        "text": "Enabled"
+                      }
+                    },
+                    "type": "value"
+                  },
+                  {
+                    "options": {
+                      "match": "empty",
+                      "result": {
+                        "index": 2,
+                        "text": "N/A"
+                      }
+                    },
+                    "type": "special"
+                  }
+                ]
+              },
+              {
+                "id": "custom.filterable",
+                "value": true
+              }
+            ]
+          },
+          {
+            "matcher": {
+              "id": "byName",
+              "options": "CHAP Settings"
+            },
+            "properties": [
+              {
+                "id": "mappings",
+                "value": [
+                  {
+                    "options": {
+                      "chap": {
+                        "index": 0,
+                        "text": "Enabled"
+                      }
+                    },
+                    "type": "value"
+                  },
+                  {
+                    "options": {
+                      "match": "nan",
+                      "result": {
+                        "index": 1,
+                        "text": "Disabled"
+                      }
+                    },
+                    "type": "special"
+                  },
+                  {
+                    "options": {
+                      "match": "empty",
+                      "result": {
+                        "index": 2,
+                        "text": "N/A"
+                      }
+                    },
+                    "type": "special"
+                  }
+                ]
+              },
+              {
+                "id": "custom.filterable",
+                "value": true
+              }
+            ]
+          },
+          {
+            "matcher": {
+              "id": "byName",
+              "options": "NIS Authentication"
+            },
+            "properties": [
+              {
+                "id": "mappings",
+                "value": [
+                  {
+                    "options": {
+                      "false": {
+                        "index": 1,
+                        "text": "Disabled"
+                      },
+                      "true": {
+                        "index": 0,
+                        "text": "Enabled"
+                      }
+                    },
+                    "type": "value"
+                  }
+                ]
+              },
+              {
+                "id": "custom.filterable",
+                "value": true
+              }
+            ]
+          },
+          {
+            "matcher": {
+              "id": "byName",
+              "options": "Fpolicy Status Active"
+            },
+            "properties": [
+              {
+                "id": "mappings",
+                "value": [
+                  {
+                    "options": {
+                      "false": {
+                        "index": 1,
+                        "text": "Disabled"
+                      },
+                      "true": {
+                        "index": 0,
+                        "text": "Enabled"
+                      }
+                    },
+                    "type": "value"
+                  }
+                ]
+              },
+              {
+                "id": "custom.filterable",
+                "value": true
+              }
+            ]
+          },
+          {
+            "matcher": {
+              "id": "byName",
+              "options": "SVM"
+            },
+            "properties": [
+              {
+                "id": "custom.width",
+                "value": 150
+              }
+            ]
+          }
+        ]
+      },
+      "gridPos": {
+        "h": 13,
+        "w": 24,
+        "x": 0,
+        "y": 16
+      },
+      "id": 156,
+      "options": {
+        "showHeader": true,
+        "sortBy": []
+      },
+      "pluginVersion": "8.1.2",
+      "targets": [
+        {
+          "exemplar": false,
+          "expr": "svm_labels{datacenter=\"$Datacenter\", cluster=~\"$Cluster\", svm=~\"$SVM\"}",
+          "format": "table",
+          "instant": true,
+          "interval": "",
+          "legendFormat": "",
+          "refId": "A"
+        },
+        {
+          "exemplar": true,
+          "expr": "security_login_labels{datacenter=\"$Datacenter\", cluster=~\"$Cluster\", scope=\"svm\", svm=~\"$SVM\"}",
+          "format": "table",
+          "hide": false,
+          "instant": true,
+          "interval": "",
+          "legendFormat": "",
+          "refId": "C"
+        },
+        {
+          "exemplar": true,
+          "expr": "label_join(label_replace(svm_labels{datacenter=\"$Datacenter\", cluster=~\"$Cluster\", svm=~\"$SVM\"}, \"nonsecure\", \"$1\", \"ciphers\", \"(.*)_cbc*\"), \"secured\", \" \", \"nonsecure\", \"NonSupportedField\")",
+          "format": "table",
+          "hide": false,
+          "instant": true,
+          "interval": "",
+          "legendFormat": "",
+          "refId": "E"
+        },
+        {
+          "exemplar": true,
+          "expr": "svm_ldap_signed{datacenter=\"$Datacenter\", cluster=~\"$Cluster\", svm=~\"$SVM\"}",
+          "format": "table",
+          "hide": false,
+          "instant": true,
+          "interval": "",
+          "legendFormat": "",
+          "refId": "G"
+        },
+        {
+          "exemplar": true,
+          "expr": "svm_ldap_encrypted{datacenter=\"$Datacenter\", cluster=~\"$Cluster\", svm=~\"$SVM\"}",
+          "format": "table",
+          "hide": false,
+          "instant": true,
+          "interval": "",
+          "legendFormat": "",
+          "refId": "I"
+        }
+      ],
+      "title": "SVM Compliance",
+      "transformations": [
+        {
+          "id": "filterFieldsByName",
+          "options": {
+            "include": {
+              "names": [
+                "cifs_ntlm_enabled",
+                "cluster",
+                "nfs_kerberos_protocol_enabled",
+                "nis_authentication_enabled",
+                "smb_encryption_required",
+                "smb_signing_required",
+                "svm",
+                "banner",
+                "secured",
+                "Value #G",
+                "Value #I",
+                "audit_protocol_enabled",
+                "iscsi_authentication_type"
+              ]
+            }
+          }
+        },
+        {
+          "id": "merge",
+          "options": {}
+        },
+        {
+          "id": "organize",
+          "options": {
+            "excludeByName": {
+              "Time": true,
+              "Time 1": true,
+              "Time 2": true,
+              "Value #B": true,
+              "Value #C": true,
+              "Value #D": false,
+              "Value #E": false,
+              "Value #G": false,
+              "__name__": true,
+              "__name__ 1": true,
+              "__name__ 2": true,
+              "datacenter": true,
+              "datacenter 1": true,
+              "datacenter 2": true,
+              "fips_enabled": false,
+              "hash_algorithm": false,
+              "instance": true,
+              "instance 1": true,
+              "instance 2": true,
+              "job": true,
+              "job 1": true,
+              "job 2": true,
+              "locked": true,
+              "methods": true
+            },
+            "indexByName": {
+              "Value #G": 7,
+              "Value #I": 5,
+              "audit_protocol_enabled": 3,
+              "banner": 2,
+              "cifs_ntlm_enabled": 6,
+              "cluster": 0,
+              "fpolicy_enabled": 13,
+              "iscsi_authentication_type": 10,
+              "nfs_kerberos_protocol_enabled": 11,
+              "nis_domain": 12,
+              "secured": 4,
+              "smb_encryption_required": 8,
+              "smb_signing_required": 9,
+              "svm": 1
+            },
+            "renameByName": {
+              "Value #A": "Autosupport Https Transport",
+              "Value #C": "Login Banner",
+              "Value #D": "MD5 in use",
+              "Value #E": "",
+              "Value #F": "Login Banner",
+              "Value #G": "LDAP Payload Signing",
+              "Value #I": "LDAP Encryption",
+              "activediruser": "Active Directory Users",
+              "asupEnabled": "",
+              "asupHttpsConfigured": "",
+              "audit_protocol_enabled": "Audit Log",
+              "banner": "Login Banner",
+              "certificateuser": "Certificate Users",
+              "cifs_ntlm_enabled": "NTML Authentication",
+              "ciphers": "Insecure SSH Settings",
+              "cluster": "",
+              "fips_enabled": "Global FIPS",
+              "fpolicy_enabled": "Fpolicy Status Active",
+              "insecure": "Insecure SSH Settings",
+              "iscsi_authentication_type": "CHAP Settings",
+              "ldapuser": "Ldap Users",
+              "localuser": "Local Users",
+              "nfs_kerberos_protocol_enabled": "Kerberos V5",
+              "nis_authentication_enabled": "NIS Authentication",
+              "nis_domain": "NIS Authentication",
+              "ntp": "Network Time Protocol",
+              "rsh_enabled": "Remote Shell",
+              "samluser": "Saml Users",
+              "secured": "Insecure SSH Settings",
+              "smb_encryption_required": "SMB Encryption Enabled",
+              "smb_signing_required": "SMB Signing Enabled",
+              "svm": "SVM",
+              "telnet_enabled": "Telnet"
+            }
+          }
+        }
+      ],
+      "type": "table"
+    },
+    {
+      "collapsed": false,
+      "datasource": "Prometheus",
+      "gridPos": {
+        "h": 1,
+        "w": 24,
+        "x": 0,
+        "y": 29
+      },
+      "id": 153,
+      "panels": [],
+      "title": "Cluster Authentication And Certificates",
+      "type": "row"
+    },
+    {
+      "datasource": "Prometheus",
+      "fieldConfig": {
+        "defaults": {
+          "color": {
+            "fixedColor": "blue",
+            "mode": "fixed"
+          },
+          "mappings": [],
+          "min": 0,
+          "thresholds": {
+            "mode": "absolute",
+            "steps": [
+              {
+                "color": "blue",
+                "value": null
+              }
+            ]
+          },
+          "unit": "none"
+        },
+        "overrides": []
+      },
+      "gridPos": {
+        "h": 6,
+        "w": 18,
+        "x": 0,
+        "y": 30
+      },
+      "id": 154,
+      "options": {
+        "displayMode": "gradient",
+        "orientation": "horizontal",
+        "reduceOptions": {
+          "calcs": [
+            "last"
+          ],
+          "fields": "",
+          "values": false
+        },
+        "showUnfilled": true,
+        "text": {}
+      },
+      "pluginVersion": "8.1.2",
+      "targets": [
+        {
+          "exemplar": false,
+          "expr": "count(count by (datacenter, cluster)(security_account_samluser{datacenter=\"$Datacenter\",cluster=~\"$Cluster\"} > 0)) or vector (0)",
+          "format": "time_series",
+          "hide": false,
+          "instant": false,
+          "interval": "",
+          "legendFormat": "Saml",
+          "refId": "A"
+        },
+        {
+          "exemplar": false,
+          "expr": "count(count by (datacenter, cluster) (security_account_certificateuser{datacenter=\"$Datacenter\",cluster=~\"$Cluster\"} > 0)) or vector (0)",
+          "format": "time_series",
+          "hide": false,
+          "instant": false,
+          "interval": "",
+          "legendFormat": "Certificate",
+          "refId": "B"
+        },
+        {
+          "exemplar": true,
+          "expr": "count(count by (datacenter, cluster) (security_account_localuser{datacenter=\"$Datacenter\",cluster=~\"$Cluster\"} > 0)) or vector (0)",
+          "format": "time_series",
+          "hide": false,
+          "instant": false,
+          "interval": "",
+          "legendFormat": "Local",
+          "refId": "C"
+        },
+        {
+          "exemplar": true,
+          "expr": "count(count by (datacenter, cluster) (security_account_ldapuser{datacenter=\"$Datacenter\",cluster=~\"$Cluster\"} > 0)) or vector (0)",
+          "hide": false,
+          "interval": "",
+          "legendFormat": "Ldap",
+          "refId": "D"
+        },
+        {
+          "exemplar": true,
+          "expr": "count(count by (datacenter, cluster) (security_account_activediruser{datacenter=\"$Datacenter\",cluster=~\"$Cluster\"} > 0)) or vector (0)",
+          "hide": false,
+          "interval": "",
+          "legendFormat": "Active Directory",
+          "refId": "E"
+        }
+      ],
+      "title": "Authentication Methods",
+      "transformations": [],
+      "type": "bargauge"
+    },
+    {
+      "cacheTimeout": null,
+      "datasource": "Prometheus",
+      "description": "",
+      "fieldConfig": {
+        "defaults": {
+          "color": {
+            "mode": "thresholds"
+          },
+          "mappings": [],
+          "noValue": "0",
+          "thresholds": {
+            "mode": "absolute",
+            "steps": [
+              {
+                "color": "dark-yellow",
+                "value": null
+              }
+            ]
+          },
+          "unit": "short"
+        },
+        "overrides": []
+      },
+      "gridPos": {
+        "h": 6,
+        "w": 3,
+        "x": 18,
+        "y": 30
+      },
+      "id": 158,
+      "links": [],
+      "options": {
+        "colorMode": "value",
+        "graphMode": "none",
+        "justifyMode": "auto",
+        "orientation": "vertical",
+        "reduceOptions": {
+          "calcs": [
+            "lastNotNull"
+          ],
+          "fields": "",
+          "values": false
+        },
+        "text": {},
+        "textMode": "auto"
+      },
+      "pluginVersion": "8.1.2",
+      "targets": [
+        {
+          "exemplar": true,
+          "expr": "count(security_certificate_labels{datacenter=\"$Datacenter\", cluster=~\"$Cluster\", certificateExpiryStatus=\"expiring\"})",
+          "format": "time_series",
+          "hide": false,
+          "instant": false,
+          "interval": "",
+          "intervalFactor": 1,
+          "legendFormat": "",
+          "refId": "A"
+        }
+      ],
+      "timeFrom": null,
+      "timeShift": null,
+      "title": "Expiring in < 60 days",
+      "type": "stat"
+    },
+    {
+      "cacheTimeout": null,
+      "datasource": "Prometheus",
+      "description": "",
+      "fieldConfig": {
+        "defaults": {
+          "color": {
+            "mode": "thresholds"
+          },
+          "mappings": [],
+          "noValue": "0",
+          "thresholds": {
+            "mode": "absolute",
+            "steps": [
+              {
+                "color": "light-red",
+                "value": null
+              }
+            ]
+          },
+          "unit": "short"
+        },
+        "overrides": []
+      },
+      "gridPos": {
+        "h": 6,
+        "w": 3,
+        "x": 21,
+        "y": 30
+      },
+      "id": 159,
+      "links": [],
+      "options": {
+        "colorMode": "value",
+        "graphMode": "none",
+        "justifyMode": "center",
+        "orientation": "horizontal",
+        "reduceOptions": {
+          "calcs": [
+            "lastNotNull"
+          ],
+          "fields": "",
+          "values": false
+        },
+        "text": {},
+        "textMode": "auto"
+      },
+      "pluginVersion": "8.1.2",
+      "targets": [
+        {
+          "exemplar": true,
+          "expr": "count(security_certificate_labels{datacenter=\"$Datacenter\", cluster=~\"$Cluster\", certificateExpiryStatus=\"expired\"})",
+          "format": "time_series",
+          "hide": false,
+          "instant": false,
+          "interval": "",
+          "intervalFactor": 1,
+          "legendFormat": "",
+          "refId": "A"
+        }
+      ],
+      "timeFrom": null,
+      "timeShift": null,
+      "title": "Expired",
+      "type": "stat"
+    },
+    {
+      "collapsed": false,
+      "datasource": "Prometheus",
+      "gridPos": {
+        "h": 1,
+        "w": 24,
+        "x": 0,
+        "y": 36
+      },
+      "id": 12,
+      "panels": [],
+      "title": "Volume Encryption",
+      "type": "row"
+    },
+    {
+      "datasource": "Prometheus",
+      "fieldConfig": {
+        "defaults": {
+          "color": {
+            "fixedColor": "green",
+            "mode": "fixed"
+          },
+          "custom": {
+            "align": "auto",
+            "displayMode": "gradient-gauge",
+            "filterable": false
+          },
+          "decimals": 0,
+          "mappings": [],
+          "max": 100,
+          "min": 0,
+          "thresholds": {
+            "mode": "absolute",
+            "steps": [
+              {
+                "color": "green",
+                "value": null
+              }
+            ]
+          }
+        },
+        "overrides": [
+          {
+            "matcher": {
+              "id": "byName",
+              "options": "Encrypted"
+            },
+            "properties": [
+              {
+                "id": "unit",
+                "value": "percent"
+              },
+              {
+                "id": "max",
+                "value": 100
+              }
+            ]
+          }
+        ]
+      },
+      "gridPos": {
+        "h": 3,
+        "w": 24,
+        "x": 0,
+        "y": 37
+      },
+      "id": 178,
+      "options": {
+        "showHeader": true
+      },
+      "pluginVersion": "8.1.2",
+      "targets": [
+        {
+          "exemplar": false,
+          "expr": "count(volume_labels{datacenter=\"$Datacenter\",cluster=~\"$Cluster\", svm=~\"$SVM\", isEncrypted=\"true\"}) or vector (0)",
+          "format": "time_series",
+          "hide": false,
+          "instant": true,
+          "interval": "",
+          "legendFormat": "Software",
+          "refId": "A"
+        },
+        {
+          "exemplar": false,
+          "expr": "count(volume_labels{datacenter=\"$Datacenter\",cluster=~\"$Cluster\", svm=~\"$SVM\", isHardwareEncrypted=\"true\"}) or vector (0) ",
+          "format": "time_series",
+          "hide": false,
+          "instant": true,
+          "interval": "",
+          "legendFormat": "Hardware",
+          "refId": "B"
+        },
+        {
+          "exemplar": false,
+          "expr": "count(volume_labels{datacenter=\"$Datacenter\",cluster=~\"$Cluster\", svm=~\"$SVM\"}) or vector (1) ",
+          "hide": false,
+          "instant": true,
+          "interval": "",
+          "legendFormat": "Total",
+          "refId": "C"
+        }
+      ],
+      "transformations": [
+        {
+          "id": "calculateField",
+          "options": {
+            "alias": "Both",
+            "binary": {
+              "left": "Software",
+              "operator": "+",
+              "reducer": "sum",
+              "right": "Hardware"
+            },
+            "mode": "binary",
+            "reduce": {
+              "reducer": "sum"
+            }
+          }
+        },
+        {
+          "id": "calculateField",
+          "options": {
+            "alias": "",
+            "binary": {
+              "left": "Both",
+              "operator": "/",
+              "reducer": "sum",
+              "right": "Total"
+            },
+            "mode": "binary",
+            "reduce": {
+              "include": [
+                "Saml",
+                "Certificate"
+              ],
+              "reducer": "sum"
+            }
+          }
+        },
+        {
+          "id": "calculateField",
+          "options": {
+            "alias": "Encrypted",
+            "binary": {
+              "left": "Both / Total",
+              "operator": "*",
+              "reducer": "sum",
+              "right": "100"
+            },
+            "mode": "binary",
+            "reduce": {
+              "reducer": "sum"
+            }
+          }
+        },
+        {
+          "id": "organize",
+          "options": {
+            "excludeByName": {
+              "Both": true,
+              "Both / Total": true,
+              "Certificate": true,
+              "Compliant": false,
+              "Compliant / Total": false,
+              "CompliantCluster": true,
+              "CompliantCluster / TotalCluster": true,
+              "Hardware": true,
+              "Saml": true,
+              "Saml / Certificate": false,
+              "Software": true,
+              "Time": true,
+              "Total": true,
+              "TotalCluster": true,
+              "perc": true
+            },
+            "indexByName": {},
+            "renameByName": {
+              "PercentCompliant": "",
+              "Saml / Certificate": "perc",
+              "Time": ""
+            }
+          }
+        }
+      ],
+      "type": "table"
+    },
+    {
+      "cacheTimeout": null,
+      "datasource": "Prometheus",
+      "description": "",
+      "fieldConfig": {
+        "defaults": {
+          "color": {
+            "mode": "thresholds"
+          },
+          "mappings": [],
+          "noValue": "0",
+          "thresholds": {
+            "mode": "absolute",
+            "steps": [
+              {
+                "color": "dark-green",
+                "value": null
+              }
+            ]
+          },
+          "unit": "short"
+        },
+        "overrides": []
+      },
+      "gridPos": {
+        "h": 3,
+        "w": 6,
+        "x": 0,
+        "y": 40
+      },
+      "id": 163,
+      "links": [],
+      "options": {
+        "colorMode": "value",
+        "graphMode": "none",
+        "justifyMode": "center",
+        "orientation": "horizontal",
+        "reduceOptions": {
+          "calcs": [
+            "lastNotNull"
+          ],
+          "fields": "",
+          "values": false
+        },
+        "text": {},
+        "textMode": "auto"
+      },
+      "pluginVersion": "8.1.2",
+      "targets": [
+        {
+          "exemplar": true,
+          "expr": "count(volume_labels{datacenter=\"$Datacenter\",cluster=~\"$Cluster\", svm=~\"$SVM\", isEncrypted=\"true\"}) or vector (0)",
+          "format": "time_series",
+          "hide": false,
+          "instant": false,
+          "interval": "",
+          "intervalFactor": 1,
+          "legendFormat": "",
+          "refId": "A"
+        }
+      ],
+      "timeFrom": null,
+      "timeShift": null,
+      "title": "Software Encrypted",
+      "type": "stat"
+    },
+    {
+      "cacheTimeout": null,
+      "datasource": "Prometheus",
+      "description": "",
+      "fieldConfig": {
+        "defaults": {
+          "color": {
+            "mode": "thresholds"
+          },
+          "mappings": [],
+          "noValue": "0",
+          "thresholds": {
+            "mode": "absolute",
+            "steps": [
+              {
+                "color": "semi-dark-green",
+                "value": null
+              }
+            ]
+          },
+          "unit": "short"
+        },
+        "overrides": []
+      },
+      "gridPos": {
+        "h": 3,
+        "w": 6,
+        "x": 6,
+        "y": 40
+      },
+      "id": 170,
+      "links": [],
+      "options": {
+        "colorMode": "value",
+        "graphMode": "none",
+        "justifyMode": "center",
+        "orientation": "horizontal",
+        "reduceOptions": {
+          "calcs": [
+            "lastNotNull"
+          ],
+          "fields": "",
+          "values": false
+        },
+        "text": {},
+        "textMode": "auto"
+      },
+      "pluginVersion": "8.1.2",
+      "targets": [
+        {
+          "exemplar": true,
+          "expr": "count(volume_labels{datacenter=\"$Datacenter\",cluster=~\"$Cluster\", svm=~\"$SVM\", isHardwareEncrypted=\"true\"}) or vector (0)",
+          "format": "time_series",
+          "hide": false,
+          "instant": false,
+          "interval": "",
+          "intervalFactor": 1,
+          "legendFormat": "",
+          "refId": "A"
+        }
+      ],
+      "timeFrom": null,
+      "timeShift": null,
+      "title": "Hardware Encrypted",
+      "type": "stat"
+    },
+    {
+      "cacheTimeout": null,
+      "datasource": "Prometheus",
+      "description": "",
+      "fieldConfig": {
+        "defaults": {
+          "color": {
+            "mode": "thresholds"
+          },
+          "mappings": [],
+          "noValue": "0",
+          "thresholds": {
+            "mode": "absolute",
+            "steps": [
+              {
+                "color": "light-green",
+                "value": null
+              }
+            ]
+          },
+          "unit": "short"
+        },
+        "overrides": []
+      },
+      "gridPos": {
+        "h": 3,
+        "w": 6,
+        "x": 12,
+        "y": 40
+      },
+      "id": 169,
+      "links": [],
+      "options": {
+        "colorMode": "value",
+        "graphMode": "none",
+        "justifyMode": "center",
+        "orientation": "horizontal",
+        "reduceOptions": {
+          "calcs": [
+            "lastNotNull"
+          ],
+          "fields": "",
+          "values": false
+        },
+        "text": {},
+        "textMode": "auto"
+      },
+      "pluginVersion": "8.1.2",
+      "targets": [
+        {
+          "exemplar": true,
+          "expr": "count(volume_labels{datacenter=\"$Datacenter\",cluster=~\"$Cluster\", svm=~\"$SVM\", isEncrypted=\"true\", isHardwareEncrypted=\"true\"}) or vector (0)",
+          "format": "time_series",
+          "hide": false,
+          "instant": false,
+          "interval": "",
+          "intervalFactor": 1,
+          "legendFormat": "",
+          "refId": "A"
+        }
+      ],
+      "timeFrom": null,
+      "timeShift": null,
+      "title": "Software and Hardware Encrypted",
+      "type": "stat"
+    },
+    {
+      "cacheTimeout": null,
+      "datasource": "Prometheus",
+      "description": "",
+      "fieldConfig": {
+        "defaults": {
+          "color": {
+            "mode": "thresholds"
+          },
+          "mappings": [],
+          "noValue": "0",
+          "thresholds": {
+            "mode": "absolute",
+            "steps": [
+              {
+                "color": "dark-yellow",
+                "value": null
+              }
+            ]
+          },
+          "unit": "none"
+        },
+        "overrides": []
+      },
+      "gridPos": {
+        "h": 3,
+        "w": 6,
+        "x": 18,
+        "y": 40
+      },
+      "id": 171,
+      "links": [],
+      "options": {
+        "colorMode": "value",
+        "graphMode": "none",
+        "justifyMode": "center",
+        "orientation": "horizontal",
+        "reduceOptions": {
+          "calcs": [
+            "lastNotNull"
+          ],
+          "fields": "",
+          "values": false
+        },
+        "text": {},
+        "textMode": "auto"
+      },
+      "pluginVersion": "8.1.2",
+      "targets": [
+        {
+          "exemplar": true,
+          "expr": "count(volume_labels{datacenter=\"$Datacenter\",cluster=~\"$Cluster\", svm=~\"$SVM\"}) or vector (0)",
+          "format": "time_series",
+          "hide": false,
+          "instant": true,
+          "interval": "",
+          "intervalFactor": 1,
+          "legendFormat": "",
+          "refId": "A"
+        }
+      ],
+      "timeFrom": null,
+      "timeShift": null,
+      "title": "Not Encrypted",
+      "type": "stat"
+    },
+    {
+      "datasource": "Prometheus",
+      "fieldConfig": {
+        "defaults": {
+          "color": {
+            "fixedColor": "transparent",
+            "mode": "fixed"
+          },
+          "custom": {
+            "align": "left",
+            "displayMode": "color-background-solid",
+            "filterable": false
+          },
+          "mappings": [],
+          "thresholds": {
+            "mode": "absolute",
+            "steps": [
+              {
+                "color": "green",
+                "value": null
+              }
+            ]
+          }
+        },
+        "overrides": [
+          {
+            "matcher": {
+              "id": "byName",
+              "options": "Encryption Type"
+            },
+            "properties": [
+              {
+                "id": "custom.filterable",
+                "value": true
+              },
+              {
+                "id": "mappings",
+                "value": [
+                  {
+                    "options": {
+                      "falsefalse": {
+                        "index": 0,
+                        "text": "None"
+                      },
+                      "falsetrue": {
+                        "index": 1,
+                        "text": "Software"
+                      },
+                      "truefalse": {
+                        "index": 2,
+                        "text": "Hardware"
+                      },
+                      "truetrue": {
+                        "index": 3,
+                        "text": "Both"
+                      }
+                    },
+                    "type": "value"
+                  },
+                  {
+                    "options": {
+                      "match": "empty",
+                      "result": {
+                        "index": 4,
+                        "text": "None"
+                      }
+                    },
+                    "type": "special"
+                  }
+                ]
+              }
+            ]
+          },
+          {
+            "matcher": {
+              "id": "byName",
+              "options": "State"
+            },
+            "properties": [
+              {
+                "id": "custom.filterable",
+                "value": true
+              }
+            ]
+          }
+        ]
+      },
+      "gridPos": {
+        "h": 7,
+        "w": 24,
+        "x": 0,
+        "y": 43
+      },
+      "id": 155,
+      "options": {
+        "showHeader": true,
+        "sortBy": []
+      },
+      "pluginVersion": "8.1.2",
+      "targets": [
+        {
+          "exemplar": false,
+          "expr": "volume_labels{datacenter=\"$Datacenter\", cluster=~\"$Cluster\", svm=~\"$SVM\"}",
+          "format": "table",
+          "instant": true,
+          "interval": "",
+          "legendFormat": "",
+          "refId": "A"
+        }
+      ],
+      "title": "Volume Encryption",
+      "transformations": [
+        {
+          "id": "filterFieldsByName",
+          "options": {
+            "include": {
+              "names": [
+                "cluster",
+                "isEncrypted",
+                "isHardwareEncrypted",
+                "svm",
+                "volume",
+                "state"
+              ]
+            }
+          }
+        },
+        {
+          "id": "organize",
+          "options": {
+            "excludeByName": {
+              "isEncrypted": false,
+              "isHardwareEncrypted": false
+            },
+            "indexByName": {
+              "cluster": 2,
+              "isEncrypted": 3,
+              "isHardwareEncrypted": 4,
+              "svm": 1,
+              "volume": 0
+            },
+            "renameByName": {
+              "cluster": "Cluster",
+              "isEncrypted": "",
+              "isHardwareEncrypted": "",
+              "state": "State",
+              "svm": "SVM",
+              "volume": "Volume"
+            }
+          }
+        },
+        {
+          "id": "calculateField",
+          "options": {
+            "alias": "Encryption Type",
+            "binary": {
+              "left": "isHardwareEncrypted",
+              "operator": "+",
+              "reducer": "sum",
+              "right": "isEncrypted"
+            },
+            "mode": "binary",
+            "reduce": {
+              "include": [
+                "isEncrypted",
+                "isHardwareEncrypted"
+              ],
+              "reducer": "sum"
+            },
+            "replaceFields": false
+          }
+        },
+        {
+          "id": "organize",
+          "options": {
+            "excludeByName": {
+              "isEncrypted": true,
+              "isHardwareEncrypted": true
+            },
+            "indexByName": {},
+            "renameByName": {}
+          }
+        }
+      ],
+      "type": "table"
+    },
+    {
+      "collapsed": false,
+      "datasource": "Prometheus",
+      "gridPos": {
+        "h": 1,
+        "w": 24,
+        "x": 0,
+        "y": 50
+      },
+      "id": 16,
+      "panels": [],
+      "title": "Storage VM and Volume Anti-ransomware Status",
+      "type": "row"
+    },
+    {
+      "datasource": "Prometheus",
+      "fieldConfig": {
+        "defaults": {
+          "color": {
+            "fixedColor": "green",
+            "mode": "fixed"
+          },
+          "custom": {
+            "align": "auto",
+            "displayMode": "gradient-gauge",
+            "filterable": false
+          },
+          "decimals": 0,
+          "mappings": [],
+          "max": 100,
+          "min": 0,
+          "thresholds": {
+            "mode": "absolute",
+            "steps": [
+              {
+                "color": "green",
+                "value": null
+              }
+            ]
+          }
+        },
+        "overrides": [
+          {
+            "matcher": {
+              "id": "byName",
+              "options": "ENABLED"
+            },
+            "properties": [
+              {
+                "id": "unit",
+                "value": "percent"
+              },
+              {
+                "id": "custom.displayMode",
+                "value": "gradient-gauge"
+              },
+              {
+                "id": "max",
+                "value": 100
+              }
+            ]
+          }
+        ]
+      },
+      "gridPos": {
+        "h": 3,
+        "w": 18,
+        "x": 0,
+        "y": 51
+      },
+      "id": 179,
+      "options": {
+        "showHeader": true
+      },
+      "pluginVersion": "8.1.2",
+      "targets": [
+        {
+          "exemplar": false,
+          "expr": "count(svm_labels{datacenter=\"$Datacenter\",cluster=~\"$Cluster\", anti_ransomware_state!=\"\", anti_ransomware_state=~\"enabled|dry_run\"}) or vector (0)",
+          "format": "time_series",
+          "hide": false,
+          "instant": true,
+          "interval": "",
+          "legendFormat": "Anti-ransomware Enabled",
+          "refId": "A"
+        },
+        {
+          "exemplar": false,
+          "expr": "count(svm_labels{datacenter=\"$Datacenter\",cluster=~\"$Cluster\", anti_ransomware_state!=\"\"}) or vector (1)",
+          "format": "time_series",
+          "hide": false,
+          "instant": true,
+          "interval": "",
+          "legendFormat": "Anti-ransomware Supported",
+          "refId": "B"
+        }
+      ],
+      "title": "Storage VM Status",
+      "transformations": [
+        {
+          "id": "calculateField",
+          "options": {
+            "alias": "",
+            "binary": {
+              "left": "Anti-ransomware Enabled",
+              "operator": "/",
+              "reducer": "sum",
+              "right": "Anti-ransomware Supported"
+            },
+            "mode": "binary",
+            "reduce": {
+              "include": [
+                "Saml",
+                "Certificate"
+              ],
+              "reducer": "sum"
+            }
+          }
+        },
+        {
+          "id": "calculateField",
+          "options": {
+            "alias": "ENABLED",
+            "binary": {
+              "left": "Anti-ransomware Enabled / Anti-ransomware Supported",
+              "operator": "*",
+              "reducer": "sum",
+              "right": "100"
+            },
+            "mode": "binary",
+            "reduce": {
+              "reducer": "sum"
+            }
+          }
+        },
+        {
+          "id": "organize",
+          "options": {
+            "excludeByName": {
+              "Anti-ransomware Enabled": true,
+              "Anti-ransomware Enabled / Anti-ransomware Supported": true,
+              "Anti-ransomware Supported": true,
+              "Certificate": true,
+              "Compliant": false,
+              "Compliant / Total": false,
+              "CompliantCluster": true,
+              "CompliantCluster / TotalCluster": true,
+              "Saml": true,
+              "Saml / Certificate": false,
+              "Time": true,
+              "Total": true,
+              "TotalCluster": true,
+              "perc": true
+            },
+            "indexByName": {},
+            "renameByName": {
+              "ENABLED": "",
+              "PercentCompliant": "",
+              "Saml / Certificate": "perc",
+              "Time": ""
+            }
+          }
+        }
+      ],
+      "type": "table"
+    },
+    {
+      "cacheTimeout": null,
+      "datasource": "Prometheus",
+      "description": "",
+      "fieldConfig": {
+        "defaults": {
+          "color": {
+            "mode": "thresholds"
+          },
+          "mappings": [],
+          "noValue": "0",
+          "thresholds": {
+            "mode": "absolute",
+            "steps": [
+              {
+                "color": "dark-green",
+                "value": null
+              }
+            ]
+          },
+          "unit": "short"
+        },
+        "overrides": []
+      },
+      "gridPos": {
+        "h": 3,
+        "w": 3,
+        "x": 18,
+        "y": 51
+      },
+      "id": 173,
+      "links": [],
+      "options": {
+        "colorMode": "value",
+        "graphMode": "none",
+        "justifyMode": "center",
+        "orientation": "horizontal",
+        "reduceOptions": {
+          "calcs": [
+            "lastNotNull"
+          ],
+          "fields": "",
+          "values": false
+        },
+        "text": {},
+        "textMode": "auto"
+      },
+      "pluginVersion": "8.1.2",
+      "targets": [
+        {
+          "exemplar": true,
+          "expr": "count(svm_labels{datacenter=\"$Datacenter\",cluster=~\"$Cluster\", anti_ransomware_state!=\"\", anti_ransomware_state=~\"enabled|dry_run\"}) or vector (0)",
+          "format": "time_series",
+          "hide": false,
+          "instant": true,
+          "interval": "",
+          "intervalFactor": 1,
+          "legendFormat": "",
+          "refId": "A"
+        }
+      ],
+      "timeFrom": null,
+      "timeShift": null,
+      "title": "Enabled",
+      "type": "stat"
+    },
+    {
+      "cacheTimeout": null,
+      "datasource": "Prometheus",
+      "description": "",
+      "fieldConfig": {
+        "defaults": {
+          "color": {
+            "mode": "thresholds"
+          },
+          "mappings": [],
+          "noValue": "0",
+          "thresholds": {
+            "mode": "absolute",
+            "steps": [
+              {
+                "color": "dark-yellow",
+                "value": null
+              }
+            ]
+          },
+          "unit": "short"
+        },
+        "overrides": []
+      },
+      "gridPos": {
+        "h": 3,
+        "w": 3,
+        "x": 21,
+        "y": 51
+      },
+      "id": 182,
+      "links": [],
+      "options": {
+        "colorMode": "value",
+        "graphMode": "none",
+        "justifyMode": "center",
+        "orientation": "horizontal",
+        "reduceOptions": {
+          "calcs": [
+            "lastNotNull"
+          ],
+          "fields": "",
+          "values": false
+        },
+        "text": {},
+        "textMode": "auto"
+      },
+      "pluginVersion": "8.1.2",
+      "targets": [
+        {
+          "exemplar": true,
+          "expr": "count(svm_labels{datacenter=\"$Datacenter\",cluster=~\"$Cluster\", anti_ransomware_state!=\"\", anti_ransomware_state=~\"disabled\"}) or vector (0)",
+          "format": "time_series",
+          "hide": false,
+          "instant": false,
+          "interval": "",
+          "intervalFactor": 1,
+          "legendFormat": "",
+          "refId": "A"
+        }
+      ],
+      "timeFrom": null,
+      "timeShift": null,
+      "title": "Disabled",
+      "type": "stat"
+    },
+    {
+      "datasource": "Prometheus",
+      "fieldConfig": {
+        "defaults": {
+          "color": {
+            "fixedColor": "transparent",
+            "mode": "fixed"
+          },
+          "custom": {
+            "align": "left",
+            "displayMode": "color-background-solid",
+            "filterable": false
+          },
+          "mappings": [],
+          "thresholds": {
+            "mode": "absolute",
+            "steps": [
+              {
+                "color": "green",
+                "value": null
+              }
+            ]
+          }
+        },
+        "overrides": [
+          {
+            "matcher": {
+              "id": "byName",
+              "options": "Anti-ransomware Status"
+            },
+            "properties": [
+              {
+                "id": "custom.filterable",
+                "value": true
+              },
+              {
+                "id": "mappings",
+                "value": [
+                  {
+                    "options": {
+                      "disabled": {
+                        "index": 2,
+                        "text": "Disabled"
+                      },
+                      "dry_run": {
+                        "index": 1,
+                        "text": "Enabled (Learning mode)"
+                      },
+                      "enabled": {
+                        "index": 0,
+                        "text": "Enabled (Active mode)"
+                      }
+                    },
+                    "type": "value"
+                  },
+                  {
+                    "options": {
+                      "match": "empty",
+                      "result": {
+                        "index": 3,
+                        "text": "Disabled"
+                      }
+                    },
+                    "type": "special"
+                  }
+                ]
+              }
+            ]
+          },
+          {
+            "matcher": {
+              "id": "byName",
+              "options": "Volume Count"
+            },
+            "properties": [
+              {
+                "id": "mappings",
+                "value": [
+                  {
+                    "options": {
+                      "match": "null",
+                      "result": {
+                        "index": 0,
+                        "text": "0"
+                      }
+                    },
+                    "type": "special"
+                  }
+                ]
+              }
+            ]
+          }
+        ]
+      },
+      "gridPos": {
+        "h": 7,
+        "w": 24,
+        "x": 0,
+        "y": 54
+      },
+      "id": 160,
+      "options": {
+        "showHeader": true,
+        "sortBy": []
+      },
+      "pluginVersion": "8.1.2",
+      "targets": [
+        {
+          "exemplar": false,
+          "expr": "svm_labels{datacenter=\"$Datacenter\", cluster=~\"$Cluster\", svm=~\"$SVM\"}",
+          "format": "table",
+          "instant": true,
+          "interval": "",
+          "legendFormat": "",
+          "refId": "A"
+        },
+        {
+          "exemplar": true,
+          "expr": "count by (svm)(volume_labels{datacenter=\"$Datacenter\", cluster=~\"$Cluster\", svm=~\"$SVM\"})",
+          "format": "table",
+          "hide": false,
+          "instant": true,
+          "interval": "",
+          "legendFormat": "",
+          "refId": "B"
+        }
+      ],
+      "title": "Storage VMs Anti-ransomware Status",
+      "transformations": [
+        {
+          "id": "filterFieldsByName",
+          "options": {
+            "include": {
+              "names": [
+                "anti_ransomware_state",
+                "cluster",
+                "svm",
+                "Value #B"
+              ]
+            }
+          }
+        },
+        {
+          "id": "merge",
+          "options": {}
+        },
+        {
+          "id": "organize",
+          "options": {
+            "excludeByName": {
+              "isEncrypted": false,
+              "isHardwareEncrypted": false
+            },
+            "indexByName": {
+              "Value #B": 2,
+              "anti_ransomware_state": 3,
+              "cluster": 1,
+              "svm": 0
+            },
+            "renameByName": {
+              "Value #B": "Volume Count",
+              "antiRansomwareState": "Anti-ransomware Status",
+              "anti_ransomware_state": "Anti-ransomware Status",
+              "cluster": "Cluster",
+              "isEncrypted": "",
+              "isHardwareEncrypted": "",
+              "state": "State",
+              "svm": "SVM",
+              "volume": "Volume"
+            }
+          }
+        }
+      ],
+      "type": "table"
+    },
+    {
+      "datasource": "Prometheus",
+      "fieldConfig": {
+        "defaults": {
+          "color": {
+            "fixedColor": "green",
+            "mode": "fixed"
+          },
+          "custom": {
+            "align": "auto",
+            "displayMode": "gradient-gauge",
+            "filterable": false,
+            "minWidth": 50
+          },
+          "decimals": 0,
+          "mappings": [],
+          "max": 100,
+          "min": 0,
+          "thresholds": {
+            "mode": "absolute",
+            "steps": [
+              {
+                "color": "green",
+                "value": null
+              }
+            ]
+          }
+        },
+        "overrides": [
+          {
+            "matcher": {
+              "id": "byName",
+              "options": "ENABLED"
+            },
+            "properties": [
+              {
+                "id": "unit",
+                "value": "percent"
+              },
+              {
+                "id": "custom.displayMode",
+                "value": "gradient-gauge"
+              },
+              {
+                "id": "max",
+                "value": 100
+              }
+            ]
+          }
+        ]
+      },
+      "gridPos": {
+        "h": 3,
+        "w": 24,
+        "x": 0,
+        "y": 61
+      },
+      "id": 180,
+      "options": {
+        "showHeader": true
+      },
+      "pluginVersion": "8.1.2",
+      "targets": [
+        {
+          "exemplar": false,
+          "expr": "count(volume_labels{datacenter=\"$Datacenter\",cluster=~\"$Cluster\", svm=~\"$SVM\", antiRansomwareState !=\"\" , antiRansomwareState=~\"enabled|dry_run\"}) or vector (0)",
+          "format": "time_series",
+          "hide": false,
+          "instant": true,
+          "interval": "",
+          "legendFormat": "antiRansomwareEnabled",
+          "refId": "A"
+        },
+        {
+          "exemplar": false,
+          "expr": "count(volume_labels{datacenter=\"$Datacenter\",cluster=~\"$Cluster\", svm=~\"$SVM\", antiRansomwareState !=\"\"}) or vector (1)",
+          "format": "time_series",
+          "hide": false,
+          "instant": true,
+          "interval": "",
+          "legendFormat": "antiRansomwareSupported",
+          "refId": "B"
+        }
+      ],
+      "title": "Volume Status",
+      "transformations": [
+        {
+          "id": "calculateField",
+          "options": {
+            "alias": "",
+            "binary": {
+              "left": "antiRansomwareEnabled",
+              "operator": "/",
+              "reducer": "sum",
+              "right": "antiRansomwareSupported"
+            },
+            "mode": "binary",
+            "reduce": {
+              "include": [
+                "Saml",
+                "Certificate"
+              ],
+              "reducer": "sum"
+            }
+          }
+        },
+        {
+          "id": "calculateField",
+          "options": {
+            "alias": "ENABLED",
+            "binary": {
+              "left": "antiRansomwareEnabled / antiRansomwareSupported",
+              "operator": "*",
+              "reducer": "sum",
+              "right": "100"
+            },
+            "mode": "binary",
+            "reduce": {
+              "reducer": "sum"
+            }
+          }
+        },
+        {
+          "id": "organize",
+          "options": {
+            "excludeByName": {
+              "Certificate": true,
+              "Compliant": false,
+              "Compliant / Total": false,
+              "CompliantCluster": true,
+              "CompliantCluster / TotalCluster": true,
+              "Saml": true,
+              "Saml / Certificate": false,
+              "Time": true,
+              "Total": true,
+              "TotalCluster": true,
+              "antiRansomwareEnabled": true,
+              "antiRansomwareEnabled / antiRansomwareSupported": true,
+              "antiRansomwareSupported": true,
+              "perc": true
+            },
+            "indexByName": {},
+            "renameByName": {
+              "PercentCompliant": "",
+              "Saml / Certificate": "perc",
+              "Time": ""
+            }
+          }
+        }
+      ],
+      "type": "table"
+    },
+    {
+      "cacheTimeout": null,
+      "datasource": "Prometheus",
+      "description": "",
+      "fieldConfig": {
+        "defaults": {
+          "color": {
+            "mode": "thresholds"
+          },
+          "mappings": [],
+          "noValue": "0",
+          "thresholds": {
+            "mode": "absolute",
+            "steps": [
+              {
+                "color": "dark-green",
+                "value": null
+              }
+            ]
+          },
+          "unit": "short"
+        },
+        "overrides": []
+      },
+      "gridPos": {
+        "h": 3,
+        "w": 6,
+        "x": 0,
+        "y": 64
+      },
+      "id": 172,
+      "links": [],
+      "options": {
+        "colorMode": "value",
+        "graphMode": "none",
+        "justifyMode": "center",
+        "orientation": "horizontal",
+        "reduceOptions": {
+          "calcs": [
+            "lastNotNull"
+          ],
+          "fields": "",
+          "values": false
+        },
+        "text": {},
+        "textMode": "auto"
+      },
+      "pluginVersion": "8.1.2",
+      "targets": [
+        {
+          "exemplar": true,
+          "expr": "count(volume_labels{datacenter=\"$Datacenter\",cluster=~\"$Cluster\", svm=~\"$SVM\", antiRansomwareState !=\"\" , antiRansomwareState=\"enabled\"}) or vector (0)",
+          "format": "time_series",
+          "hide": false,
+          "instant": true,
+          "interval": "",
+          "intervalFactor": 1,
+          "legendFormat": "",
+          "refId": "A"
+        }
+      ],
+      "timeFrom": null,
+      "timeShift": null,
+      "title": "Enabled in active mode",
+      "type": "stat"
+    },
+    {
+      "cacheTimeout": null,
+      "datasource": "Prometheus",
+      "description": "",
+      "fieldConfig": {
+        "defaults": {
+          "color": {
+            "mode": "thresholds"
+          },
+          "mappings": [],
+          "noValue": "0",
+          "thresholds": {
+            "mode": "absolute",
+            "steps": [
+              {
+                "color": "semi-dark-green",
+                "value": null
+              }
+            ]
+          },
+          "unit": "short"
+        },
+        "overrides": []
+      },
+      "gridPos": {
+        "h": 3,
+        "w": 6,
+        "x": 6,
+        "y": 64
+      },
+      "id": 181,
+      "links": [],
+      "options": {
+        "colorMode": "value",
+        "graphMode": "none",
+        "justifyMode": "center",
+        "orientation": "horizontal",
+        "reduceOptions": {
+          "calcs": [
+            "lastNotNull"
+          ],
+          "fields": "",
+          "values": false
+        },
+        "text": {},
+        "textMode": "auto"
+      },
+      "pluginVersion": "8.1.2",
+      "targets": [
+        {
+          "exemplar": true,
+          "expr": "count(volume_labels{datacenter=\"$Datacenter\",cluster=~\"$Cluster\", svm=~\"$SVM\", antiRansomwareState !=\"\" , antiRansomwareState=\"dry_run\"}) or vector (0)",
+          "format": "time_series",
+          "hide": false,
+          "instant": true,
+          "interval": "",
+          "intervalFactor": 1,
+          "legendFormat": "",
+          "refId": "A"
+        }
+      ],
+      "timeFrom": null,
+      "timeShift": null,
+      "title": "Enabled in learning mode",
+      "type": "stat"
+    },
+    {
+      "cacheTimeout": null,
+      "datasource": "Prometheus",
+      "description": "",
+      "fieldConfig": {
+        "defaults": {
+          "color": {
+            "mode": "thresholds"
+          },
+          "mappings": [],
+          "noValue": "0",
+          "thresholds": {
+            "mode": "absolute",
+            "steps": [
+              {
+                "color": "light-green",
+                "value": null
+              }
+            ]
+          },
+          "unit": "short"
+        },
+        "overrides": []
+      },
+      "gridPos": {
+        "h": 3,
+        "w": 6,
+        "x": 12,
+        "y": 64
+      },
+      "id": 175,
+      "links": [],
+      "options": {
+        "colorMode": "value",
+        "graphMode": "none",
+        "justifyMode": "center",
+        "orientation": "horizontal",
+        "reduceOptions": {
+          "calcs": [
+            "lastNotNull"
+          ],
+          "fields": "",
+          "values": false
+        },
+        "text": {},
+        "textMode": "auto"
+      },
+      "pluginVersion": "8.1.2",
+      "targets": [
+        {
+          "exemplar": true,
+          "expr": "count(volume_labels{datacenter=\"$Datacenter\",cluster=~\"$Cluster\", svm=~\"$SVM\", antiRansomwareState !=\"\" , antiRansomwareState=~\".*paused.*\"}) or vector (0)",
+          "format": "time_series",
+          "hide": false,
+          "instant": false,
+          "interval": "",
+          "intervalFactor": 1,
+          "legendFormat": "",
+          "refId": "A"
+        }
+      ],
+      "timeFrom": null,
+      "timeShift": null,
+      "title": "Paused",
+      "type": "stat"
+    },
+    {
+      "cacheTimeout": null,
+      "datasource": "Prometheus",
+      "description": "",
+      "fieldConfig": {
+        "defaults": {
+          "color": {
+            "mode": "thresholds"
+          },
+          "mappings": [],
+          "noValue": "0",
+          "thresholds": {
+            "mode": "absolute",
+            "steps": [
+              {
+                "color": "dark-yellow",
+                "value": null
+              }
+            ]
+          },
+          "unit": "short"
+        },
+        "overrides": []
+      },
+      "gridPos": {
+        "h": 3,
+        "w": 6,
+        "x": 18,
+        "y": 64
+      },
+      "id": 176,
+      "links": [],
+      "options": {
+        "colorMode": "value",
+        "graphMode": "none",
+        "justifyMode": "center",
+        "orientation": "horizontal",
+        "reduceOptions": {
+          "calcs": [
+            "lastNotNull"
+          ],
+          "fields": "",
+          "values": false
+        },
+        "text": {},
+        "textMode": "auto"
+      },
+      "pluginVersion": "8.1.2",
+      "targets": [
+        {
+          "exemplar": true,
+          "expr": "count(volume_labels{datacenter=\"$Datacenter\",cluster=~\"$Cluster\", svm=~\"$SVM\", antiRansomwareState !=\"\" , antiRansomwareState=~\"disabled\"}) or vector (0)",
+          "format": "time_series",
+          "hide": false,
+          "instant": false,
+          "interval": "",
+          "intervalFactor": 1,
+          "legendFormat": "",
+          "refId": "A"
+        }
+      ],
+      "timeFrom": null,
+      "timeShift": null,
+      "title": "Disabled",
+      "type": "stat"
+    },
+    {
+      "datasource": "Prometheus",
+      "fieldConfig": {
+        "defaults": {
+          "color": {
+            "fixedColor": "transparent",
+            "mode": "fixed"
+          },
+          "custom": {
+            "align": "left",
+            "displayMode": "color-background-solid",
+            "filterable": false
+          },
+          "mappings": [],
+          "thresholds": {
+            "mode": "absolute",
+            "steps": [
+              {
+                "color": "green",
+                "value": null
+              }
+            ]
+          }
+        },
+        "overrides": [
+          {
+            "matcher": {
+              "id": "byName",
+              "options": "Anti-ransomware Status"
+            },
+            "properties": [
+              {
+                "id": "custom.filterable",
+                "value": true
+              },
+              {
+                "id": "mappings",
+                "value": [
+                  {
+                    "options": {
+                      "disable_in_progress": {
+                        "index": 3,
+                        "text": "Disabling"
+                      },
+                      "disabled": {
+                        "index": 2,
+                        "text": "Disabled"
+                      },
+                      "dry_run": {
+                        "index": 1,
+                        "text": "Enabled (Learning mode)"
+                      },
+                      "dry_run_paused": {
+                        "index": 5,
+                        "text": "Paused (Learning mode)"
+                      },
+                      "enable_paused": {
+                        "index": 4,
+                        "text": "Paused (Active mode)"
+                      },
+                      "enabled": {
+                        "index": 0,
+                        "text": "Enabled (Active mode)"
+                      }
+                    },
+                    "type": "value"
+                  },
+                  {
+                    "options": {
+                      "match": "empty",
+                      "result": {
+                        "index": 6,
+                        "text": "Disabled"
+                      }
+                    },
+                    "type": "special"
+                  }
+                ]
+              }
+            ]
+          },
+          {
+            "matcher": {
+              "id": "byName",
+              "options": "SVM"
+            },
+            "properties": [
+              {
+                "id": "custom.width",
+                "value": null
+              }
+            ]
+          }
+        ]
+      },
+      "gridPos": {
+        "h": 7,
+        "w": 24,
+        "x": 0,
+        "y": 67
+      },
+      "id": 183,
+      "options": {
+        "showHeader": true,
+        "sortBy": []
+      },
+      "pluginVersion": "8.1.2",
+      "targets": [
+        {
+          "exemplar": false,
+          "expr": "volume_labels{datacenter=\"$Datacenter\", cluster=~\"$Cluster\", svm=~\"$SVM\"}",
+          "format": "table",
+          "instant": true,
+          "interval": "",
+          "legendFormat": "",
+          "refId": "A"
+        }
+      ],
+      "title": "Volume Anti-ransomware Status",
+      "transformations": [
+        {
+          "id": "filterFieldsByName",
+          "options": {
+            "include": {
+              "names": [
+                "cluster",
+                "svm",
+                "volume",
+                "antiRansomwareState"
+              ]
+            }
+          }
+        },
+        {
+          "id": "organize",
+          "options": {
+            "excludeByName": {
+              "isEncrypted": false,
+              "isHardwareEncrypted": false
+            },
+            "indexByName": {
+              "cluster": 2,
+              "isEncrypted": 3,
+              "isHardwareEncrypted": 4,
+              "svm": 1,
+              "volume": 0
+            },
+            "renameByName": {
+              "antiRansomwareState": "Anti-ransomware Status",
+              "cluster": "Cluster",
+              "isEncrypted": "",
+              "isHardwareEncrypted": "",
+              "state": "State",
+              "svm": "SVM",
+              "volume": "Volume"
+            }
+          }
+        }
+      ],
+      "type": "table"
+    }
+  ],
+  "refresh": "",
+  "schemaVersion": 30,
+  "style": "dark",
+  "tags": [],
+  "templating": {
+    "list": [
+      {
+        "current": {
+          "selected": false,
+          "text": "Prometheus",
+          "value": "Prometheus"
+        },
+        "description": null,
+        "error": null,
+        "hide": 2,
+        "includeAll": false,
+        "label": "Data Source",
+        "multi": false,
+        "name": "DS_PROMETHEUS",
+        "options": [],
+        "query": "prometheus",
+        "refresh": 1,
+        "regex": "",
+        "skipUrlSync": false,
+        "type": "datasource"
+      },
+      {
+        "allValue": null,
+        "current": {},
+        "datasource": "${DS_PROMETHEUS}",
+        "definition": "label_values(security_labels{system_type!=\"7mode\"},datacenter)",
+        "description": null,
+        "error": null,
+        "hide": 0,
+        "includeAll": false,
+        "label": null,
+        "multi": false,
+        "name": "Datacenter",
+        "options": [],
+        "query": {
+          "query": "label_values(security_labels{system_type!=\"7mode\"},datacenter)",
+          "refId": "StandardVariableQuery"
+        },
+        "refresh": 1,
+        "regex": "",
+        "skipUrlSync": false,
+        "sort": 0,
+        "tagValuesQuery": "",
+        "tagsQuery": "",
+        "type": "query",
+        "useTags": false
+      },
+      {
+        "allValue": null,
+        "current": {},
+        "datasource": "${DS_PROMETHEUS}",
+        "definition": "label_values(security_labels{system_type!=\"7mode\",datacenter=\"$Datacenter\"},cluster)",
+        "description": null,
+        "error": null,
+        "hide": 0,
+        "includeAll": true,
+        "label": null,
+        "multi": true,
+        "name": "Cluster",
+        "options": [],
+        "query": {
+          "query": "label_values(security_labels{system_type!=\"7mode\",datacenter=\"$Datacenter\"},cluster)",
+          "refId": "StandardVariableQuery"
+        },
+        "refresh": 1,
+        "regex": "",
+        "skipUrlSync": false,
+        "sort": 1,
+        "tagValuesQuery": "",
+        "tagsQuery": "",
+        "type": "query",
+        "useTags": false
+      },
+      {
+        "allValue": null,
+        "current": {},
+        "datasource": "${DS_PROMETHEUS}",
+        "definition": "label_values(svm_labels{system_type!=\"7mode\",datacenter=\"$Datacenter\",cluster=~\"$Cluster\"},svm)",
+        "description": null,
+        "error": null,
+        "hide": 0,
+        "includeAll": true,
+        "label": null,
+        "multi": true,
+        "name": "SVM",
+        "options": [],
+        "query": {
+          "query": "label_values(svm_labels{system_type!=\"7mode\",datacenter=\"$Datacenter\",cluster=~\"$Cluster\"},svm)",
+          "refId": "StandardVariableQuery"
+        },
+        "refresh": 1,
+        "regex": "",
+        "skipUrlSync": false,
+        "sort": 1,
+        "type": "query"
+      }
+    ]
+  },
+  "time": {
+    "from": "now-6h",
+    "to": "now"
+  },
+  "timepicker": {
+    "refresh_intervals": [
+      "10s",
+      "30s",
+      "1m",
+      "5m",
+      "15m",
+      "30m",
+      "1h",
+      "2h",
+      "1d"
+    ]
+  },
+  "timezone": "",
+  "title": "NetApp Detail: Security",
+  "uid": "PMa3dL76n",
+  "version": 1
+}
\ No newline at end of file


Test patch:
diff --git a/cmd/poller/plugin/label_agent/label_agent_test.go b/cmd/poller/plugin/label_agent/label_agent_test.go
index 81001a5d..e0008890 100644
--- a/cmd/poller/plugin/label_agent/label_agent_test.go
+++ b/cmd/poller/plugin/label_agent/label_agent_test.go
@@ -63,6 +63,22 @@ func TestInitPlugin(t *testing.T) {
 	params.NewChildS("compute_metric", "").NewChildS("", "total_bytes MULTIPLY bytes_per_sector sector_count")
 	// create metric "transmission_rate", which is division of the metric value of transfer.bytes_transferred by transfer.total_duration
 	params.NewChildS("compute_metric", "").NewChildS("", "transmission_rate DIVIDE transfer.bytes_transferred transfer.total_duration")
+	// create metric "status", if label "state" contains one of the up/ok[zapi/rest], map metric value to respective index
+	params.NewChildS("value_to_num_regex", "").NewChildS("", "status state ^up$ ^ok$ `0`")
+	// create metric "output", if label "stage" matches regex then map to 1 else use default value "4"
+	params.NewChildS("value_to_num_regex", "").NewChildS("", "output stage ^transfer.*$ ^run.*$ `4`")
+	// create metric "result", if label "state" matches regex then map to 1 else use default value "4"
+	params.NewChildS("value_to_num_regex", "").NewChildS("", "result value ^test\\d+ ^error `4`")
+
+	// These both are mutually exclusive, and should honour the above one's filtered result.
+	// exclude instance if label "volstate" has value "offline"
+	params.NewChildS("exclude_equals", "").NewChildS("", "volstate `offline`")
+	// include instance if label "voltype" has value "rw"
+	params.NewChildS("include_equals", "").NewChildS("", "voltype `rw`")
+	// include instance if label "volstyle" has value which starts with "flexvol_"
+	params.NewChildS("include_contains", "").NewChildS("", "volstyle `flexvol`")
+	// exclude instance if label "volstatus" has value which starts with "stopped_"
+	params.NewChildS("exclude_contains", "").NewChildS("", "volstatus `stop`")
 
 	abc := plugin.New("Test", nil, params, nil)
 	p = &LabelAgent{AbstractPlugin: abc}
@@ -323,7 +339,7 @@ func TestValueToNumRule(t *testing.T) {
 	instanceB.SetLabel("stage", "unknown") // "stage" should be 4 (default)
 	instanceB.SetLabel("outage", "failed") // "outage" should be 0 (default)
 
-	if err = p.mapValues(m); err != nil {
+	if err = p.mapValueToNum(m); err != nil {
 		t.Fatal(err)
 	}
 
@@ -353,7 +369,7 @@ func TestValueToNumRule(t *testing.T) {
 	if v, ok = status.GetValueUint8(instanceB); !ok {
 		t.Log("OK - metric [status]: value for InstanceB not set")
 	} else {
-		t.Errorf("metric [status]: value for InstanceA is %d, should not be set", v)
+		t.Errorf("metric [status]: value for InstanceB is %d, should not be set", v)
 	}
 
 	// check "stage" for instanceA
@@ -557,3 +573,170 @@ func TestComputeMetricsRule(t *testing.T) {
 	}
 
 }
+
+func TestValueToNumRegexRule(t *testing.T) {
+
+	var (
+		instanceA, instanceB   *matrix.Instance
+		status, output, result matrix.Metric
+		v, expected            uint8
+		ok                     bool
+		err                    error
+	)
+
+	m := matrix.New("TestLabelAgent", "test", "test")
+
+	if instanceA, err = m.NewInstance("A"); err != nil {
+		t.Fatal(err)
+	}
+	instanceA.SetLabel("state", "up")      // "status" should be 1
+	instanceA.SetLabel("stage", "stopped") // "output" should be 4 (default)
+	instanceA.SetLabel("value", "test11")  // "result" should be 1
+
+	if instanceB, err = m.NewInstance("B"); err != nil {
+		t.Fatal(err)
+	}
+	instanceB.SetLabel("state", "error")   // "status" should be 0 (default)
+	instanceB.SetLabel("stage", "running") // "output" should be 1
+	instanceB.SetLabel("value", "done")    // "result" should be 4 (default)
+
+	if err = p.mapValueToNumRegex(m); err != nil {
+		t.Fatal(err)
+	}
+
+	if status = m.GetMetric("status"); status == nil {
+		t.Error("metric [status] missing")
+	}
+
+	if output = m.GetMetric("output"); output == nil {
+		t.Error("metric [output] missing")
+	}
+
+	if result = m.GetMetric("result"); result == nil {
+		t.Error("metric [result] missing")
+	}
+
+	// check "status" for instanceA
+	expected = 1
+	if v, ok = status.GetValueUint8(instanceA); !ok {
+		t.Error("metric [status]: value for InstanceA not set")
+	} else if v != expected {
+		t.Errorf("metric [status]: value for InstanceA is %d, expected %d", v, expected)
+	} else {
+		t.Logf("OK - metric [status]: value for instanceA set to %d", v)
+	}
+
+	// check "status" for instanceB
+	expected = 0
+	if v, ok = status.GetValueUint8(instanceB); !ok {
+		t.Log("metric [status]: value for InstanceB not set")
+	} else if v != expected {
+		t.Errorf("metric [status]: value for InstanceB is %d, expected %d", v, expected)
+	} else {
+		t.Logf("Ok - metric [status]: value for InstanceB set to %d", v)
+	}
+
+	// check "output" for instanceA
+	expected = 4
+	if v, ok = output.GetValueUint8(instanceA); !ok {
+		t.Error("metric [stage]: value for InstanceA not set")
+	} else if v != expected {
+		t.Errorf("metric [stage]: value for InstanceA is %d, expected %d", v, expected)
+	} else {
+		t.Logf("OK - metric [stage]: value for instanceA set to %d", v)
+	}
+
+	// check "output" for instanceB
+	expected = 1
+	if v, ok = output.GetValueUint8(instanceB); !ok {
+		t.Error("metric [stage]: value for InstanceB not set")
+	} else if v != expected {
+		t.Errorf("metric [stage]: value for InstanceB is %d, expected %d", v, expected)
+	} else {
+		t.Logf("OK - metric [stage]: value for instanceB set to %d", v)
+	}
+
+	// check "result" for instanceA
+	expected = 1
+	if v, ok = result.GetValueUint8(instanceA); !ok {
+		t.Error("metric [outage]: value for InstanceA not set")
+	} else if v != expected {
+		t.Errorf("metric [outage]: value for InstanceA is %d, expected %d", v, expected)
+	} else {
+		t.Logf("OK - metric [outage]: value for instanceA set to %d", v)
+	}
+
+	// check "result" for instanceB
+	expected = 4
+	if v, ok = result.GetValueUint8(instanceB); !ok {
+		t.Error("metric [outage]: value for InstanceB not set")
+	} else if v != expected {
+		t.Errorf("metric [outage]: value for InstanceB is %d, expected %d", v, expected)
+	} else {
+		t.Logf("OK - metric [outage]: value for instanceB set to %d", v)
+	}
+}
+
+func TestExcludeEqualIncludeEqualRuleOrder(t *testing.T) {
+	m := matrix.New("TestLabelAgent", "test", "test")
+
+	instanceOne, _ := m.NewInstance("1")
+	instanceOne.SetLabel("volstate", "offline")
+	instanceOne.SetLabel("voltype", "rw")
+
+	instanceTwo, _ := m.NewInstance("2")
+	instanceTwo.SetLabel("volstate", "online")
+	instanceTwo.SetLabel("voltype", "rw")
+
+	instanceThree, _ := m.NewInstance("3")
+	instanceThree.SetLabel("volstate", "online")
+	instanceThree.SetLabel("voltype", "dp")
+
+	// After the rules, only instanceTwo would be exportable
+	p.excludeEquals(m)
+	p.includeEquals(m)
+
+	if instanceOne.IsExportable() {
+		t.Error("InstanceOne should have been excluded")
+	}
+
+	if !instanceTwo.IsExportable() {
+		t.Error("InstanceTwo should not have been excluded")
+	}
+
+	if instanceThree.IsExportable() {
+		t.Error("instanceThree should have been excluded")
+	}
+}
+
+func TestIncludeContainExcludeContainRuleOrder(t *testing.T) {
+	m := matrix.New("TestLabelAgent", "test", "test")
+
+	instanceFour, _ := m.NewInstance("4")
+	instanceFour.SetLabel("volstyle", "flexvol")
+	instanceFour.SetLabel("volstatus", "running")
+
+	instanceFive, _ := m.NewInstance("5")
+	instanceFive.SetLabel("volstyle", "flexvol")
+	instanceFive.SetLabel("volstatus", "stopped")
+
+	instanceSix, _ := m.NewInstance("6")
+	instanceSix.SetLabel("volstyle", "flexgroup")
+	instanceSix.SetLabel("volstatus", "stopped")
+
+	// After the rules, only instanceFour would be exportable
+	p.includeContains(m)
+	p.excludeContains(m)
+
+	if !instanceFour.IsExportable() {
+		t.Error("InstanceFour should not have been excluded")
+	}
+
+	if instanceFive.IsExportable() {
+		t.Error("InstanceFive should have been excluded")
+	}
+
+	if instanceSix.IsExportable() {
+		t.Error("instanceSix should have been excluded")
+	}
+}
diff --git a/integration/test/dashboard_test.go b/integration/test/dashboard_test.go
index cffc434f..7586c36f 100644
--- a/integration/test/dashboard_test.go
+++ b/integration/test/dashboard_test.go
@@ -71,12 +71,25 @@ func (suite *DashboardImportTestSuite) TestImport() {
 
 func (suite *DashboardImportTestSuite) TestCModeDashboardCount() {
 	folderId := GetFolderId(cDotFolder, suite.T())
-	expectedName := []string{"Harvest Metadata", "NetApp Detail: Aggregate", "NetApp Detail: Cluster",
-		"NetApp Detail: Disk", "NetApp Detail: LUN", "NetApp Detail: Network  - Details",
-		"NetApp Detail: Network with NVMe/FC", "NetApp Detail: Node - Details",
-		"NetApp Detail: Shelf", "NetApp Detail: SnapMirror", "NetApp Detail: SVM - Details",
-		"NetApp Detail: Volume - Details", "NetApp Detail: MetroCluster", "NetApp Detail: Data Protection",
-		"NetApp Detail: Data Protection SnapMirror", "NetApp Detail: Qtree"}
+	expectedName := []string{
+		"Harvest Metadata",
+		"NetApp Detail: Aggregate",
+		"NetApp Detail: Cluster",
+		"NetApp Detail: Disk",
+		"NetApp Detail: LUN",
+		"NetApp Detail: Network  - Details",
+		"NetApp Detail: Network with NVMe/FC",
+		"NetApp Detail: Node - Details",
+		"NetApp Detail: Shelf",
+		"NetApp Detail: SnapMirror",
+		"NetApp Detail: SVM - Details",
+		"NetApp Detail: Volume - Details",
+		"NetApp Detail: MetroCluster",
+		"NetApp Detail: Data Protection",
+		"NetApp Detail: Data Protection SnapMirror",
+		"NetApp Detail: Qtree",
+		"NetApp Detail: Security",
+	}
 
 	VerifyDashboards(folderId, expectedName, suite.T())
 }
@@ -84,9 +97,17 @@ func (suite *DashboardImportTestSuite) TestCModeDashboardCount() {
 func (suite *DashboardImportTestSuite) TestSevenModeDashboardCount() {
 
 	folderId := GetFolderId(sevenModeFolder, suite.T())
-	expectedName := []string{"NetApp Detail: Aggregate 7 mode", "NetApp Detail: Cluster 7 mode",
-		"NetApp Detail: Disk 7 mode", "NetApp Detail: LUN 7 mode", "NetApp Detail: Network 7 mode", "NetApp Detail: Network with NVMe/FC 7 mode",
-		"NetApp Detail: Node 7 mode", "NetApp Detail: Shelf 7 mode", "NetApp Detail: Volume 7 mode"}
+	expectedName := []string{
+		"NetApp Detail: Aggregate 7 mode",
+		"NetApp Detail: Cluster 7 mode",
+		"NetApp Detail: Disk 7 mode",
+		"NetApp Detail: LUN 7 mode",
+		"NetApp Detail: Network 7 mode",
+		"NetApp Detail: Network with NVMe/FC 7 mode",
+		"NetApp Detail: Node 7 mode",
+		"NetApp Detail: Shelf 7 mode",
+		"NetApp Detail: Volume 7 mode",
+	}
 	VerifyDashboards(folderId, expectedName, suite.T())
 }
 
diff --git a/integration/test/data/counter_data.go b/integration/test/data/counter_data.go
index 79a4970b..dd9a67c7 100644
--- a/integration/test/data/counter_data.go
+++ b/integration/test/data/counter_data.go
@@ -38,6 +38,10 @@ func GetCounterMap() map[string][]string {
 	//if docker.IsDockerBasedPoller() || setup.IsMac {
 	counterMap["NO_DATA_CONTAINS"] = append(counterMap["NO_DATA_CONTAINS"], "poller", "metadata_exporter_count")
 	//}
+
+	// TODO: counter related to security dashboard, we need to remove this temporary exception list
+	counterMap["NO_DATA_CONTAINS"] = append(counterMap["NO_DATA_CONTAINS"], "support", "security", "ntpserver", "svm", "cluster_peer")
+
 	return counterMap
 }