Skip to content

Commit ad1844d

Browse files
psandanacijothomas
andauthored
refactor: part b and c (open-telemetry#213)
Co-authored-by: Cijo Thomas <[email protected]>
1 parent d9d6229 commit ad1844d

File tree

7 files changed

+390
-303
lines changed

7 files changed

+390
-303
lines changed

opentelemetry-etw-logs/CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222

2323
- Added support for TraceId,SpanId
2424

25+
- Added support for populating cloud `role` and `roleInstance` from Resource's `service.name` and `service.instance.id` attributes respectively.
26+
2527
## v0.7.0
2628

2729
- Bump msrv to 1.75.0
Lines changed: 130 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,130 @@
1+
use crate::logs::converters::IntoJson;
2+
use opentelemetry::{
3+
logs::{AnyValue, Severity},
4+
Key,
5+
};
6+
use tracelogging_dynamic as tld;
7+
8+
pub fn add_attribute_to_event(event: &mut tld::EventBuilder, key: &Key, value: &AnyValue) {
9+
match value {
10+
AnyValue::Boolean(b) => {
11+
event.add_bool32(key.as_str(), *b as i32, tld::OutType::Default, 0);
12+
}
13+
AnyValue::Int(i) => {
14+
event.add_i64(key.as_str(), *i, tld::OutType::Default, 0);
15+
}
16+
AnyValue::Double(f) => {
17+
event.add_f64(key.as_str(), *f, tld::OutType::Default, 0);
18+
}
19+
AnyValue::String(s) => {
20+
event.add_str8(key.as_str(), s.as_str(), tld::OutType::Default, 0);
21+
}
22+
AnyValue::Bytes(b) => {
23+
event.add_binaryc(key.as_str(), b.as_slice(), tld::OutType::Default, 0);
24+
}
25+
AnyValue::ListAny(l) => {
26+
event.add_str8(
27+
key.as_str(),
28+
l.as_json_value().to_string(),
29+
tld::OutType::Json,
30+
0,
31+
);
32+
}
33+
AnyValue::Map(m) => {
34+
event.add_str8(
35+
key.as_str(),
36+
m.as_json_value().to_string(),
37+
tld::OutType::Json,
38+
0,
39+
);
40+
}
41+
&_ => {}
42+
}
43+
}
44+
45+
pub const fn convert_severity_to_level(severity: Severity) -> tld::Level {
46+
match severity {
47+
Severity::Debug
48+
| Severity::Debug2
49+
| Severity::Debug3
50+
| Severity::Debug4
51+
| Severity::Trace
52+
| Severity::Trace2
53+
| Severity::Trace3
54+
| Severity::Trace4 => tld::Level::Verbose,
55+
56+
Severity::Info | Severity::Info2 | Severity::Info3 | Severity::Info4 => {
57+
tld::Level::Informational
58+
}
59+
60+
Severity::Error | Severity::Error2 | Severity::Error3 | Severity::Error4 => {
61+
tld::Level::Error
62+
}
63+
64+
Severity::Fatal | Severity::Fatal2 | Severity::Fatal3 | Severity::Fatal4 => {
65+
tld::Level::Critical
66+
}
67+
68+
Severity::Warn | Severity::Warn2 | Severity::Warn3 | Severity::Warn4 => tld::Level::Warning,
69+
}
70+
}
71+
72+
pub fn get_event_name(log_record: &opentelemetry_sdk::logs::SdkLogRecord) -> &str {
73+
log_record.event_name().unwrap_or("Log")
74+
}
75+
76+
#[cfg(test)]
77+
pub mod test_utils {
78+
use opentelemetry::logs::Logger;
79+
use opentelemetry::logs::LoggerProvider;
80+
use opentelemetry_sdk::logs::SdkLoggerProvider;
81+
82+
use super::super::ETWExporter;
83+
84+
pub fn new_etw_exporter() -> ETWExporter {
85+
ETWExporter::new("test-provider-name")
86+
}
87+
88+
pub fn new_instrumentation_scope() -> opentelemetry::InstrumentationScope {
89+
opentelemetry::InstrumentationScope::default()
90+
}
91+
92+
pub fn new_sdk_log_record() -> opentelemetry_sdk::logs::SdkLogRecord {
93+
SdkLoggerProvider::builder()
94+
.build()
95+
.logger("test")
96+
.create_log_record()
97+
}
98+
}
99+
100+
#[test]
101+
fn test_get_severity_level() {
102+
let result = convert_severity_to_level(Severity::Debug);
103+
assert_eq!(result, tld::Level::Verbose);
104+
105+
let result = convert_severity_to_level(Severity::Info);
106+
assert_eq!(result, tld::Level::Informational);
107+
108+
let result = convert_severity_to_level(Severity::Error);
109+
assert_eq!(result, tld::Level::Error);
110+
111+
let result = convert_severity_to_level(Severity::Fatal);
112+
assert_eq!(result, tld::Level::Critical);
113+
114+
let result = convert_severity_to_level(Severity::Warn);
115+
assert_eq!(result, tld::Level::Warning);
116+
}
117+
118+
#[test]
119+
fn test_get_event_name() {
120+
use opentelemetry::logs::LogRecord;
121+
122+
let mut log_record = test_utils::new_sdk_log_record();
123+
124+
let result = get_event_name(&log_record);
125+
assert_eq!(result, "Log");
126+
127+
log_record.set_event_name("event-name");
128+
let result = get_event_name(&log_record);
129+
assert_eq!(result, "event-name");
130+
}

0 commit comments

Comments
 (0)