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
use crate::{cloudwatch::CloudWatchLogger, logger::LoggerMetricPublisher, MetricPublisher};
use holochain_locksmith::RwLock;
use std::sync::Arc;
#[derive(Deserialize, Serialize, PartialEq, Debug, Clone)]
#[serde(rename_all = "lowercase")]
#[serde(tag = "type")]
pub enum MetricPublisherConfig {
Logger,
CloudWatchLogs(CloudWatchLogsConfig),
}
#[derive(Deserialize, Serialize, PartialEq, Debug, Clone)]
pub struct CloudWatchLogsConfig {
#[serde(default)]
pub region: Option<rusoto_core::region::Region>,
#[serde(default)]
pub log_group_name: Option<String>,
#[serde(default)]
pub log_stream_name: Option<String>,
#[serde(default)]
pub assume_role_arn: Option<String>,
}
impl Default for MetricPublisherConfig {
fn default() -> Self {
Self::default_logger()
}
}
impl MetricPublisherConfig {
pub fn create_metric_publisher(&self) -> Arc<RwLock<dyn MetricPublisher>> {
let publisher: Arc<RwLock<dyn MetricPublisher>> = match self {
Self::Logger => Arc::new(RwLock::new(LoggerMetricPublisher::new())),
Self::CloudWatchLogs(CloudWatchLogsConfig {
region,
log_group_name,
log_stream_name,
assume_role_arn,
}) => {
let region = region.clone().unwrap_or_default();
match &assume_role_arn {
Some(assume_role_arn) => Arc::new(RwLock::new(CloudWatchLogger::new(
log_stream_name.clone(),
log_group_name.clone(),
crate::cloudwatch::assume_role(®ion, &assume_role_arn),
®ion,
))),
None => Arc::new(RwLock::new(CloudWatchLogger::new(
log_stream_name.clone(),
log_group_name.clone(),
rusoto_credential::InstanceMetadataProvider::new(),
®ion,
))),
}
}
};
publisher
}
pub fn default_logger() -> Self {
Self::Logger
}
pub fn default_cloudwatch_logs() -> Self {
Self::CloudWatchLogs(CloudWatchLogsConfig {
region: Some(crate::cloudwatch::DEFAULT_REGION),
log_group_name: Some(crate::cloudwatch::CloudWatchLogger::default_log_group()),
log_stream_name: Some(crate::cloudwatch::CloudWatchLogger::default_log_stream()),
assume_role_arn: None,
})
}
}