libomni/types/db/v1/
storage.rs

1use serde::Serialize;
2use chrono::{DateTime, Utc};
3
4#[derive(Debug, sqlx::FromRow, Serialize)]
5pub struct StorageClass {
6    pub id: i64,
7    pub name: String,
8    pub provisioner: String,
9    pub reclaim_policy: String,        // enum: 'Delete', 'Retain' TODO: @tristanpoland add recycle
10    pub volume_binding_mode: String,   // enum: 'Immediate', 'WaitForFirstConsumer'
11    pub allow_volume_expansion: bool,
12    pub storage_type: String,          // 'local-disk', 'local-resilient', 'distributed', 'geo-replicated'
13    pub default_filesystem: String,    // enum: 'ext4', 'xfs', 'btrfs', 'zfs'
14    pub created_at: DateTime<Utc>,
15    pub updated_at: DateTime<Utc>,
16}
17
18#[derive(Debug, sqlx::FromRow, Serialize)]
19pub struct StorageVolume {
20    pub id: i64,
21    pub app_id: i64,
22    pub name: String,
23    pub size_gb: i64,
24    pub storage_class: String,
25    pub access_mode: String,       // enum: 'ReadWriteOnce', 'ReadOnlyMany', 'ReadWriteMany'
26    pub status: String,            // enum: 'Provisioned', 'Bound', 'Mounted', 'Released', 'Deleting', 'Deleted'
27    pub node_id: i64,
28    pub encryption_enabled: bool,
29    pub persistence_level: String, // enum: 'Basic', 'Enhanced', 'High', 'Maximum'
30    pub write_concern: String,     // enum: 'WriteAcknowledged', 'WriteDurable', 'WriteReplicated', 'WriteDistributed'
31    pub reclaim_policy: String,    // enum: 'Delete', 'Retain'
32    pub filesystem_type: Option<String>,
33    pub storage_class_id: i64,
34    pub created_at: DateTime<Utc>,
35    pub updated_at: DateTime<Utc>,
36    pub snapshot_id: Option<i64>,
37    pub mount_path: Option<String>,
38}
39
40#[derive(Debug, sqlx::FromRow, Serialize)]
41pub struct StorageSnapshot {
42    pub id: i64,
43    pub volume_id: i64,
44    pub name: String,
45    pub size_gb: i64,
46    pub created_at: DateTime<Utc>,
47    pub status: String,   // enum: 'Creating', 'Available', 'Deleting', 'Deleted'
48    pub description: Option<String>,
49    pub retention_date: Option<DateTime<Utc>>,
50}
51
52#[derive(Debug, sqlx::FromRow, Serialize)]
53pub struct StorageMigration {
54    pub id: i64,
55    pub source_volume_id: i64,
56    pub destination_volume_id: i64,
57    pub migration_type: String, // enum: 'StorageClass', 'Node', 'Zone', 'Environment'
58    pub status: String, // enum: 'Pending', 'Copying', 'Syncing', 'ReadyForCutover', 'Completed', 'Failed'
59    pub progress_percent: i32,
60    pub started_at: DateTime<Utc>,
61    pub completed_at: Option<DateTime<Utc>>,
62    pub is_online: bool,
63    pub error_message: Option<String>,
64    pub created_by: String,
65}
66
67#[derive(Debug, sqlx::FromRow, Serialize)]
68pub struct StorageQosPolicy {
69    pub id: i64,
70    pub name: String,
71    pub max_iops: Option<i32>,
72    pub max_throughput_mbps: Option<i32>,
73    pub burst_iops: Option<i32>,
74    pub burst_duration_seconds: Option<i32>,
75    pub latency_target_ms: Option<i32>,
76    pub created_at: DateTime<Utc>,
77    pub updated_at: DateTime<Utc>
78}