1
#pragma once
2

            
3
#include <string>
4

            
5
#include "envoy/access_log/access_log.h"
6
#include "envoy/data/accesslog/v3/accesslog.pb.h"
7
#include "envoy/extensions/access_loggers/grpc/v3/als.pb.h"
8
#include "envoy/formatter/substitution_formatter.h"
9
#include "envoy/stream_info/stream_info.h"
10

            
11
namespace Envoy {
12
namespace Extensions {
13
namespace AccessLoggers {
14
namespace GrpcCommon {
15

            
16
using ProtoCommonGrpcAccessLogConfig =
17
    envoy::extensions::access_loggers::grpc::v3::CommonGrpcAccessLogConfig;
18

            
19
struct CommonPropertiesConfig {
20
  CommonPropertiesConfig(const ProtoCommonGrpcAccessLogConfig& config,
21
                         const Formatter::CommandParserPtrVector& command_parsers = {});
22
  absl::flat_hash_set<std::string> filter_states_to_log;
23
  std::vector<Tracing::CustomTagConstSharedPtr> custom_tags;
24
};
25

            
26
class Utility {
27
public:
28
  static void extractCommonAccessLogProperties(
29
      envoy::data::accesslog::v3::AccessLogCommon& common_access_log,
30
      const CommonPropertiesConfig& config, const Http::RequestHeaderMap& request_header,
31
      const StreamInfo::StreamInfo& stream_info, const Formatter::Context& formatter_context);
32

            
33
  static void responseFlagsToAccessLogResponseFlags(
34
      envoy::data::accesslog::v3::AccessLogCommon& common_access_log,
35
      const StreamInfo::StreamInfo& stream_info);
36
};
37

            
38
bool extractFilterStateData(const StreamInfo::FilterState& filter_state, const std::string& key,
39
                            envoy::data::accesslog::v3::AccessLogCommon& common_access_log);
40

            
41
} // namespace GrpcCommon
42
} // namespace AccessLoggers
43
} // namespace Extensions
44
} // namespace Envoy