mirror of
https://github.com/xai-org/x-algorithm.git
synced 2026-02-13 03:05:06 +01:00
79 lines
2.3 KiB
Rust
79 lines
2.3 KiB
Rust
use clap::Parser;
|
|
use log::info;
|
|
use std::time::Duration;
|
|
|
|
use tonic::codec::CompressionEncoding;
|
|
use tonic::service::RoutesBuilder;
|
|
use tonic_reflection::server::Builder;
|
|
|
|
use xai_home_mixer_proto as pb;
|
|
use xai_http_server::{CancellationToken, GrpcConfig, HttpServer};
|
|
|
|
use xai_home_mixer::HomeMixerServer;
|
|
use xai_home_mixer::params;
|
|
|
|
#[derive(Parser, Debug)]
|
|
#[command(about = "HomeMixer gRPC Server")]
|
|
struct Args {
|
|
#[arg(long)]
|
|
grpc_port: u16,
|
|
#[arg(long)]
|
|
metrics_port: u16,
|
|
#[arg(long)]
|
|
reload_interval_minutes: u64,
|
|
#[arg(long)]
|
|
chunk_size: usize,
|
|
}
|
|
|
|
#[xai_stats_macro::main(name = "home-mixer")]
|
|
#[tokio::main]
|
|
async fn main() -> anyhow::Result<()> {
|
|
let args = Args::parse();
|
|
xai_init_utils::init().log();
|
|
xai_init_utils::init().rustls();
|
|
info!(
|
|
"Starting server with gRPC port: {}, metrics port: {}, reload interval: {} minutes, chunk size: {}",
|
|
args.grpc_port, args.metrics_port, args.reload_interval_minutes, args.chunk_size,
|
|
);
|
|
|
|
// Create the service implementation
|
|
let service = HomeMixerServer::new().await;
|
|
// Keep a reference to stats_receiver before service is moved
|
|
let reflection_service = Builder::configure()
|
|
.register_encoded_file_descriptor_set(pb::FILE_DESCRIPTOR_SET)
|
|
.build_v1()?;
|
|
|
|
let mut grpc_routes = RoutesBuilder::default();
|
|
|
|
grpc_routes.add_service(
|
|
pb::scored_posts_service_server::ScoredPostsServiceServer::new(service)
|
|
.max_decoding_message_size(params::MAX_GRPC_MESSAGE_SIZE)
|
|
.max_encoding_message_size(params::MAX_GRPC_MESSAGE_SIZE)
|
|
.accept_compressed(CompressionEncoding::Gzip)
|
|
.accept_compressed(CompressionEncoding::Zstd)
|
|
.send_compressed(CompressionEncoding::Gzip)
|
|
.send_compressed(CompressionEncoding::Zstd),
|
|
);
|
|
|
|
grpc_routes.add_service(reflection_service);
|
|
|
|
let grpc_config = GrpcConfig::new(args.grpc_port, grpc_routes.routes());
|
|
|
|
let http_router = axum::Router::default();
|
|
|
|
let mut server = HttpServer::new(
|
|
args.metrics_port,
|
|
http_router,
|
|
Some(grpc_config),
|
|
CancellationToken::new(),
|
|
Duration::from_secs(20),
|
|
)
|
|
.await?;
|
|
|
|
server.set_readiness(true);
|
|
info!("Server ready");
|
|
server.wait_for_termination().await;
|
|
info!("Server shutdown complete");
|
|
Ok(())
|
|
}
|