docs: private List<Monitor<?>> getServoMonitors() {
  
          List<Monitor<?>> monitors = new ArrayList<Monitor<?>>();
  
          monitors.add(new InformationalMetric<Boolean>(MonitorConfig.builder("isCircuitBreakerOpen").build()) {
              @Override
              public Boolean getValue() {
                  return circuitBreaker.isOpen();
              }
          });
  
          // allow Servo and monitor to know exactly at what point in time these stats are for so they can be plotted accurately
          monitors.add(getCurrentValueMonitor("currentTime", currentTimeThunk, DataSourceLevel.DEBUG));
  
          // cumulative counts
          monitors.add(safelyGetCumulativeMonitor("countBadRequests", new Func0<HystrixEventType>() {
              @Override
              public HystrixEventType call() {
                  return HystrixEventType.BAD_REQUEST;
              }
          }));
          monitors.add(safelyGetCumulativeMonitor("countCollapsedRequests", new Func0<HystrixEventType>() {
              @Override
              public HystrixEventType call() {
                  return HystrixEventType.COLLAPSED;
              }
          }));
          monitors.add(safelyGetCumulativeMonitor("countEmit", new Func0<HystrixEventType>() {
              @Override
              public HystrixEventType call() {
                  return HystrixEventType.EMIT;
              }
          }));
          monitors.add(safelyGetCumulativeMonitor("countExceptionsThrown", new Func0<HystrixEventType>() {
              @Override
              public HystrixEventType call() {
                  return HystrixEventType.EXCEPTION_THROWN;
              }
          }));
          monitors.add(safelyGetCumulativeMonitor("countFailure", new Func0<HystrixEventType>() {
              @Override
              public HystrixEventType call() {
                  return HystrixEventType.FAILURE;
              }
          }));
          monitors.add(safelyGetCumulativeMonitor("countFallbackEmit", new Func0<HystrixEventType>() {
              @Override
              public HystrixEventType call() {
                  return HystrixEventType.FALLBACK_EMIT;
              }
          }));
          monitors.add(safelyGetCumulativeMonitor("countFallbackFailure", new Func0<HystrixEventType>() {
              @Override
              public HystrixEventType call() {
                  return HystrixEventType.FALLBACK_FAILURE;
              }
          }));
          monitors.add(safelyGetCumulativeMonitor("countFallbackMissing", new Func0<HystrixEventType>() {
              @Override
              public HystrixEventType call() {
                  return HystrixEventType.FALLBACK_MISSING;
              }
          }));
          monitors.add(safelyGetCumulativeMonitor("countFallbackRejection", new Func0<HystrixEventType>() {
              @Override
              public HystrixEventType call() {
                  return HystrixEventType.FALLBACK_REJECTION;
              }
          }));
          monitors.add(safelyGetCumulativeMonitor("countFallbackSuccess", new Func0<HystrixEventType>() {
              @Override
              public HystrixEventType call() {
                  return HystrixEventType.FALLBACK_SUCCESS;
              }
          }));
          monitors.add(safelyGetCumulativeMonitor("countResponsesFromCache", new Func0<HystrixEventType>() {
              @Override
              public HystrixEventType call() {
                  return HystrixEventType.RESPONSE_FROM_CACHE;
              }
          }));
          monitors.add(safelyGetCumulativeMonitor("countSemaphoreRejected", new Func0<HystrixEventType>() {
              @Override
              public HystrixEventType call() {
                  return HystrixEventType.SEMAPHORE_REJECTED;
              }
          }));
          monitors.add(safelyGetCumulativeMonitor("countShortCircuited", new Func0<HystrixEventType>() {
              @Override
              public HystrixEventType call() {
                  return HystrixEventType.SHORT_CIRCUITED;
              }
          }));
          monitors.add(safelyGetCumulativeMonitor("countSuccess", new Func0<HystrixEventType>() {
              @Override
              public HystrixEventType call() {
                  return HystrixEventType.SUCCESS;
              }
          }));
          monitors.add(safelyGetCumulativeMonitor("countThreadPoolRejected", new Func0<HystrixEventType>() {
              @Override
              public HystrixEventType call() {
                  return HystrixEventType.THREAD_POOL_REJECTED;
              }
          }));
          monitors.add(safelyGetCumulativeMonitor("countTimeout", new Func0<HystrixEventType>() {
              @Override
              public HystrixEventType call() {
                  return HystrixEventType.TIMEOUT;
              }
          }));
  
          // rolling counts
          monitors.add(safelyGetRollingMonitor("rollingCountBadRequests", new Func0<HystrixEventType>() {
              @Override
              public HystrixEventType call() {
                  return HystrixEventType.BAD_REQUEST;
              }
          }));
          monitors.add(safelyGetRollingMonitor("rollingCountCollapsedRequests", new Func0<HystrixEventType>() {
              @Override
              public HystrixEventType call() {
                  return HystrixEventType.COLLAPSED;
              }
          }));
          monitors.add(safelyGetRollingMonitor("rollingCountEmit", new Func0<HystrixEventType>() {
              @Override
              public HystrixEventType call() {
                  return HystrixEventType.EMIT;
              }
          }));
          monitors.add(safelyGetRollingMonitor("rollingCountExceptionsThrown", new Func0<HystrixEventType>() {
              @Override
              public HystrixEventType call() {
                  return HystrixEventType.EXCEPTION_THROWN;
              }
          }));
          monitors.add(safelyGetRollingMonitor("rollingCountFailure", new Func0<HystrixEventType>() {
              @Override
              public HystrixEventType call() {
                  return HystrixEventType.FAILURE;
              }
          }));
          monitors.add(safelyGetRollingMonitor("rollingCountFallbackEmit", new Func0<HystrixEventType>() {
              @Override
              public HystrixEventType call() {
                  return HystrixEventType.FALLBACK_EMIT;
              }
          }));
          monitors.add(safelyGetRollingMonitor("rollingCountFallbackFailure", new Func0<HystrixEventType>() {
              @Override
              public HystrixEventType call() {
                  return HystrixEventType.FALLBACK_FAILURE;
              }
          }));
          monitors.add(safelyGetRollingMonitor("rollingCountFallbackMissing", new Func0<HystrixEventType>() {
              @Override
              public HystrixEventType call() {
                  return HystrixEventType.FALLBACK_MISSING;
              }
          }));
          monitors.add(safelyGetRollingMonitor("rollingCountFallbackRejection", new Func0<HystrixEventType>() {
              @Override
              public HystrixEventType call() {
                  return HystrixEventType.FALLBACK_REJECTION;
              }
          }));
          monitors.add(safelyGetRollingMonitor("rollingCountFallbackSuccess", new Func0<HystrixEventType>() {
              @Override
              public HystrixEventType call() {
                  return HystrixEventType.FALLBACK_SUCCESS;
              }
          }));
          monitors.add(safelyGetRollingMonitor("rollingCountResponsesFromCache", new Func0<HystrixEventType>() {
              @Override
              public HystrixEventType call() {
                  return HystrixEventType.RESPONSE_FROM_CACHE;
              }
          }));
          monitors.add(safelyGetRollingMonitor("rollingCountSemaphoreRejected", new Func0<HystrixEventType>() {
              @Override
              public HystrixEventType call() {
                  return HystrixEventType.SEMAPHORE_REJECTED;
              }
          }));
          monitors.add(safelyGetRollingMonitor("rollingCountShortCircuited", new Func0<HystrixEventType>() {
              @Override
              public HystrixEventType call() {
                  return HystrixEventType.SHORT_CIRCUITED;
              }
          }));
          monitors.add(safelyGetRollingMonitor("rollingCountSuccess", new Func0<HystrixEventType>() {
              @Override
              public HystrixEventType call() {
                  return HystrixEventType.SUCCESS;
              }
          }));
          monitors.add(safelyGetRollingMonitor("rollingCountThreadPoolRejected", new Func0<HystrixEventType>() {
              @Override
              public HystrixEventType call() {
                  return HystrixEventType.THREAD_POOL_REJECTED;
              }
          }));
          monitors.add(safelyGetRollingMonitor("rollingCountTimeout", new Func0<HystrixEventType>() {
              @Override
              public HystrixEventType call() {
                  return HystrixEventType.TIMEOUT;
              }
          }));
  
          // the number of executionSemaphorePermits in use right now
          monitors.add(getCurrentValueMonitor("executionSemaphorePermitsInUse", currentConcurrentExecutionCountThunk));
  
          // error percentage derived from current metrics
          monitors.add(getCurrentValueMonitor("errorPercentage", errorPercentageThunk));
  
          // execution latency metrics
          monitors.add(getExecutionLatencyMeanMonitor("latencyExecute_mean"));
          monitors.add(getExecutionLatencyPercentileMonitor("latencyExecute_percentile_5", 5));
          monitors.add(getExecutionLatencyPercentileMonitor("latencyExecute_percentile_25", 25));
          monitors.add(getExecutionLatencyPercentileMonitor("latencyExecute_percentile_50", 50));
          monitors.add(getExecutionLatencyPercentileMonitor("latencyExecute_percentile_75", 75));
          monitors.add(getExecutionLatencyPercentileMonitor("latencyExecute_percentile_90", 90));
          monitors.add(getExecutionLatencyPercentileMonitor("latencyExecute_percentile_99", 99));
          monitors.add(getExecutionLatencyPercentileMonitor("latencyExecute_percentile_995", 99.5));
  
          // total latency metrics
          monitors.add(getTotalLatencyMeanMonitor("latencyTotal_mean"));
          monitors.add(getTotalLatencyPercentileMonitor("latencyTotal_percentile_5", 5));
          monitors.add(getTotalLatencyPercentileMonitor("latencyTotal_percentile_25", 25));
          monitors.add(getTotalLatencyPercentileMonitor("latencyTotal_percentile_50", 50));
          monitors.add(getTotalLatencyPercentileMonitor("latencyTotal_percentile_75", 75));
          monitors.add(getTotalLatencyPercentileMonitor("latencyTotal_percentile_90", 90));
          monitors.add(getTotalLatencyPercentileMonitor("latencyTotal_percentile_99", 99));
          monitors.add(getTotalLatencyPercentileMonitor("latencyTotal_percentile_995", 99.5));
  
          // group
          monitors.add(new InformationalMetric<String>(MonitorConfig.builder("commandGroup").build()) {
              @Override
              public String getValue() {
                  return commandGroupKey != null ? commandGroupKey.name() : null;
              }
          });
  
          // properties (so the values can be inspected and monitored)
          monitors.add(new InformationalMetric<Number>(MonitorConfig.builder("propertyValue_rollingStatisticalWindowInMilliseconds").build()) {
              @Override
              public Number getValue() {
                  return properties.metricsRollingStatisticalWindowInMilliseconds().get();
              }
          });
          monitors.add(new InformationalMetric<Number>(MonitorConfig.builder("propertyValue_circuitBreakerRequestVolumeThreshold").build()) {
              @Override
              public Number getValue() {
                  return properties.circuitBreakerRequestVolumeThreshold().get();
              }
          });
          monitors.add(new InformationalMetric<Number>(MonitorConfig.builder("propertyValue_circuitBreakerSleepWindowInMilliseconds").build()) {
              @Override
              public Number getValue() {
                  return properties.circuitBreakerSleepWindowInMilliseconds().get();
              }
          });
          monitors.add(new InformationalMetric<Number>(MonitorConfig.builder("propertyValue_circuitBreakerErrorThresholdPercentage").build()) {
              @Override
              public Number getValue() {
                  return properties.circuitBreakerErrorThresholdPercentage().get();
              }
          });
          monitors.add(new InformationalMetric<Boolean>(MonitorConfig.builder("propertyValue_circuitBreakerForceOpen").build()) {
              @Override
              public Boolean getValue() {
                  return properties.circuitBreakerForceOpen().get();
              }
          });
          monitors.add(new InformationalMetric<Boolean>(MonitorConfig.builder("propertyValue_circuitBreakerForceClosed").build()) {
              @Override
              public Boolean getValue() {
                  return properties.circuitBreakerForceClosed().get();
              }
          });
          monitors.add(new InformationalMetric<Number>(MonitorConfig.builder("propertyValue_executionIsolationThreadTimeoutInMilliseconds").build()) {
              @Override
              public Number getValue() {
                  return properties.executionTimeoutInMilliseconds().get();
              }
          });
          monitors.add(new InformationalMetric<Number>(MonitorConfig.builder("propertyValue_executionTimeoutInMilliseconds").build()) {
              @Override
              public Number getValue() {
                  return properties.executionTimeoutInMilliseconds().get();
              }
          });
          monitors.add(new InformationalMetric<String>(MonitorConfig.builder("propertyValue_executionIsolationStrategy").build()) {
              @Override
              public String getValue() {
                  return properties.executionIsolationStrategy().get().name();
              }
          });
          monitors.add(new InformationalMetric<Boolean>(MonitorConfig.builder("propertyValue_metricsRollingPercentileEnabled").build()) {
              @Override
              public Boolean getValue() {
                  return properties.metricsRollingPercentileEnabled().get();
              }
          });
          monitors.add(new InformationalMetric<Boolean>(MonitorConfig.builder("propertyValue_requestCacheEnabled").build()) {
              @Override
              public Boolean getValue() {
                  return properties.requestCacheEnabled().get();
              }
          });
          monitors.add(new InformationalMetric<Boolean>(MonitorConfig.builder("propertyValue_requestLogEnabled").build()) {
              @Override
              public Boolean getValue() {
                  return properties.requestLogEnabled().get();
              }
          });
          monitors.add(new InformationalMetric<Number>(MonitorConfig.builder("propertyValue_executionIsolationSemaphoreMaxConcurrentRequests").build()) {
              @Override
              public Number getValue() {
                  return properties.executionIsolationSemaphoreMaxConcurrentRequests().get();
              }
          });
          monitors.add(new InformationalMetric<Number>(MonitorConfig.builder("propertyValue_fallbackIsolationSemaphoreMaxConcurrentRequests").build()) {
              @Override
              public Number getValue() {
                  return properties.fallbackIsolationSemaphoreMaxConcurrentRequests().get();
              }
          });
  
          return monitors;
      }