Repository: NetApp/harvest
Pull request #2150 (2023-06-22 15:17:51)

feat: security hardening guide
Adding security investigation details in private wiki: https://github.com/NetApp/harvest-private/wiki/Security-Checks-Investigation

This first PR is targeted for value difference (bug in our code), next PR will be dashboard related changes.  

There is one feedback in afternoon discussion while comparing CI UI with Harvest security dashboard, We mostly have almost all details, we could also able to make similar dashboard.
<img width="1235" alt="image" src="https://github.com/NetApp/harvest/assets/83282894/fc124dac-6f0e-4277-aab1-99ae9bb57529">


Hardikl: <img width="1728" alt="image" src="https://github.com/NetApp/harvest/assets/83282894/b440f1c6-e0b5-4428-bfb1-a6c724c0ce2f">

Hardikl: <img width="1711" alt="image" src="https://github.com/NetApp/harvest/assets/83282894/b76ccb42-b89e-410c-9171-5343c91af925">

Hardikl: <img width="1850" alt="image" src="https://github.com/NetApp/harvest/assets/83282894/fa4ec212-4884-4829-9628-18ef1f7f9b28">

Hardikl: <img width="1841" alt="image" src="https://github.com/NetApp/harvest/assets/83282894/c1ac4a76-fd9e-44b8-ad74-1b21893bfdd6">


Patch:
diff --git a/cmd/collectors/ems/ems.go b/cmd/collectors/ems/ems.go
index bd139c44..0498c672 100644
--- a/cmd/collectors/ems/ems.go
+++ b/cmd/collectors/ems/ems.go
@@ -465,7 +465,6 @@ func (e *Ems) HandleResults(result []gjson.Result, prop map[string][]*emsProp) (
 			instanceKey string
 		)
 
-		var instanceLabelCount uint64
 		if !instanceData.IsObject() {
 			e.Logger.Warn().Str("type", instanceData.Type.String()).Msg("Instance data is not object, skipping")
 			continue
@@ -537,10 +536,20 @@ func (e *Ems) HandleResults(result []gjson.Result, prop map[string][]*emsProp) (
 				mx = m[msgName]
 			}
 
-			//parse ems properties for the instance
+			// Check matches at all same name ems
 			isMatch := false
+			// Check matches at each ems
+			isMatchPs := false
+			// Check instance count at all same name ems
+			instanceLabelCount := uint64(0)
+			// Check instance count at each ems
+			instanceLabelCountPs := uint64(0)
+
+			// parse ems properties for the instance
 			if ps, ok := prop[msgName]; ok {
 				for _, p := range ps {
+					isMatchPs = false
+					instanceLabelCountPs = 0
 					instanceKey = e.getInstanceKeys(p, instanceData)
 					instance := mx.GetInstance(instanceKey)
 
@@ -571,7 +580,7 @@ func (e *Ems) HandleResults(result []gjson.Result, prop map[string][]*emsProp) (
 							} else {
 								instance.SetLabel(display, value.String())
 							}
-							instanceLabelCount++
+							instanceLabelCountPs++
 						} else {
 							e.Logger.Warn().Str("Instance key", instanceKey).Str("label", label).Msg("Missing label value")
 						}
@@ -584,12 +593,12 @@ func (e *Ems) HandleResults(result []gjson.Result, prop map[string][]*emsProp) (
 
 					//matches filtering
 					if len(p.Matches) == 0 {
-						isMatch = true
+						isMatchPs = true
 					} else {
 						for _, match := range p.Matches {
 							if value := instance.GetLabel(match.Name); value != "" {
 								if value == match.value {
-									isMatch = true
+									isMatchPs = true
 									break
 								}
 							} else {
@@ -602,8 +611,8 @@ func (e *Ems) HandleResults(result []gjson.Result, prop map[string][]*emsProp) (
 							}
 						}
 					}
-					if !isMatch {
-						instanceLabelCount = 0
+					if !isMatchPs {
+						instanceLabelCountPs = 0
 						continue
 					}
 
@@ -634,6 +643,8 @@ func (e *Ems) HandleResults(result []gjson.Result, prop map[string][]*emsProp) (
 								Msg("Unable to find metric")
 						}
 					}
+					instanceLabelCount += instanceLabelCountPs
+					isMatch = isMatch || isMatchPs
 				}
 			}
 			if !isMatch {
diff --git a/cmd/collectors/rest/plugins/certificate/certificate.go b/cmd/collectors/rest/plugins/certificate/certificate.go
index fd6b9acd..643c4092 100644
--- a/cmd/collectors/rest/plugins/certificate/certificate.go
+++ b/cmd/collectors/rest/plugins/certificate/certificate.go
@@ -139,6 +139,8 @@ func (my *Certificate) setCertificateIssuerType(instance *matrix.Instance) {
 				// Any verification exception means it is not signed with the give key. i.e. not self-signed
 				instance.SetLabel("certificateIssuerType", "ca_signed")
 			}
+		} else {
+			instance.SetLabel("certificateIssuerType", "ca_signed")
 		}
 	}
 }
diff --git a/cmd/collectors/rest/plugins/securityaccount/securityaccount.go b/cmd/collectors/rest/plugins/securityaccount/securityaccount.go
index 63882bbc..96c7f990 100644
--- a/cmd/collectors/rest/plugins/securityaccount/securityaccount.go
+++ b/cmd/collectors/rest/plugins/securityaccount/securityaccount.go
@@ -61,7 +61,6 @@ func (s *SecurityAccount) Run(dataMap map[string]*matrix.Matrix) ([]*matrix.Matr
 	)
 
 	data := dataMap[s.Object]
-
 	href := rest.BuildHref("", "applications", nil, "", "", "", "", s.query)
 
 	if result, err = collectors.InvokeRestCall(s.client, href, s.Logger); err != nil {
@@ -91,7 +90,7 @@ func (s *SecurityAccount) Run(dataMap map[string]*matrix.Matrix) ([]*matrix.Matr
 			}
 		}
 
-		securityAccountKey := username + svm
+		securityAccountKey := svm + username
 		if securityAccountInstance := data.GetInstance(securityAccountKey); securityAccountInstance != nil {
 			securityAccountInstance.SetExportable(false)
 
diff --git a/cmd/collectors/zapi/plugins/certificate/certificate.go b/cmd/collectors/zapi/plugins/certificate/certificate.go
index 1c819f98..f7e22bb1 100644
--- a/cmd/collectors/zapi/plugins/certificate/certificate.go
+++ b/cmd/collectors/zapi/plugins/certificate/certificate.go
@@ -146,6 +146,8 @@ func (my *Certificate) setCertificateIssuerType(instance *matrix.Instance, certi
 				// Any verification exception means it is not signed with the give key. i.e. not self-signed
 				instance.SetLabel("certificateIssuerType", "ca_signed")
 			}
+		} else {
+			instance.SetLabel("certificateIssuerType", "ca_signed")
 		}
 	}
 }
