docs: @Override
     protected void executeRuntimeStep(OperationContext context, ModelNode operation) {
        final PathAddress address = PathAddress.pathAddress(operation.require(OP_ADDR));
        final String cacheContainerName = address.getElement(address.size() - 2).getValue();
        final String cacheName = address.getLastElement().getValue();
        final String attrName = operation.require(NAME).asString();
        final ServiceController<?> controller = context.getServiceRegistry(false).getService(
              CacheServiceName.CACHE.getServiceName(cacheContainerName, cacheName));
        Cache<?, ?> cache = (Cache<?, ?>) controller.getValue();
        ClusteredCacheMetrics metric = ClusteredCacheMetrics.getStat(attrName);
        ModelNode result = new ModelNode();
  
        if (metric == null) {
           context.getFailureDescription().set(String.format("Unknown metric %s", attrName));
        } else if (cache == null) {
           context.getFailureDescription().set(String.format("Unavailable cache %s", attrName));
        } else {
           AdvancedCache<?, ?> aCache = cache.getAdvancedCache();
           ClusterCacheStats clusterCacheStats = aCache.getComponentRegistry().getComponent(ClusterCacheStats.class);
           switch (metric) {
           case NUMBER_OF_LOCKS_AVAILABLE: {
              result.set(clusterCacheStats.getNumberOfLocksAvailable());
              break;
           }
           case NUMBER_OF_LOCKS_HELD: {
              result.set(clusterCacheStats.getNumberOfLocksHeld());
              break;
           }
              case TIME_SINCE_START: {
                 result.set(clusterCacheStats.getTimeSinceStart());
                 break;
              }
           case AVERAGE_READ_TIME: {
              result.set(clusterCacheStats.getAverageReadTime());
              break;
           }
           case AVERAGE_WRITE_TIME: {
              result.set(clusterCacheStats.getAverageWriteTime());
              break;
           }
           case AVERAGE_REMOVE_TIME: {
              result.set(clusterCacheStats.getAverageRemoveTime());
              break;
           }
           case AVERAGE_READ_TIME_NANOS: {
              result.set(clusterCacheStats.getAverageReadTimeNanos());
              break;
           }
           case AVERAGE_WRITE_TIME_NANOS: {
              result.set(clusterCacheStats.getAverageWriteTimeNanos());
              break;
           }
           case AVERAGE_REMOVE_TIME_NANOS: {
              result.set(clusterCacheStats.getAverageRemoveTimeNanos());
              break;
           }
           case EVICTIONS: {
              result.set(clusterCacheStats.getEvictions());
              break;
           }
           case HIT_RATIO: {
              result.set(clusterCacheStats.getHitRatio());
              break;
           }
           case HITS: {
              result.set(clusterCacheStats.getHits());
              break;
           }
           case MISSES: {
              result.set(clusterCacheStats.getMisses());
              break;
           }
           case NUMBER_OF_ENTRIES: {
              result.set(clusterCacheStats.getCurrentNumberOfEntries());
              break;
           }
           case NUMBER_OF_ENTRIES_IN_MEMORY: {
              result.set(clusterCacheStats.getCurrentNumberOfEntriesInMemory());
              break;
           }
           case DATA_MEMORY_USED:
              result.set(clusterCacheStats.getDataMemoryUsed());
              break;
           case OFF_HEAP_MEMORY_USED:
              result.set(clusterCacheStats.getOffHeapMemoryUsed());
              break;
           case MINIMUM_REQUIRED_NODES:
              result.set(clusterCacheStats.getRequiredMinimumNumberOfNodes());
              break;
           case READ_WRITE_RATIO: {
              result.set(clusterCacheStats.getReadWriteRatio());
              break;
           }
           case REMOVE_HITS: {
              result.set(clusterCacheStats.getRemoveHits());
              break;
           }
           case REMOVE_MISSES: {
              result.set(clusterCacheStats.getRemoveMisses());
              break;
           }
           case STORES: {
              result.set(clusterCacheStats.getStores());
              break;
           }
           case TIME_SINCE_RESET: {
              result.set(clusterCacheStats.getTimeSinceReset());
              break;
           }
           case INVALIDATIONS: {
              result.set(clusterCacheStats.getInvalidations());
              break;
           }
           case PASSIVATIONS: {
              result.set(clusterCacheStats.getPassivations());
              break;
           }
           case ACTIVATIONS: {
              result.set(clusterCacheStats.getActivations());
              break;
           }
           case CACHE_LOADER_LOADS: {
              result.set(clusterCacheStats.getCacheLoaderLoads());
              break;
           }
           case CACHE_LOADER_MISSES: {
              result.set(clusterCacheStats.getCacheLoaderMisses());
              break;
           }
           case CACHE_LOADER_STORES: {
              result.set(clusterCacheStats.getStoreWrites());
              break;
           }
           case STALE_STATS_THRESHOLD:
              result.set(clusterCacheStats.getStaleStatsThreshold());
              break;
           default: {
              context.getFailureDescription().set(String.format("Unknown metric %s", metric));
              break;
           }
           }
           context.getResult().set(result);
        }
        context.stepCompleted();
     }