Line data Source code
1 : #pragma once 2 : 3 : #include <string> 4 : 5 : #include "envoy/config/typed_config.h" 6 : #include "envoy/registry/registry.h" 7 : 8 : #include "source/common/formatter/substitution_formatter.h" 9 : #include "source/extensions/filters/common/expr/evaluator.h" 10 : 11 : namespace Envoy { 12 : namespace Extensions { 13 : namespace Formatter { 14 : 15 : class CELFormatter : public ::Envoy::Formatter::FormatterProvider { 16 : public: 17 : CELFormatter(const ::Envoy::LocalInfo::LocalInfo& local_info, 18 : Extensions::Filters::Common::Expr::BuilderInstanceSharedPtr, 19 : const google::api::expr::v1alpha1::Expr&, absl::optional<size_t>&); 20 : 21 : absl::optional<std::string> 22 : formatWithContext(const Envoy::Formatter::HttpFormatterContext& context, 23 : const StreamInfo::StreamInfo&) const override; 24 : ProtobufWkt::Value formatValueWithContext(const Envoy::Formatter::HttpFormatterContext& context, 25 : const StreamInfo::StreamInfo&) const override; 26 : 27 : private: 28 : const ::Envoy::LocalInfo::LocalInfo& local_info_; 29 : Extensions::Filters::Common::Expr::BuilderInstanceSharedPtr expr_builder_; 30 : const google::api::expr::v1alpha1::Expr parsed_expr_; 31 : const absl::optional<size_t> max_length_; 32 : Extensions::Filters::Common::Expr::ExpressionPtr compiled_expr_; 33 : }; 34 : 35 : class CELFormatterCommandParser : public ::Envoy::Formatter::CommandParser { 36 : public: 37 : CELFormatterCommandParser(Server::Configuration::CommonFactoryContext& context) 38 : : local_info_(context.localInfo()), 39 0 : expr_builder_(Extensions::Filters::Common::Expr::getBuilder(context)){}; 40 : ::Envoy::Formatter::FormatterProviderPtr parse(const std::string& command, 41 : const std::string& subcommand, 42 : absl::optional<size_t>& max_length) const override; 43 : 44 : private: 45 : const ::Envoy::LocalInfo::LocalInfo& local_info_; 46 : Extensions::Filters::Common::Expr::BuilderInstanceSharedPtr expr_builder_; 47 : }; 48 : 49 : } // namespace Formatter 50 : } // namespace Extensions 51 : } // namespace Envoy