diff --git a/cmd/poller/poller.go b/cmd/poller/poller.go
index 079dc997..4355a9c1 100644
--- a/cmd/poller/poller.go
+++ b/cmd/poller/poller.go
@@ -30,9 +30,7 @@ import (
 	"encoding/json"
 	"errors"
 	"fmt"
-	goversion "github.com/hashicorp/go-version"
 	_ "github.com/netapp/harvest/v2/cmd/collectors/ems"
-	"github.com/netapp/harvest/v2/cmd/collectors/rest"
 	_ "github.com/netapp/harvest/v2/cmd/collectors/restperf"
 	_ "github.com/netapp/harvest/v2/cmd/collectors/simple"
 	_ "github.com/netapp/harvest/v2/cmd/collectors/storagegrid"
@@ -47,7 +45,6 @@ import (
 	"github.com/netapp/harvest/v2/cmd/poller/options"
 	"github.com/netapp/harvest/v2/cmd/poller/plugin"
 	"github.com/netapp/harvest/v2/cmd/poller/schedule"
-	rest2 "github.com/netapp/harvest/v2/cmd/tools/rest"
 	"github.com/netapp/harvest/v2/pkg/api/ontapi/zapi"
 	"github.com/netapp/harvest/v2/pkg/auth"
 	"github.com/netapp/harvest/v2/pkg/conf"
@@ -1131,88 +1128,33 @@ func (p *Poller) createClient() {
 }
 
 // upgradeCollector checks if the collector c should be upgraded to a REST collector.
-// If an upgrade is possible, a new collector will be returned, otherwise the original will be.
-//
-// ZAPI collectors should be upgraded to REST collectors when the ONTAP version is >= 9.12.1 unless
-// the HARVEST_NO_COLLECTOR_UPGRADE ENVVAR is set.
-// The check is performed by:
-//   - use the REST API to query the cluster version
-//   - compare the cluster version with the upgradeAfter version
-//
+// ZAPI collectors should be upgraded to REST collectors when the cluster no longer speaks Zapi
 // If any error happens during the REST query, the upgrade is aborted and the original collector c returned.
 func (p *Poller) upgradeCollector(c conf.Collector) conf.Collector {
-	// Only attempt to upgrade Zapi* collectors
-	if !strings.HasPrefix(c.Name, "Zapi") {
-		return c
-	}
+	// If REST is desired, use REST
+	// If ZAPI is desired, check that the cluster speaks ZAPI and if so, use ZAPI otherwise use REST
+	// EMS and StorageGRID are will be ignored
 
-	r, err := p.newRestClient()
-	if err != nil {
-		logger.Debug().Err(err).Str("collector", c.Name).Msg("Failed to upgrade to Rest. Use collector")
+	if !strings.HasPrefix(c.Name, "Zapi") {
 		return c
 	}
-	verWithDots := r.Client.Cluster().GetVersion()
 
-	return p.negotiateAPI(c, verWithDots, p.doZAPIsExist)
+	return p.negotiateAPI(c, p.doZAPIsExist)
 }
 
 // clusterVersion should be of the form 9.12.1
-func (p *Poller) negotiateAPI(c conf.Collector, clusterVersion string, checkZAPIs func() error) conf.Collector {
-	var (
-		ontapVersion *goversion.Version
-		noUpgrade    string
-		err          error
-	)
-	const (
-		upgradeVersion = "9.12.1"
-	)
-	ontapVersion, err = goversion.NewVersion(clusterVersion)
-	if err != nil {
-		logger.Error().Err(err).
-			Str("v", clusterVersion).
-			Str("collector", c.Name).
-			Msg("Failed to parse version")
-		return c
-	}
-
-	upgradeAfter, _ := goversion.NewVersion(upgradeVersion)
-	if ontapVersion.LessThan(upgradeAfter) {
-		logger.Debug().
-			Str("collector", c.Name).
-			Str("v", clusterVersion).
-			Str("upgradeVersion", upgradeVersion).
-			Msg("Do not upgrade collector")
-		return c
-	}
-
-	// For ONTAP versions 9.12.1+ use REST unless the HARVEST_NO_COLLECTOR_UPGRADE environment variable is set.
-	// When the environment variable is set, honor that request unless the cluster no longer speaks ZAPI.
-	noUpgrade = os.Getenv(NoUpgrade)
-	if noUpgrade == "" && !p.params.PreferZAPI {
-		logger.Info().Str("collector", c.Name).Str("v", clusterVersion).Msg("Use REST")
-		upgradeCollector := strings.ReplaceAll(c.Name, "Zapi", "Rest")
-		return conf.Collector{
-			Name:      upgradeCollector,
-			Templates: c.Templates,
-		}
-	}
-
-	err = checkZAPIs()
+func (p *Poller) negotiateAPI(c conf.Collector, checkZAPIs func() error) conf.Collector {
+	err := checkZAPIs()
 	// if there is an error talking to ONTAP, assume that is because ZAPIs no longer exist and use REST
 	if err != nil {
-		logger.Warn().Err(err).Str("collector", c.Name).Str("v", clusterVersion).Msg("ZAPI EOA. Use REST")
+		logger.Warn().Err(err).Str("collector", c.Name).Msg("ZAPI EOA. Use REST")
 		upgradeCollector := strings.ReplaceAll(c.Name, "Zapi", "Rest")
 		return conf.Collector{
 			Name:      upgradeCollector,
 			Templates: c.Templates,
 		}
 	}
-	logger.Info().
-		Str("collector", c.Name).
-		Str("v", clusterVersion).
-		Str(NoUpgrade, noUpgrade).
-		Bool("preferZAPI", p.params.PreferZAPI).
-		Msg("Use ZAPIs")
+
 	return c
 }
 
@@ -1237,19 +1179,6 @@ func (p *Poller) doZAPIsExist() error {
 	return nil
 }
 
-func (p *Poller) newRestClient() (*rest.Rest, error) {
-	params := node.NewS("")
-	// Set client_timeout to suppress logging a msg about the default client_timeout during Rest client creation
-	params.NewChildS("client_timeout", rest2.DefaultTimeout)
-	Union2(params, p.params)
-	delegate := collector.New("Rest", "", p.options, params, p.auth)
-	r := &rest.Rest{
-		AbstractCollector: delegate,
-	}
-	err := r.InitClient()
-	return r, err
-}
-
 func startPoller(_ *cobra.Command, _ []string) {
 	//cmd.DebugFlags()  // uncomment to print flags
 	poller := &Poller{}
diff --git a/cmd/tools/grafana/unit.go b/cmd/tools/grafana/unit.go
index 89133fab..e20f4374 100644
--- a/cmd/tools/grafana/unit.go
+++ b/cmd/tools/grafana/unit.go
@@ -19,13 +19,9 @@ type Metric struct {
 func parseUnits() map[string]Metric {
 
 	excludeValidationMap := map[string]struct{}{
-		"flashpool_evict_destage_rate":  {},
-		"flashpool_evict_remove_rate":   {},
-		"flashpool_read_cache_ins_rate": {},
-		"flashpool_wc_write_blks_total": {},
-		"svm_nfs_read_throughput":       {},
-		"svm_nfs_throughput":            {},
-		"svm_nfs_write_throughput":      {},
+		"svm_nfs_read_throughput":  {},
+		"svm_nfs_throughput":       {},
+		"svm_nfs_write_throughput": {},
 	}
 	filePath := "units.yaml"
 
diff --git a/cmd/tools/grafana/units.yaml b/cmd/tools/grafana/units.yaml
index 0b2420f1..cb106579 100644
--- a/cmd/tools/grafana/units.yaml
+++ b/cmd/tools/grafana/units.yaml
@@ -158,25 +158,25 @@
 - metric: flashpool_read_cache_ins_rate
   ontapUnit: per_sec
   grafanaJson: ops
-  grafanaDisplay: Blocks/sec(ops)
+  grafanaDisplay: ops/sec(ops)
   comment: Cache insert rate blks/sec
 
 - metric: flashpool_wc_write_blks_total
   ontapUnit: per_sec
   grafanaJson: ops
-  grafanaDisplay: Blocks/sec(ops)
+  grafanaDisplay: ops/sec(ops)
   comment: Number of write-cache blocks written per second
 
 - metric: flashpool_evict_destage_rate
   ontapUnit: per_sec
   grafanaJson: ops
-  grafanaDisplay: Blocks/sec(ops)
+  grafanaDisplay: ops/sec(ops)
   comment: Number of block destage per second
 
 - metric: flashpool_evict_remove_rate
   ontapUnit: per_sec
   grafanaJson: ops
-  grafanaDisplay: Blocks/sec(ops)
+  grafanaDisplay: ops/sec(ops)
   comment: Number of block free per second
 
 - metric: quota_disk_used
diff --git a/docs/architecture/rest-strategy.md b/docs/architecture/rest-strategy.md
index abc81939..3e2705e7 100644
--- a/docs/architecture/rest-strategy.md
+++ b/docs/architecture/rest-strategy.md
@@ -14,11 +14,15 @@ In most cases, no action is required on your part.
 
 ## Harvest API Transition
 
-By default, Harvest will use ZAPIs until ONTAP version `9.12.1`.
-Beginning with ONTAP `9.12.1` and after, Harvest will default to REST.
+Harvest tries to use the protocol you specify in your `harvest.yml` config file.
+
+When specifying the ZAPI collector, Harvest will use the ZAPI protocol unless the cluster no longer speaks Zapi,
+in which case, Harvest will switch to REST.
+
+If you specify the REST collector, Harvest will use the REST protocol.
 
 Harvest includes a full set of REST templates that export identical metrics as the included ZAPI templates.
-No changes to dashboards or downstream metric-consumers will be required. 
+No changes to dashboards or downstream metric-consumers should be required. 
 See [below](#ive-added-counters-to-existing-zapi-templates-will-those-counters-work-in-rest) if you have 
 added metrics to the Harvest out-of-the-box templates.
 
@@ -28,51 +32,39 @@ Read on if you want to know how you can use REST sooner, or you want to take adv
 
 ### How does Harvest decide whether to use REST or ZAPI APIs?
 
-Harvest asks the cluster for its ONTAP version:
-
-* If the version is earlier than `9.12.1`, Harvest will use the collector(s) defined in your `harvest.yml`.
-* If the version is `9.12.1` or later, Harvest will use REST, unless the [HARVEST_NO_COLLECTOR_UPGRADE](#im-using-ontap-version-912x-but-i-want-to-continue-using-zapis-how-do-i-do-that) environment variable is set or 
-  the [`prefer_zapi`](https://netapp.github.io/harvest/latest/configure-harvest-basic/#pollers) poller option is true.
-  When the environment variable or `prefer_zapi` option are set, Harvest will use ZAPIs unless the cluster no longer talks ZAPI. 
-
-```mermaid
-graph TD
-A(Harvest asks the cluster<br>for its ONTAP version) --> B(Version before<br>9.12.X?)
-A --> C(9.12.X)
-A --> D(9.13.X)
+Harvest attempts to use the collector defined in your `harvest.yml` config file.
+ 
+- If you specify the ZAPI collector, Harvest will use the ZAPI protocol as long as the cluster still speaks Zapi. 
+  If the cluster no longer understands Zapi, Harvest will switch to Rest.
 
-B --> AA{Does your harvest.yml<br>specify a REST collector?}
-AA -->|No| F(Use ZAPI) 
-AA -->|Yes|G(Use REST)
+- If you specify the REST collector, Harvest will use REST.
 
-C --> CC{Is HARVEST_NO_COLLECTOR_UPGRADE<br>environment variable set?<br><br>Or is the prefer_zapi poller option setset?}
-CC --> |No| G
-CC --> |Yes|CZ(Use ZAPI) 
+Earlier versions of Harvest included a `prefer_zapi` poller option and a `HARVEST_NO_COLLECTOR_UPGRADE` environment variable.
+Both of these options are ignored in Harvest versions `23.08` onwards.
 
-D --> X(Use REST)
-```
 ### Why would I switch to REST before `9.13.1`?
 
-- You have advanced use cases to validate before ONTAP removes ZAPIs in `9.13.1`
-- You want to take advantage of new ONTAP features that are only available via REST (e.g. cloud features, event remediation's, name services, cluster peers, etc.)
+- You have advanced use cases to validate before ONTAP removes ZAPIs
+- You want to take advantage of new ONTAP features that are only available via REST (e.g., cloud features, event remediation, name services, cluster peers, etc.)
 - You want to collect a metric that is not available via ZAPI
 - You want to collect a metric from the ONTAP CLI. The REST API includes a private CLI pass-through to access any ONTAP CLI command
 
 ### Can I start using REST before `9.13.1`?
 
-Yes. Several customers already are. Be aware of the following limitations:
-
-1. Harvest collects config counters via REST by enabling the `Rest` collector in your `harvest.yml`,
-   but ONTAP did not include performance counters via REST until [9.11.1](https://docs.netapp.com/us-en/ontap-automation/migrate/performance-counters.html#accessing-performance-counters-using-the-ontap-rest-api).
-   That means Harvest's `RestPerf` collector won't work until `9.11.1`.
-   ONTAP supports a subset of performance counters in `9.11.1`. The full set is available in `9.12.1`.
+Yes. Many customers do. Be aware of the following limitations:
 
+1. ONTAP includes a subset of performance counters via REST beginning in ONTAP [9.11.1](https://docs.netapp.com/us-en/ontap-automation/migrate/performance-counters.html#accessing-performance-counters-using-the-ontap-rest-api).
 2. There may be performance metrics missing from versions of ONTAP earlier than `9.11.1`.
 
+Where performance metrics are concerned, because of point #2,
+our recommendation is to wait until at least ONTAP `9.12.1` before switching to the `RestPerf` collector.
+You can continue using the `ZapiPerf` collector until you switch.
+
 ### A counter is missing from REST. What do I do?
 
-The Harvest team has ensured that all the out-of-the-box ZAPI templates have matching REST templates with the same metrics.
-Any additional counters you have added may be missing in REST. 
+The Harvest team has ensured
+that all the out-of-the-box ZAPI templates have matching REST templates with identical metrics as of Harvest `22.11` and ONTAP `9.12.1`.
+Any additional ZAPI Perf counters you have added may be missing from ONTAP REST Perf. 
 
 Join the [Harvest discord channel](https://github.com/NetApp/harvest/blob/main/SUPPORT.md#getting-help) and ask us about the counter.
 Sometimes we may know which release the missing counter is coming in, otherwise we can point you to the ONTAP
@@ -101,47 +93,36 @@ cluster-1:
   listed first in the list of `collectors`. When collecting a REST-only resource like, `nfs_client`, the Rest collector will be used
   since `nfs_client` objects are only available via REST.
 
-- When `cluster-1` is running ONTAP `9.12.1` (ONTAP still supports ZAPIs), the Rest collector will be used since
-  Harvest [automatically uses REST](#how-does-harvest-decide-whether-to-use-rest-or-zapi-apis) for clusters at `9.12.1`
-  or later.
+- When `cluster-1` is running ONTAP `9.18.1` (ONTAP no longer supports ZAPIs),
+  the Rest collector will be used since ONTAP can no longer speak the ZAPI protocol.
 
-- When `cluster-1` is running ONTAP `9.12.1` (ONTAP still supports ZAPIs) and the environment
-  variable `HARVEST_NO_COLLECTOR_UPGRADE` is set, the Zapi collector will be used because of the included environment
-  variable.
-
-- When `cluster-1` is running ONTAP `9.15.1` (ONTAP removed ZAPIs) and the environment
-  variable `HARVEST_NO_COLLECTOR_UPGRADE` is set, the Rest collector will be used since Harvest asks the cluster if it
-  speaks ZAPI and the cluster answers no.
-
-If you want the REST collector to be preferred over the ZAPI one, change the order in
+If you want the REST collector to be used in all cases, change the order in
 the `collectors` section so `Rest` comes before `Zapi`.
 
-If the resource does not exist for the first collector, the next collector will be tried. For example, when
-collecting `VolumeAnalytics` resources, the Zapi collector will not run because `VolumeAnalytics` objects are only
-available via REST.
+If the resource does not exist for the first collector, the next collector will be tried.
+Using the example above, when collecting `VolumeAnalytics` resources,
+the Zapi collector will not run for `VolumeAnalytics` objects since that resource is only available via REST.
+The Rest collector will run and collect the `VolumeAnalytics` objects.
 
 ### I've added counters to existing ZAPI templates. Will those counters work in REST?
 
 `ZAPI` config metrics often have a REST equivalent that can be found in ONTAP's [ONTAPI to REST mapping document](https://library.netapp.com/ecm/ecm_download_file/ECMLP2882104).
 
-ZAPI performance metrics may be missing in REST. If you have added new metrics or templates to the `ZAPIPerf` collector, those metrics likely aren't available via REST. 
-You can [check if the performance counter is available](https://docs.netapp.com/us-en/ontap-automation/migrate/performance-counters.html#discover-the-available-performance-counter-tables) 
-or [ask the Harvest team on Discord](#a-counter-is-missing-from-rest-what-do-i-do).
-
-### I'm using ONTAP version 9.12.X, but I want to continue using ZAPIs. How do I do that?
-
-You can tell Harvest to continue using the ZAPI protocol by picking one of these options:
-
-- Edit your `harvest.yml` config file and add the [`prefer_zapi: true`](https://netapp.github.io/harvest/latest/configure-harvest-basic/#pollers) option to the poller section. See [configure Harvest](https://netapp.github.io/harvest/latest/configure-harvest-basic/#pollers) for details.
-- Set the environment variable `HARVEST_NO_COLLECTOR_UPGRADE=1` and Harvest will not 
-upgrade your collector from ZAPI to REST.
+ZAPI performance metrics may be missing in REST.
+If you have added new metrics or templates to the `ZapiPerf` collector, those metrics likely aren't available via REST. 
+You can [check if the performance counter is available](https://docs.netapp.com/us-en/ontap-automation/migrate/performance-counters.html#discover-the-available-performance-counter-tables), [ask the Harvest team on Discord](#a-counter-is-missing-from-rest-what-do-i-do),
+or [ask ONTAP to add the counter](https://kb.netapp.com/Advice_and_Troubleshooting/Data_Storage_Software/ONTAP_OS/How_to_request_a_feature_for_ONTAP_REST_API) you need.
 
 ## Reference
 
 Table of ONTAP versions, dates and API notes.
 
-| ONTAP<br/>version | Release<br/>Date | ONTAP<br/>Notes                                                                                                                                                                         |
-|------------------:|------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
-|          `9.11.1` | Q2 2022          | First version with [REST performance metrics](https://docs.netapp.com/us-en/ontap-automation/migrate/performance-counters.html#accessing-performance-counters-using-the-ontap-rest-api) |
-|          `9.12.1` | Q4 2022          | ZAPIs still supported - REST performance metrics have parity with Harvest collected ZAPI performance metrics                                                                            |
-|          `9.13.1` | Q2 2023          | ZAPIs removed. REST only release - REST config and performance parity with ZAPIs                                                                                                        |
+| ONTAP<br/>version | Release<br/>Date | ONTAP<br/>Notes                                                                                                                                                                                                     |
+|------------------:|------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+|          `9.11.1` | Q2 2022          | First version of ONTAP with [REST performance metrics](https://docs.netapp.com/us-en/ontap-automation/migrate/performance-counters.html#accessing-performance-counters-using-the-ontap-rest-api)                    |
+|          `9.12.1` | Q4 2022          | ZAPIs still supported - REST performance metrics have parity with Harvest `22.11` collected ZAPI performance metrics                                                                                                |
+|          `9.13.1` |                  | ZAPIs still supported                                                                                                                                                                                               |
+| `9.14.1`-`9.15.1` |                  | ZAPIs enabled if ONTAP upgrade detects they were being used earlier. New ONTAP installs default to REST only. ZAPIs may be enabled via CLI                                                                          |
+| `9.16.1`-`9.17.1` |                  | ZAPIs disabled. See [ONTAP communique](https://kb.netapp.com/onprem/ontap/dm/REST_API/FAQs_on_ZAPI_to_ONTAP_REST_API_transformation_for_CPC_(Customer_Product_Communiques)_notification) for details on re-enabling |
+|          `9.18.1` |                  | ZAPIs removed. No way to re-enable                                                                                                                                                                                  |
+
diff --git a/docs/plugins.md b/docs/plugins.md
index 1b37cc78..deb075a3 100644
--- a/docs/plugins.md
+++ b/docs/plugins.md
@@ -4,17 +4,17 @@ The `plugin` feature allows users to manipulate and customize data collected by
 collectors. Plugins have the same capabilities as collectors and therefore can collect data on their own as well.
 Furthermore, multiple plugins can be put in a pipeline to perform more complex operations.
 
-Harvest architecture defines three types of plugins:
+Harvest architecture defines two types of plugins:
 
-**built-in generic** - Statically compiled, generic plugins. "Generic" means the plugin is collector-agnostic. These
-plugins are provided in this package.
+**Built-in generic** - Statically compiled, generic plugins.
+"Generic" means the plugin is collector-agnostic.
+These plugins are provided in this package and listed in the right sidebar.
 
-**dynamic-generic** - These are generic plugins as well, but they are compiled as shared objects and dynamically loaded.
-These plugins are living in the directory src/plugins.
-
-**dynamic-custom** - These plugins are collector-specific. Their source code should reside inside the plugins/
-subdirectory of the collector package. Custom plugins have access to all the parameters of their parent collector and
-should be therefore treated with great care.
+**Built-in custom** - These plugins are statically compiled, collector-specific plugins.
+Their source code should reside inside the `plugins/`  subdirectory of the collector package
+(e.g. (`cmd/collectors/rest/plugins/svm/svm.go`)[https://github.com/NetApp/harvest/blob/main/cmd/collectors/rest/plugins/svm/svm.go]).
+Custom plugins have access to all the parameters of their parent collector and
+should therefore be treated with great care.
 
 This documentation gives an overview of builtin plugins. For other plugins, see their respective documentation. For
 writing your own plugin, see Developer's documentation.
diff --git a/grafana/dashboards/cmode/aggregate.json b/grafana/dashboards/cmode/aggregate.json
index ca2fd012..8b37232b 100644
--- a/grafana/dashboards/cmode/aggregate.json
+++ b/grafana/dashboards/cmode/aggregate.json
@@ -3692,7 +3692,7 @@
         },
         {
           "datasource": "${DS_PROMETHEUS}",
-          "description": "",
+          "description": "Number of read-cache/write-cache blocks per second.",
           "fieldConfig": {
             "defaults": {
               "color": {
@@ -3726,7 +3726,6 @@
                   "mode": "off"
                 }
               },
-              "decimals": 3,
               "mappings": [],
               "min": 0,
               "thresholds": {
@@ -3738,7 +3737,7 @@
                   }
                 ]
               },
-              "unit": "short"
+              "unit": "ops"
             },
             "overrides": [
               {
@@ -3804,7 +3803,7 @@
         },
         {
           "datasource": "${DS_PROMETHEUS}",
-          "description": "",
+          "description": "Number of block destage/free per second.",
           "fieldConfig": {
             "defaults": {
               "color": {
@@ -3849,7 +3848,7 @@
                   }
                 ]
               },
-              "unit": "short"
+              "unit": "ops"
             },
             "overrides": [
               {
diff --git a/grafana/dashboards/cmode/compliance.json b/grafana/dashboards/cmode/compliance.json
index 32d8beab..f6d2221d 100644
--- a/grafana/dashboards/cmode/compliance.json
+++ b/grafana/dashboards/cmode/compliance.json
@@ -83,6 +83,24 @@
     }
   ],
   "panels": [
+    {
+      "datasource": "${DS_PROMETHEUS}",
+      "description": "",
+      "gridPos": {
+        "h": 2,
+        "w": 24,
+        "x": 0,
+        "y": 0
+      },
+      "id": 174,
+      "options": {
+        "content": "View ONTAP Security Hardening Guide https://www.netapp.com/media/10674-tr4569.pdf for more details.",
+        "mode": "markdown"
+      },
+      "pluginVersion": "8.1.8",
+      "title": "Important Information about Compliance dashboard",
+      "type": "text"
+    },
     {
       "collapsed": true,
       "datasource": "${DS_PROMETHEUS}",
@@ -90,7 +108,7 @@
         "h": 1,
         "w": 24,
         "x": 0,
-        "y": 0
+        "y": 2
       },
       "id": 152,
       "panels": [
@@ -177,7 +195,7 @@
             "h": 3,
             "w": 16,
             "x": 0,
-            "y": 1
+            "y": 3
           },
           "id": 161,
           "options": {
@@ -350,7 +368,7 @@
             "h": 3,
             "w": 4,
             "x": 16,
-            "y": 1
+            "y": 3
           },
           "id": 166,
           "links": [],
@@ -458,7 +476,7 @@
             "h": 3,
             "w": 4,
             "x": 20,
-            "y": 1
+            "y": 3
           },
           "id": 167,
           "links": [],
@@ -1343,7 +1361,7 @@
             "h": 8,
             "w": 24,
             "x": 0,
-            "y": 4
+            "y": 6
           },
           "id": 170,
           "options": {
@@ -1440,7 +1458,7 @@
             },
             {
               "exemplar": false,
-              "expr": "count by (datacenter, cluster) (security_account_localuser{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"})",
+              "expr": "sum by (datacenter, cluster) (security_account_localuser{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"})",
               "format": "table",
               "hide": false,
               "instant": true,
@@ -1450,7 +1468,7 @@
             },
             {
               "exemplar": false,
-              "expr": "count by (datacenter, cluster) (security_account_samluser{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"})",
+              "expr": "sum by (datacenter, cluster) (security_account_samluser{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"})",
               "format": "table",
               "hide": false,
               "instant": true,
@@ -1460,7 +1478,7 @@
             },
             {
               "exemplar": false,
-              "expr": "count by (datacenter, cluster) (security_account_activediruser{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"})",
+              "expr": "sum by (datacenter, cluster) (security_account_activediruser{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"})",
               "format": "table",
               "hide": false,
               "instant": true,
@@ -1470,7 +1488,7 @@
             },
             {
               "exemplar": false,
-              "expr": "count by (datacenter, cluster) (security_account_ldapuser{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"})",
+              "expr": "sum by (datacenter, cluster) (security_account_ldapuser{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"})",
               "format": "table",
               "hide": false,
               "instant": true,
@@ -1480,7 +1498,7 @@
             },
             {
               "exemplar": false,
-              "expr": "count by (datacenter, cluster) (security_account_certificateuser{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"})",
+              "expr": "sum by (datacenter, cluster) (security_account_certificateuser{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"})",
               "format": "table",
               "hide": false,
               "instant": true,
@@ -1597,7 +1615,6 @@
                   "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 #J": "Cluster Peering",
@@ -1644,7 +1661,7 @@
         "h": 1,
         "w": 24,
         "x": 0,
-        "y": 1
+        "y": 3
       },
       "id": 15,
       "panels": [
@@ -1702,7 +1719,7 @@
             "h": 3,
             "w": 16,
             "x": 0,
-            "y": 2
+            "y": 4
           },
           "id": 165,
           "options": {
@@ -1850,7 +1867,7 @@
             "h": 3,
             "w": 4,
             "x": 16,
-            "y": 2
+            "y": 4
           },
           "id": 168,
           "links": [],
@@ -1954,7 +1971,7 @@
             "h": 3,
             "w": 4,
             "x": 20,
-            "y": 2
+            "y": 4
           },
           "id": 164,
           "links": [],
@@ -2568,7 +2585,7 @@
             "h": 13,
             "w": 24,
             "x": 0,
-            "y": 5
+            "y": 7
           },
           "id": 172,
           "options": {
@@ -2733,10 +2750,8 @@
                 "renameByName": {
                   "Value #A": "Autosupport Https Transport",
                   "Value #B": "Compliant",
-                  "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",
diff --git a/grafana/dashboards/cmode/security.json b/grafana/dashboards/cmode/security.json
index 41a28f2e..c524073f 100644
--- a/grafana/dashboards/cmode/security.json
+++ b/grafana/dashboards/cmode/security.json
@@ -92,109 +92,12 @@
         "x": 0,
         "y": 0
       },
-      "id": 153,
+      "id": 185,
       "panels": [],
-      "title": "Cluster Authentication And Certificates",
+      "title": "Highlights",
       "type": "row"
     },
     {
-      "datasource": "${DS_PROMETHEUS}",
-      "fieldConfig": {
-        "defaults": {
-          "color": {
-            "fixedColor": "blue",
-            "mode": "fixed"
-          },
-          "mappings": [],
-          "min": 0,
-          "thresholds": {
-            "mode": "absolute",
-            "steps": [
-              {
-                "color": "blue",
-                "value": null
-              }
-            ]
-          },
-          "unit": "short"
-        },
-        "overrides": []
-      },
-      "gridPos": {
-        "h": 6,
-        "w": 18,
-        "x": 0,
-        "y": 1
-      },
-      "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\"} \u003e 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\"} \u003e 0)) or vector (0)",
-          "format": "time_series",
-          "hide": false,
-          "instant": false,
-          "interval": "",
-          "legendFormat": "Certificate",
-          "refId": "B"
-        },
-        {
-          "exemplar": false,
-          "expr": "count(count by (datacenter, cluster) (security_account_localuser{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} \u003e 0)) or vector (0)",
-          "format": "time_series",
-          "hide": false,
-          "instant": false,
-          "interval": "",
-          "legendFormat": "Local",
-          "refId": "C"
-        },
-        {
-          "exemplar": false,
-          "expr": "count(count by (datacenter, cluster) (security_account_ldapuser{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} \u003e 0)) or vector (0)",
-          "hide": false,
-          "interval": "",
-          "legendFormat": "Ldap",
-          "refId": "D"
-        },
-        {
-          "exemplar": false,
-          "expr": "count(count by (datacenter, cluster) (security_account_activediruser{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} \u003e 0)) or vector (0)",
-          "hide": false,
-          "interval": "",
-          "legendFormat": "Active Directory",
-          "refId": "E"
-        }
-      ],
-      "title": "Authentication Methods",
-      "transformations": [],
-      "type": "bargauge"
-    },
-    {
-      "cacheTimeout": null,
       "datasource": "${DS_PROMETHEUS}",
       "description": "",
       "fieldConfig": {
@@ -202,129 +105,32 @@
           "color": {
             "mode": "thresholds"
           },
+          "decimals": 0,
           "mappings": [],
-          "noValue": "0",
           "thresholds": {
             "mode": "absolute",
             "steps": [
               {
-                "color": "dark-yellow",
+                "color": "green",
                 "value": null
               }
             ]
-          },
-          "unit": "short"
-        },
-        "overrides": []
-      },
-      "gridPos": {
-        "h": 6,
-        "w": 3,
-        "x": 18,
-        "y": 1
-      },
-      "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": false,
-          "expr": "security_certificate_labels{datacenter=~\"$Datacenter\", cluster=~\"$Cluster\", certificateExpiryStatus=\"expiring\"}",
-          "format": "table",
-          "hide": true,
-          "instant": true,
-          "interval": "",
-          "intervalFactor": 1,
-          "legendFormat": "",
-          "refId": "A"
-        },
-        {
-          "exemplar": false,
-          "expr": "count(security_certificate_labels{datacenter=~\"$Datacenter\", cluster=~\"$Cluster\", certificateExpiryStatus=\"expiring\"})",
-          "format": "time_series",
-          "hide": false,
-          "instant": true,
-          "interval": "",
-          "legendFormat": "",
-          "refId": "B"
-        }
-      ],
-      "timeFrom": null,
-      "timeShift": null,
-      "title": "Expiring in < 60 days",
-      "transformations": [
-        {
-          "id": "merge",
-          "options": {}
-        },
-        {
-          "id": "organize",
-          "options": {
-            "excludeByName": {
-              "Value #A": true
-            },
-            "indexByName": {},
-            "renameByName": {
-              "cluster": "Cluster",
-              "security_certificate_labels{certificateExpiryStatus=\"expiring\", certificateIssuerType=\"self_signed\", cluster=\"F8080-32-25\", datacenter=\"DC-02\", instance=\"localhost:12984\", job=\"prometheus14\", name=\"F8080-32-25_1673D3449EB39B95\", scope=\"cluster\", serial_number=\"1673D3449EB39B95\", type=\"server\", uuid=\"d7bb8e95-9840-11eb-814a-00a0986abd71\"}": ""
-            }
           }
-        }
-      ],
-      "type": "stat"
-    },
-    {
-      "cacheTimeout": null,
-      "datasource": "${DS_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,
+        "h": 3,
+        "w": 5,
+        "x": 0,
         "y": 1
       },
