use schemars::JsonSchema;
use sea_orm::entity::prelude::*;
use serde::{Deserialize, Serialize};
pub mod error;
mod scheduler;
pub mod service;
pub mod workflow;
pub use error::JobError;
pub use service::JobConfig;
#[derive(Clone, Debug, PartialEq, Eq, DeriveEntityModel, Serialize)]
#[sea_orm(table_name = "job")]
pub struct Model {
#[sea_orm(primary_key)]
pub id: i64,
pub name: String,
pub created_at: DateTimeUtc,
pub schema: Json,
pub code: String,
pub code_filename: Option<String>,
pub cmakelists: Option<String>,
pub status: JobStatus,
pub compiler: Option<String>,
pub cluster_access_name: Option<String>,
pub scheduler: Option<JobScheduler>,
pub cluster: Option<String>,
pub queue: Option<String>,
pub num_nodes: Option<i32>,
pub walltime: Option<String>,
pub remote_job_id: Option<String>,
}
#[derive(
Clone, Debug, PartialEq, Eq, EnumIter, DeriveActiveEnum, Serialize, Deserialize, JsonSchema,
)]
#[sea_orm(
rs_type = "String",
db_type = "String(StringLen::None)",
rename_all = "camelCase"
)]
#[serde(rename_all = "snake_case")]
pub enum JobScheduler {
Oarsub,
}
#[derive(
Clone,
Debug,
PartialEq,
Eq,
EnumIter,
DeriveActiveEnum,
Serialize,
Copy,
Deserialize,
JsonSchema,
)]
#[sea_orm(
rs_type = "String",
db_type = "String(StringLen::None)",
rename_all = "snake_case"
)]
#[serde(rename_all = "snake_case")]
pub enum JobStatus {
Created,
Queued,
Running,
Finished,
Interupted,
SchedulerError,
Failed,
Canceled,
Finishing,
}
impl JobStatus {
pub fn unfinished_variants() -> &'static [JobStatus] {
&[
JobStatus::Created,
JobStatus::Queued,
JobStatus::Running,
JobStatus::Finishing,
]
}
pub fn unfinished_values() -> impl Iterator<Item = String> {
JobStatus::unfinished_variants()
.iter()
.map(|v| v.to_value())
}
pub fn is_done(&self) -> bool {
match self {
JobStatus::Finished
| JobStatus::Failed
| JobStatus::Canceled
| JobStatus::SchedulerError => true,
_ => false,
}
}
}
#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)]
pub enum Relation {
}
impl ActiveModelBehavior for ActiveModel {}