-
Notifications
You must be signed in to change notification settings - Fork 84
/
Copy pathplugin_loader.cc
82 lines (74 loc) · 3.23 KB
/
plugin_loader.cc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#include "envoy/config/core/v3/base.pb.h"
#include "nighthawk/adaptive_load/input_variable_setter.h"
#include "nighthawk/adaptive_load/metrics_plugin.h"
#include "nighthawk/adaptive_load/scoring_function.h"
#include "nighthawk/adaptive_load/step_controller.h"
#include "external/envoy/source/common/common/statusor.h"
#include "external/envoy/source/common/config/utility.h"
namespace Nighthawk {
absl::StatusOr<InputVariableSetterPtr>
LoadInputVariableSetterPlugin(const envoy::config::core::v3::TypedExtensionConfig& config) {
try {
auto& config_factory =
Envoy::Config::Utility::getAndCheckFactoryByName<InputVariableSetterConfigFactory>(
config.name());
absl::Status validation_status = config_factory.ValidateConfig(config.typed_config());
if (!validation_status.ok()) {
return validation_status;
}
return config_factory.createInputVariableSetter(config.typed_config());
} catch (const Envoy::EnvoyException& e) {
return absl::InvalidArgumentError(
absl::StrCat("Could not load plugin: ", config.name(), ": ", e.what()));
}
}
absl::StatusOr<ScoringFunctionPtr>
LoadScoringFunctionPlugin(const envoy::config::core::v3::TypedExtensionConfig& config) {
try {
auto& config_factory =
Envoy::Config::Utility::getAndCheckFactoryByName<ScoringFunctionConfigFactory>(
config.name());
absl::Status validation_status = config_factory.ValidateConfig(config.typed_config());
if (!validation_status.ok()) {
return validation_status;
}
return config_factory.createScoringFunction(config.typed_config());
} catch (const Envoy::EnvoyException& e) {
return absl::InvalidArgumentError(
absl::StrCat("Could not load plugin: ", config.name(), ": ", e.what()));
}
}
absl::StatusOr<MetricsPluginPtr>
LoadMetricsPlugin(const envoy::config::core::v3::TypedExtensionConfig& config) {
try {
auto& config_factory =
Envoy::Config::Utility::getAndCheckFactoryByName<MetricsPluginConfigFactory>(config.name());
absl::Status validation_status = config_factory.ValidateConfig(config.typed_config());
if (!validation_status.ok()) {
return validation_status;
}
return config_factory.createMetricsPlugin(config.typed_config());
} catch (const Envoy::EnvoyException& e) {
return absl::InvalidArgumentError(
absl::StrCat("Could not load plugin: ", config.name(), ": ", e.what()));
}
}
absl::StatusOr<StepControllerPtr> LoadStepControllerPlugin(
const envoy::config::core::v3::TypedExtensionConfig& config,
const nighthawk::client::CommandLineOptions& command_line_options_template) {
try {
auto& config_factory =
Envoy::Config::Utility::getAndCheckFactoryByName<StepControllerConfigFactory>(
config.name());
absl::Status validation_status = config_factory.ValidateConfig(config.typed_config());
if (!validation_status.ok()) {
return validation_status;
}
return config_factory.createStepController(config.typed_config(),
command_line_options_template);
} catch (const Envoy::EnvoyException& e) {
return absl::InvalidArgumentError(
absl::StrCat("Could not load plugin: ", config.name(), ": ", e.what()));
}
}
} // namespace Nighthawk