-      "id": 159,
-      "links": [],
+      "id": 207,
       "options": {
         "colorMode": "value",
-        "graphMode": "none",
-        "justifyMode": "center",
-        "orientation": "horizontal",
+        "graphMode": "area",
+        "justifyMode": "auto",
+        "orientation": "auto",
         "reduceOptions": {
           "calcs": [
             "lastNotNull"
@@ -335,170 +141,51 @@
         "text": {},
         "textMode": "auto"
       },
-      "pluginVersion": "8.1.2",
-      "targets": [
-        {
-          "exemplar": false,
-          "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": "${DS_PROMETHEUS}",
-      "gridPos": {
-        "h": 1,
-        "w": 24,
-        "x": 0,
-        "y": 7
-      },
-      "id": 12,
-      "panels": [],
-      "title": "Volume Encryption",
-      "type": "row"
-    },
-    {
-      "datasource": "${DS_PROMETHEUS}",
-      "fieldConfig": {
-        "defaults": {
-          "color": {
-            "fixedColor": "green",
-            "mode": "fixed"
-          },
-          "custom": {
-            "align": "auto",
-            "displayMode": "gradient-gauge",
-            "filterable": true
-          },
-          "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": 8
-      },
-      "id": 178,
-      "options": {
-        "showHeader": true
-      },
-      "pluginVersion": "8.1.2",
+      "pluginVersion": "8.3.4",
       "targets": [
         {
+          "datasource": "${DS_PROMETHEUS}",
           "exemplar": false,
-          "expr": "count(volume_labels{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\", svm=~\"$SVM\", isEncrypted=\"true\"}) or vector (0)",
-          "format": "time_series",
-          "hide": false,
+          "expr": "(count(volume_labels{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\", svm=~\"$SVM\", isEncrypted=\"true\"}) or vector (0))\n+\n(count(volume_labels{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\", svm=~\"$SVM\", isHardwareEncrypted=\"true\"}) or vector (0) )",
           "instant": true,
           "interval": "",
-          "legendFormat": "Software",
+          "legendFormat": "encrypted",
           "refId": "A"
         },
         {
+          "datasource": "${DS_PROMETHEUS}",
           "exemplar": false,
-          "expr": "count(volume_labels{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\", svm=~\"$SVM\", isHardwareEncrypted=\"true\"}) or vector (0) ",
-          "format": "time_series",
+          "expr": "(count(volume_labels{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\", svm=~\"$SVM\"}) or vector (1) )",
           "hide": false,
           "instant": true,
           "interval": "",
-          "legendFormat": "Hardware",
+          "legendFormat": "total",
           "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"
         }
       ],
+      "title": "Volume Encryption %",
       "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",
+              "left": "encrypted",
               "operator": "/",
               "reducer": "sum",
-              "right": "Total"
+              "right": "total"
             },
             "mode": "binary",
             "reduce": {
-              "include": [
-                "Saml",
-                "Certificate"
-              ],
               "reducer": "sum"
-            }
+            },
+            "replaceFields": true
           }
         },
         {
           "id": "calculateField",
           "options": {
-            "alias": "Encrypted",
             "binary": {
-              "left": "Both / Total",
+              "left": "encrypted / total",
               "operator": "*",
               "reducer": "sum",
               "right": "100"
@@ -506,275 +193,47 @@
             "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": ""
-            }
+            "replaceFields": true
           }
         }
       ],
