1use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Default)]
7pub struct Config {
8 pub base_url: String,
10 pub private_key: String,
12 pub dashboard_user: Option<DashboardUser>,
14 pub dashboard_hmac_key: Option<String>,
17}
18
19#[derive(Debug, Clone, Default)]
21pub struct ListOptions {
22 pub page: Option<i64>,
23 pub limit: Option<i64>,
24}
25
26#[derive(Debug, Clone, Deserialize)]
28pub struct PaginationMeta {
29 pub page: i64,
30 pub limit: i64,
31 pub total: i64,
32 #[serde(rename = "totalPages")]
33 pub total_pages: i64,
34}
35
36#[derive(Debug, Clone, Deserialize)]
38pub struct PaginatedResponse<T> {
39 pub items: Vec<T>,
40 pub pagination: PaginationMeta,
41}
42
43#[derive(Debug, Clone, Deserialize)]
45pub struct CursorPaginatedResponse<T> {
46 pub items: Vec<T>,
47 #[serde(rename = "nextCursor")]
48 pub next_cursor: Option<i64>,
49}
50
51#[derive(Debug, Clone, Deserialize)]
53pub struct IdResponse {
54 pub id: i64,
55}
56
57pub type ClientSessionStatus = String;
59pub const CLIENT_SESSION_STATUS_CONNECTED: &str = "connected";
60pub const CLIENT_SESSION_STATUS_ACTIVE: &str = "active";
61pub const CLIENT_SESSION_STATUS_UNHEALTHY: &str = "unhealthy";
62pub const CLIENT_SESSION_STATUS_DISCONNECTED: &str = "disconnected";
63pub const CLIENT_SESSION_STATUS_EXPIRED: &str = "expired";
64pub const CLIENT_SESSION_STATUS_UNKNOWN: &str = "unknown";
65
66pub type LicenseQuotaState = String;
68pub const LICENSE_QUOTA_STATE_OK: &str = "ok";
69pub const LICENSE_QUOTA_STATE_EXCEEDED: &str = "exceeded";
70
71pub type LicenseStatus = String;
73pub const LICENSE_STATUS_VALID: &str = "valid";
74pub const LICENSE_STATUS_EXPIRING: &str = "expiring";
75pub const LICENSE_STATUS_GRACE: &str = "grace";
76pub const LICENSE_STATUS_EXPIRED_ACCESS: &str = "expired_access";
77pub const LICENSE_STATUS_EXPIRED: &str = "expired";
78
79#[derive(Debug, Clone, Serialize, Deserialize)]
80pub struct Account {
81 pub id: i64,
82 pub name: String,
83 pub description: String,
84 #[serde(rename = "iconUrl", skip_serializing_if = "Option::is_none")]
85 pub icon_url: Option<String>,
86 #[serde(rename = "providerInfo", skip_serializing_if = "Option::is_none")]
87 pub provider_info: Option<serde_json::Value>,
88 #[serde(rename = "liveVolume")]
89 pub live_volume: i64,
90 #[serde(rename = "totalVolume")]
91 pub total_volume: i64,
92 #[serde(rename = "quotaLimit")]
93 pub quota_limit: i64,
94 #[serde(rename = "quotaExcessPct")]
95 pub quota_excess_pct: i32,
96 #[serde(rename = "isActive")]
97 pub is_active: bool,
98 pub locked: bool,
99 #[serde(rename = "createdAt")]
100 pub created_at: String,
101 #[serde(rename = "updatedAt")]
102 pub updated_at: String,
103}
104
105#[derive(Debug, Clone, Serialize, Deserialize)]
106pub struct User {
107 pub id: i64,
108 #[serde(rename = "accountId")]
109 pub account_id: i64,
110 pub username: String,
111 pub email: String,
112 pub name: String,
113 #[serde(rename = "isActive")]
114 pub is_active: bool,
115}
116
117#[derive(Debug, Clone, Serialize, Deserialize)]
118pub struct Region {
119 pub id: i64,
120 #[serde(rename = "exportId")]
121 pub export_id: String,
122 #[serde(rename = "accountId")]
123 pub account_id: i64,
124 pub name: String,
125 pub dns: String,
126 #[serde(rename = "liveVolume")]
127 pub live_volume: i64,
128 #[serde(rename = "totalVolume")]
129 pub total_volume: i64,
130 #[serde(rename = "isActive")]
131 pub is_active: bool,
132 #[serde(rename = "createdAt")]
133 pub created_at: String,
134 #[serde(rename = "updatedAt")]
135 pub updated_at: String,
136}
137
138#[derive(Debug, Clone, Serialize, Deserialize)]
139pub struct RegionCluster {
140 pub id: i64,
141 #[serde(rename = "exportId")]
142 pub export_id: String,
143 #[serde(rename = "regionId")]
144 pub region_id: i64,
145 pub name: String,
146 #[serde(rename = "defaultCluster")]
147 pub default_cluster: bool,
148 #[serde(rename = "isReady")]
149 pub is_ready: bool,
150 #[serde(rename = "isActive")]
151 pub is_active: bool,
152 #[serde(rename = "createdAt")]
153 pub created_at: String,
154 #[serde(rename = "updatedAt")]
155 pub updated_at: String,
156}
157
158#[derive(Debug, Clone, Serialize, Deserialize)]
159pub struct Storage {
160 pub id: i64,
161 pub uuid: String,
162 pub account: Ref,
163 #[serde(rename = "regionInfo")]
164 pub region_info: Ref,
165 pub name: String,
166 #[serde(skip_serializing_if = "Option::is_none")]
167 pub description: Option<String>,
168 #[serde(rename = "storageType")]
169 pub storage_type: String,
170 #[serde(rename = "providerType")]
171 pub provider_type: String,
172 pub endpoint: String,
173 #[serde(skip_serializing_if = "Option::is_none")]
174 pub region: Option<String>,
175 #[serde(skip_serializing_if = "Option::is_none")]
176 pub bucket: Option<String>,
177 #[serde(skip_serializing_if = "Option::is_none")]
178 pub base: Option<String>,
179 #[serde(rename = "blockRegion", skip_serializing_if = "Option::is_none")]
180 pub block_region: Option<String>,
181 #[serde(rename = "blockSize", skip_serializing_if = "Option::is_none")]
182 pub block_size: Option<i32>,
183 #[serde(rename = "isActive")]
184 pub is_active: bool,
185 #[serde(rename = "createdAt")]
186 pub created_at: String,
187 #[serde(rename = "updatedAt")]
188 pub updated_at: String,
189}
190
191#[derive(Debug, Clone, Serialize, Deserialize)]
192pub struct BlockVolume {
193 pub id: String,
194 #[serde(skip_serializing_if = "Option::is_none")]
195 pub name: Option<String>,
196 #[serde(rename = "clusterName", skip_serializing_if = "Option::is_none")]
197 pub cluster_name: Option<String>,
198 #[serde(rename = "clusterUuid", skip_serializing_if = "Option::is_none")]
199 pub cluster_uuid: Option<String>,
200 #[serde(rename = "shardId")]
201 pub shard_id: i64,
202 #[serde(rename = "regionClusterId")]
203 pub region_cluster_id: i64,
204 #[serde(rename = "clusterReady")]
205 pub cluster_ready: bool,
206 #[serde(rename = "isActive")]
207 pub is_active: bool,
208 #[serde(rename = "createdAt")]
209 pub created_at: String,
210 #[serde(rename = "updatedAt")]
211 pub updated_at: String,
212}
213
214#[derive(Debug, Clone, Serialize, Deserialize)]
215pub struct Volume {
216 pub id: i64,
217 pub account: Ref,
218 pub storage: Ref,
219 pub region: Ref,
220 #[serde(rename = "regionCluster", skip_serializing_if = "Option::is_none")]
221 pub region_cluster: Option<Ref>,
222 pub name: String,
223 #[serde(skip_serializing_if = "Option::is_none")]
224 pub description: Option<String>,
225 #[serde(rename = "volumeType")]
226 pub volume_type: String,
227 #[serde(rename = "storageType", skip_serializing_if = "Option::is_none")]
228 pub storage_type: Option<String>,
229 pub encryption: bool,
230 #[serde(rename = "quotaLimit")]
231 pub quota_limit: i64,
232 #[serde(rename = "liveVolume")]
233 pub live_volume: i64,
234 #[serde(rename = "totalVolume")]
235 pub total_volume: i64,
236 #[serde(rename = "pendingVolume")]
237 pub pending_volume: i64,
238 #[serde(rename = "liveInactiveVolume")]
239 pub live_inactive_volume: i64,
240 pub locked: bool,
241 #[serde(rename = "retentionPeriod")]
242 pub retention_period: i32,
243 #[serde(rename = "gracePeriod")]
244 pub grace_period: i32,
245 #[serde(rename = "forkGracePeriod")]
246 pub fork_grace_period: i32,
247 #[serde(rename = "eventLogRetentionPeriod")]
248 pub event_log_retention_period: i32,
249 #[serde(rename = "isActive")]
250 pub is_active: bool,
251 #[serde(rename = "isCleanupMetaEnabled")]
252 pub is_cleanup_meta_enabled: bool,
253 #[serde(rename = "isCleanupStorageEnabled")]
254 pub is_cleanup_storage_enabled: bool,
255 #[serde(rename = "isCleanupVaultEnabled")]
256 pub is_cleanup_vault_enabled: bool,
257 #[serde(rename = "createdAt")]
258 pub created_at: String,
259 #[serde(rename = "updatedAt")]
260 pub updated_at: String,
261}
262
263#[derive(Debug, Clone, Serialize, Deserialize)]
264pub struct Fork {
265 pub fid: i32,
266 pub name: String,
267 #[serde(rename = "parentFid")]
268 pub parent_fid: i32,
269 #[serde(rename = "parentName")]
270 pub parent_name: String,
271 #[serde(rename = "snapshotTs")]
272 pub snapshot_ts: i64,
273 #[serde(rename = "createdBy", skip_serializing_if = "Option::is_none")]
274 pub created_by: Option<i64>,
275 #[serde(rename = "createdAt")]
276 pub created_at: i64,
277 #[serde(rename = "childrenCount")]
278 pub children_count: i32,
279 #[serde(skip_serializing_if = "Option::is_none")]
280 pub inactive: Option<bool>,
281 #[serde(rename = "inactiveAt", skip_serializing_if = "Option::is_none")]
282 pub inactive_at: Option<i64>,
283 pub status: String,
284 pub size: i64,
285}
286
287#[derive(Debug, Clone, Serialize, Deserialize)]
288pub struct ForkTreeEntry {
289 pub inode: i64,
290 pub name: String,
291 pub kind: String,
292 pub size: i64,
293 pub mtime: i64,
294 pub ctime: i64,
295 #[serde(rename = "creatorId", skip_serializing_if = "Option::is_none")]
296 pub creator_id: Option<i64>,
297 #[serde(rename = "updaterId", skip_serializing_if = "Option::is_none")]
298 pub updater_id: Option<i64>,
299}
300
301#[derive(Debug, Clone, Serialize, Deserialize)]
302pub struct ForkEntryDetail {
303 pub inode: i64,
304 pub path: String,
305 pub name: String,
306 pub kind: String,
307 pub size: i64,
308 pub mtime: i64,
309 pub ctime: i64,
310 pub generation: i64,
311 #[serde(skip_serializing_if = "Option::is_none")]
312 pub owner: Option<String>,
313 #[serde(skip_serializing_if = "Option::is_none")]
314 pub mode: Option<i32>,
315 #[serde(skip_serializing_if = "Option::is_none")]
316 pub xattrs: Option<serde_json::Value>,
317 #[serde(rename = "creatorId", skip_serializing_if = "Option::is_none")]
318 pub creator_id: Option<i64>,
319 #[serde(rename = "updaterId", skip_serializing_if = "Option::is_none")]
320 pub updater_id: Option<i64>,
321}
322
323#[derive(Debug, Clone, Serialize, Deserialize)]
324pub struct ForkEntryVersion {
325 pub generation: i64,
326 pub size: i64,
327 pub mtime: i64,
328 #[serde(rename = "updaterId", skip_serializing_if = "Option::is_none")]
329 pub updater_id: Option<i64>,
330 #[serde(rename = "contentHash", skip_serializing_if = "Option::is_none")]
331 pub content_hash: Option<String>,
332}
333
334#[derive(Debug, Clone, Serialize, Deserialize)]
335pub struct ForkTreeMatch {
336 pub path: String,
337 pub inode: i64,
338 pub kind: String,
339 pub size: i64,
340 pub mtime: i64,
341}
342
343#[derive(Debug, Clone, Serialize, Deserialize)]
344pub struct AuditLog {
345 pub id: i64,
346 pub title: String,
347 #[serde(skip_serializing_if = "Option::is_none")]
348 pub description: Option<String>,
349 #[serde(skip_serializing_if = "Option::is_none")]
350 pub subject: Option<String>,
351 pub success: bool,
352 #[serde(skip_serializing_if = "Option::is_none")]
353 pub data: Option<serde_json::Value>,
354 #[serde(rename = "createdBy", skip_serializing_if = "Option::is_none")]
355 pub created_by: Option<String>,
356 #[serde(skip_serializing_if = "Option::is_none")]
357 pub node: Option<String>,
358 #[serde(rename = "accountId", skip_serializing_if = "Option::is_none")]
359 pub account_id: Option<i64>,
360 #[serde(rename = "regionId", skip_serializing_if = "Option::is_none")]
361 pub region_id: Option<i64>,
362 #[serde(rename = "regionClusterId", skip_serializing_if = "Option::is_none")]
363 pub region_cluster_id: Option<i64>,
364 #[serde(rename = "createdAt", skip_serializing_if = "Option::is_none")]
365 pub created_at: Option<String>,
366 #[serde(rename = "updatedAt", skip_serializing_if = "Option::is_none")]
367 pub updated_at: Option<String>,
368}
369
370#[derive(Debug, Clone, Serialize, Deserialize)]
371pub struct ServiceNode {
372 pub id: i64,
373 #[serde(rename = "regionId")]
374 pub region_id: i64,
375 #[serde(rename = "regionClusterId", skip_serializing_if = "Option::is_none")]
376 pub region_cluster_id: Option<i64>,
377 #[serde(rename = "serviceType")]
378 pub service_type: String,
379 #[serde(rename = "nodeId")]
380 pub node_id: String,
381 #[serde(rename = "advertiseAddr")]
382 pub advertise_addr: String,
383 #[serde(rename = "rpcAddr", skip_serializing_if = "Option::is_none")]
384 pub rpc_addr: Option<String>,
385 #[serde(skip_serializing_if = "Option::is_none")]
386 pub metadata: Option<serde_json::Value>,
387 pub status: String,
388 #[serde(rename = "lastHeartbeat", skip_serializing_if = "Option::is_none")]
389 pub last_heartbeat: Option<i64>,
390 #[serde(rename = "isActive")]
391 pub is_active: bool,
392 #[serde(rename = "memUsage", skip_serializing_if = "Option::is_none")]
393 pub mem_usage: Option<f64>,
394 #[serde(rename = "sysLoad", skip_serializing_if = "Option::is_none")]
395 pub sys_load: Option<i64>,
396}
397
398#[derive(Debug, Clone, Serialize, Deserialize)]
399pub struct ClientSession {
400 pub id: i64,
401 pub account: Ref,
402 pub region: Ref,
403 #[serde(rename = "regionCluster", skip_serializing_if = "Option::is_none")]
404 pub region_cluster: Option<Ref>,
405 pub volume: VolumeRef,
406 #[serde(skip_serializing_if = "Option::is_none")]
407 pub user: Option<Ref>,
408 #[serde(rename = "clientType")]
409 pub client_type: String,
410 #[serde(rename = "osName")]
411 pub os_name: String,
412 #[serde(rename = "osVersion", skip_serializing_if = "Option::is_none")]
413 pub os_version: Option<String>,
414 #[serde(rename = "appVersion", skip_serializing_if = "Option::is_none")]
415 pub app_version: Option<String>,
416 #[serde(skip_serializing_if = "Option::is_none")]
417 pub hostname: Option<String>,
418 #[serde(rename = "ipAddr")]
419 pub ip_addr: String,
420 #[serde(rename = "mountMode", skip_serializing_if = "Option::is_none")]
421 pub mount_mode: Option<String>,
422 #[serde(rename = "mountPath", skip_serializing_if = "Option::is_none")]
423 pub mount_path: Option<String>,
424 #[serde(rename = "forkName", skip_serializing_if = "Option::is_none")]
425 pub fork_name: Option<String>,
426 #[serde(rename = "isTemporaryFork")]
427 pub is_temporary_fork: bool,
428 #[serde(skip_serializing_if = "Option::is_none")]
429 pub metadata: Option<serde_json::Value>,
430 #[serde(skip_serializing_if = "Option::is_none")]
431 pub metrics: Option<serde_json::Value>,
432 pub status: ClientSessionStatus,
433 #[serde(rename = "lastHeartbeat", skip_serializing_if = "Option::is_none")]
434 pub last_heartbeat: Option<i64>,
435 #[serde(rename = "connectedAt", skip_serializing_if = "Option::is_none")]
436 pub connected_at: Option<i64>,
437 #[serde(rename = "disconnectedAt", skip_serializing_if = "Option::is_none")]
438 pub disconnected_at: Option<i64>,
439 #[serde(rename = "isActive")]
440 pub is_active: bool,
441}
442
443#[derive(Debug, Clone, Serialize, Deserialize)]
444pub struct SessionSummary {
445 #[serde(rename = "byStatus")]
446 pub by_status: Vec<SessionSummaryStatusEntry>,
447 #[serde(rename = "byPlatform")]
448 pub by_platform: Vec<SessionSummaryFacet>,
449 #[serde(rename = "byOsName")]
450 pub by_os_name: Vec<SessionSummaryFacet>,
451 #[serde(rename = "regionCount")]
452 pub region_count: i64,
453 #[serde(rename = "volumeCount")]
454 pub volume_count: i64,
455 #[serde(rename = "hostCount")]
456 pub host_count: i64,
457 #[serde(rename = "unhealthyCount")]
458 pub unhealthy_count: i64,
459}
460
461#[derive(Debug, Clone, Serialize, Deserialize)]
462pub struct DiscoverMetaResponse {
463 #[serde(rename = "regionId")]
464 pub region_id: i64,
465 pub region: String,
466 pub endpoints: Vec<DiscoverEndpoint>,
467}
468
469#[derive(Debug, Clone, Serialize, Deserialize)]
470pub struct DashboardStats {
471 #[serde(rename = "userCount")]
472 pub user_count: i64,
473 #[serde(rename = "volumeCount")]
474 pub volume_count: i64,
475 #[serde(rename = "regionCount")]
476 pub region_count: i64,
477 #[serde(rename = "storageCount")]
478 pub storage_count: i64,
479 #[serde(rename = "totalVolumeUsed")]
480 pub total_volume_used: i64,
481 #[serde(rename = "totalQuotaLimit")]
482 pub total_quota_limit: i64,
483 #[serde(rename = "activeSessionCount")]
484 pub active_session_count: i64,
485 #[serde(rename = "regionBreakdown")]
486 pub region_breakdown: Vec<RegionVolumeMetrics>,
487}
488
489#[derive(Debug, Clone, Serialize, Deserialize)]
490pub struct LicenseDetails {
491 #[serde(rename = "licenseId")]
492 pub license_id: String,
493 pub licensee: String,
494 pub contact: String,
495 #[serde(rename = "licenseType")]
496 pub license_type: String,
497 #[serde(rename = "issuedAt")]
498 pub issued_at: String,
499 #[serde(rename = "expiresAt")]
500 pub expires_at: String,
501 #[serde(rename = "gracePeriodDays")]
502 pub grace_period_days: i64,
503 #[serde(rename = "expiredAccessDays")]
504 pub expired_access_days: i64,
505 #[serde(rename = "maxNodes")]
506 pub max_nodes: i64,
507 #[serde(rename = "maxVolumes")]
508 pub max_volumes: i64,
509 #[serde(rename = "maxUsers")]
510 pub max_users: i64,
511 #[serde(rename = "maxAccounts")]
512 pub max_accounts: i64,
513 #[serde(rename = "maxRegions")]
514 pub max_regions: i64,
515 #[serde(rename = "maxStorageBytes")]
516 pub max_storage_bytes: i64,
517 pub status: LicenseStatus,
518 #[serde(rename = "daysRemaining")]
519 pub days_remaining: i64,
520 #[serde(rename = "graceEndsAt")]
521 pub grace_ends_at: String,
522 #[serde(rename = "graceDaysLeft")]
523 pub grace_days_left: i64,
524 #[serde(rename = "expiredAccessEndsAt")]
525 pub expired_access_ends_at: String,
526 #[serde(rename = "expiredAccessDaysLeft")]
527 pub expired_access_days_left: i64,
528 pub quota: LicenseQuota,
529}
530
531#[derive(Debug, Clone, Serialize, Deserialize)]
532pub struct LicenseTerms {
533 pub terms: String,
534}
535
536#[derive(Debug, Clone, Serialize, Deserialize)]
537pub struct ServiceAlert {
538 pub id: i64,
539 #[serde(rename = "alertId")]
540 pub alert_id: String,
541 pub source: String,
542 #[serde(rename = "nodeId")]
543 pub node_id: String,
544 pub severity: i64,
545 pub category: String,
546 pub title: String,
547 #[serde(skip_serializing_if = "Option::is_none")]
548 pub description: Option<String>,
549 #[serde(skip_serializing_if = "Option::is_none")]
550 pub region: Option<Ref>,
551 #[serde(skip_serializing_if = "Option::is_none")]
552 pub account: Option<Ref>,
553 #[serde(rename = "eventTime")]
554 pub event_time: String,
555 #[serde(rename = "resolvedAt", skip_serializing_if = "Option::is_none")]
556 pub resolved_at: Option<String>,
557 #[serde(rename = "createdAt", skip_serializing_if = "Option::is_none")]
558 pub created_at: Option<String>,
559}
560
561#[derive(Debug, Clone, Serialize, Deserialize)]
562pub struct AlertCountResponse {
563 pub active: i64,
564 pub recent: i64,
565 #[serde(rename = "infoCount")]
566 pub info_count: i64,
567 #[serde(rename = "warningCount")]
568 pub warning_count: i64,
569 #[serde(rename = "criticalCount")]
570 pub critical_count: i64,
571}
572
573#[derive(Debug, Clone, Serialize, Deserialize)]
574pub struct RegionAlert {
575 pub id: i64,
576 #[serde(rename = "alertId")]
577 pub alert_id: String,
578 pub source: String,
579 #[serde(rename = "nodeId")]
580 pub node_id: String,
581 #[serde(rename = "regionClusterId", skip_serializing_if = "Option::is_none")]
582 pub region_cluster_id: Option<i64>,
583 pub severity: i64,
584 pub category: String,
585 pub title: String,
586 #[serde(skip_serializing_if = "Option::is_none")]
587 pub description: Option<String>,
588 #[serde(rename = "eventTime")]
589 pub event_time: String,
590 #[serde(rename = "resolvedAt", skip_serializing_if = "Option::is_none")]
591 pub resolved_at: Option<String>,
592 #[serde(rename = "createdAt", skip_serializing_if = "Option::is_none")]
593 pub created_at: Option<String>,
594}
595
596#[derive(Debug, Clone, Serialize, Deserialize)]
597pub struct BlockMember {
598 #[serde(skip_serializing_if = "Option::is_none")]
599 pub name: Option<String>,
600 #[serde(rename = "regionClusterId")]
601 pub region_cluster_id: i64,
602}
603
604#[derive(Debug, Clone, Serialize, Deserialize)]
605pub struct DashboardUser {
606 pub id: String,
607 pub name: String,
608 #[serde(skip_serializing_if = "Option::is_none")]
609 pub email: Option<String>,
610 pub role: String,
611 #[serde(skip_serializing_if = "Option::is_none")]
612 pub username: Option<String>,
613 #[serde(rename = "accountId", skip_serializing_if = "Option::is_none")]
614 pub account_id: Option<i64>,
615 #[serde(rename = "userId", skip_serializing_if = "Option::is_none")]
616 pub user_id: Option<i64>,
617 #[serde(rename = "volumeId", skip_serializing_if = "Option::is_none")]
618 pub volume_id: Option<i64>,
619 #[serde(skip_serializing_if = "Option::is_none")]
620 pub exp: Option<i64>,
621}
622
623#[derive(Debug, Clone, Serialize, Deserialize)]
624pub struct DiscoverEndpoint {
625 #[serde(rename = "nodeId")]
626 pub node_id: String,
627 pub addr: String,
628 pub status: String,
629}
630
631#[derive(Debug, Clone, Serialize, Deserialize)]
632pub struct LicenseQuota {
633 pub state: LicenseQuotaState,
634 #[serde(rename = "liveVolume")]
635 pub live_volume: i64,
636 #[serde(rename = "totalVolume")]
637 pub total_volume: i64,
638 pub generation: i64,
639 #[serde(rename = "lastTransitionAtMs")]
640 pub last_transition_at_ms: i64,
641}
642
643#[derive(Debug, Clone, Serialize, Deserialize)]
644pub struct Ref {
645 pub id: i64,
646 pub name: String,
647}
648
649#[derive(Debug, Clone, Serialize, Deserialize)]
650pub struct RegionVolumeMetrics {
651 #[serde(rename = "regionId")]
652 pub region_id: i64,
653 #[serde(rename = "regionName")]
654 pub region_name: String,
655 #[serde(rename = "volumeCount")]
656 pub volume_count: i64,
657 #[serde(rename = "totalVolumeUsed")]
658 pub total_volume_used: i64,
659 #[serde(rename = "totalQuotaLimit")]
660 pub total_quota_limit: i64,
661}
662
663#[derive(Debug, Clone, Serialize, Deserialize)]
664pub struct SessionSummaryFacet {
665 pub label: String,
666 pub count: i64,
667}
668
669#[derive(Debug, Clone, Serialize, Deserialize)]
670pub struct SessionSummaryStatusEntry {
671 #[serde(rename = "clientType")]
672 pub client_type: String,
673 pub status: String,
674 pub count: i64,
675}
676
677#[derive(Debug, Clone, Serialize, Deserialize)]
678pub struct UserLite {
679 pub id: i64,
680 pub username: String,
681 pub name: String,
682}
683
684#[derive(Debug, Clone, Serialize, Deserialize)]
685pub struct VolumeRef {
686 pub id: i64,
687 pub name: String,
688 #[serde(skip_serializing_if = "Option::is_none")]
689 pub r#type: Option<String>,
690}
691
692#[derive(Debug, Clone, Serialize, Deserialize)]
693pub struct VolumeSizePoint {
694 #[serde(rename = "bucketEnd")]
695 pub bucket_end: String,
696 #[serde(rename = "liveVolume")]
697 pub live_volume: i64,
698 #[serde(rename = "totalVolume")]
699 pub total_volume: i64,
700 #[serde(rename = "pendingVolume")]
701 pub pending_volume: i64,
702 #[serde(rename = "liveInactiveVolume")]
703 pub live_inactive_volume: i64,
704}
705
706#[derive(Debug, Clone, Serialize)]
709pub struct CreateAccountRequest {
710 pub name: String,
711 #[serde(skip_serializing_if = "Option::is_none")]
712 pub description: Option<String>,
713 #[serde(rename = "iconUrl", skip_serializing_if = "Option::is_none")]
714 pub icon_url: Option<String>,
715 #[serde(rename = "providerInfo", skip_serializing_if = "Option::is_none")]
716 pub provider_info: Option<serde_json::Value>,
717}
718
719#[derive(Debug, Clone, Serialize)]
720pub struct EditAccountRequest {
721 pub name: String,
722 #[serde(skip_serializing_if = "Option::is_none")]
723 pub description: Option<String>,
724 #[serde(rename = "iconUrl", skip_serializing_if = "Option::is_none")]
725 pub icon_url: Option<String>,
726 #[serde(rename = "providerInfo", skip_serializing_if = "Option::is_none")]
727 pub provider_info: Option<serde_json::Value>,
728}
729
730#[derive(Debug, Clone, Serialize)]
731pub struct UpdateAccountQuotaRequest {
732 #[serde(rename = "quotaLimit")]
733 pub quota_limit: i64,
734 #[serde(rename = "quotaExcessPct", skip_serializing_if = "Option::is_none")]
735 pub quota_excess_pct: Option<i32>,
736}
737
738#[derive(Debug, Clone, Default)]
739pub struct AccountListOptions {
740 pub is_active: Option<bool>,
741 pub page: Option<i64>,
742 pub limit: Option<i64>,
743}
744
745#[derive(Debug, Clone, Serialize)]
748pub struct AddUserRequest {
749 #[serde(rename = "accountId")]
750 pub account_id: i64,
751 pub username: String,
752 pub email: String,
753 #[serde(skip_serializing_if = "Option::is_none")]
754 pub name: Option<String>,
755 #[serde(rename = "providerInfo", skip_serializing_if = "Option::is_none")]
756 pub provider_info: Option<serde_json::Value>,
757}
758
759#[derive(Debug, Clone, Serialize)]
760pub struct BulkUserRequest {
761 pub ids: Vec<i64>,
762}
763
764#[derive(Debug, Clone, Serialize, Deserialize)]
765pub struct BulkUserResponse {
766 pub users: Vec<UserLite>,
767}
768
769#[derive(Debug, Clone, Serialize)]
770pub struct EditUserRequest {
771 pub username: String,
772 pub email: String,
773 #[serde(skip_serializing_if = "Option::is_none")]
774 pub name: Option<String>,
775 #[serde(rename = "providerInfo", skip_serializing_if = "Option::is_none")]
776 pub provider_info: Option<serde_json::Value>,
777}
778
779#[derive(Debug, Clone, Default)]
780pub struct UserListOptions {
781 pub account_id: i64,
782 pub search: Option<String>,
783 pub is_active: Option<bool>,
784 pub page: Option<i64>,
785 pub limit: Option<i64>,
786}
787
788#[derive(Debug, Clone, Serialize)]
791pub struct CreateRegionRequest {
792 #[serde(rename = "accountId")]
793 pub account_id: i64,
794 pub name: String,
795 pub dns: String,
796}
797
798#[derive(Debug, Clone, Serialize)]
799pub struct EditRegionRequest {
800 #[serde(rename = "accountId")]
801 pub account_id: i64,
802 pub name: String,
803 pub dns: String,
804}
805
806#[derive(Debug, Clone, Default)]
807pub struct RegionListOptions {
808 pub is_active: Option<bool>,
809 pub page: Option<i64>,
810 pub limit: Option<i64>,
811}
812
813#[derive(Debug, Clone, Default)]
816pub struct ClusterListOptions {
817 pub account_id: i64,
818 pub region_id: Option<i64>,
819 pub is_active: Option<bool>,
820 pub page: Option<i64>,
821 pub limit: Option<i64>,
822}
823
824#[derive(Debug, Clone, Serialize)]
827pub struct CreateRegionClusterRequest {
828 pub name: String,
829}
830
831#[derive(Debug, Clone, Serialize)]
832pub struct EditRegionClusterRequest {
833 pub name: String,
834}
835
836#[derive(Debug, Clone, Serialize)]
837pub struct SetRegionClusterReadyRequest {
838 pub ready: bool,
839}
840
841#[derive(Debug, Clone, Serialize, Deserialize)]
842pub struct SetReadyRegionClusterResponse {
843 pub id: i64,
844 pub ready: bool,
845}
846
847#[derive(Debug, Clone, Default)]
848pub struct RegionClusterListOptions {
849 pub is_active: Option<bool>,
850 pub page: Option<i64>,
851 pub limit: Option<i64>,
852}
853
854#[derive(Debug, Clone, Serialize)]
857pub struct CreateStorageRequest {
858 #[serde(rename = "accountId")]
859 pub account_id: i64,
860 #[serde(rename = "regionId")]
861 pub region_id: i64,
862 pub name: String,
863 #[serde(skip_serializing_if = "Option::is_none")]
864 pub description: Option<String>,
865 #[serde(rename = "storageType")]
866 pub storage_type: String,
867 #[serde(rename = "providerType")]
868 pub provider_type: String,
869 pub endpoint: String,
870 #[serde(skip_serializing_if = "Option::is_none")]
871 pub region: Option<String>,
872 #[serde(skip_serializing_if = "Option::is_none")]
873 pub bucket: Option<String>,
874 #[serde(skip_serializing_if = "Option::is_none")]
875 pub base: Option<String>,
876 #[serde(rename = "blockRegion", skip_serializing_if = "Option::is_none")]
877 pub block_region: Option<String>,
878 #[serde(rename = "blockSize", skip_serializing_if = "Option::is_none")]
879 pub block_size: Option<i32>,
880 #[serde(skip_serializing_if = "Option::is_none")]
881 pub members: Option<Vec<BlockMember>>,
882 #[serde(rename = "accessKey", skip_serializing_if = "Option::is_none")]
883 pub access_key: Option<String>,
884 #[serde(rename = "secretKey", skip_serializing_if = "Option::is_none")]
885 pub secret_key: Option<String>,
886}
887
888#[derive(Debug, Clone, Serialize, Deserialize)]
889pub struct CreateStorageResponse {
890 pub id: i64,
891 #[serde(rename = "blockVolumeIds", skip_serializing_if = "Option::is_none")]
892 pub block_volume_ids: Option<Vec<String>>,
893}
894
895#[derive(Debug, Clone, Serialize)]
896pub struct EditStorageRequest {
897 pub name: String,
898 #[serde(skip_serializing_if = "Option::is_none")]
899 pub description: Option<String>,
900 #[serde(skip_serializing_if = "Option::is_none")]
901 pub endpoint: Option<String>,
902 #[serde(rename = "accessKey", skip_serializing_if = "Option::is_none")]
903 pub access_key: Option<String>,
904 #[serde(rename = "secretKey", skip_serializing_if = "Option::is_none")]
905 pub secret_key: Option<String>,
906}
907
908#[derive(Debug, Clone, Serialize)]
909pub struct TestStorageBucketRequest {
910 pub endpoint: String,
911 #[serde(skip_serializing_if = "Option::is_none")]
912 pub region: Option<String>,
913 pub bucket: String,
914 #[serde(rename = "accessKey")]
915 pub access_key: String,
916 #[serde(rename = "secretKey")]
917 pub secret_key: String,
918 #[serde(rename = "providerType", skip_serializing_if = "Option::is_none")]
919 pub provider_type: Option<String>,
920}
921
922#[derive(Debug, Clone, Serialize, Deserialize)]
923pub struct TestBucketStorageResponse {
924 #[serde(rename = "bucketExists")]
925 pub bucket_exists: bool,
926 pub list: bool,
927 pub write: bool,
928 pub read: bool,
929 pub delete: bool,
930 pub multipart: bool,
931}
932
933#[derive(Debug, Clone, Serialize, Deserialize)]
934pub struct TestStorageBucketStorageResponse {
935 #[serde(rename = "bucketExists")]
936 pub bucket_exists: bool,
937 pub list: bool,
938 pub write: bool,
939 pub read: bool,
940 pub delete: bool,
941 pub multipart: bool,
942}
943
944#[derive(Debug, Clone, Default)]
945pub struct StorageListOptions {
946 pub account_id: i64,
947 pub search: Option<String>,
948 pub region_id: Option<i64>,
949 pub storage_type: Option<String>,
950 pub provider_type: Option<String>,
951 pub is_active: Option<bool>,
952 pub page: Option<i64>,
953 pub limit: Option<i64>,
954}
955
956#[derive(Debug, Clone, Serialize)]
959pub struct CreateVolumeRequest {
960 #[serde(rename = "accountId")]
961 pub account_id: i64,
962 #[serde(rename = "storageId")]
963 pub storage_id: i64,
964 pub name: String,
965 #[serde(skip_serializing_if = "Option::is_none")]
966 pub description: Option<String>,
967 #[serde(rename = "volumeType")]
968 pub volume_type: String,
969 #[serde(skip_serializing_if = "Option::is_none")]
970 pub encryption: Option<bool>,
971 #[serde(rename = "encryptionKey", skip_serializing_if = "Option::is_none")]
972 pub encryption_key: Option<String>,
973 #[serde(rename = "retentionPeriod", skip_serializing_if = "Option::is_none")]
974 pub retention_period: Option<i32>,
975 #[serde(rename = "gracePeriod", skip_serializing_if = "Option::is_none")]
976 pub grace_period: Option<i32>,
977 #[serde(rename = "forkGracePeriod", skip_serializing_if = "Option::is_none")]
978 pub fork_grace_period: Option<i32>,
979 #[serde(rename = "eventLogRetentionPeriod", skip_serializing_if = "Option::is_none")]
980 pub event_log_retention_period: Option<i32>,
981 #[serde(rename = "quotaLimit", skip_serializing_if = "Option::is_none")]
982 pub quota_limit: Option<i64>,
983 #[serde(rename = "regionClusterId", skip_serializing_if = "Option::is_none")]
984 pub region_cluster_id: Option<i64>,
985 #[serde(rename = "regionClusterUuid", skip_serializing_if = "Option::is_none")]
986 pub region_cluster_uuid: Option<String>,
987}
988
989#[derive(Debug, Clone, Serialize, Deserialize)]
990pub struct CreateVolumeResponse {
991 pub id: i64,
992 #[serde(rename = "encryptionKey", skip_serializing_if = "Option::is_none")]
993 pub encryption_key: Option<String>,
994}
995
996#[derive(Debug, Clone, Serialize)]
997pub struct EditVolumeRequest {
998 #[serde(skip_serializing_if = "Option::is_none")]
999 pub description: Option<String>,
1000 #[serde(rename = "retentionPeriod", skip_serializing_if = "Option::is_none")]
1001 pub retention_period: Option<i32>,
1002 #[serde(rename = "gracePeriod", skip_serializing_if = "Option::is_none")]
1003 pub grace_period: Option<i32>,
1004 #[serde(rename = "forkGracePeriod", skip_serializing_if = "Option::is_none")]
1005 pub fork_grace_period: Option<i32>,
1006 #[serde(rename = "eventLogRetentionPeriod", skip_serializing_if = "Option::is_none")]
1007 pub event_log_retention_period: Option<i32>,
1008}
1009
1010#[derive(Debug, Clone, Serialize)]
1011pub struct MoveVolumeClusterRequest {
1012 #[serde(rename = "targetClusterId", skip_serializing_if = "Option::is_none")]
1013 pub target_cluster_id: Option<i64>,
1014 #[serde(rename = "targetClusterUuid", skip_serializing_if = "Option::is_none")]
1015 pub target_cluster_uuid: Option<String>,
1016}
1017
1018#[derive(Debug, Clone, Serialize, Deserialize)]
1019pub struct MoveClusterVolumeResponse {
1020 pub id: i64,
1021 #[serde(rename = "sourceClusterId")]
1022 pub source_cluster_id: i64,
1023 #[serde(rename = "targetClusterId")]
1024 pub target_cluster_id: i64,
1025 #[serde(rename = "handoverUntil")]
1026 pub handover_until: i64,
1027}
1028
1029#[derive(Debug, Clone, Serialize)]
1030pub struct DeactivateVolumeRequest {
1031 #[serde(rename = "isCleanupMetaEnabled", skip_serializing_if = "Option::is_none")]
1032 pub is_cleanup_meta_enabled: Option<bool>,
1033 #[serde(rename = "isCleanupStorageEnabled", skip_serializing_if = "Option::is_none")]
1034 pub is_cleanup_storage_enabled: Option<bool>,
1035 #[serde(rename = "isCleanupVaultEnabled", skip_serializing_if = "Option::is_none")]
1036 pub is_cleanup_vault_enabled: Option<bool>,
1037}
1038
1039#[derive(Debug, Clone, Serialize)]
1040pub struct GenerateVolumeAPIKeysRequest {
1041 #[serde(rename = "userId")]
1042 pub user_id: i64,
1043}
1044
1045#[derive(Debug, Clone, Serialize, Deserialize)]
1046pub struct GenerateAPIKeysVolumeResponse {
1047 #[serde(rename = "apiKey")]
1048 pub api_key: String,
1049 #[serde(rename = "apiSecret")]
1050 pub api_secret: String,
1051}
1052
1053#[derive(Debug, Clone, Serialize)]
1054pub struct RevokeVolumeAPIKeyRequest {
1055 #[serde(rename = "apiKey")]
1056 pub api_key: String,
1057}
1058
1059#[derive(Debug, Clone, Serialize)]
1060pub struct RevokeVolumeAPIKeysByUserRequest {
1061 #[serde(rename = "userId")]
1062 pub user_id: i64,
1063}
1064
1065#[derive(Debug, Clone, Serialize)]
1066pub struct UpdateVolumeQuotaRequest {
1067 #[serde(rename = "quotaLimit")]
1068 pub quota_limit: i64,
1069}
1070
1071#[derive(Debug, Clone, Serialize, Deserialize)]
1072pub struct StatsVolumeResponse {
1073 #[serde(rename = "volumeId")]
1074 pub volume_id: String,
1075 #[serde(rename = "liveVolume")]
1076 pub live_volume: i64,
1077 #[serde(rename = "totalVolume")]
1078 pub total_volume: i64,
1079 #[serde(rename = "pendingVolume")]
1080 pub pending_volume: i64,
1081 #[serde(rename = "liveInactiveVolume")]
1082 pub live_inactive_volume: i64,
1083}
1084
1085#[derive(Debug, Clone, Serialize, Deserialize)]
1086pub struct SizeHistoryVolumeResponse {
1087 pub points: Vec<VolumeSizePoint>,
1088}
1089
1090#[derive(Debug, Clone, Serialize)]
1091pub struct CreateVolumeForkRequest {
1092 pub name: String,
1093 #[serde(rename = "parentName", skip_serializing_if = "Option::is_none")]
1094 pub parent_name: Option<String>,
1095 #[serde(rename = "asOf", skip_serializing_if = "Option::is_none")]
1096 pub as_of: Option<i64>,
1097 #[serde(rename = "volumeType", skip_serializing_if = "Option::is_none")]
1098 pub volume_type: Option<String>,
1099}
1100
1101#[derive(Debug, Clone, Serialize)]
1102pub struct DeleteVolumeForkRequest {
1103 #[serde(skip_serializing_if = "Option::is_none")]
1104 pub force: Option<bool>,
1105 #[serde(rename = "volumeType", skip_serializing_if = "Option::is_none")]
1106 pub volume_type: Option<String>,
1107}
1108
1109#[derive(Debug, Clone, Serialize, Deserialize)]
1110pub struct DeleteForkVolumeResponse {
1111 #[serde(rename = "inactivatedFids")]
1112 pub inactivated_fids: Vec<i32>,
1113}
1114
1115#[derive(Debug, Clone, Serialize)]
1116pub struct RestoreVolumeForkRequest {
1117 #[serde(rename = "volumeType", skip_serializing_if = "Option::is_none")]
1118 pub volume_type: Option<String>,
1119}
1120
1121#[derive(Debug, Clone, Default)]
1122pub struct VolumeListOptions {
1123 pub account_id: i64,
1124 pub region_id: Option<i64>,
1125 pub region_cluster_id: Option<i64>,
1126 pub storage_id: Option<i64>,
1127 pub volume_type: Option<String>,
1128 pub locked: Option<bool>,
1129 pub is_active: Option<bool>,
1130 pub page: Option<i64>,
1131 pub limit: Option<i64>,
1132}
1133
1134#[derive(Debug, Clone, Default)]
1137pub struct VolumeForkTreeListOptions {
1138 pub path: Option<String>,
1139 pub as_of: Option<i64>,
1140 pub cursor: Option<i64>,
1141 pub limit: Option<i64>,
1142 pub sort: Option<String>,
1143 pub kind: Option<String>,
1144}
1145
1146#[derive(Debug, Clone, Default)]
1149pub struct VolumeForkEntryListOptions {
1150 pub path: Option<String>,
1151 pub cursor: Option<i64>,
1152 pub limit: Option<i64>,
1153}
1154
1155#[derive(Debug, Clone, Default)]
1158pub struct VolumeForkSearchListOptions {
1159 pub q: Option<String>,
1160 pub path: Option<String>,
1161 pub as_of: Option<i64>,
1162 pub exact: Option<bool>,
1163 pub cursor: Option<i64>,
1164 pub limit: Option<i64>,
1165 pub kind: Option<String>,
1166}
1167
1168#[derive(Debug, Clone, Default)]
1171pub struct AuditLogListOptions {
1172 pub account_id: Option<i64>,
1173 pub region_id: Option<i64>,
1174 pub region_cluster_id: Option<i64>,
1175 pub cursor: Option<i64>,
1176 pub limit: Option<i64>,
1177 pub subject: Option<String>,
1178}
1179
1180#[derive(Debug, Clone, Default)]
1183pub struct RegionAuditLogListOptions {
1184 pub region_cluster_id: Option<i64>,
1185 pub cursor: Option<i64>,
1186 pub limit: Option<i64>,
1187 pub subject: Option<String>,
1188 pub node: Option<String>,
1189}
1190
1191#[derive(Debug, Clone, Default)]
1198pub struct ClientSessionListOptions {
1199 pub account_id: Option<i64>,
1200 pub region_id: Option<i64>,
1201 pub region_cluster_id: Option<i64>,
1202 pub volume_id: Option<i64>,
1203 pub user_id: Option<i64>,
1204 pub client_type: Option<String>,
1205 pub status: Option<ClientSessionStatus>,
1206 pub is_active: Option<String>,
1207 pub os_name: Option<String>,
1208 pub platform: Option<String>,
1209 pub search: Option<String>,
1210 pub page: Option<i64>,
1211 pub limit: Option<i64>,
1212}
1213
1214#[derive(Debug, Clone, Default)]
1223pub struct AlertListOptions {
1224 pub active: Option<bool>,
1225 pub account_id: Option<i64>,
1226 pub region_id: Option<i64>,
1227 pub severity: Option<i64>,
1228 pub category: Option<String>,
1229 pub since: Option<String>,
1230 pub page: Option<i64>,
1231 pub limit: Option<i64>,
1232}
1233
1234#[derive(Debug, Clone, Default)]
1237pub struct RegionAlertListOptions {
1238 pub active: Option<bool>,
1239 pub severity: Option<i64>,
1240 pub category: Option<String>,
1241 pub node_id: Option<String>,
1242 pub region_cluster_id: Option<i64>,
1243 pub since: Option<String>,
1244 pub page: Option<i64>,
1245 pub limit: Option<i64>,
1246}
1247
1248