omni_orchestrator/schemas/v1/api/
workers.rs

1//! Worker management module for the OmniOrchestrator API
2//! 
3//! This module provides a REST API for managing workers, including:
4//! - Listing workers
5//! - Creating new workers
6//! - Updating existing workers
7//! - Getting worker details and statistics
8//! - Starting and stopping workers
9//! - Scaling workers
10//! - Deleting workers
11
12use super::super::db::queries as db;
13use rocket::http::Status;
14use rocket::serde::json::{json, Json, Value};
15use rocket::{delete, get, http::ContentType, post, put, Data, State};
16use serde::{Deserialize, Serialize};
17use sqlx::MySql;
18use std::collections::HashMap;
19use std::sync::Arc;
20use tokio::sync::RwLock;
21
22use libomni::types::db::v1 as types;
23use types::worker::Worker;
24
25/// List all workers with pagination support.
26#[get("/workers?<page>&<per_page>")]
27pub async fn list_workers(
28    page: Option<u64>,
29    per_page: Option<u64>,
30    pool: &State<sqlx::Pool<MySql>>,
31) -> Result<Json<Vec<Worker>>, Status> {
32    let workers = db::worker::list_workers(pool, page, per_page).await.map_err(|_| Status::InternalServerError)?;
33    Ok(Json(workers))
34}
35
36/// Get a worker by its ID.
37#[get("/workers/<worker_id>")]
38pub async fn get_worker_by_id(
39    worker_id: i64,
40    pool: &State<sqlx::Pool<MySql>>,
41) -> Result<Json<Worker>, Status> {
42    let worker = db::worker::get_worker_by_id(pool, worker_id).await.map_err(|_| Status::NotFound)?;
43    Ok(Json(worker))
44}