-      "type": "table"
-    },
-    {
-      "cacheTimeout": null,
-      "datasource": "${DS_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": 11
-      },
-      "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": false,
-          "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": "${DS_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": 11
-      },
-      "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": false,
-          "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": "${DS_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": 11
-      },
-      "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": false,
-          "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": "${DS_PROMETHEUS}",
-      "description": "",
+      "description": "This panel requires a cluster with ONTAP 9.10+ and the Harvest REST collector",
       "fieldConfig": {
         "defaults": {
           "color": {
             "mode": "thresholds"
           },
+          "decimals": 0,
           "mappings": [],
-          "noValue": "0",
           "thresholds": {
             "mode": "absolute",
             "steps": [
               {
-                "color": "dark-yellow",
+                "color": "green",
                 "value": null
               }
             ]
-          },
-          "unit": "none"
+          }
         },
         "overrides": []
       },
       "gridPos": {
         "h": 3,
-        "w": 6,
-        "x": 18,
-        "y": 11
+        "w": 5,
+        "x": 5,
+        "y": 1
       },
-      "id": 171,
-      "links": [],
+      "id": 208,
       "options": {
         "colorMode": "value",
-        "graphMode": "none",
-        "justifyMode": "center",
-        "orientation": "horizontal",
+        "graphMode": "area",
+        "justifyMode": "auto",
+        "orientation": "auto",
         "reduceOptions": {
           "calcs": [
             "lastNotNull"
@@ -785,38 +244,64 @@
         "text": {},
         "textMode": "auto"
       },
-      "pluginVersion": "8.1.2",
+      "pluginVersion": "8.3.4",
       "targets": [
         {
+          "datasource": "${DS_PROMETHEUS}",
           "exemplar": false,
-          "expr": "count(volume_labels{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\", svm=~\"$SVM\", isEncrypted=\"false\", isHardwareEncrypted=\"false\"}) or vector (0)",
-          "format": "time_series",
-          "hide": false,
+          "expr": "((count(volume_labels{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\", svm=~\"$SVM\", antiRansomwareState !=\"\" , antiRansomwareState=~\"enabled|dry_run\"}) or vector (0)) / (count(volume_labels{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\", svm=~\"$SVM\", antiRansomwareState !=\"\"}) or vector (1))) * 100",
           "instant": true,
           "interval": "",
-          "intervalFactor": 1,
           "legendFormat": "",
           "refId": "A"
         }
       ],
-      "timeFrom": null,
-      "timeShift": null,
-      "title": "Not Encrypted",
+      "title": "Volume Anti-ransomware Status %",
+      "transformations": [
+        {
+          "id": "calculateField",
+          "options": {
+            "binary": {
+              "left": "encrypted",
+              "operator": "/",
+              "reducer": "sum",
+              "right": "total"
+            },
+            "mode": "binary",
+            "reduce": {
+              "reducer": "sum"
+            },
+            "replaceFields": true
+          }
+        },
+        {
+          "id": "calculateField",
+          "options": {
+            "binary": {
+              "left": "encrypted / total",
+              "operator": "*",
+              "reducer": "sum",
+              "right": "100"
+            },
+            "mode": "binary",
+            "reduce": {
+              "reducer": "sum"
+            },
+            "replaceFields": true
+          }
+        }
+      ],
       "type": "stat"
     },
     {
       "datasource": "${DS_PROMETHEUS}",
+      "description": "",
       "fieldConfig": {
         "defaults": {
           "color": {
-            "fixedColor": "transparent",
-            "mode": "fixed"
-          },
-          "custom": {
-            "align": "left",
-            "displayMode": "auto",
-            "filterable": true
+            "mode": "thresholds"
           },
+          "decimals": 0,
           "mappings": [],
           "thresholds": {
             "mode": "absolute",
@@ -828,336 +313,216 @@
             ]
           }
         },
-        "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
-              }
-            ]
-          }
-        ]
+        "overrides": []
       },
       "gridPos": {
-        "h": 7,
-        "w": 24,
-        "x": 0,
-        "y": 14
+        "h": 3,
+        "w": 5,
+        "x": 10,
+        "y": 1
       },
-      "id": 155,
+      "id": 210,
       "options": {
-        "showHeader": true,
-        "sortBy": []
+        "colorMode": "value",
+        "graphMode": "area",
+        "justifyMode": "auto",
+        "orientation": "auto",
+        "reduceOptions": {
+          "calcs": [
+            "lastNotNull"
+          ],
+          "fields": "",
+          "values": false
+        },
+        "text": {},
+        "textMode": "auto"
       },
