@Override
  protected ClusterStatsNodeResponse nodeOperation(ClusterStatsNodeRequest nodeRequest) {
    NodeInfo nodeInfo = nodeService.info(false, true, false, true, false, true, false, true);
    NodeStats nodeStats =
        nodeService.stats(
            CommonStatsFlags.NONE,
            false,
            true,
            true,
            false,
            true,
            false,
            false,
            false,
            false,
            false);
    List<ShardStats> shardsStats = new ArrayList<>();
    for (IndexService indexService : indicesService) {
      for (IndexShard indexShard : indexService) {
        if (indexShard.routingEntry() != null && indexShard.routingEntry().active()) {
          // only report on fully started shards
          shardsStats.add(
              new ShardStats(
                  indexShard.routingEntry(),
                  indexShard.shardPath(),
                  new CommonStats(
                      indicesService.getIndicesQueryCache(), indexShard, SHARD_STATS_FLAGS),
                  indexShard.commitStats()));
        }
      }
    }

    ClusterHealthStatus clusterStatus = null;
    if (clusterService.state().nodes().localNodeMaster()) {
      clusterStatus = new ClusterStateHealth(clusterService.state()).getStatus();
    }

    return new ClusterStatsNodeResponse(
        nodeInfo.getNode(),
        clusterStatus,
        nodeInfo,
        nodeStats,
        shardsStats.toArray(new ShardStats[shardsStats.size()]));
  }