Skip to content

Commit

Permalink
BuckEvent: provide a Buck Event Publisher proto
Browse files Browse the repository at this point in the history
Provide a BuckEvent Publisher service which emits BuckEvents to an
external server implementation.

Closes #226
  • Loading branch information
sluongng committed Jun 17, 2024
1 parent 9528c3d commit f2816de
Show file tree
Hide file tree
Showing 6 changed files with 106 additions and 0 deletions.
1 change: 1 addition & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ members = [
"app/buck2_event_observer",
"app/buck2_events",
"app/buck2_event_log",
"app/buck2_event_publisher_proto",
"app/buck2_execute",
"app/buck2_execute_impl",
"app/buck2_external_cells",
Expand Down
18 changes: 18 additions & 0 deletions app/buck2_event_publisher_proto/BUCK
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
load("@fbcode//buck2:proto_defs.bzl", "rust_protobuf_library")
load("@fbsource//tools/build_defs:glob_defs.bzl", "glob")

oncall("build_infra")

rust_protobuf_library(
name = "buck2_event_publisher_proto",
srcs = glob(["src/**/*.rs"]),
build_script = "build.rs",
build_env = {
"BUCK_HACK_DATA_PROTOC_INCLUDE": "$(location //buck2/app/buck2_data:data_proto)",
},
protos = ["event_publisher.proto"],
deps = [
"fbsource//third-party/rust:tonic",
"//buck2/app/buck2_data:buck2_data",
],
)
14 changes: 14 additions & 0 deletions app/buck2_event_publisher_proto/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
[package]
name = "buck2_event_publisher_proto"

edition = "2021"
license = { workspace = true }
repository = { workspace = true }
version = "0.1.0"

[dependencies]
prost = { workspace = true }
tonic = { workspace = true }

[build-dependencies]
buck2_protoc_dev = { workspace = true }
28 changes: 28 additions & 0 deletions app/buck2_event_publisher_proto/build.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
/*
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under both the MIT license found in the
* LICENSE-MIT file in the root directory of this source tree and the Apache
* License, Version 2.0 found in the LICENSE-APACHE file in the root directory
* of this source tree.
*/

use std::env;
use std::io;
use std::path::PathBuf;

fn main() -> io::Result<()> {
let proto_files = &["event_publisher.proto"];

let data_include = if let Ok(value) = env::var("BUCK_HACK_DATA_PROTOC_INCLUDE") {
let path = PathBuf::from(value);
path.parent().unwrap().to_str().unwrap().to_owned()
} else {
"../buck2_data".to_owned()
};

buck2_protoc_dev::configure()
.setup_protoc()
.extern_path(".buck.data", "::buck2_data")
.compile(proto_files, &[".", &data_include])
}
33 changes: 33 additions & 0 deletions app/buck2_event_publisher_proto/event_publisher.proto
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
/*
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under both the MIT license found in the
* LICENSE-MIT file in the root directory of this source tree and the Apache
* License, Version 2.0 found in the LICENSE-APACHE file in the root directory
* of this source tree.
*/

syntax = "proto3";

import "data.proto";

package event_publisher;

message BuckEventRequest {
// A trace-unique 64-bit identifying the stream.
uint64 stream_id = 1;

buck.data.BuckEvent event = 2;
};

message BuckEventResponse {
// A trace-unique 64-bit identifying the stream.
uint64 stream_id = 1;

// The span ID of the event that has been committed
uint64 span_id = 2;
};

service BuckEventPublisher {
rpc StreamBuckEvent(stream BuckEventRequest) returns (stream BuckEventResponse);
};
12 changes: 12 additions & 0 deletions app/buck2_event_publisher_proto/src/lib.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
/*
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under both the MIT license found in the
* LICENSE-MIT file in the root directory of this source tree and the Apache
* License, Version 2.0 found in the LICENSE-APACHE file in the root directory
* of this source tree.
*/

#![feature(error_generic_member_access)]

tonic::include_proto!("event_publisher");

0 comments on commit f2816de

Please sign in to comment.