-      "pluginVersion": "8.1.2",
+      "pluginVersion": "8.3.4",
       "targets": [
         {
+          "datasource": "${DS_PROMETHEUS}",
           "exemplar": false,
-          "expr": "volume_labels{datacenter=~\"$Datacenter\", cluster=~\"$Cluster\", svm=~\"$SVM\"}",
-          "format": "table",
+          "expr": "((count(svm_labels{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\", anti_ransomware_state!=\"\", anti_ransomware_state=~\"enabled|dry_run\"}) or vector (0))\n/\n(count(svm_labels{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\", anti_ransomware_state!=\"\"}) or vector (1))) * 100",
           "instant": true,
           "interval": "",
           "legendFormat": "",
           "refId": "A"
         }
       ],
-      "title": "Volume Encryption",
+      "title": "SVM Anti-ransomware Status %",
       "transformations": [
         {
-          "id": "filterFieldsByName",
-          "options": {
-            "include": {
-              "names": [
-                "cluster",
-                "isEncrypted",
-                "isHardwareEncrypted",
-                "svm",
-                "volume",
-                "state"
-              ]
-            }
-          }
-        },
-        {
-          "id": "organize",
+          "id": "calculateField",
           "options": {
-            "excludeByName": {
-              "isEncrypted": false,
-              "isHardwareEncrypted": false
+            "binary": {
+              "left": "encrypted",
+              "operator": "/",
+              "reducer": "sum",
+              "right": "total"
             },
-            "indexByName": {
-              "cluster": 2,
-              "isEncrypted": 3,
-              "isHardwareEncrypted": 4,
-              "svm": 1,
-              "volume": 0
+            "mode": "binary",
+            "reduce": {
+              "reducer": "sum"
             },
-            "renameByName": {
-              "cluster": "Cluster",
-              "isEncrypted": "",
-              "isHardwareEncrypted": "",
-              "state": "State",
-              "svm": "SVM",
-              "volume": "Volume"
-            }
+            "replaceFields": true
           }
         },
         {
           "id": "calculateField",
           "options": {
-            "alias": "Encryption Type",
             "binary": {
-              "left": "isHardwareEncrypted",
-              "operator": "+",
+              "left": "encrypted / total",
+              "operator": "*",
               "reducer": "sum",
-              "right": "isEncrypted"
+              "right": "100"
             },
             "mode": "binary",
             "reduce": {
-              "include": [
-                "isEncrypted",
-                "isHardwareEncrypted"
-              ],
               "reducer": "sum"
             },
-            "replaceFields": false
-          }
-        },
-        {
-          "id": "organize",
-          "options": {
-            "excludeByName": {
-              "isEncrypted": true,
-              "isHardwareEncrypted": true
-            },
-            "indexByName": {},
-            "renameByName": {}
+            "replaceFields": true
           }
         }
       ],
-      "type": "table"
+      "type": "stat"
     },
     {
-      "collapsed": false,
       "datasource": "${DS_PROMETHEUS}",
+      "description": "",
       "gridPos": {
         "h": 1,
-        "w": 24,
-        "x": 0,
-        "y": 21
+        "w": 9,
+        "x": 15,
+        "y": 1
       },
-      "id": 16,
-      "panels": [],
-      "title": "Storage VM and Volume Anti-ransomware Status",
-      "type": "row"
+      "id": 201,
+      "options": {
+        "content": "",
+        "mode": "markdown"
+      },
+      "pluginVersion": "8.3.4",
+      "title": "Cluster Authentication Methods",
+      "type": "text"
+    },
+    {
+      "datasource": "${DS_PROMETHEUS}",
+      "description": "",
+      "gridPos": {
+        "h": 1,
+        "w": 6,
+        "x": 15,
+        "y": 2
+      },
+      "id": 211,
+      "options": {
+        "content": "",
+        "mode": "markdown"
+      },
+      "pluginVersion": "8.3.4",
+      "title": "Authentication Methods",
+      "type": "text"
+    },
+    {
+      "datasource": "${DS_PROMETHEUS}",
+      "description": "",
+      "gridPos": {
+        "h": 1,
+        "w": 3,
+        "x": 21,
+        "y": 2
+      },
+      "id": 202,
+      "options": {
+        "content": "",
+        "mode": "markdown"
+      },
+      "pluginVersion": "8.3.4",
+      "title": "Certificates",
+      "type": "text"
     },
     {
       "datasource": "${DS_PROMETHEUS}",
+      "description": "",
       "fieldConfig": {
         "defaults": {
           "color": {
-            "fixedColor": "green",
-            "mode": "fixed"
-          },
-          "custom": {
-            "align": "auto",
-            "displayMode": "gradient-gauge",
-            "filterable": true
+            "mode": "thresholds"
           },
-          "decimals": 0,
           "mappings": [],
-          "max": 100,
-          "min": 0,
+          "noValue": "0",
           "thresholds": {
             "mode": "absolute",
             "steps": [
               {
-                "color": "green",
+                "color": "blue",
                 "value": null
               }
             ]
-          }
+          },
+          "unit": "locale"
         },
-        "overrides": [
-          {
-            "matcher": {
-              "id": "byName",
-              "options": "ENABLED"
-            },
-            "properties": [
-              {
-                "id": "unit",
-                "value": "percent"
-              },
-              {
-                "id": "custom.displayMode",
-                "value": "gradient-gauge"
-              },
-              {
-                "id": "max",
-                "value": 100
-              }
-            ]
-          }
-        ]
+        "overrides": []
       },
       "gridPos": {
-        "h": 3,
-        "w": 18,
-        "x": 0,
-        "y": 22
+        "h": 5,
+        "w": 3,
+        "x": 15,
+        "y": 3
       },
-      "id": 179,
+      "id": 158,
+      "links": [],
       "options": {
-        "showHeader": true
+        "colorMode": "value",
+        "graphMode": "none",
+        "justifyMode": "auto",
+        "orientation": "vertical",
+        "reduceOptions": {
+          "calcs": [
+            "lastNotNull"
+          ],
+          "fields": "",
+          "values": false
+        },
+        "text": {},
+        "textMode": "auto"
       },
-      "pluginVersion": "8.1.2",
+      "pluginVersion": "8.3.4",
       "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",
+          "expr": "count(count by (datacenter, cluster)(security_account_samluser{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} > 0)) or vector (0)",
+          "format": "table",
           "hide": false,
           "instant": true,
           "interval": "",
-          "legendFormat": "Anti-ransomware Enabled",
+          "intervalFactor": 1,
+          "legendFormat": "",
           "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",
+      "title": "SAML",
       "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": "merge",
+          "options": {}
         },
         {
           "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
+              "Value #A": true
             },
             "indexByName": {},
             "renameByName": {
-              "ENABLED": "",
-              "PercentCompliant": "",
-              "Saml / Certificate": "perc",
-              "Time": ""
+              "cluster": "Cluster",
+              "security_certificate_labels{certificateExpiryStatus=\"expiring\", certificateIssuerType=\"self_signed\", cluster=\"F8080-32-25\", datacenter=\"DC-02\", instance=\"localhost:12984\", job=\"prometheus14\", name=\"F8080-32-25_1673D3449EB39B95\", scope=\"cluster\", serial_number=\"1673D3449EB39B95\", type=\"server\", uuid=\"d7bb8e95-9840-11eb-814a-00a0986abd71\"}": ""
             }
           }
         }
       ],
-      "type": "table"
+      "type": "stat"
     },
     {
-      "cacheTimeout": null,
       "datasource": "${DS_PROMETHEUS}",
       "description": "",
       "fieldConfig": {
@@ -1171,28 +536,28 @@
             "mode": "absolute",
             "steps": [
               {
-                "color": "dark-green",
+                "color": "blue",
                 "value": null
               }
             ]
           },
-          "unit": "short"
+          "unit": "locale"
         },
         "overrides": []
       },
       "gridPos": {
-        "h": 3,
+        "h": 5,
         "w": 3,
         "x": 18,
-        "y": 22
+        "y": 3
       },
-      "id": 173,
+      "id": 192,
       "links": [],
       "options": {
         "colorMode": "value",
         "graphMode": "none",
-        "justifyMode": "center",
-        "orientation": "horizontal",
+        "justifyMode": "auto",
+        "orientation": "vertical",
         "reduceOptions": {
           "calcs": [
             "lastNotNull"
@@ -1203,12 +568,12 @@
         "text": {},
         "textMode": "auto"
       },
-      "pluginVersion": "8.1.2",
+      "pluginVersion": "8.3.4",
       "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",
+          "expr": "(count(count by (datacenter, cluster) (security_account_activediruser{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} > 0)) + count(count by (datacenter, cluster) (security_account_ldapuser{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} > 0))) or vector (0)",
+          "format": "table",
           "hide": false,
           "instant": true,
           "interval": "",
@@ -1217,13 +582,29 @@
           "refId": "A"
         }
       ],
-      "timeFrom": null,
-      "timeShift": null,
-      "title": "Enabled",
+      "title": "AD/LDAP",
+      "transformations": [
+        {
+          "id": "merge",
+          "options": {}
+        },
+        {
+          "id": "organize",
+          "options": {
+            "excludeByName": {
+              "Value #A": true
+            },
+            "indexByName": {},
+            "renameByName": {
+              "cluster": "Cluster",
+              "security_certificate_labels{certificateExpiryStatus=\"expiring\", certificateIssuerType=\"self_signed\", cluster=\"F8080-32-25\", datacenter=\"DC-02\", instance=\"localhost:12984\", job=\"prometheus14\", name=\"F8080-32-25_1673D3449EB39B95\", scope=\"cluster\", serial_number=\"1673D3449EB39B95\", type=\"server\", uuid=\"d7bb8e95-9840-11eb-814a-00a0986abd71\"}": ""
+            }
+          }
+        }
+      ],
       "type": "stat"
     },
     {
-      "cacheTimeout": null,
       "datasource": "${DS_PROMETHEUS}",
       "description": "",
       "fieldConfig": {
@@ -1242,23 +623,23 @@
               }
             ]
           },
-          "unit": "short"
+          "unit": "locale"
         },
         "overrides": []
       },
       "gridPos": {
-        "h": 3,
+        "h": 5,
         "w": 3,
         "x": 21,
-        "y": 22
+        "y": 3
       },
-      "id": 182,
+      "id": 193,
       "links": [],
       "options": {
         "colorMode": "value",
         "graphMode": "none",
-        "justifyMode": "center",
-        "orientation": "horizontal",
+        "justifyMode": "auto",
+        "orientation": "vertical",
         "reduceOptions": {
           "calcs": [
             "lastNotNull"
@@ -1269,199 +650,139 @@
         "text": {},
         "textMode": "auto"
       },
-      "pluginVersion": "8.1.2",
+      "pluginVersion": "8.3.4",
       "targets": [
         {
+          "datasource": "${DS_PROMETHEUS}",
           "exemplar": false,
-          "expr": "count(svm_labels{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\", anti_ransomware_state!=\"\", anti_ransomware_state=~\"disabled\"}) or vector (0)",
+          "expr": "count(security_certificate_labels{datacenter=~\"$Datacenter\", cluster=~\"$Cluster\", certificateExpiryStatus=\"expiring\"})",
           "format": "time_series",
           "hide": false,
-          "instant": false,
+          "instant": true,
           "interval": "",
-          "intervalFactor": 1,
           "legendFormat": "",
-          "refId": "A"
+          "refId": "B"
+        }
+      ],
+      "title": "Expiring in < 60 days",
+      "transformations": [
+        {
+          "id": "merge",
+          "options": {}
+        },
+        {
+          "id": "organize",
+          "options": {
+            "excludeByName": {
+              "Value #A": true
+            },
+            "indexByName": {},
+            "renameByName": {
+              "cluster": "Cluster",
+              "security_certificate_labels{certificateExpiryStatus=\"expiring\", certificateIssuerType=\"self_signed\", cluster=\"F8080-32-25\", datacenter=\"DC-02\", instance=\"localhost:12984\", job=\"prometheus14\", name=\"F8080-32-25_1673D3449EB39B95\", scope=\"cluster\", serial_number=\"1673D3449EB39B95\", type=\"server\", uuid=\"d7bb8e95-9840-11eb-814a-00a0986abd71\"}": ""
+            }
+          }
         }
       ],
-      "timeFrom": null,
-      "timeShift": null,
-      "title": "Disabled",
       "type": "stat"
     },
     {
       "datasource": "${DS_PROMETHEUS}",
+      "description": "",
       "fieldConfig": {
         "defaults": {
           "color": {
-            "fixedColor": "transparent",
-            "mode": "fixed"
+            "mode": "palette-classic"
           },
           "custom": {
-            "align": "left",
-            "displayMode": "auto",
-            "filterable": true
+            "hideFrom": {
+              "legend": false,
+              "tooltip": false,
+              "viz": false
+            }
           },
+          "decimals": 0,
           "mappings": [],
-          "thresholds": {
-            "mode": "absolute",
-            "steps": [
-              {
-                "color": "green",
-                "value": null
-              }
-            ]
-          }
+          "unit": "locale"
         },
-        "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"
-                  }
-                ]
-              }
-            ]
-          }
-        ]
+        "overrides": []
       },
       "gridPos": {
-        "h": 7,
-        "w": 24,
+        "h": 13,
+        "w": 5,
         "x": 0,
-        "y": 25
+        "y": 4
       },
