Simplify and repair stdout/stderr logging in daemons
This commit is contained in:
parent
1111776754
commit
7e4654c8f7
|
@ -225,11 +225,12 @@ impl DaemonInstance {
|
||||||
fn log<R: 'static + Send + AsyncRead + Unpin>(
|
fn log<R: 'static + Send + AsyncRead + Unpin>(
|
||||||
&self,
|
&self,
|
||||||
t: &mut Activation,
|
t: &mut Activation,
|
||||||
facet: FacetRef,
|
|
||||||
pid: Option<u32>,
|
pid: Option<u32>,
|
||||||
r: R,
|
r: R,
|
||||||
kind: &str
|
kind: &str
|
||||||
) {
|
) -> ActorResult {
|
||||||
|
t.facet(|t| {
|
||||||
|
let facet = t.facet.clone();
|
||||||
let log_ds = self.log_ds.clone();
|
let log_ds = self.log_ds.clone();
|
||||||
let service = self.service.clone();
|
let service = self.service.clone();
|
||||||
let kind = AnyValue::symbol(kind);
|
let kind = AnyValue::symbol(kind);
|
||||||
|
@ -238,7 +239,6 @@ impl DaemonInstance {
|
||||||
None => AnyValue::symbol("unknown"),
|
None => AnyValue::symbol("unknown"),
|
||||||
};
|
};
|
||||||
let trace_collector = t.trace_collector();
|
let trace_collector = t.trace_collector();
|
||||||
t.spawn(Some(rec![AnyValue::symbol("log"), kind.clone(), self.service.clone()]), move |t| {
|
|
||||||
t.linked_task(None, async move {
|
t.linked_task(None, async move {
|
||||||
let mut r = BufReader::new(r);
|
let mut r = BufReader::new(r);
|
||||||
let cause = trace_collector.as_ref().map(
|
let cause = trace_collector.as_ref().map(
|
||||||
|
@ -246,8 +246,9 @@ impl DaemonInstance {
|
||||||
let account = Account::new(None, trace_collector);
|
let account = Account::new(None, trace_collector);
|
||||||
loop {
|
loop {
|
||||||
let mut buf = Vec::new();
|
let mut buf = Vec::new();
|
||||||
if r.read_until(b'\n', &mut buf).await? == 0 {
|
match r.read_until(b'\n', &mut buf).await {
|
||||||
return Ok(LinkedTaskTermination::Normal);
|
Ok(0) | Err(_) => break,
|
||||||
|
Ok(_) => (),
|
||||||
}
|
}
|
||||||
let buf = match std::str::from_utf8(&buf) {
|
let buf = match std::str::from_utf8(&buf) {
|
||||||
Ok(s) => AnyValue::new(s),
|
Ok(s) => AnyValue::new(s),
|
||||||
|
@ -272,7 +273,8 @@ impl DaemonInstance {
|
||||||
Ok(LinkedTaskTermination::Normal)
|
Ok(LinkedTaskTermination::Normal)
|
||||||
});
|
});
|
||||||
Ok(())
|
Ok(())
|
||||||
});
|
})?;
|
||||||
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
fn start(mut self, t: &mut Activation) -> ActorResult {
|
fn start(mut self, t: &mut Activation) -> ActorResult {
|
||||||
|
@ -291,7 +293,7 @@ impl DaemonInstance {
|
||||||
let facet = t.facet.clone();
|
let facet = t.facet.clone();
|
||||||
|
|
||||||
if let Some(r) = child.stderr.take() {
|
if let Some(r) = child.stderr.take() {
|
||||||
self.log(t, facet.clone(), pid, r, "stderr");
|
self.log(t, pid, r, "stderr")?;
|
||||||
}
|
}
|
||||||
|
|
||||||
match self.protocol {
|
match self.protocol {
|
||||||
|
@ -299,7 +301,7 @@ impl DaemonInstance {
|
||||||
Protocol::BinarySyndicate => self.relay_facet(t, &mut child, false)?,
|
Protocol::BinarySyndicate => self.relay_facet(t, &mut child, false)?,
|
||||||
Protocol::None => {
|
Protocol::None => {
|
||||||
if let Some(r) = child.stdout.take() {
|
if let Some(r) = child.stdout.take() {
|
||||||
self.log(t, facet.clone(), pid, r, "stdout");
|
self.log(t, pid, r, "stdout")?;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue