anchor.diff:              true
       end.
   
  -ephemeral_stats_description(BucketId, AddQuery, IndexNodes, FtsNodes) ->
  -    membase_summary_stats_description(BucketId, AddQuery, IndexNodes, FtsNodes, true)
  +ephemeral_stats_description(BucketId, ServiceNodes) ->
  +    membase_summary_stats_description(BucketId, ServiceNodes, true)
           ++ membase_vbucket_resources_stats_description()
           ++ membase_dcp_queues_stats_description()
  -        ++ couchbase_index_stats_descriptions(BucketId, IndexNodes)
  -        ++ couchbase_fts_stats_descriptions(BucketId, FtsNodes)
  +        ++ couchbase_index_stats_descriptions(BucketId, ServiceNodes)
  +        ++ couchbase_fts_stats_descriptions(BucketId, ServiceNodes)
           ++ couchbase_replication_stats_descriptions(BucketId)
           ++ couchbase_goxdcr_stats_descriptions(BucketId)
  -        ++ case AddQuery of
  +        ++ case has_nodes(n1ql, ServiceNodes) of
                  true -> couchbase_query_stats_descriptions();
                  false -> []
              end
           ++ membase_incoming_xdcr_operations_stats_description().
   
   
  -membase_stats_description(BucketId, AddQuery, IndexNodes, FtsNodes, CBASNode) ->
  -    membase_summary_stats_description(BucketId, AddQuery, IndexNodes, FtsNodes, false)
  +membase_stats_description(BucketId, ServiceNodes) ->
  +    membase_summary_stats_description(BucketId, ServiceNodes, false)
           ++ membase_vbucket_resources_stats_description()
           ++ membase_disk_queues_stats_description()
           ++ membase_dcp_queues_stats_description()
           ++ couchbase_view_stats_descriptions(BucketId)
  -        ++ couchbase_index_stats_descriptions(BucketId, IndexNodes)
  -        ++ couchbase_analytics_stats_descriptions(BucketId, CBASNode)
  -        ++ couchbase_fts_stats_descriptions(BucketId, FtsNodes)
  +        ++ couchbase_index_stats_descriptions(BucketId, ServiceNodes)
  +        ++ couchbase_cbas_stats_descriptions(BucketId, ServiceNodes)
  +        ++ couchbase_fts_stats_descriptions(BucketId, ServiceNodes)
           ++ couchbase_replication_stats_descriptions(BucketId)
           ++ couchbase_goxdcr_stats_descriptions(BucketId)
  -        ++ case AddQuery of
  +        ++ case has_nodes(n1ql, ServiceNodes) of
                  true -> couchbase_query_stats_descriptions();
                  false -> []
              end
  
positive.code:        {struct, [{name, <<"hibernated_waked">>},
                   {title, <<"streaming wakeups/sec">>},
                   {desc, <<"Rate of streaming request wakeups on port 8091">>}]}
         | index_server_resources_stats_description(IndexNodes) ++
             fts_server_resources_stats_description(FtsNodes) ++
             cbas_server_resources_stats_description(CbasNodes)]}].
  
  base_stats_directory(BucketId, AddQuery, IndexNodes, FtsNodes, CbasNodes) ->
      {ok, BucketConfig} = ns_bucket:get_bucket(BucketId),
      Base = case menelaus_web_buckets:external_bucket_type(BucketConfig) of
                 membase -> membase_stats_description(BucketId, AddQuery, IndexNodes, FtsNodes, CbasNodes);
                 memcached -> memcached_stats_description();
                 ephemeral -> ephemeral_stats_description(BucketId, AddQuery, IndexNodes, FtsNodes)
             end,
      [{struct, server_resources_stats_description(IndexNodes, FtsNodes, CbasNodes)} | Base].
  
  parse_add_index_param(Param, Params) ->
      case proplists:get_value(Param, Params) of
          undefined ->
              [];
  
negative.code:                {name, <<"ep_replica_ahead_exceptions">>},
                 {desc, <<"Total number of ahead exceptions for all replica vBuckets">>}]}].
  
  membase_summary_stats_description(BucketId, ServiceNodes, IsEphemeral) ->
      [{struct,
        [{blockName, <<"Summary">>},
         {stats,
  