ALPHA: wire is a tool to deploy nixos systems wire.althaea.zone/
2
fork

Configure Feed

Select the types of activity you want to include in your feed.

comments

+28 -21
+28 -21
wire/cli/src/tracing_setup.rs
··· 24 24 util::SubscriberInitExt, 25 25 }; 26 26 27 + /// The non-clobbering writer ensures that log lines are held while interactive 28 + /// prompts are shown to the user. If logs where shown, they would "clobber" the 29 + /// sudo / ssh prompt. 30 + /// 31 + /// Additionally, the `STDIN_CLOBBER_LOCK` is used to ensure that no two 32 + /// interactive prompts are shown at the same time. 27 33 struct NonClobberingWriter { 28 34 queue: VecDeque<Vec<u8>>, 29 35 stderr: Stderr, ··· 74 80 } 75 81 } 76 82 83 + /// Handles event formatting, which falls back to the default formatter 84 + /// passed. 77 85 struct WireEventFormat(Format<Full, ()>); 86 + /// Formats the node's name with `WireFieldVisitor` 78 87 struct WireFieldFormat; 79 88 struct WireFieldVisitor<'a>(DefaultVisitor<'a>); 89 + /// `WireLayer` injects `WireFieldFormat` as an extension on the event 80 90 struct WireLayer; 81 91 82 92 impl<'a> WireFieldVisitor<'a> { ··· 93 103 ) -> std::fmt::Result { 94 104 let mut v = WireFieldVisitor::new(writer, true); 95 105 fields.record(&mut v); 96 - // v.finish() 97 - 98 106 Ok(()) 99 107 } 100 108 } ··· 117 125 style = match level { 118 126 Level::TRACE => style.purple(), 119 127 Level::DEBUG => style.blue(), 120 - // info will not change the default 121 - Level::INFO => style, 128 + Level::INFO => style.green(), 122 129 Level::WARN => style.yellow(), 123 130 Level::ERROR => style.red(), 124 131 }; ··· 149 156 ) -> std::fmt::Result { 150 157 let metadata = event.metadata(); 151 158 152 - // if !matches!(metadata.level(), &tracing::Level::INFO) { 153 - // return self.0.format_event(ctx, writer, event); 154 - // } 155 - 159 + // skip events without an "event_scope" 156 160 let Some(scope) = ctx.event_scope() else { 157 161 return self.0.format_event(ctx, writer, event); 158 162 }; 159 163 164 + // skip spans without a parent 160 165 let Some(parent) = scope.last() else { 161 166 return self.0.format_event(ctx, writer, event); 162 167 }; 163 168 169 + // skip spans that dont refer to the goal step executor 164 170 if parent.name() != "execute" { 165 171 return self.0.format_event(ctx, writer, event); 166 172 } 167 173 174 + // skip spans that dont refer to a specific node being executed 168 175 if parent.fields().field("node").is_none() { 169 176 return self.0.format_event(ctx, writer, event); 170 177 } 171 178 172 179 let style = get_style(*metadata.level()); 173 180 174 - let ext = parent.extensions(); 175 - 176 - let node_name = &ext.get::<FormattedFields<WireFieldFormat>>().unwrap(); 177 - 181 + // write the log level with colour 178 182 write!( 179 183 writer, 180 184 "{} ", 181 - fmt_level(*metadata.level()).if_supports_color(Stream::Stderr, |x| { 182 - if *metadata.level() == Level::INFO { 183 - x.style(style.green()) 184 - } else { 185 - x.style(style) 186 - } 187 - }) 185 + fmt_level(*metadata.level()).if_supports_color(Stream::Stderr, |x| { x.style(style) }) 188 186 )?; 189 187 188 + // extract the formatted node name into a string 189 + let parent_ext = parent.extensions(); 190 + let node_name = &parent_ext 191 + .get::<FormattedFields<WireFieldFormat>>() 192 + .unwrap(); 193 + 190 194 write!(writer, "{node_name}")?; 191 195 196 + // write the step name 192 197 if let Some(step) = ctx.event_scope().unwrap().from_root().nth(1) { 193 198 write!(writer, " {}", step.name().italic())?; 194 199 } 195 200 196 201 write!(writer, " | ")?; 197 202 203 + // write the default fields, including the actual message and other data 198 204 let mut fields = FormattedFields::<DefaultFields>::new(String::new()); 199 205 200 206 ctx.format_fields(fields.as_writer(), event)?; 201 207 202 - write!(writer, "{fields}",)?; 203 - 208 + write!(writer, "{fields}")?; 204 209 writeln!(writer)?; 205 210 206 211 Ok(()) ··· 233 238 } 234 239 } 235 240 241 + /// Set up logging for the application 242 + /// Uses `WireFieldFormat` if -v was never passed 236 243 pub fn setup_logging<L: LogLevel>(verbosity: &Verbosity<L>) { 237 244 let filter = verbosity.log_level_filter().as_trace(); 238 245 let registry = tracing_subscriber::registry();