|
15 | 15 | * along with this program. If not, see <http://www.gnu.org/licenses/>.
|
16 | 16 | *
|
17 | 17 | */
|
| 18 | + |
18 | 19 | pub mod logs;
|
19 | 20 | pub mod metrics;
|
20 |
| -#[allow(clippy::all)] |
21 |
| -pub mod proto; |
22 | 21 | pub mod traces;
|
23 |
| -use proto::common::v1::KeyValue; |
| 22 | +use opentelemetry_proto::tonic::common::v1::{any_value::Value as OtelValue, AnyValue, KeyValue}; |
24 | 23 | use serde_json::Value;
|
25 | 24 | use std::collections::BTreeMap;
|
26 | 25 | // Value can be one of types - String, Bool, Int, Double, ArrayValue, AnyValue, KeyValueList, Byte
|
27 |
| -pub fn collect_json_from_any_value( |
28 |
| - key: &String, |
29 |
| - value: super::otel::proto::common::v1::Value, |
30 |
| -) -> BTreeMap<String, Value> { |
| 26 | +pub fn collect_json_from_value(key: &String, value: OtelValue) -> BTreeMap<String, Value> { |
31 | 27 | let mut value_json: BTreeMap<String, Value> = BTreeMap::new();
|
32 |
| - insert_if_some(&mut value_json, key, &value.str_val); |
33 |
| - insert_bool_if_some(&mut value_json, key, &value.bool_val); |
34 |
| - insert_if_some(&mut value_json, key, &value.int_val); |
35 |
| - insert_number_if_some(&mut value_json, key, &value.double_val); |
36 |
| - |
37 |
| - //ArrayValue is a vector of AnyValue |
38 |
| - //traverse by recursively calling the same function |
39 |
| - if value.array_val.is_some() { |
40 |
| - let array_val = value.array_val.as_ref().unwrap(); |
41 |
| - let values = &array_val.values; |
42 |
| - for value in values { |
43 |
| - let array_value_json = collect_json_from_any_value(key, value.clone()); |
44 |
| - for key in array_value_json.keys() { |
45 |
| - value_json.insert( |
46 |
| - format!( |
47 |
| - "{}_{}", |
48 |
| - key.to_owned(), |
49 |
| - value_to_string(array_value_json[key].to_owned()) |
50 |
| - ), |
51 |
| - array_value_json[key].to_owned(), |
52 |
| - ); |
| 28 | + match value { |
| 29 | + OtelValue::StringValue(str_val) => { |
| 30 | + value_json.insert(key.to_string(), Value::String(str_val)); |
| 31 | + } |
| 32 | + OtelValue::BoolValue(bool_val) => { |
| 33 | + value_json.insert(key.to_string(), Value::Bool(bool_val)); |
| 34 | + } |
| 35 | + OtelValue::IntValue(int_val) => { |
| 36 | + value_json.insert(key.to_string(), Value::String(int_val.to_string())); |
| 37 | + } |
| 38 | + OtelValue::DoubleValue(double_val) => { |
| 39 | + if let Some(number) = serde_json::Number::from_f64(double_val) { |
| 40 | + value_json.insert(key.to_string(), Value::Number(number)); |
53 | 41 | }
|
54 | 42 | }
|
55 |
| - } |
56 |
| - |
57 |
| - //KeyValueList is a vector of KeyValue |
58 |
| - //traverse through each element in the vector |
59 |
| - if value.kv_list_val.is_some() { |
60 |
| - let kv_list_val = value.kv_list_val.unwrap(); |
61 |
| - for key_value in kv_list_val.values { |
62 |
| - let value = key_value.value; |
63 |
| - if value.is_some() { |
64 |
| - let value = value.unwrap(); |
65 |
| - let key_value_json = collect_json_from_any_value(key, value); |
66 |
| - |
67 |
| - for key in key_value_json.keys() { |
| 43 | + OtelValue::ArrayValue(array_val) => { |
| 44 | + let values = &array_val.values; |
| 45 | + for value in values { |
| 46 | + let array_value_json = collect_json_from_anyvalue(key, value.clone()); |
| 47 | + for key in array_value_json.keys() { |
68 | 48 | value_json.insert(
|
69 | 49 | format!(
|
70 |
| - "{}_{}_{}", |
| 50 | + "{}_{}", |
71 | 51 | key.to_owned(),
|
72 |
| - key_value.key, |
73 |
| - value_to_string(key_value_json[key].to_owned()) |
| 52 | + value_to_string(array_value_json[key].to_owned()) |
74 | 53 | ),
|
75 |
| - key_value_json[key].to_owned(), |
| 54 | + array_value_json[key].to_owned(), |
76 | 55 | );
|
77 | 56 | }
|
78 | 57 | }
|
79 | 58 | }
|
| 59 | + OtelValue::KvlistValue(kv_list_val) => { |
| 60 | + for key_value in kv_list_val.values { |
| 61 | + let value = key_value.value; |
| 62 | + if value.is_some() { |
| 63 | + let value = value.unwrap(); |
| 64 | + let key_value_json = collect_json_from_anyvalue(key, value.clone()); |
| 65 | + |
| 66 | + for key in key_value_json.keys() { |
| 67 | + value_json.insert( |
| 68 | + format!( |
| 69 | + "{}_{}_{}", |
| 70 | + key.to_owned(), |
| 71 | + key_value.key, |
| 72 | + value_to_string(key_value_json[key].to_owned()) |
| 73 | + ), |
| 74 | + key_value_json[key].to_owned(), |
| 75 | + ); |
| 76 | + } |
| 77 | + } |
| 78 | + } |
| 79 | + } |
| 80 | + OtelValue::BytesValue(bytes_val) => { |
| 81 | + value_json.insert( |
| 82 | + key.to_string(), |
| 83 | + Value::String(String::from_utf8_lossy(&bytes_val).to_string()), |
| 84 | + ); |
| 85 | + } |
80 | 86 | }
|
81 |
| - insert_if_some(&mut value_json, key, &value.bytes_val); |
82 | 87 |
|
83 | 88 | value_json
|
84 | 89 | }
|
85 | 90 |
|
| 91 | +pub fn collect_json_from_anyvalue(key: &String, value: AnyValue) -> BTreeMap<String, Value> { |
| 92 | + collect_json_from_value(key, value.value.unwrap()) |
| 93 | +} |
| 94 | + |
86 | 95 | //traverse through Value by calling function ollect_json_from_any_value
|
87 | 96 | pub fn collect_json_from_values(
|
88 |
| - values: &Option<super::otel::proto::common::v1::Value>, |
| 97 | + values: &Option<AnyValue>, |
89 | 98 | key: &String,
|
90 | 99 | ) -> BTreeMap<String, Value> {
|
91 | 100 | let mut value_json: BTreeMap<String, Value> = BTreeMap::new();
|
92 | 101 |
|
93 | 102 | for value in values.iter() {
|
94 |
| - value_json = collect_json_from_any_value(key, value.clone()); |
| 103 | + value_json = collect_json_from_anyvalue(key, value.clone()); |
95 | 104 | }
|
96 | 105 |
|
97 | 106 | value_json
|
@@ -142,11 +151,9 @@ pub fn insert_bool_if_some(map: &mut BTreeMap<String, Value>, key: &str, option:
|
142 | 151 | }
|
143 | 152 | }
|
144 | 153 |
|
145 |
| -pub fn insert_attributes(map: &mut BTreeMap<String, Value>, attributes: &Option<Vec<KeyValue>>) { |
146 |
| - if let Some(attrs) = attributes { |
147 |
| - let attributes_json = flatten_attributes(attrs); |
148 |
| - for (key, value) in attributes_json { |
149 |
| - map.insert(key, value); |
150 |
| - } |
| 154 | +pub fn insert_attributes(map: &mut BTreeMap<String, Value>, attributes: &Vec<KeyValue>) { |
| 155 | + let attributes_json = flatten_attributes(attributes); |
| 156 | + for (key, value) in attributes_json { |
| 157 | + map.insert(key, value); |
151 | 158 | }
|
152 | 159 | }
|
0 commit comments