use crate::models::{CacheType, DatabaseType, SearchType, ServiceType};
pub struct ServiceSignature {
pub port: u16,
pub process_pattern: &'static str,
pub service_type: ServiceType,
pub name: &'static str,
pub systemd_unit: Option<&'static str>,
}
pub struct ServiceSignatures;
impl ServiceSignatures {
pub fn all() -> Vec<ServiceSignature> {
vec![
ServiceSignature {
port: 5432,
process_pattern: "postgres",
service_type: ServiceType::Database(DatabaseType::Postgres),
name: "PostgreSQL",
systemd_unit: Some("postgresql.service"),
},
ServiceSignature {
port: 3306,
process_pattern: "mysqld",
service_type: ServiceType::Database(DatabaseType::MySQL),
name: "MySQL",
systemd_unit: Some("mysql.service"),
},
ServiceSignature {
port: 27017,
process_pattern: "mongod",
service_type: ServiceType::Database(DatabaseType::MongoDB),
name: "MongoDB",
systemd_unit: Some("mongod.service"),
},
ServiceSignature {
port: 6379,
process_pattern: "redis-server",
service_type: ServiceType::Cache(CacheType::Redis),
name: "Redis",
systemd_unit: Some("redis-server.service"),
},
ServiceSignature {
port: 11211,
process_pattern: "memcached",
service_type: ServiceType::Cache(CacheType::Memcached),
name: "Memcached",
systemd_unit: Some("memcached.service"),
},
ServiceSignature {
port: 9200,
process_pattern: "elasticsearch",
service_type: ServiceType::Search(SearchType::Elasticsearch),
name: "Elasticsearch",
systemd_unit: Some("elasticsearch.service"),
},
ServiceSignature {
port: 7700,
process_pattern: "meilisearch",
service_type: ServiceType::Search(SearchType::Meilisearch),
name: "Meilisearch",
systemd_unit: Some("meilisearch.service"),
},
ServiceSignature {
port: 3000,
process_pattern: "node",
service_type: ServiceType::HttpServer,
name: "Node.js Dev Server",
systemd_unit: None,
},
ServiceSignature {
port: 8000,
process_pattern: "python",
service_type: ServiceType::HttpServer,
name: "Python Dev Server",
systemd_unit: None,
},
ServiceSignature {
port: 8080,
process_pattern: "java",
service_type: ServiceType::HttpServer,
name: "Java Server",
systemd_unit: None,
},
ServiceSignature {
port: 4200,
process_pattern: "node",
service_type: ServiceType::HttpServer,
name: "Angular Dev Server",
systemd_unit: None,
},
ServiceSignature {
port: 5173,
process_pattern: "node",
service_type: ServiceType::HttpServer,
name: "Vite Dev Server",
systemd_unit: None,
},
]
}
pub fn find_by_port(port: u16) -> Option<ServiceSignature> {
Self::all().into_iter().find(|sig| sig.port == port)
}
pub fn find_by_process(process_name: &str) -> Option<ServiceSignature> {
Self::all()
.into_iter()
.find(|sig| process_name.contains(sig.process_pattern))
}
}