systemprompt_mcp/orchestration/
state.rs1use crate::error::McpDomainResult;
2use systemprompt_database::{DbPool, ServiceRepository};
3
4use super::models::McpServiceState;
5
6#[derive(Debug, Clone)]
7pub struct ServiceStateService {
8 service_repo: ServiceRepository,
9}
10
11impl ServiceStateService {
12 pub fn new(db_pool: &DbPool) -> McpDomainResult<Self> {
13 Ok(Self {
14 service_repo: ServiceRepository::new(db_pool)?,
15 })
16 }
17
18 pub async fn get_mcp_service(&self, name: &str) -> McpDomainResult<Option<McpServiceState>> {
19 let service = self.service_repo.get_service_by_name(name).await?;
20 Ok(service.map(|s| McpServiceState {
21 name: s.name,
22 host: "127.0.0.1".to_owned(),
23 port: s.port as u16,
24 status: s.status,
25 }))
26 }
27
28 pub async fn list_mcp_services(&self) -> McpDomainResult<Vec<McpServiceState>> {
29 let services = self.service_repo.get_mcp_services().await?;
30 Ok(services
31 .into_iter()
32 .map(|s| McpServiceState {
33 name: s.name,
34 host: "127.0.0.1".to_owned(),
35 port: s.port as u16,
36 status: s.status,
37 })
38 .collect())
39 }
40
41 pub async fn list_running_mcp_services(&self) -> McpDomainResult<Vec<McpServiceState>> {
42 let services = self.service_repo.get_mcp_services().await?;
43 Ok(services
44 .into_iter()
45 .filter(|s| s.status == "running")
46 .map(|s| McpServiceState {
47 name: s.name,
48 host: "127.0.0.1".to_owned(),
49 port: s.port as u16,
50 status: s.status,
51 })
52 .collect())
53 }
54}