blob: 8aa4e7c60e8e3d4c84288f74b86fe353197c35b5 [file] [log] [blame]
// Copyright 2021 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
use {
anyhow::Error,
fidl::prelude::*,
fidl::AsyncChannel,
fidl_fuchsia_process_lifecycle::{LifecycleRequest, LifecycleRequestStream},
fuchsia_async as fasync,
fuchsia_inspect::{component, health::Reporter},
fuchsia_runtime::{take_startup_handle, HandleInfo, HandleType},
fuchsia_zircon as zx,
futures::TryStreamExt,
tracing::{debug, info},
};
#[fuchsia::main]
async fn main() -> Result<(), Error> {
info!("Started diagnostics publisher");
debug!("I'm a debug log from the publisher!");
let _inspect_server_task = inspect_runtime::publish(
component::inspector(),
inspect_runtime::PublishOptions::default(),
);
component::health().set_ok();
match take_startup_handle(HandleInfo::new(HandleType::Lifecycle, 0)) {
Some(lifecycle_handle) => {
let chan: zx::Channel = lifecycle_handle.into();
let async_chan = AsyncChannel::from(fasync::Channel::from_channel(chan));
let mut req_stream = LifecycleRequestStream::from_channel(async_chan);
if let Some(LifecycleRequest::Stop { control_handle: c }) =
req_stream.try_next().await.expect("Failure receiving lifecycle FIDL message")
{
info!("Finishing through Stop");
c.shutdown();
std::process::exit(0);
}
unreachable!("Unexpected closure of the lifecycle channel");
}
None => {
info!("Finishing normally");
std::process::abort();
}
}
}