-      "id": 160,
+      "id": 204,
       "options": {
-        "showHeader": true,
-        "sortBy": []
+        "displayLabels": [
+          "value",
+          "percent"
+        ],
+        "legend": {
+          "displayMode": "table",
+          "placement": "bottom",
+          "values": [
+            "value"
+          ]
+        },
+        "pieType": "donut",
+        "reduceOptions": {
+          "calcs": [
+            "last"
+          ],
+          "fields": "",
+          "values": false
+        },
+        "tooltip": {
+          "mode": "single"
+        }
       },
       "pluginVersion": "8.1.2",
       "targets": [
         {
+          "datasource": "${DS_PROMETHEUS}",
           "exemplar": false,
-          "expr": "svm_labels{datacenter=~\"$Datacenter\", cluster=~\"$Cluster\", svm=~\"$SVM\"}",
-          "format": "table",
+          "expr": "count(volume_labels{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\", svm=~\"$SVM\", isEncrypted=\"true\"}) or vector (0)",
           "instant": true,
           "interval": "",
-          "legendFormat": "",
+          "legendFormat": "Software",
           "refId": "A"
         },
         {
+          "datasource": "${DS_PROMETHEUS}",
           "exemplar": false,
-          "expr": "count by (svm)(volume_labels{datacenter=~\"$Datacenter\", cluster=~\"$Cluster\", svm=~\"$SVM\"})",
-          "format": "table",
+          "expr": "count(volume_labels{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\", svm=~\"$SVM\", isHardwareEncrypted=\"true\"}) or vector (0)",
           "hide": false,
           "instant": true,
           "interval": "",
-          "legendFormat": "",
+          "legendFormat": "Hardware",
           "refId": "B"
-        }
-      ],
-      "title": "Storage VMs Anti-ransomware Status",
-      "transformations": [
-        {
-          "id": "filterFieldsByName",
-          "options": {
-            "include": {
-              "names": [
-                "anti_ransomware_state",
-                "cluster",
-                "svm",
-                "Value #B"
-              ]
-            }
-          }
         },
         {
-          "id": "merge",
-          "options": {}
+          "datasource": "${DS_PROMETHEUS}",
+          "exemplar": false,
+          "expr": "count(volume_labels{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\", svm=~\"$SVM\", isEncrypted=\"true\", isHardwareEncrypted=\"true\"}) or vector (0)",
+          "hide": false,
+          "instant": true,
+          "interval": "",
+          "legendFormat": "Hardware and Software",
+          "refId": "D"
         },
         {
-          "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"
-            }
-          }
+          "datasource": "${DS_PROMETHEUS}",
+          "exemplar": false,
+          "expr": "count(volume_labels{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\", svm=~\"$SVM\", isEncrypted=\"false\", isHardwareEncrypted=\"false\"}) or vector (0)",
+          "hide": false,
+          "instant": true,
+          "interval": "",
+          "legendFormat": "Not Encrypted",
+          "refId": "E"
         }
       ],
-      "type": "table"
+      "title": "Volume Encryption",
+      "transformations": [],
+      "type": "piechart"
     },
     {
       "datasource": "${DS_PROMETHEUS}",
@@ -1469,221 +790,176 @@
       "fieldConfig": {
         "defaults": {
           "color": {
-            "fixedColor": "green",
-            "mode": "fixed"
+            "mode": "palette-classic"
           },
           "custom": {
-            "align": "auto",
-            "displayMode": "gradient-gauge",
-            "filterable": true,
-            "minWidth": 50
+            "hideFrom": {
+              "legend": false,
+              "tooltip": false,
+              "viz": false
+            }
           },
           "decimals": 0,
           "mappings": [],
-          "max": 100,
-          "min": 0,
-          "thresholds": {
-            "mode": "absolute",
-            "steps": [
-              {
-                "color": "green",
-                "value": null
-              }
-            ]
-          }
+          "unit": "locale"
         },
-        "overrides": [
-          {
-            "matcher": {
-              "id": "byName",
-              "options": "ENABLED"
-            },
-            "properties": [
-              {
-                "id": "unit",
-                "value": "percent"
-              },
-              {
-                "id": "custom.displayMode",
-                "value": "gradient-gauge"
-              },
-              {
-                "id": "max",
-                "value": 100
-              }
-            ]
-          }
-        ]
+        "overrides": []
       },
       "gridPos": {
-        "h": 3,
-        "w": 24,
-        "x": 0,
-        "y": 32
+        "h": 13,
+        "w": 5,
+        "x": 5,
+        "y": 4
       },
-      "id": 180,
+      "id": 205,
       "options": {
-        "showHeader": true
+        "displayLabels": [
+          "value",
+          "percent"
+        ],
+        "legend": {
+          "displayMode": "table",
+          "placement": "bottom",
+          "values": [
+            "value"
+          ]
+        },
+        "pieType": "donut",
+        "reduceOptions": {
+          "calcs": [
+            "last"
+          ],
+          "fields": "",
+          "values": false
+        },
+        "tooltip": {
+          "mode": "single"
+        }
       },
       "pluginVersion": "8.1.2",
       "targets": [
         {
+          "datasource": "${DS_PROMETHEUS}",
           "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,
+          "expr": "count(volume_labels{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\", svm=~\"$SVM\", antiRansomwareState !=\"\" , antiRansomwareState=\"enabled\"}) or vector (0)",
           "instant": true,
           "interval": "",
-          "legendFormat": "antiRansomwareEnabled",
+          "legendFormat": "Enabled in active mode",
           "refId": "A"
         },
         {
+          "datasource": "${DS_PROMETHEUS}",
           "exemplar": false,
-          "expr": "count(volume_labels{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\", svm=~\"$SVM\", antiRansomwareState !=\"\"}) or vector (1)",
-          "format": "time_series",
+          "expr": "count(volume_labels{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\", svm=~\"$SVM\", antiRansomwareState !=\"\" , antiRansomwareState=\"dry_run\"}) or vector (0)",
           "hide": false,
           "instant": true,
           "interval": "",
-          "legendFormat": "antiRansomwareSupported",
+          "legendFormat": "Enabled in learning mode",
           "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"
-            }
-          }
+          "datasource": "${DS_PROMETHEUS}",
+          "exemplar": false,
+          "expr": "count(volume_labels{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\", svm=~\"$SVM\", antiRansomwareState !=\"\" , antiRansomwareState=~\".*paused.*\"}) or vector (0)",
+          "hide": false,
+          "instant": true,
+          "interval": "",
+          "legendFormat": "Paused",
+          "refId": "D"
         },
         {
-          "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": ""
-            }
-          }
+          "datasource": "${DS_PROMETHEUS}",
+          "exemplar": false,
+          "expr": "count(volume_labels{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\", svm=~\"$SVM\", antiRansomwareState !=\"\" , antiRansomwareState=~\"disabled\"}) or vector (0)",
+          "hide": false,
+          "instant": true,
+          "interval": "",
+          "legendFormat": "Disabled",
+          "refId": "E"
         }
       ],
-      "type": "table"
+      "title": "Volume Anti-ransomware Status",
+      "transformations": [],
+      "type": "piechart"
     },
     {
-      "cacheTimeout": null,
       "datasource": "${DS_PROMETHEUS}",
       "description": "",
       "fieldConfig": {
         "defaults": {
           "color": {
-            "mode": "thresholds"
+            "mode": "palette-classic"
           },
-          "mappings": [],
-          "noValue": "0",
-          "thresholds": {
-            "mode": "absolute",
-            "steps": [
-              {
-                "color": "dark-green",
-                "value": null
-              }
-            ]
+          "custom": {
+            "hideFrom": {
+              "legend": false,
+              "tooltip": false,
+              "viz": false
+            }
           },
-          "unit": "short"
+          "decimals": 0,
+          "mappings": [],
+          "unit": "locale"
         },
         "overrides": []
       },
       "gridPos": {
-        "h": 3,
-        "w": 6,
-        "x": 0,
-        "y": 35
+        "h": 13,
+        "w": 5,
+        "x": 10,
+        "y": 4
       },
-      "id": 172,
-      "links": [],
+      "id": 209,
       "options": {
-        "colorMode": "value",
-        "graphMode": "none",
-        "justifyMode": "center",
-        "orientation": "horizontal",
+        "displayLabels": [
+          "value",
+          "percent"
+        ],
+        "legend": {
+          "displayMode": "table",
+          "placement": "bottom",
+          "values": [
+            "value"
+          ]
+        },
+        "pieType": "donut",
         "reduceOptions": {
           "calcs": [
-            "lastNotNull"
+            "last"
           ],
           "fields": "",
           "values": false
         },
-        "text": {},
-        "textMode": "auto"
+        "tooltip": {
+          "mode": "single"
+        }
       },
       "pluginVersion": "8.1.2",
       "targets": [
         {
+          "datasource": "${DS_PROMETHEUS}",
           "exemplar": false,
-          "expr": "count(volume_labels{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\", svm=~\"$SVM\", antiRansomwareState !=\"\" , antiRansomwareState=\"enabled\"}) or vector (0)",
-          "format": "time_series",
-          "hide": false,
+          "expr": "count(svm_labels{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\", anti_ransomware_state!=\"\", anti_ransomware_state=~\"enabled|dry_run\"}) or vector (0)",
           "instant": true,
           "interval": "",
-          "intervalFactor": 1,
-          "legendFormat": "",
+          "legendFormat": "Enabled",
           "refId": "A"
+        },
+        {
+          "datasource": "${DS_PROMETHEUS}",
+          "exemplar": false,
+          "expr": "count(svm_labels{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\", anti_ransomware_state!=\"\", anti_ransomware_state=~\"disabled\"}) or vector (0)",
+          "hide": false,
+          "interval": "",
+          "legendFormat": "Disabled",
+          "refId": "B"
         }
       ],
-      "timeFrom": null,
-      "timeShift": null,
-      "title": "Enabled in active mode",
-      "type": "stat"
+      "title": "SVM Anti-ransomware Status",
+      "transformations": [],
+      "type": "piechart"
     },
     {
-      "cacheTimeout": null,
       "datasource": "${DS_PROMETHEUS}",
       "description": "",
       "fieldConfig": {
@@ -1697,28 +973,28 @@
             "mode": "absolute",
             "steps": [
               {
-                "color": "semi-dark-green",
+                "color": "blue",
                 "value": null
               }
             ]
           },
-          "unit": "short"
+          "unit": "locale"
         },
         "overrides": []
       },
       "gridPos": {
-        "h": 3,
-        "w": 6,
-        "x": 6,
-        "y": 35
+        "h": 5,
+        "w": 3,
+        "x": 15,
+        "y": 8
       },
