diff --git a/Cargo.lock b/Cargo.lock index 7bc07ad..98d6cd0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2001,6 +2001,7 @@ dependencies = [ "ngt", "prometheus", "prost", + "prost-types", "tokio", "tonic", "tonic-build", diff --git a/Cargo.toml b/Cargo.toml index 3c54501..b718209 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -11,6 +11,7 @@ futures = { version = "0.3", default-features = false } lazy_static = "1.4" prometheus = { version = "0.9", features = ["process"] } prost = "0.6" +prost-types = "0.6" tokio = { version = "0.2", features = ["macros", "rt-threaded", "time"] } tonic = "0.3.1" warp = "0.2" @@ -20,3 +21,7 @@ env_logger = "0.8.2" [build-dependencies] tonic-build = "0.3" + +[[bin]] +name = "vald-agent-ngt-rs" +path = "src/main.rs" diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..ff294ae --- /dev/null +++ b/Dockerfile @@ -0,0 +1,36 @@ +FROM rust:latest AS builder + +RUN apt update \ + && apt install -y \ + build-essential \ + cmake \ + clang \ + g++ \ + gcc \ + git \ + libclang-dev \ + llvm-dev \ + && apt autoclean -y \ + && apt autoremove -y \ + && rm -rf /var/lib/apt/lists/* + +RUN rustup component add rustfmt + +WORKDIR /app + +COPY Makefile . +COPY build.rs . +COPY Cargo.toml . +COPY Cargo.lock . +COPY src src + +RUN make build/release + +FROM gcr.io/distroless/cc AS base + +COPY --from=builder /app/target/release/vald-agent-ngt-rs /vald-agent-ngt-rs +COPY --from=builder /app/target/release/build/ngt-sys-*/out/lib/* /usr/local/lib/ + +ENV LD_LIBRARY_PATH=/usr/local/lib + +ENTRYPOINT [ "/vald-agent-ngt-rs" ] diff --git a/Makefile b/Makefile index dbce6ef..64c7da6 100644 --- a/Makefile +++ b/Makefile @@ -46,7 +46,9 @@ target/release/vald-agent-ngt-rs: \ proto: \ proto/github.com/envoyproxy/protoc-gen-validate \ - proto/github.com/googleapis/googleapis + proto/github.com/gogo/protobuf \ + proto/github.com/gogo/googleapis \ + proto/github.com/protocolbuffers/protobuf proto/github.com/envoyproxy/protoc-gen-validate: mkdir -p proto @@ -54,11 +56,23 @@ proto/github.com/envoyproxy/protoc-gen-validate: https://github.com/envoyproxy/protoc-gen-validate \ proto/github.com/envoyproxy/protoc-gen-validate -proto/github.com/googleapis/googleapis: +proto/github.com/gogo/protobuf: mkdir -p proto git clone --depth 1 \ - https://github.com/googleapis/googleapis \ - proto/github.com/googleapis/googleapis + https://github.com/gogo/protobuf \ + proto/github.com/gogo/protobuf + +proto/github.com/gogo/googleapis: + mkdir -p proto + git clone --depth 1 \ + https://github.com/gogo/googleapis \ + proto/github.com/gogo/googleapis + +proto/github.com/protocolbuffers/protobuf: + mkdir -p proto + git clone --depth 1 \ + https://github.com/protocolbuffers/protobuf \ + proto/github.com/protocolbuffers/protobuf apis/proto/v1: \ proto \ diff --git a/build.rs b/build.rs index 0defa6d..15b71c1 100644 --- a/build.rs +++ b/build.rs @@ -5,7 +5,6 @@ fn main() -> Result<(), Box> { .format(true) .compile( &[ - "apis/proto/v1/errors/errors.proto", "apis/proto/v1/payload/payload.proto", "apis/proto/v1/vald/insert.proto", "apis/proto/v1/vald/object.proto", @@ -18,7 +17,8 @@ fn main() -> Result<(), Box> { &[ ".", "proto", - "proto/github.com/googleapis/googleapis", + "proto/github.com/gogo/googleapis", + "proto/github.com/protocolbuffers/protobuf", "apis/proto", ], )?; diff --git a/src/vald.rs b/src/vald.rs index 45f5fdb..8200199 100644 --- a/src/vald.rs +++ b/src/vald.rs @@ -43,15 +43,15 @@ pub mod core { } } -pub mod errors { +pub mod payload { pub mod v1 { - tonic::include_proto!("errors.v1"); + tonic::include_proto!("payload.v1"); } } -pub mod payload { - pub mod v1 { - tonic::include_proto!("payload.v1"); +pub mod google { + pub mod rpc { + tonic::include_proto!("google.rpc"); } } @@ -155,14 +155,10 @@ impl Insert for ValdImpl { payload: Some(payload::v1::object::stream_location::Payload::Location(loc)), }, Err(st) => payload::v1::object::StreamLocation{ - payload: Some(payload::v1::object::stream_location::Payload::Error(errors::v1::errors::Rpc{ - r#type: "".to_string(), - msg: "".to_string(), + payload: Some(payload::v1::object::stream_location::Payload::Status(google::rpc::Status{ + code: 0, + message: st.to_string(), details: Vec::new(), - error: st.to_string(), - instance: "".to_string(), - status: 0, - roots: Vec::new(), })), }, }; @@ -218,14 +214,10 @@ impl Search for ValdImpl { payload: Some(payload::v1::search::stream_response::Payload::Response(res)), }, Err(st) => payload::v1::search::StreamResponse{ - payload: Some(payload::v1::search::stream_response::Payload::Error(errors::v1::errors::Rpc{ - r#type: "".to_string(), - msg: "".to_string(), + payload: Some(payload::v1::search::stream_response::Payload::Status(google::rpc::Status{ + code: 0, + message: st.to_string(), details: Vec::new(), - error: st.to_string(), - instance: "".to_string(), - status: 0, - roots: Vec::new(), })), }, };