Skip to main content

systemprompt_mcp/orchestration/
state.rs

1use 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}