-      "id": 181,
+      "id": 190,
       "links": [],
       "options": {
         "colorMode": "value",
         "graphMode": "none",
-        "justifyMode": "center",
-        "orientation": "horizontal",
+        "justifyMode": "auto",
+        "orientation": "vertical",
         "reduceOptions": {
           "calcs": [
             "lastNotNull"
@@ -1729,12 +1005,12 @@
         "text": {},
         "textMode": "auto"
       },
-      "pluginVersion": "8.1.2",
+      "pluginVersion": "8.3.4",
       "targets": [
         {
           "exemplar": false,
-          "expr": "count(volume_labels{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\", svm=~\"$SVM\", antiRansomwareState !=\"\" , antiRansomwareState=\"dry_run\"}) or vector (0)",
-          "format": "time_series",
+          "expr": "count(count by (datacenter, cluster) (security_account_certificateuser{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} > 0)) or vector (0)",
+          "format": "table",
           "hide": false,
           "instant": true,
           "interval": "",
@@ -1743,13 +1019,29 @@
           "refId": "A"
         }
       ],
-      "timeFrom": null,
-      "timeShift": null,
-      "title": "Enabled in learning mode",
+      "title": "Certificate",
+      "transformations": [
+        {
+          "id": "merge",
+          "options": {}
+        },
+        {
+          "id": "organize",
+          "options": {
+            "excludeByName": {
+              "Value #A": true
+            },
+            "indexByName": {},
+            "renameByName": {
+              "cluster": "Cluster",
+              "security_certificate_labels{certificateExpiryStatus=\"expiring\", certificateIssuerType=\"self_signed\", cluster=\"F8080-32-25\", datacenter=\"DC-02\", instance=\"localhost:12984\", job=\"prometheus14\", name=\"F8080-32-25_1673D3449EB39B95\", scope=\"cluster\", serial_number=\"1673D3449EB39B95\", type=\"server\", uuid=\"d7bb8e95-9840-11eb-814a-00a0986abd71\"}": ""
+            }
+          }
+        }
+      ],
       "type": "stat"
     },
     {
-      "cacheTimeout": null,
       "datasource": "${DS_PROMETHEUS}",
       "description": "",
       "fieldConfig": {
@@ -1763,28 +1055,28 @@
             "mode": "absolute",
             "steps": [
               {
-                "color": "light-green",
+                "color": "blue",
                 "value": null
               }
             ]
           },
-          "unit": "short"
+          "unit": "locale"
         },
         "overrides": []
       },
       "gridPos": {
-        "h": 3,
-        "w": 6,
-        "x": 12,
-        "y": 35
+        "h": 5,
+        "w": 3,
+        "x": 18,
+        "y": 8
       },
-      "id": 175,
+      "id": 194,
       "links": [],
       "options": {
         "colorMode": "value",
         "graphMode": "none",
-        "justifyMode": "center",
-        "orientation": "horizontal",
+        "justifyMode": "auto",
+        "orientation": "vertical",
         "reduceOptions": {
           "calcs": [
             "lastNotNull"
@@ -1795,27 +1087,43 @@
         "text": {},
         "textMode": "auto"
       },
-      "pluginVersion": "8.1.2",
+      "pluginVersion": "8.3.4",
       "targets": [
         {
           "exemplar": false,
-          "expr": "count(volume_labels{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\", svm=~\"$SVM\", antiRansomwareState !=\"\" , antiRansomwareState=~\".*paused.*\"}) or vector (0)",
-          "format": "time_series",
+          "expr": "count(count by (datacenter, cluster) (security_account_localuser{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"} > 0)) or vector (0)",
+          "format": "table",
           "hide": false,
-          "instant": false,
+          "instant": true,
           "interval": "",
           "intervalFactor": 1,
           "legendFormat": "",
           "refId": "A"
         }
       ],
-      "timeFrom": null,
-      "timeShift": null,
-      "title": "Paused",
+      "title": "Local",
+      "transformations": [
+        {
+          "id": "merge",
+          "options": {}
+        },
+        {
+          "id": "organize",
+          "options": {
+            "excludeByName": {
+              "Value #A": true
+            },
+            "indexByName": {},
+            "renameByName": {
+              "cluster": "Cluster",
+              "security_certificate_labels{certificateExpiryStatus=\"expiring\", certificateIssuerType=\"self_signed\", cluster=\"F8080-32-25\", datacenter=\"DC-02\", instance=\"localhost:12984\", job=\"prometheus14\", name=\"F8080-32-25_1673D3449EB39B95\", scope=\"cluster\", serial_number=\"1673D3449EB39B95\", type=\"server\", uuid=\"d7bb8e95-9840-11eb-814a-00a0986abd71\"}": ""
+            }
+          }
+        }
+      ],
       "type": "stat"
     },
     {
-      "cacheTimeout": null,
       "datasource": "${DS_PROMETHEUS}",
       "description": "",
       "fieldConfig": {
@@ -1829,28 +1137,28 @@
             "mode": "absolute",
             "steps": [
               {
-                "color": "dark-yellow",
+                "color": "dark-red",
                 "value": null
               }
             ]
           },
-          "unit": "short"
+          "unit": "locale"
         },
         "overrides": []
       },
       "gridPos": {
-        "h": 3,
-        "w": 6,
-        "x": 18,
-        "y": 35
+        "h": 5,
+        "w": 3,
+        "x": 21,
+        "y": 8
       },
-      "id": 176,
+      "id": 191,
       "links": [],
       "options": {
         "colorMode": "value",
         "graphMode": "none",
-        "justifyMode": "center",
-        "orientation": "horizontal",
+        "justifyMode": "auto",
+        "orientation": "vertical",
         "reduceOptions": {
           "calcs": [
             "lastNotNull"
@@ -1861,186 +1169,590 @@
         "text": {},
         "textMode": "auto"
       },
-      "pluginVersion": "8.1.2",
+      "pluginVersion": "8.3.4",
       "targets": [
         {
           "exemplar": false,
-          "expr": "count(volume_labels{datacenter=~\"$Datacenter\",cluster=~\"$Cluster\", svm=~\"$SVM\", antiRansomwareState !=\"\" , antiRansomwareState=~\"disabled\"}) or vector (0)",
-          "format": "time_series",
+          "expr": "count(security_certificate_labels{datacenter=~\"$Datacenter\", cluster=~\"$Cluster\", certificateExpiryStatus=\"expired\"})",
+          "format": "table",
           "hide": false,
-          "instant": false,
+          "instant": true,
           "interval": "",
           "intervalFactor": 1,
           "legendFormat": "",
           "refId": "A"
         }
       ],
-      "timeFrom": null,
-      "timeShift": null,
-      "title": "Disabled",
+      "title": "Expired",
+      "transformations": [
+        {
+          "id": "merge",
+          "options": {}
+        },
+        {
+          "id": "organize",
+          "options": {
+            "excludeByName": {
+              "Value #A": true
+            },
+            "indexByName": {},
+            "renameByName": {
+              "cluster": "Cluster",
+              "security_certificate_labels{certificateExpiryStatus=\"expiring\", certificateIssuerType=\"self_signed\", cluster=\"F8080-32-25\", datacenter=\"DC-02\", instance=\"localhost:12984\", job=\"prometheus14\", name=\"F8080-32-25_1673D3449EB39B95\", scope=\"cluster\", serial_number=\"1673D3449EB39B95\", type=\"server\", uuid=\"d7bb8e95-9840-11eb-814a-00a0986abd71\"}": ""
+            }
+          }
+        }
+      ],
       "type": "stat"
     },
     {
+      "collapsed": true,
       "datasource": "${DS_PROMETHEUS}",
-      "description": "This panel requires a cluster with ONTAP 9.10+ and the Harvest REST collector",
-      "fieldConfig": {
-        "defaults": {
-          "color": {
-            "fixedColor": "transparent",
-            "mode": "fixed"
-          },
-          "custom": {
-            "align": "left",
-            "displayMode": "auto",
-            "filterable": true
-          },
-          "mappings": [],
-          "thresholds": {
-            "mode": "absolute",
-            "steps": [
+      "gridPos": {
+        "h": 1,
+        "w": 24,
+        "x": 0,
+        "y": 17
+      },
+      "id": 12,
+      "panels": [
+        {
+          "datasource": "${DS_PROMETHEUS}",
+          "fieldConfig": {
+            "defaults": {
+              "color": {
+                "fixedColor": "transparent",
+                "mode": "fixed"
+              },
+              "custom": {
+                "align": "left",
+                "displayMode": "auto",
+                "filterable": true
+              },
+              "mappings": [],
+              "thresholds": {
+                "mode": "absolute",
+                "steps": [
+                  {
+                    "color": "green",
+                    "value": null
+                  }
+                ]
+              }
+            },
+            "overrides": [
               {
-                "color": "green",
-                "value": null
+                "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"
+                      }
+                    ]
+                  }
+                ]
               }
             ]
-          }
-        },
-        "overrides": [
-          {
-            "matcher": {
-              "id": "byName",
-              "options": "Anti-ransomware Status"
+          },
+          "gridPos": {
+            "h": 7,
+            "w": 24,
+            "x": 0,
+            "y": 10
+          },
+          "id": 155,
+          "options": {
+            "showHeader": true,
+            "sortBy": []
+          },
+          "pluginVersion": "8.1.8",
+          "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": [
+                    "aggr",
+                    "isEncrypted",
+                    "isHardwareEncrypted",
+                    "node",
+                    "state",
+                    "svm",
+                    "volume"
+                  ]
+                }
+              }
             },
-            "properties": [
-              {
-                "id": "custom.filterable",
-                "value": true
+            {
+              "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": {
+                  "Encryption Type": 4,
+                  "aggr": 2,
+                  "isEncrypted": 6,
+                  "isHardwareEncrypted": 7,
+                  "node": 3,
+                  "state": 5,
+                  "svm": 1,
+                  "volume": 0
+                },
+                "renameByName": {
+                  "aggr": "Aggregate",
+                  "cluster": "Cluster",
+                  "isEncrypted": "",
+                  "isHardwareEncrypted": "",
+                  "node": "Node",
+                  "state": "State",
+                  "svm": "SVM",
+                  "volume": "Volume"
+                }
+              }
+            }
+          ],
+          "type": "table"
+        }
+      ],
+      "title": "Volume Encryption",
+      "type": "row"
+    },
+    {
+      "collapsed": true,
+      "datasource": "${DS_PROMETHEUS}",
+      "gridPos": {
+        "h": 1,
+        "w": 24,
+        "x": 0,
+        "y": 18
+      },
+      "id": 16,
+      "panels": [
+        {
+          "datasource": "${DS_PROMETHEUS}",
+          "fieldConfig": {
+            "defaults": {
+              "color": {
+                "fixedColor": "transparent",
+                "mode": "fixed"
+              },
+              "custom": {
+                "align": "left",
+                "displayMode": "auto",
+                "filterable": true
               },
+              "mappings": [],
+              "thresholds": {
+                "mode": "absolute",
+                "steps": [
+                  {
+                    "color": "green",
+                    "value": null
+                  }
+                ]
+              }
+            },
+            "overrides": [
               {
-                "id": "mappings",
-                "value": [
+                "matcher": {
+                  "id": "byName",
+                  "options": "Anti-ransomware Status"
+                },
+                "properties": [
                   {
-                    "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)"
+                    "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"
                       },
-                      "enabled": {
-                        "index": 0,
-                        "text": "Enabled (Active mode)"
+                      {
+                        "options": {
+                          "match": "empty",
+                          "result": {
+                            "index": 3,
+                            "text": "Disabled"
+                          }
+                        },
+                        "type": "special"
                       }
-                    },
-                    "type": "value"
-                  },
+                    ]
+                  }
+                ]
+              },
+              {
+                "matcher": {
+                  "id": "byName",
+                  "options": "Volume Count"
+                },
+                "properties": [
                   {
-                    "options": {
-                      "match": "empty",
-                      "result": {
-                        "index": 6,
-                        "text": "Disabled"
+                    "id": "mappings",
+                    "value": [
+                      {
+                        "options": {
+                          "match": "null",
+                          "result": {
+                            "index": 0,
+                            "text": "0"
+                          }
+                        },
+                        "type": "special"
                       }
-                    },
-                    "type": "special"
+                    ]
                   }
                 ]
               }
             ]
           },
-          {
-            "matcher": {
-              "id": "byName",
-              "options": "SVM"
+          "gridPos": {
+            "h": 7,
+            "w": 24,
+            "x": 0,
+            "y": 11
+          },
+          "id": 160,
+          "options": {
+            "showHeader": true,
+            "sortBy": []
+          },
+          "pluginVersion": "8.1.8",
+          "targets": [
+            {
+              "exemplar": false,
+              "expr": "svm_labels{datacenter=~\"$Datacenter\", cluster=~\"$Cluster\", svm=~\"$SVM\"}",
+              "format": "table",
+              "instant": true,
+              "interval": "",
+              "legendFormat": "",
+              "refId": "A"
             },
-            "properties": [
-              {
-                "id": "custom.width",
-                "value": null
+            {
+              "exemplar": false,
+              "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",
+                    "state",
+                    "svm",
+                    "Value #B",
+                    "type"
+                  ]
+                }
               }
-            ]
-          }
-        ]
-      },
+            },
+            {
+              "id": "merge",
+              "options": {}
+            },
+            {
+              "id": "organize",
+              "options": {
+                "excludeByName": {
+                  "isEncrypted": false,
+                  "isHardwareEncrypted": false
+                },
+                "indexByName": {
+                  "Value #B": 3,
+                  "anti_ransomware_state": 2,
+                  "cluster": 1,
+                  "state": 5,
+                  "svm": 0,
+                  "type": 4
+                },
+                "renameByName": {
+                  "Value #B": "Volume Count",
+                  "antiRansomwareState": "Anti-ransomware Status",
+                  "anti_ransomware_state": "Anti-ransomware Status",
+                  "cluster": "Cluster",
+                  "isEncrypted": "",
+                  "isHardwareEncrypted": "",
+                  "state": "State",
+                  "svm": "SVM",
+                  "type": "Type",
+                  "volume": "Volume"
+                }
+              }
+            }
+          ],
+          "type": "table"
+        }
+      ],
+      "title": "Storage VM Anti-ransomware Status",
+      "type": "row"
+    },
+    {
+      "collapsed": true,
+      "datasource": null,
       "gridPos": {
-        "h": 7,
+        "h": 1,
         "w": 24,
         "x": 0,
-        "y": 38
-      },
-      "id": 183,
-      "options": {
-        "showHeader": true,
-        "sortBy": []
+        "y": 19
       },
-      "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": 196,
+      "panels": [
         {
-          "id": "filterFieldsByName",
+          "datasource": "${DS_PROMETHEUS}",
+          "description": "This panel requires a cluster with ONTAP 9.10+ and the Harvest REST collector",
+          "fieldConfig": {
+            "defaults": {
+              "color": {
+                "fixedColor": "transparent",
+                "mode": "fixed"
+              },
+              "custom": {
+                "align": "left",
+                "displayMode": "auto",
+                "filterable": true
+              },
+              "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"
+                      }
+                    ]
+                  }
+                ]
+              }
+            ]
+          },
+          "gridPos": {
+            "h": 7,
+            "w": 24,
+            "x": 0,
+            "y": 21
+          },
+          "id": 183,
           "options": {
-            "include": {
-              "names": [
-                "cluster",
-                "svm",
-                "volume",
-                "antiRansomwareState"
-              ]
+            "showHeader": true,
+            "sortBy": []
+          },
+          "pluginVersion": "8.1.8",
+          "targets": [
+            {
+              "exemplar": false,
+              "expr": "volume_labels{datacenter=~\"$Datacenter\", cluster=~\"$Cluster\", svm=~\"$SVM\"}",
+              "format": "table",
+              "instant": true,
+              "interval": "",
+              "legendFormat": "",
+              "refId": "A"
             }
-          }
-        },
-        {
-          "id": "organize",
-          "options": {
-            "excludeByName": {
-              "isEncrypted": false,
-              "isHardwareEncrypted": false
-            },
-            "indexByName": {
-              "cluster": 2,
-              "isEncrypted": 3,
-              "isHardwareEncrypted": 4,
-              "svm": 1,
-              "volume": 0
+          ],
+          "title": "Volume Anti-ransomware Status",
+          "transformations": [
+            {
+              "id": "filterFieldsByName",
+              "options": {
+                "include": {
+                  "names": [
+                    "aggr",
+                    "antiRansomwareState",
+                    "node",
+                    "state",
+                    "svm",
+                    "volume"
+                  ]
+                }
+              }
             },
-            "renameByName": {
-              "antiRansomwareState": "Anti-ransomware Status",
-              "cluster": "Cluster",
-              "isEncrypted": "",
-              "isHardwareEncrypted": "",
-              "state": "State",
-              "svm": "SVM",
-              "volume": "Volume"
+            {
+              "id": "organize",
+              "options": {
+                "excludeByName": {
+                  "isEncrypted": false,
+                  "isHardwareEncrypted": false
+                },
+                "indexByName": {
+                  "aggr": 2,
+                  "antiRansomwareState": 4,
+                  "node": 3,
+                  "state": 5,
+                  "svm": 1,
+                  "volume": 0
+                },
+                "renameByName": {
+                  "aggr": "Aggregate",
+                  "antiRansomwareState": "Anti-ransomware Status",
+                  "cluster": "Cluster",
+                  "isEncrypted": "",
+                  "isHardwareEncrypted": "",
+                  "node": "Node",
+                  "state": "State",
+                  "svm": "SVM",
+                  "volume": "Volume"
+                }
+              }
             }
-          }
+          ],
+          "type": "table"
         }
       ],
