use crate::pb::remote_service_server::RemoteService; use crate::pb::*; use crate::remote::find_remote::{find_remote_repository, find_remote_root_ref}; use super::GitksService; #[tonic::async_trait] impl RemoteService for GitksService { async fn find_remote_repository( &self, request: tonic::Request, ) -> Result, tonic::Status> { let m = crate::metrics::RequestMetrics::new("gitks.RemoteService/FindRemoteRepository"); let inner = request.into_inner(); let span = tracing::info_span!("remote.find_remote_repository", remote_url = %inner.remote_url); let _enter = span.enter(); tracing::info!(remote_url = %inner.remote_url, "find_remote_repository"); let resp = find_remote_repository(inner).map_err(super::into_status)?; tracing::info!(refs_count = resp.refs.len(), exists = resp.exists, "find_remote_repository done"); m.record("ok"); Ok(tonic::Response::new(resp)) } async fn find_remote_root_ref( &self, request: tonic::Request, ) -> Result, tonic::Status> { let m = crate::metrics::RequestMetrics::new("gitks.RemoteService/FindRemoteRootRef"); let inner = request.into_inner(); let span = tracing::info_span!("remote.find_remote_root_ref", remote_url = %inner.remote_url); let _enter = span.enter(); tracing::info!(remote_url = %inner.remote_url, "find_remote_root_ref"); let resp = find_remote_root_ref(inner).map_err(super::into_status)?; tracing::info!(ref_name = %resp.ref_name, target_oid = %resp.target_oid, "find_remote_root_ref done"); m.record("ok"); Ok(tonic::Response::new(resp)) } async fn update_remote_mirror( &self, request: tonic::Request, ) -> Result, tonic::Status> { let m = crate::metrics::RequestMetrics::new("gitks.RemoteService/UpdateRemoteMirror"); let inner = request.into_inner(); let repo = self.repo_label(inner.repository.as_ref()); let span = tracing::info_span!("remote.update_remote_mirror", %repo); let _enter = span.enter(); tracing::info!(repo = %repo, remote_url = %inner.remote_url, force = inner.force, prune = inner.prune, "update_remote_mirror"); let _rate = self.acquire_rate_limit(inner.repository.as_ref()).await?; let gb = self.resolve(inner.repository.as_ref())?; let resp = gb.update_remote_mirror(inner).map_err(super::into_status)?; tracing::info!(ok = resp.ok, "update_remote_mirror done"); m.record("ok"); Ok(tonic::Response::new(resp)) } }