use anyhow::Result;
use cloudpub_sdk::protocol::{Auth, Endpoint, Protocol};
use cloudpub_sdk::Connection;
use std::io;
use std::path::Path;
#[tokio::main]
async fn main() -> Result<()> {
println!("1. Подключение к серверу");
let mut conn = Connection::builder()
.config_path(Path::new("/tmp/cloudpub.toml"))
.log_level("info")
.verbose(true)
.credentials("admin@example.com", "test")
.timeout_secs(3)
.build()
.await?;
println!("2. Публикация нового HTTP сервиса...");
let endpoint = conn
.publish(
Protocol::Http, "localhost:8080".to_string(), Some("Тестовый HTTP сервис".to_string()), Some(Auth::None), None, None, None, )
.await?;
println!(" Сервис опубликован: {}", endpoint.as_url());
println!("3. Публикация нового TCP сервиса...");
let endpoint = conn
.publish(
Protocol::Tcp, "localhost:22".to_string(), Some("Тестовый TCP сервис".to_string()), Some(Auth::None), None, None, None, )
.await?;
println!(" Сервис опубликован: {}", endpoint.as_url());
let service_guid = endpoint.guid.clone();
println!("4. Список сервисов:");
let services = conn.ls().await?;
for service in &services {
println!(" {}: {}", service.guid, service.as_url());
}
println!("5. Запуск сервиса {}...", service_guid);
conn.start(service_guid.clone()).await?;
println!(" - Сервис запущен");
println!("6. Проверка статуса сервиса...");
let services = conn.ls().await?;
if let Some(service) = services.iter().find(|s| s.guid == service_guid) {
println!(
" - Статус сервиса: {}",
service.status.as_ref().unwrap_or(&"Неизвестно".to_string())
);
}
let mut buffer = String::new();
io::stdin()
.read_line(&mut buffer)
.expect("Не удалось прочитать строку");
println!("7. Остановка сервиса {}...", service_guid);
conn.stop(service_guid.clone()).await?;
println!(" - Сервис остановлен");
println!("8. Отмена регистрации сервиса {}...", service_guid);
conn.unpublish(service_guid.clone()).await?;
println!(" - Регистрация сервиса отменена");
println!("9. Финальный список сервисов...");
let services = conn.ls().await?;
println!(" - Осталось {} сервис(ов)", services.len());
println!("10. Очистка всех сервисов...");
conn.clean().await?;
println!(" - Все сервисы удалены");
let services = conn.ls().await?;
println!(" Финальное количество: {} сервис(ов)", services.len());
println!("Демонстрация успешно завершена!");
Ok(())
}