-      "type": "table"
+      "title": "Volume Anti-ransomware Status",
+      "type": "row"
     }
   ],
   "refresh": "",
@@ -2076,7 +1788,17 @@
       },
       {
         "allValue": null,
-        "current": {},
+        "current": {
+          "selected": false,
+          "text": [
+            "rest",
+            "zapi"
+          ],
+          "value": [
+            "rest",
+            "zapi"
+          ]
+        },
         "datasource": "${DS_PROMETHEUS}",
         "definition": "label_values(svm_labels{system_type!=\"7mode\"},datacenter)",
         "description": null,
@@ -2102,7 +1824,15 @@
       },
       {
         "allValue": null,
-        "current": {},
+        "current": {
+          "selected": false,
+          "text": [
+            "All"
+          ],
+          "value": [
+            "$__all"
+          ]
+        },
         "datasource": "${DS_PROMETHEUS}",
         "definition": "label_values(svm_labels{system_type!=\"7mode\",datacenter=~\"$Datacenter\"},cluster)",
         "description": null,
@@ -2128,7 +1858,15 @@
       },
       {
         "allValue": null,
-        "current": {},
+        "current": {
+          "selected": false,
+          "text": [
+            "All"
+          ],
+          "value": [
+            "$__all"
+          ]
+        },
         "datasource": "${DS_PROMETHEUS}",
         "definition": "label_values(svm_labels{system_type!=\"7mode\",datacenter=~\"$Datacenter\",cluster=~\"$Cluster\"},svm)",
         "description": null,
@@ -2171,5 +1909,5 @@
   "timezone": "",
   "title": "ONTAP: Security",
   "uid": "",
-  "version": 2
+  "version": 3
 }


Test patch:
diff --git a/cmd/collectors/ems/ems_test.go b/cmd/collectors/ems/ems_test.go
index f0f1a3db..d32aad6e 100644
--- a/cmd/collectors/ems/ems_test.go
+++ b/cmd/collectors/ems/ems_test.go
@@ -17,6 +17,9 @@ import (
 // Bookend EMS testing: Simulated bookend issuing ems "wafl.vvol.offline" and ems "hm.alert.raised" with alert_id value as "RaidLeftBehindAggrAlert"
 var issuingEmsNames = []string{"wafl.vvol.offline", "hm.alert.raised"}
 
+// Default labels per ems is 5, "hm.alert.raised" ems has 10 labels and "wafl.vvol.offline" has 4 labels, total instance labels would be 24
+const expectedInstanceLabelCount = 24
+
 // Auto resolve EMS testing: Simulated bookend issuing ems "LUN.offline" and ems "monitor.fan.critical"
 var autoresolveEmsNames = []string{"LUN.offline", "monitor.fan.critical"}
 
@@ -80,8 +83,8 @@ func (e *Ems) testBookendIssuingEms(t *testing.T, path string) {
 
 	results := collectors.JSONToGson(path, true)
 	// Polling ems collector to handle results
-	if _, emsCount, _ := e.HandleResults(results, e.emsProp); emsCount == 0 {
-		t.Fatal("Failed to fetch data")
+	if _, emsCount, _ := e.HandleResults(results, e.emsProp); emsCount != expectedInstanceLabelCount {
+		t.Fatalf("Instance labels count mismatch detected. Expected labels: %d actual labels: %d", expectedInstanceLabelCount, emsCount)
 	}
 
 	// Check and evaluate ems events
diff --git a/cmd/poller/poller_test.go b/cmd/poller/poller_test.go
index e16632ca..d4a620af 100644
--- a/cmd/poller/poller_test.go
+++ b/cmd/poller/poller_test.go
@@ -144,10 +144,10 @@ func TestCollectorUpgrade(t *testing.T) {
 	tests := []test{
 		{name: "9.11 use ZAPI", clusterVersion: "9.11.1", askFor: "Zapi", wantCollector: "Zapi"},
 		{name: "9.11 use REST", clusterVersion: "9.11.1", askFor: "Rest", wantCollector: "Rest"},
-		{name: "9.12 upgrade", clusterVersion: "9.12.1", askFor: "Zapi", wantCollector: "Rest"},
+		{name: "9.12 upgrade", clusterVersion: "9.12.1", askFor: "Zapi", wantCollector: "Zapi"},
 		{name: "9.12 w/ envar", clusterVersion: "9.12.1", askFor: "Zapi", wantCollector: "Zapi", setEnvVar: true},
 		{name: "9.12 REST", clusterVersion: "9.12.3", askFor: "Rest", wantCollector: "Rest", setEnvVar: true},
-		{name: "9.13 RestPerf", clusterVersion: "9.13.1", askFor: "ZapiPerf", wantCollector: "RestPerf"},
+		{name: "9.13 RestPerf", clusterVersion: "9.13.1", askFor: "ZapiPerf", wantCollector: "ZapiPerf"},
 		{name: "9.13 REST w/ envar", clusterVersion: "9.13.1", askFor: "Rest", wantCollector: "Rest", setEnvVar: true},
 		{name: "9.13 REST w/ envar", clusterVersion: "9.13.1", askFor: "Zapi", wantCollector: "Zapi", setEnvVar: true},
 		{name: "9.13 REST w/ envar", clusterVersion: "9.13.1", askFor: "Rest", wantCollector: "Rest", setEnvVar: true,
@@ -168,7 +168,7 @@ func TestCollectorUpgrade(t *testing.T) {
 			if tt.check == nil {
 				tt.check = zapisExist
 			}
-			newCollector := poller.negotiateAPI(collector, tt.clusterVersion, tt.check)
+			newCollector := poller.negotiateAPI(collector, tt.check)
 			if newCollector.Name != tt.wantCollector {
 				t.Errorf("got = [%s] want [%s]", newCollector.Name, tt.wantCollector)
 			}
diff --git a/cmd/tools/grafana/dashboard_test.go b/cmd/tools/grafana/dashboard_test.go
index 64b8cdd0..7c2390c3 100644
--- a/cmd/tools/grafana/dashboard_test.go
+++ b/cmd/tools/grafana/dashboard_test.go
@@ -754,7 +754,6 @@ func checkTopKRange(t *testing.T, path string, data []byte) {
 func TestOnlyHighlightsExpanded(t *testing.T) {
 	exceptions := map[string]int{
 		"cmode/shelf.json":            2,
-		"cmode/security.json":         3,
 		"cmode/fsa.json":              2,
 		"cmode/workload.json":         2,
 		"cmode/smb.json":              2,