| 784 | } |
| 785 | |
| 786 | async fn get_relay_gateway( |
| 787 | &self, |
| 788 | request: Request<api::GetRelayGatewayRequest>, |
| 789 | ) -> Result<Response<api::GetRelayGatewayResponse>, Status> { |
| 790 | let req = request.get_ref(); |
| 791 | let tenant_id = Uuid::from_str(&req.tenant_id).map_err(|e| e.status())?; |
| 792 | let relay_id = RelayId::from_str(&req.relay_id).map_err(|e| e.status())?; |
| 793 | |
| 794 | // The tenant_id is part of the relay PK. |
| 795 | self.validator |
| 796 | .validate( |
| 797 | request.extensions(), |
| 798 | validator::ValidateGatewaysAccess::new(validator::Flag::List, tenant_id), |
| 799 | ) |
| 800 | .await?; |
| 801 | |
| 802 | let relay = gateway::get_relay_gateway(tenant_id, relay_id) |
| 803 | .await |
| 804 | .map_err(|e| e.status())?; |
| 805 | |
| 806 | let mut resp = Response::new(api::GetRelayGatewayResponse { |
| 807 | relay_gateway: Some(api::RelayGateway { |
| 808 | tenant_id: relay.tenant_id.to_string(), |
| 809 | relay_id: relay.relay_id.to_string(), |
| 810 | name: relay.name, |
| 811 | description: relay.description, |
| 812 | stats_interval: relay.stats_interval_secs as u32, |
| 813 | region_config_id: relay.region_config_id.to_string(), |
| 814 | }), |
| 815 | created_at: Some(helpers::datetime_to_prost_timestamp(&relay.created_at)), |
| 816 | updated_at: Some(helpers::datetime_to_prost_timestamp(&relay.updated_at)), |
| 817 | last_seen_at: relay |
| 818 | .last_seen_at |
| 819 | .as_ref() |
| 820 | .map(helpers::datetime_to_prost_timestamp), |
| 821 | }); |
| 822 | |
| 823 | resp.metadata_mut() |
| 824 | .insert("x-log-tenant_id", req.tenant_id.parse().unwrap()); |
| 825 | resp.metadata_mut() |
| 826 | .insert("x-log-relay_id", req.relay_id.parse().unwrap()); |
| 827 | |
| 828 | Ok(resp) |
| 829 | } |
| 830 | |
| 831 | async fn update_relay_gateway( |
| 832 | &self, |