bool filter()

in aws/metrics/metrics_constants.cc [22:82]


bool filter(const std::vector<std::pair<std::string, std::string>>& dimensions,
            Level max_level,
            Granularity max_granularity) {
#define LEVEL(X, Y) (std::string(Names::X), Level::Y)
  static std::unordered_map<std::string, Level> level_map =
      boost::assign::map_list_of
          LEVEL( Test, Detailed )

          LEVEL( UserRecordsReceived, Detailed )
          LEVEL( UserRecordsPending, Detailed )
          LEVEL( UserRecordsPut, Summary )
          LEVEL( UserRecordsDataPut, Detailed )

          LEVEL( KinesisRecordsPut, Summary )
          LEVEL( KinesisRecordsDataPut, Detailed )

          LEVEL( ErrorsByCode, Summary )
          LEVEL( AllErrors, Summary )
          LEVEL( RetriesPerRecord, Detailed )
          LEVEL( UserRecordExpired, Summary )

          LEVEL( BufferingTime, Summary )
          LEVEL( RequestTime, Detailed )

          LEVEL( UserRecordsPerKinesisRecord, Detailed )
          LEVEL( KinesisRecordsPerPutRecordsRequest, Detailed )
          LEVEL( UserRecordsPerPutRecordsRequest, Detailed );
#undef LEVEL

  if (max_level == Level::None) {
    return false;
  }

  assert(!dimensions.empty());
  assert(dimensions.front().first == "MetricName");

  auto level = Level::Detailed;
  auto it = level_map.find(dimensions.front().second);
  if (it != level_map.end()) {
    level = it->second;
  } else {
    LOG(warning) << "Unknown metric \"" << dimensions.front().second
                 << "\", did you forget to add it to "
                 << "aws::metrics::constants::filter()?";
  }

  auto granularity = Granularity::Global;
  for (auto& p : dimensions) {
    if (p.first == "StreamName") {
      granularity = Granularity::Stream;
    } else if (p.first == "ShardId") {
      granularity = Granularity::Shard;
    }
  }

  if (level > max_level || granularity > max_granularity) {
    return false;
  }

  return true;
}