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
57#[derive(Debug, Clone, PartialEq, Eq)]
61pub enum ClientSessionStatus {
62 Connected,
63 Active,
64 Degraded,
65 Disconnected,
66 Expired,
67 Unknown,
68 UnknownValue(String),
70}
71
72impl ClientSessionStatus {
73 pub fn as_str(&self) -> &str {
75 match self {
76 ClientSessionStatus::Connected => "connected",
77 ClientSessionStatus::Active => "active",
78 ClientSessionStatus::Degraded => "degraded",
79 ClientSessionStatus::Disconnected => "disconnected",
80 ClientSessionStatus::Expired => "expired",
81 ClientSessionStatus::Unknown => "unknown",
82 ClientSessionStatus::UnknownValue(s) => s.as_str(),
83 }
84 }
85
86 pub fn is_known(&self) -> bool {
89 !matches!(self, ClientSessionStatus::UnknownValue(_))
90 }
91}
92
93impl std::fmt::Display for ClientSessionStatus {
94 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
95 f.write_str(self.as_str())
96 }
97}
98
99impl From<&str> for ClientSessionStatus {
100 fn from(s: &str) -> Self {
101 match s {
102 "connected" => ClientSessionStatus::Connected,
103 "active" => ClientSessionStatus::Active,
104 "degraded" => ClientSessionStatus::Degraded,
105 "disconnected" => ClientSessionStatus::Disconnected,
106 "expired" => ClientSessionStatus::Expired,
107 "unknown" => ClientSessionStatus::Unknown,
108 other => ClientSessionStatus::UnknownValue(other.to_string()),
109 }
110 }
111}
112
113impl Serialize for ClientSessionStatus {
114 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
115 where
116 S: serde::Serializer,
117 {
118 serializer.serialize_str(self.as_str())
119 }
120}
121
122impl<'de> Deserialize<'de> for ClientSessionStatus {
123 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
124 where
125 D: serde::Deserializer<'de>,
126 {
127 let s = String::deserialize(deserializer)?;
128 Ok(ClientSessionStatus::from(s.as_str()))
129 }
130}
131
132#[derive(Debug, Clone, PartialEq, Eq)]
136pub enum CopysetState {
137 Active,
138 Draining,
139 SyncedDrained,
140 Retired,
141 Unknown(String),
143}
144
145impl CopysetState {
146 pub fn as_str(&self) -> &str {
148 match self {
149 CopysetState::Active => "active",
150 CopysetState::Draining => "draining",
151 CopysetState::SyncedDrained => "synced_drained",
152 CopysetState::Retired => "retired",
153 CopysetState::Unknown(s) => s.as_str(),
154 }
155 }
156
157 pub fn is_known(&self) -> bool {
160 !matches!(self, CopysetState::Unknown(_))
161 }
162}
163
164impl std::fmt::Display for CopysetState {
165 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
166 f.write_str(self.as_str())
167 }
168}
169
170impl From<&str> for CopysetState {
171 fn from(s: &str) -> Self {
172 match s {
173 "active" => CopysetState::Active,
174 "draining" => CopysetState::Draining,
175 "synced_drained" => CopysetState::SyncedDrained,
176 "retired" => CopysetState::Retired,
177 other => CopysetState::Unknown(other.to_string()),
178 }
179 }
180}
181
182impl Serialize for CopysetState {
183 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
184 where
185 S: serde::Serializer,
186 {
187 serializer.serialize_str(self.as_str())
188 }
189}
190
191impl<'de> Deserialize<'de> for CopysetState {
192 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
193 where
194 D: serde::Deserializer<'de>,
195 {
196 let s = String::deserialize(deserializer)?;
197 Ok(CopysetState::from(s.as_str()))
198 }
199}
200
201#[derive(Debug, Clone, PartialEq, Eq)]
205pub enum LicenseQuotaState {
206 Ok,
207 Exceeded,
208 Unknown(String),
210}
211
212impl LicenseQuotaState {
213 pub fn as_str(&self) -> &str {
215 match self {
216 LicenseQuotaState::Ok => "ok",
217 LicenseQuotaState::Exceeded => "exceeded",
218 LicenseQuotaState::Unknown(s) => s.as_str(),
219 }
220 }
221
222 pub fn is_known(&self) -> bool {
225 !matches!(self, LicenseQuotaState::Unknown(_))
226 }
227}
228
229impl std::fmt::Display for LicenseQuotaState {
230 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
231 f.write_str(self.as_str())
232 }
233}
234
235impl From<&str> for LicenseQuotaState {
236 fn from(s: &str) -> Self {
237 match s {
238 "ok" => LicenseQuotaState::Ok,
239 "exceeded" => LicenseQuotaState::Exceeded,
240 other => LicenseQuotaState::Unknown(other.to_string()),
241 }
242 }
243}
244
245impl Serialize for LicenseQuotaState {
246 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
247 where
248 S: serde::Serializer,
249 {
250 serializer.serialize_str(self.as_str())
251 }
252}
253
254impl<'de> Deserialize<'de> for LicenseQuotaState {
255 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
256 where
257 D: serde::Deserializer<'de>,
258 {
259 let s = String::deserialize(deserializer)?;
260 Ok(LicenseQuotaState::from(s.as_str()))
261 }
262}
263
264#[derive(Debug, Clone, PartialEq, Eq)]
268pub enum LicenseStatus {
269 Valid,
270 Expiring,
271 Grace,
272 ExpiredAccess,
273 Expired,
274 Unknown(String),
276}
277
278impl LicenseStatus {
279 pub fn as_str(&self) -> &str {
281 match self {
282 LicenseStatus::Valid => "valid",
283 LicenseStatus::Expiring => "expiring",
284 LicenseStatus::Grace => "grace",
285 LicenseStatus::ExpiredAccess => "expired_access",
286 LicenseStatus::Expired => "expired",
287 LicenseStatus::Unknown(s) => s.as_str(),
288 }
289 }
290
291 pub fn is_known(&self) -> bool {
294 !matches!(self, LicenseStatus::Unknown(_))
295 }
296}
297
298impl std::fmt::Display for LicenseStatus {
299 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
300 f.write_str(self.as_str())
301 }
302}
303
304impl From<&str> for LicenseStatus {
305 fn from(s: &str) -> Self {
306 match s {
307 "valid" => LicenseStatus::Valid,
308 "expiring" => LicenseStatus::Expiring,
309 "grace" => LicenseStatus::Grace,
310 "expired_access" => LicenseStatus::ExpiredAccess,
311 "expired" => LicenseStatus::Expired,
312 other => LicenseStatus::Unknown(other.to_string()),
313 }
314 }
315}
316
317impl Serialize for LicenseStatus {
318 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
319 where
320 S: serde::Serializer,
321 {
322 serializer.serialize_str(self.as_str())
323 }
324}
325
326impl<'de> Deserialize<'de> for LicenseStatus {
327 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
328 where
329 D: serde::Deserializer<'de>,
330 {
331 let s = String::deserialize(deserializer)?;
332 Ok(LicenseStatus::from(s.as_str()))
333 }
334}
335
336#[derive(Debug, Clone, Serialize, Deserialize)]
337pub struct Account {
338 pub id: i64,
339 pub name: String,
340 pub description: String,
341 #[serde(rename = "iconUrl", skip_serializing_if = "Option::is_none")]
342 pub icon_url: Option<String>,
343 #[serde(rename = "providerInfo", skip_serializing_if = "Option::is_none")]
344 pub provider_info: Option<serde_json::Value>,
345 #[serde(rename = "liveVolume")]
346 pub live_volume: i64,
347 #[serde(rename = "totalVolume")]
348 pub total_volume: i64,
349 #[serde(rename = "quotaLimit")]
350 pub quota_limit: i64,
351 #[serde(rename = "quotaExcessPct")]
352 pub quota_excess_pct: i32,
353 #[serde(rename = "isActive")]
354 pub is_active: bool,
355 pub locked: bool,
356 #[serde(skip_serializing_if = "Option::is_none")]
357 pub retention: Option<RetentionPolicy>,
358 #[serde(rename = "createdAt")]
359 pub created_at: String,
360 #[serde(rename = "updatedAt")]
361 pub updated_at: String,
362}
363
364#[derive(Debug, Clone, Serialize, Deserialize)]
365pub struct User {
366 pub id: i64,
367 #[serde(rename = "accountId")]
368 pub account_id: i64,
369 pub username: String,
370 pub email: String,
371 pub name: String,
372 #[serde(rename = "isActive")]
373 pub is_active: bool,
374}
375
376#[derive(Debug, Clone, Serialize, Deserialize)]
377pub struct Region {
378 pub id: i64,
379 #[serde(rename = "exportId")]
380 pub export_id: String,
381 #[serde(rename = "accountId")]
382 pub account_id: i64,
383 pub name: String,
384 #[serde(rename = "liveVolume")]
385 pub live_volume: i64,
386 #[serde(rename = "totalVolume")]
387 pub total_volume: i64,
388 #[serde(rename = "isActive")]
389 pub is_active: bool,
390 #[serde(rename = "createdAt")]
391 pub created_at: String,
392 #[serde(rename = "updatedAt")]
393 pub updated_at: String,
394}
395
396#[derive(Debug, Clone, Serialize, Deserialize)]
397pub struct MetadataCluster {
398 pub id: i64,
399 #[serde(rename = "exportId")]
400 pub export_id: String,
401 #[serde(rename = "regionId")]
402 pub region_id: i64,
403 pub name: String,
404 #[serde(rename = "defaultCluster")]
405 pub default_cluster: bool,
406 #[serde(rename = "isReady")]
407 pub is_ready: bool,
408 #[serde(rename = "isActive")]
409 pub is_active: bool,
410 #[serde(rename = "createdAt")]
411 pub created_at: String,
412 #[serde(rename = "updatedAt")]
413 pub updated_at: String,
414}
415
416#[derive(Debug, Clone, Serialize, Deserialize)]
417pub struct Storage {
418 pub id: i64,
419 pub uuid: String,
420 pub account: Ref,
421 #[serde(rename = "regionInfo")]
422 pub region_info: Ref,
423 pub name: String,
424 #[serde(skip_serializing_if = "Option::is_none")]
425 pub description: Option<String>,
426 #[serde(rename = "storageType")]
427 pub storage_type: String,
428 #[serde(rename = "providerType")]
429 pub provider_type: String,
430 pub endpoint: String,
431 #[serde(skip_serializing_if = "Option::is_none")]
432 pub region: Option<String>,
433 #[serde(skip_serializing_if = "Option::is_none")]
434 pub bucket: Option<String>,
435 #[serde(skip_serializing_if = "Option::is_none")]
436 pub base: Option<String>,
437 #[serde(rename = "physicalFingerprint", skip_serializing_if = "Option::is_none")]
438 pub physical_fingerprint: Option<String>,
439 #[serde(rename = "blockRegion", skip_serializing_if = "Option::is_none")]
440 pub block_region: Option<String>,
441 #[serde(rename = "blockSize", skip_serializing_if = "Option::is_none")]
442 pub block_size: Option<i32>,
443 #[serde(rename = "directAccess", skip_serializing_if = "Option::is_none")]
444 pub direct_access: Option<bool>,
445 #[serde(rename = "isActive")]
446 pub is_active: bool,
447 #[serde(rename = "createdAt")]
448 pub created_at: String,
449 #[serde(rename = "updatedAt")]
450 pub updated_at: String,
451}
452
453#[derive(Debug, Clone, Serialize, Deserialize)]
454pub struct BlockVolume {
455 pub id: String,
456 #[serde(skip_serializing_if = "Option::is_none")]
457 pub name: Option<String>,
458 #[serde(rename = "shardId")]
459 pub shard_id: i64,
460 #[serde(rename = "isActive")]
461 pub is_active: bool,
462 #[serde(rename = "createdAt")]
463 pub created_at: String,
464 #[serde(rename = "updatedAt")]
465 pub updated_at: String,
466 #[serde(rename = "memberState", skip_serializing_if = "Option::is_none")]
467 pub member_state: Option<String>,
468 #[serde(rename = "copysetId", skip_serializing_if = "Option::is_none")]
469 pub copyset_id: Option<String>,
470}
471
472#[derive(Debug, Clone, Serialize, Deserialize)]
473pub struct Copyset {
474 pub id: String,
475 #[serde(rename = "storageId")]
476 pub storage_id: String,
477 pub name: String,
478 pub state: CopysetState,
479 #[serde(rename = "memberA", skip_serializing_if = "Option::is_none")]
480 pub member_a: Option<String>,
481 #[serde(rename = "memberB", skip_serializing_if = "Option::is_none")]
482 pub member_b: Option<String>,
483 #[serde(rename = "drainStartedAt", skip_serializing_if = "Option::is_none")]
484 pub drain_started_at: Option<String>,
485 #[serde(rename = "syncedAt", skip_serializing_if = "Option::is_none")]
486 pub synced_at: Option<String>,
487 #[serde(rename = "retiredAt", skip_serializing_if = "Option::is_none")]
488 pub retired_at: Option<String>,
489 #[serde(rename = "pendingSyncJobsA", skip_serializing_if = "Option::is_none")]
490 pub pending_sync_jobs_a: Option<i32>,
491 #[serde(rename = "pendingSyncJobsB", skip_serializing_if = "Option::is_none")]
492 pub pending_sync_jobs_b: Option<i32>,
493 #[serde(rename = "pendingSyncJobsObservedAt", skip_serializing_if = "Option::is_none")]
494 pub pending_sync_jobs_observed_at: Option<String>,
495 #[serde(rename = "volumeCount")]
496 pub volume_count: i64,
497 #[serde(rename = "drainInitiatedBy", skip_serializing_if = "Option::is_none")]
498 pub drain_initiated_by: Option<i64>,
499 pub tags: Vec<String>,
500}
501
502#[derive(Debug, Clone, Serialize, Deserialize)]
503pub struct PoolMember {
504 pub id: String,
505 pub name: String,
506 #[serde(rename = "regionId")]
507 pub region_id: i64,
508 #[serde(rename = "memberState")]
509 pub member_state: String,
510 #[serde(rename = "failureDomain", skip_serializing_if = "Option::is_none")]
511 pub failure_domain: Option<String>,
512}
513
514#[derive(Debug, Clone, Serialize, Deserialize)]
515pub struct Volume {
516 pub id: i64,
517 pub account: Ref,
518 pub storage: Ref,
519 pub region: Ref,
520 #[serde(rename = "metadataCluster", skip_serializing_if = "Option::is_none")]
521 pub metadata_cluster: Option<Ref>,
522 pub name: String,
523 #[serde(skip_serializing_if = "Option::is_none")]
524 pub description: Option<String>,
525 #[serde(rename = "volumeType")]
526 pub volume_type: String,
527 #[serde(rename = "storageType", skip_serializing_if = "Option::is_none")]
528 pub storage_type: Option<String>,
529 pub encryption: bool,
530 #[serde(rename = "quotaLimit")]
531 pub quota_limit: i64,
532 #[serde(rename = "liveVolume")]
533 pub live_volume: i64,
534 #[serde(rename = "totalVolume")]
535 pub total_volume: i64,
536 #[serde(rename = "pendingVolume")]
537 pub pending_volume: i64,
538 #[serde(rename = "liveInactiveVolume")]
539 pub live_inactive_volume: i64,
540 pub locked: bool,
541 pub retention: VolumeRetentionPolicy,
542 pub versioning: VolumeVersioningPolicy,
543 pub compaction: String,
544 #[serde(rename = "isActive")]
545 pub is_active: bool,
546 #[serde(rename = "isCleanupMetaEnabled")]
547 pub is_cleanup_meta_enabled: bool,
548 #[serde(rename = "isCleanupStorageEnabled")]
549 pub is_cleanup_storage_enabled: bool,
550 #[serde(rename = "isCleanupVaultEnabled")]
551 pub is_cleanup_vault_enabled: bool,
552 #[serde(rename = "createdAt")]
553 pub created_at: String,
554 #[serde(rename = "updatedAt")]
555 pub updated_at: String,
556}
557
558#[derive(Debug, Clone, Serialize, Deserialize)]
559pub struct VolumeBlockPlacementConfig {
560 pub id: i64,
561 #[serde(rename = "targetCopysetCount")]
562 pub target_copyset_count: i32,
563 #[serde(rename = "currentEpoch")]
564 pub current_epoch: i64,
565 #[serde(rename = "copysetIds")]
566 pub copyset_ids: Vec<String>,
567}
568
569#[derive(Debug, Clone, Serialize, Deserialize)]
570pub struct VolumeBlockPlacementResizeResult {
571 pub id: i64,
572 #[serde(rename = "targetCopysetCount")]
573 pub target_copyset_count: i32,
574 #[serde(rename = "copysetCountBefore")]
575 pub copyset_count_before: i32,
576 #[serde(rename = "copysetsAdded")]
577 pub copysets_added: i32,
578 #[serde(rename = "copysetsRemoved")]
579 pub copysets_removed: i32,
580 #[serde(rename = "copysetCountAfter")]
581 pub copyset_count_after: i32,
582 pub epoch: i64,
583 pub partial: bool,
584 #[serde(skip_serializing_if = "Option::is_none")]
585 pub reason: Option<String>,
586}
587
588#[derive(Debug, Clone, Serialize, Deserialize)]
589pub struct Fork {
590 pub fid: i32,
591 pub name: String,
592 #[serde(rename = "parentFid")]
593 pub parent_fid: i32,
594 #[serde(rename = "parentName")]
595 pub parent_name: String,
596 #[serde(rename = "snapshotTs")]
597 pub snapshot_ts: i64,
598 #[serde(rename = "createdBy", skip_serializing_if = "Option::is_none")]
599 pub created_by: Option<i64>,
600 #[serde(rename = "createdAt")]
601 pub created_at: i64,
602 #[serde(rename = "childrenCount")]
603 pub children_count: i32,
604 #[serde(skip_serializing_if = "Option::is_none")]
605 pub inactive: Option<bool>,
606 #[serde(rename = "inactiveAt", skip_serializing_if = "Option::is_none")]
607 pub inactive_at: Option<i64>,
608 pub status: String,
609 pub size: i64,
610}
611
612#[derive(Debug, Clone, Serialize, Deserialize)]
613pub struct ForkTreeEntry {
614 pub inode: i64,
615 pub name: String,
616 pub kind: String,
617 pub size: i64,
618 pub mtime: i64,
619 pub ctime: i64,
620 #[serde(rename = "creatorId", skip_serializing_if = "Option::is_none")]
621 pub creator_id: Option<i64>,
622 #[serde(rename = "updaterId", skip_serializing_if = "Option::is_none")]
623 pub updater_id: Option<i64>,
624}
625
626#[derive(Debug, Clone, Serialize, Deserialize)]
627pub struct ForkEntryDetail {
628 pub inode: i64,
629 pub path: String,
630 pub name: String,
631 pub kind: String,
632 pub size: i64,
633 pub mtime: i64,
634 pub ctime: i64,
635 pub generation: i64,
636 #[serde(skip_serializing_if = "Option::is_none")]
637 pub owner: Option<String>,
638 #[serde(skip_serializing_if = "Option::is_none")]
639 pub mode: Option<i32>,
640 #[serde(skip_serializing_if = "Option::is_none")]
641 pub xattrs: Option<serde_json::Value>,
642 #[serde(rename = "creatorId", skip_serializing_if = "Option::is_none")]
643 pub creator_id: Option<i64>,
644 #[serde(rename = "updaterId", skip_serializing_if = "Option::is_none")]
645 pub updater_id: Option<i64>,
646}
647
648#[derive(Debug, Clone, Serialize, Deserialize)]
649pub struct ForkEntryVersion {
650 pub generation: i64,
651 pub size: i64,
652 pub mtime: i64,
653 #[serde(rename = "updaterId", skip_serializing_if = "Option::is_none")]
654 pub updater_id: Option<i64>,
655 #[serde(rename = "contentHash", skip_serializing_if = "Option::is_none")]
656 pub content_hash: Option<String>,
657}
658
659#[derive(Debug, Clone, Serialize, Deserialize)]
660pub struct ForkTreeMatch {
661 pub path: String,
662 pub inode: i64,
663 pub kind: String,
664 pub size: i64,
665 pub mtime: i64,
666}
667
668#[derive(Debug, Clone, Serialize, Deserialize)]
669pub struct AuditLog {
670 pub id: i64,
671 pub title: String,
672 #[serde(skip_serializing_if = "Option::is_none")]
673 pub description: Option<String>,
674 #[serde(skip_serializing_if = "Option::is_none")]
675 pub subject: Option<String>,
676 pub success: bool,
677 #[serde(skip_serializing_if = "Option::is_none")]
678 pub data: Option<serde_json::Value>,
679 #[serde(rename = "createdBy", skip_serializing_if = "Option::is_none")]
680 pub created_by: Option<String>,
681 #[serde(skip_serializing_if = "Option::is_none")]
682 pub node: Option<String>,
683 #[serde(rename = "accountId", skip_serializing_if = "Option::is_none")]
684 pub account_id: Option<i64>,
685 #[serde(rename = "regionId", skip_serializing_if = "Option::is_none")]
686 pub region_id: Option<i64>,
687 #[serde(rename = "metadataClusterId", skip_serializing_if = "Option::is_none")]
688 pub metadata_cluster_id: Option<i64>,
689 #[serde(rename = "createdAt", skip_serializing_if = "Option::is_none")]
690 pub created_at: Option<String>,
691 #[serde(rename = "updatedAt", skip_serializing_if = "Option::is_none")]
692 pub updated_at: Option<String>,
693}
694
695#[derive(Debug, Clone, Serialize, Deserialize)]
696pub struct ServiceNode {
697 pub id: i64,
698 #[serde(rename = "regionId")]
699 pub region_id: i64,
700 #[serde(rename = "metadataClusterId", skip_serializing_if = "Option::is_none")]
701 pub metadata_cluster_id: Option<i64>,
702 #[serde(rename = "serviceType")]
703 pub service_type: String,
704 #[serde(rename = "nodeId")]
705 pub node_id: String,
706 #[serde(rename = "advertiseAddr")]
707 pub advertise_addr: String,
708 #[serde(rename = "rpcAddr", skip_serializing_if = "Option::is_none")]
709 pub rpc_addr: Option<String>,
710 #[serde(skip_serializing_if = "Option::is_none")]
711 pub metadata: Option<serde_json::Value>,
712 #[serde(rename = "metricsEndpoint", skip_serializing_if = "Option::is_none")]
713 pub metrics_endpoint: Option<String>,
714 #[serde(rename = "instanceId", skip_serializing_if = "Option::is_none")]
715 pub instance_id: Option<String>,
716 #[serde(rename = "instanceInfo", skip_serializing_if = "Option::is_none")]
717 pub instance_info: Option<serde_json::Value>,
718 pub status: String,
719 #[serde(rename = "lastHeartbeat", skip_serializing_if = "Option::is_none")]
720 pub last_heartbeat: Option<i64>,
721 #[serde(rename = "isActive")]
722 pub is_active: bool,
723 #[serde(rename = "memUsage", skip_serializing_if = "Option::is_none")]
724 pub mem_usage: Option<f64>,
725 #[serde(rename = "sysLoad", skip_serializing_if = "Option::is_none")]
726 pub sys_load: Option<i64>,
727 #[serde(rename = "binaryVersion", skip_serializing_if = "Option::is_none")]
728 pub binary_version: Option<i32>,
729}
730
731#[derive(Debug, Clone, Serialize, Deserialize)]
732pub struct ClientSession {
733 pub id: i64,
734 pub account: Ref,
735 pub region: Ref,
736 #[serde(rename = "metadataCluster", skip_serializing_if = "Option::is_none")]
737 pub metadata_cluster: Option<Ref>,
738 pub volume: VolumeRef,
739 #[serde(skip_serializing_if = "Option::is_none")]
740 pub user: Option<Ref>,
741 #[serde(rename = "clientType")]
742 pub client_type: String,
743 #[serde(rename = "osName")]
744 pub os_name: String,
745 #[serde(rename = "osVersion", skip_serializing_if = "Option::is_none")]
746 pub os_version: Option<String>,
747 #[serde(rename = "appVersion", skip_serializing_if = "Option::is_none")]
748 pub app_version: Option<String>,
749 #[serde(skip_serializing_if = "Option::is_none")]
750 pub hostname: Option<String>,
751 #[serde(rename = "ipAddr")]
752 pub ip_addr: String,
753 #[serde(rename = "mountMode", skip_serializing_if = "Option::is_none")]
754 pub mount_mode: Option<String>,
755 #[serde(rename = "mountPath", skip_serializing_if = "Option::is_none")]
756 pub mount_path: Option<String>,
757 #[serde(rename = "forkName", skip_serializing_if = "Option::is_none")]
758 pub fork_name: Option<String>,
759 #[serde(rename = "isTemporaryFork")]
760 pub is_temporary_fork: bool,
761 #[serde(skip_serializing_if = "Option::is_none")]
762 pub metadata: Option<serde_json::Value>,
763 #[serde(skip_serializing_if = "Option::is_none")]
764 pub metrics: Option<serde_json::Value>,
765 pub status: ClientSessionStatus,
766 #[serde(rename = "lastHeartbeat", skip_serializing_if = "Option::is_none")]
767 pub last_heartbeat: Option<i64>,
768 #[serde(rename = "connectedAt", skip_serializing_if = "Option::is_none")]
769 pub connected_at: Option<i64>,
770 #[serde(rename = "disconnectedAt", skip_serializing_if = "Option::is_none")]
771 pub disconnected_at: Option<i64>,
772 #[serde(rename = "isActive")]
773 pub is_active: bool,
774}
775
776#[derive(Debug, Clone, Serialize, Deserialize)]
777pub struct SessionSummary {
778 #[serde(rename = "byStatus")]
779 pub by_status: Vec<SessionSummaryStatusEntry>,
780 #[serde(rename = "byPlatform")]
781 pub by_platform: Vec<SessionSummaryFacet>,
782 #[serde(rename = "byOsName")]
783 pub by_os_name: Vec<SessionSummaryFacet>,
784 #[serde(rename = "regionCount")]
785 pub region_count: i64,
786 #[serde(rename = "volumeCount")]
787 pub volume_count: i64,
788 #[serde(rename = "hostCount")]
789 pub host_count: i64,
790 #[serde(rename = "degradedCount")]
791 pub degraded_count: i64,
792}
793
794#[derive(Debug, Clone, Serialize, Deserialize)]
795pub struct DiscoverMetaResponse {
796 #[serde(rename = "regionId")]
797 pub region_id: i64,
798 pub region: String,
799 pub endpoints: Vec<DiscoverEndpoint>,
800}
801
802#[derive(Debug, Clone, Serialize, Deserialize)]
803pub struct MetricsTarget {
804 pub targets: Vec<String>,
805 pub labels: serde_json::Value,
806}
807
808#[derive(Debug, Clone, Serialize, Deserialize)]
809pub struct MetricsTokenResponse {
810 pub token: String,
811}
812
813#[derive(Debug, Clone, Serialize, Deserialize)]
814pub struct DashboardStats {
815 #[serde(rename = "userCount")]
816 pub user_count: i64,
817 #[serde(rename = "volumeCount")]
818 pub volume_count: i64,
819 #[serde(rename = "regionCount")]
820 pub region_count: i64,
821 #[serde(rename = "storageCount")]
822 pub storage_count: i64,
823 #[serde(rename = "totalVolumeUsed")]
824 pub total_volume_used: i64,
825 #[serde(rename = "totalQuotaLimit")]
826 pub total_quota_limit: i64,
827 #[serde(rename = "activeSessionCount")]
828 pub active_session_count: i64,
829 #[serde(rename = "regionBreakdown")]
830 pub region_breakdown: Vec<RegionVolumeMetrics>,
831}
832
833#[derive(Debug, Clone, Serialize, Deserialize)]
834pub struct LicenseDetails {
835 #[serde(rename = "licenseId")]
836 pub license_id: String,
837 pub licensee: String,
838 pub contact: String,
839 #[serde(rename = "licenseType")]
840 pub license_type: String,
841 #[serde(rename = "issuedAt")]
842 pub issued_at: String,
843 #[serde(rename = "expiresAt")]
844 pub expires_at: String,
845 #[serde(rename = "gracePeriodDays")]
846 pub grace_period_days: i64,
847 #[serde(rename = "expiredAccessDays")]
848 pub expired_access_days: i64,
849 #[serde(rename = "maxNodes")]
850 pub max_nodes: i64,
851 #[serde(rename = "maxVolumes")]
852 pub max_volumes: i64,
853 #[serde(rename = "maxUsers")]
854 pub max_users: i64,
855 #[serde(rename = "maxAccounts")]
856 pub max_accounts: i64,
857 #[serde(rename = "maxRegions")]
858 pub max_regions: i64,
859 #[serde(rename = "maxStorageBytes")]
860 pub max_storage_bytes: i64,
861 pub status: LicenseStatus,
862 #[serde(rename = "daysRemaining")]
863 pub days_remaining: i64,
864 #[serde(rename = "graceEndsAt")]
865 pub grace_ends_at: String,
866 #[serde(rename = "graceDaysLeft")]
867 pub grace_days_left: i64,
868 #[serde(rename = "expiredAccessEndsAt")]
869 pub expired_access_ends_at: String,
870 #[serde(rename = "expiredAccessDaysLeft")]
871 pub expired_access_days_left: i64,
872 pub quota: LicenseQuota,
873 #[serde(skip_serializing_if = "Option::is_none")]
874 pub distribution: Option<String>,
875 #[serde(rename = "distributionRef", skip_serializing_if = "Option::is_none")]
876 pub distribution_ref: Option<Vec<String>>,
877 #[serde(rename = "unlimitedStorage", skip_serializing_if = "Option::is_none")]
878 pub unlimited_storage: Option<bool>,
879}
880
881#[derive(Debug, Clone, Serialize, Deserialize)]
882pub struct LicenseTerms {
883 pub terms: String,
884}
885
886#[derive(Debug, Clone, Serialize, Deserialize)]
887pub struct LicenseLoadResult {
888 pub loaded: i64,
889 pub ignored: i64,
890}
891
892#[derive(Debug, Clone, Serialize, Deserialize)]
893pub struct LicenseList {
894 pub items: Vec<LicenseRecord>,
895}
896
897#[derive(Debug, Clone, Serialize, Deserialize)]
898pub struct ServiceAlert {
899 pub id: i64,
900 #[serde(rename = "alertId")]
901 pub alert_id: String,
902 pub source: String,
903 #[serde(rename = "nodeId")]
904 pub node_id: String,
905 pub severity: i64,
906 pub category: String,
907 pub title: String,
908 #[serde(skip_serializing_if = "Option::is_none")]
909 pub description: Option<String>,
910 #[serde(skip_serializing_if = "Option::is_none")]
911 pub region: Option<Ref>,
912 #[serde(skip_serializing_if = "Option::is_none")]
913 pub account: Option<Ref>,
914 #[serde(rename = "eventTime")]
915 pub event_time: String,
916 #[serde(rename = "resolvedAt", skip_serializing_if = "Option::is_none")]
917 pub resolved_at: Option<String>,
918 #[serde(rename = "createdAt", skip_serializing_if = "Option::is_none")]
919 pub created_at: Option<String>,
920}
921
922#[derive(Debug, Clone, Serialize, Deserialize)]
923pub struct AlertCountResponse {
924 pub active: i64,
925 pub recent: i64,
926 #[serde(rename = "infoCount")]
927 pub info_count: i64,
928 #[serde(rename = "warningCount")]
929 pub warning_count: i64,
930 #[serde(rename = "criticalCount")]
931 pub critical_count: i64,
932 #[serde(rename = "asOf")]
933 pub as_of: String,
934}
935
936#[derive(Debug, Clone, Serialize, Deserialize)]
937pub struct RegionAlert {
938 pub id: i64,
939 #[serde(rename = "alertId")]
940 pub alert_id: String,
941 pub source: String,
942 #[serde(rename = "nodeId")]
943 pub node_id: String,
944 #[serde(rename = "metadataClusterId", skip_serializing_if = "Option::is_none")]
945 pub metadata_cluster_id: Option<i64>,
946 pub severity: i64,
947 pub category: String,
948 pub title: String,
949 #[serde(skip_serializing_if = "Option::is_none")]
950 pub description: Option<String>,
951 #[serde(rename = "eventTime")]
952 pub event_time: String,
953 #[serde(rename = "resolvedAt", skip_serializing_if = "Option::is_none")]
954 pub resolved_at: Option<String>,
955 #[serde(rename = "createdAt", skip_serializing_if = "Option::is_none")]
956 pub created_at: Option<String>,
957}
958
959#[derive(Debug, Clone, Serialize, Deserialize)]
960pub struct GCWorkerEvent {
961 pub id: i64,
962 #[serde(rename = "nodeId")]
963 pub node_id: String,
964 #[serde(rename = "metadataClusterId", skip_serializing_if = "Option::is_none")]
965 pub metadata_cluster_id: Option<i64>,
966 pub goal: String,
967 #[serde(skip_serializing_if = "Option::is_none")]
968 pub sid: Option<i64>,
969 #[serde(skip_serializing_if = "Option::is_none")]
970 pub subject: Option<String>,
971 pub ops: serde_json::Value,
972 #[serde(rename = "durationMs")]
973 pub duration_ms: i64,
974 #[serde(rename = "eventTime")]
975 pub event_time: String,
976 #[serde(rename = "createdAt", skip_serializing_if = "Option::is_none")]
977 pub created_at: Option<String>,
978}
979
980#[derive(Debug, Clone, Serialize, Deserialize)]
981pub struct GCWorkerEventHistogramResponse {
982 pub buckets: Vec<GCWorkerEventBucket>,
983}
984
985#[derive(Debug, Clone, Serialize, Deserialize)]
986pub struct GCWorkerEventGoalsResponse {
987 pub goals: Vec<String>,
988}
989
990#[derive(Debug, Clone, Serialize, Deserialize)]
991pub struct BackfillFailure {
992 #[serde(rename = "shardId")]
993 pub shard_id: i64,
994 pub error: String,
995}
996
997#[derive(Debug, Clone, Serialize, Deserialize)]
998pub struct CompatibleStorage {
999 pub id: i64,
1000 pub uuid: String,
1001 pub name: String,
1002 #[serde(rename = "storageType")]
1003 pub storage_type: String,
1004 #[serde(rename = "providerType")]
1005 pub provider_type: String,
1006 pub volumes: Vec<CompatibleVolume>,
1007}
1008
1009#[derive(Debug, Clone, Serialize, Deserialize)]
1010pub struct CompatibleVolume {
1011 pub id: String,
1012 pub name: String,
1013}
1014
1015#[derive(Debug, Clone, Serialize, Deserialize)]
1016pub struct DashboardUser {
1017 pub id: String,
1018 pub name: String,
1019 #[serde(skip_serializing_if = "Option::is_none")]
1020 pub email: Option<String>,
1021 pub role: String,
1022 #[serde(skip_serializing_if = "Option::is_none")]
1023 pub username: Option<String>,
1024 #[serde(rename = "accountId", skip_serializing_if = "Option::is_none")]
1025 pub account_id: Option<i64>,
1026 #[serde(rename = "userId", skip_serializing_if = "Option::is_none")]
1027 pub user_id: Option<i64>,
1028 #[serde(rename = "volumeId", skip_serializing_if = "Option::is_none")]
1029 pub volume_id: Option<i64>,
1030 #[serde(skip_serializing_if = "Option::is_none")]
1031 pub exp: Option<i64>,
1032}
1033
1034#[derive(Debug, Clone, Serialize, Deserialize)]
1035pub struct DiscoverEndpoint {
1036 #[serde(rename = "nodeId")]
1037 pub node_id: String,
1038 pub addr: String,
1039 pub status: String,
1040}
1041
1042#[derive(Debug, Clone, Serialize, Deserialize)]
1043pub struct GCWorkerEventBucket {
1044 #[serde(rename = "bucketStart")]
1045 pub bucket_start: String,
1046 pub goal: String,
1047 pub count: i64,
1048}
1049
1050#[derive(Debug, Clone, Serialize, Deserialize)]
1051pub struct LicenseQuota {
1052 pub state: LicenseQuotaState,
1053 #[serde(rename = "liveVolume")]
1054 pub live_volume: i64,
1055 #[serde(rename = "totalVolume")]
1056 pub total_volume: i64,
1057 pub generation: i64,
1058 #[serde(rename = "lastTransitionAtMs")]
1059 pub last_transition_at_ms: i64,
1060}
1061
1062#[derive(Debug, Clone, Serialize, Deserialize)]
1063pub struct LicenseRecord {
1064 pub key: String,
1065 pub licensee: String,
1066 pub status: LicenseStatus,
1067 #[serde(rename = "issuedAt")]
1068 pub issued_at: String,
1069 #[serde(rename = "expiresAt")]
1070 pub expires_at: String,
1071 #[serde(rename = "maxStorageBytes")]
1072 pub max_storage_bytes: i64,
1073 #[serde(rename = "insertedAt")]
1074 pub inserted_at: String,
1075}
1076
1077#[derive(Debug, Clone, Serialize, Deserialize)]
1078pub struct MoveVolumeFailure {
1079 #[serde(rename = "volumeId")]
1080 pub volume_id: String,
1081 pub error: String,
1082}
1083
1084#[derive(Debug, Clone, Serialize, Deserialize)]
1085pub struct NodeStatsSample {
1086 #[serde(rename = "timestampMs")]
1087 pub timestamp_ms: i64,
1088 #[serde(rename = "intervalMs")]
1089 pub interval_ms: i64,
1090 #[serde(rename = "loadAvg1")]
1091 pub load_avg1: f64,
1092 #[serde(rename = "loadAvg5")]
1093 pub load_avg5: f64,
1094 #[serde(rename = "loadAvg15")]
1095 pub load_avg15: f64,
1096 #[serde(rename = "memUsage")]
1097 pub mem_usage: f64,
1098 #[serde(rename = "readIops")]
1099 pub read_iops: f64,
1100 #[serde(rename = "writeIops")]
1101 pub write_iops: f64,
1102 #[serde(rename = "netRxBytesPerSec")]
1103 pub net_rx_bytes_per_sec: f64,
1104 #[serde(rename = "netTxBytesPerSec")]
1105 pub net_tx_bytes_per_sec: f64,
1106 #[serde(rename = "processCount")]
1107 pub process_count: i64,
1108 #[serde(rename = "diskUsedBytes", skip_serializing_if = "Option::is_none")]
1109 pub disk_used_bytes: Option<i64>,
1110 #[serde(rename = "diskTotalBytes", skip_serializing_if = "Option::is_none")]
1111 pub disk_total_bytes: Option<i64>,
1112 #[serde(rename = "dbLatency1mUs", skip_serializing_if = "Option::is_none")]
1113 pub db_latency1m_us: Option<f64>,
1114 #[serde(rename = "dbLatency5mUs", skip_serializing_if = "Option::is_none")]
1115 pub db_latency5m_us: Option<f64>,
1116 #[serde(rename = "dbLatency15mUs", skip_serializing_if = "Option::is_none")]
1117 pub db_latency15m_us: Option<f64>,
1118 #[serde(rename = "dbQueriesPerSec", skip_serializing_if = "Option::is_none")]
1119 pub db_queries_per_sec: Option<f64>,
1120 #[serde(rename = "dbConnsInUse", skip_serializing_if = "Option::is_none")]
1121 pub db_conns_in_use: Option<i64>,
1122 #[serde(rename = "dbConnsMax", skip_serializing_if = "Option::is_none")]
1123 pub db_conns_max: Option<i64>,
1124 #[serde(rename = "dbConnsIdle", skip_serializing_if = "Option::is_none")]
1125 pub db_conns_idle: Option<i64>,
1126 #[serde(rename = "dbConnsFree", skip_serializing_if = "Option::is_none")]
1127 pub db_conns_free: Option<i64>,
1128 #[serde(rename = "dbConnsInUse1m", skip_serializing_if = "Option::is_none")]
1129 pub db_conns_in_use1m: Option<f64>,
1130 #[serde(rename = "dbConnsInUse5m", skip_serializing_if = "Option::is_none")]
1131 pub db_conns_in_use5m: Option<f64>,
1132 #[serde(rename = "dbConnsInUse15m", skip_serializing_if = "Option::is_none")]
1133 pub db_conns_in_use15m: Option<f64>,
1134 #[serde(rename = "dbPingAvgUs", skip_serializing_if = "Option::is_none")]
1135 pub db_ping_avg_us: Option<f64>,
1136 #[serde(rename = "dbPingMinUs", skip_serializing_if = "Option::is_none")]
1137 pub db_ping_min_us: Option<f64>,
1138 #[serde(rename = "dbPingMaxUs", skip_serializing_if = "Option::is_none")]
1139 pub db_ping_max_us: Option<f64>,
1140 #[serde(rename = "dbPingStdDevUs", skip_serializing_if = "Option::is_none")]
1141 pub db_ping_std_dev_us: Option<f64>,
1142 #[serde(rename = "dbDispatchOutstanding", skip_serializing_if = "Option::is_none")]
1143 pub db_dispatch_outstanding: Option<i64>,
1144 #[serde(rename = "dbDispatchLaneCap", skip_serializing_if = "Option::is_none")]
1145 pub db_dispatch_lane_cap: Option<i64>,
1146}
1147
1148#[derive(Debug, Clone, Serialize, Deserialize)]
1149pub struct Ref {
1150 pub id: i64,
1151 pub name: String,
1152}
1153
1154#[derive(Debug, Clone, Serialize, Deserialize)]
1155pub struct RegionVolumeMetrics {
1156 #[serde(rename = "regionId")]
1157 pub region_id: i64,
1158 #[serde(rename = "regionName")]
1159 pub region_name: String,
1160 #[serde(rename = "volumeCount")]
1161 pub volume_count: i64,
1162 #[serde(rename = "totalVolumeUsed")]
1163 pub total_volume_used: i64,
1164 #[serde(rename = "totalQuotaLimit")]
1165 pub total_quota_limit: i64,
1166}
1167
1168#[derive(Debug, Clone, Serialize, Deserialize)]
1169pub struct RetentionPolicy {
1170 #[serde(rename = "clientSessionDays", skip_serializing_if = "Option::is_none")]
1171 pub client_session_days: Option<i32>,
1172}
1173
1174#[derive(Debug, Clone, Serialize, Deserialize)]
1175pub struct SessionSummaryFacet {
1176 pub label: String,
1177 pub count: i64,
1178}
1179
1180#[derive(Debug, Clone, Serialize, Deserialize)]
1181pub struct SessionSummaryStatusEntry {
1182 #[serde(rename = "clientType")]
1183 pub client_type: String,
1184 pub status: String,
1185 pub count: i64,
1186}
1187
1188#[derive(Debug, Clone, Serialize, Deserialize)]
1189pub struct UserLite {
1190 pub id: i64,
1191 pub username: String,
1192 pub name: String,
1193}
1194
1195#[derive(Debug, Clone, Serialize, Deserialize)]
1196pub struct VolumeApiKey {
1197 #[serde(rename = "apiKey")]
1198 pub api_key: String,
1199 #[serde(skip_serializing_if = "Option::is_none")]
1200 pub name: Option<String>,
1201 #[serde(rename = "createdAt", skip_serializing_if = "Option::is_none")]
1202 pub created_at: Option<String>,
1203 #[serde(rename = "lastUsedAt", skip_serializing_if = "Option::is_none")]
1204 pub last_used_at: Option<String>,
1205}
1206
1207#[derive(Debug, Clone, Serialize, Deserialize)]
1208pub struct VolumeRef {
1209 pub id: i64,
1210 pub name: String,
1211 #[serde(skip_serializing_if = "Option::is_none")]
1212 pub r#type: Option<String>,
1213}
1214
1215#[derive(Debug, Clone, Serialize, Deserialize)]
1216pub struct VolumeRetentionPolicy {
1217 #[serde(rename = "dataDays", skip_serializing_if = "Option::is_none")]
1218 pub data_days: Option<i32>,
1219 #[serde(rename = "graceDays", skip_serializing_if = "Option::is_none")]
1220 pub grace_days: Option<i32>,
1221 #[serde(rename = "forkGraceDays", skip_serializing_if = "Option::is_none")]
1222 pub fork_grace_days: Option<i32>,
1223 #[serde(rename = "eventLogDays", skip_serializing_if = "Option::is_none")]
1224 pub event_log_days: Option<i32>,
1225}
1226
1227#[derive(Debug, Clone, Serialize, Deserialize)]
1228pub struct VolumeSizePoint {
1229 #[serde(rename = "bucketEnd")]
1230 pub bucket_end: String,
1231 #[serde(rename = "liveVolume")]
1232 pub live_volume: i64,
1233 #[serde(rename = "totalVolume")]
1234 pub total_volume: i64,
1235 #[serde(rename = "pendingVolume")]
1236 pub pending_volume: i64,
1237 #[serde(rename = "liveInactiveVolume")]
1238 pub live_inactive_volume: i64,
1239}
1240
1241#[derive(Debug, Clone, Serialize, Deserialize)]
1242pub struct VolumeVersioningPolicy {
1243 #[serde(rename = "contentWindowSeconds", skip_serializing_if = "Option::is_none")]
1244 pub content_window_seconds: Option<i32>,
1245}
1246
1247#[derive(Debug, Clone, Serialize)]
1250pub struct CreateAccountRequest {
1251 pub name: String,
1252 #[serde(skip_serializing_if = "Option::is_none")]
1253 pub description: Option<String>,
1254 #[serde(rename = "iconUrl", skip_serializing_if = "Option::is_none")]
1255 pub icon_url: Option<String>,
1256 #[serde(rename = "providerInfo", skip_serializing_if = "Option::is_none")]
1257 pub provider_info: Option<serde_json::Value>,
1258}
1259
1260#[derive(Debug, Clone, Serialize)]
1261pub struct EditAccountRequest {
1262 pub name: String,
1263 #[serde(skip_serializing_if = "Option::is_none")]
1264 pub description: Option<String>,
1265 #[serde(rename = "iconUrl", skip_serializing_if = "Option::is_none")]
1266 pub icon_url: Option<String>,
1267 #[serde(rename = "providerInfo", skip_serializing_if = "Option::is_none")]
1268 pub provider_info: Option<serde_json::Value>,
1269 #[serde(skip_serializing_if = "Option::is_none")]
1270 pub retention: Option<RetentionPolicy>,
1271}
1272
1273#[derive(Debug, Clone, Serialize)]
1274pub struct UpdateAccountQuotaRequest {
1275 #[serde(rename = "quotaLimit")]
1276 pub quota_limit: i64,
1277 #[serde(rename = "quotaExcessPct", skip_serializing_if = "Option::is_none")]
1278 pub quota_excess_pct: Option<i32>,
1279}
1280
1281#[derive(Debug, Clone, Default)]
1282pub struct AccountListOptions {
1283 pub is_active: Option<bool>,
1284 pub page: Option<i64>,
1285 pub limit: Option<i64>,
1286}
1287
1288#[derive(Debug, Clone, Serialize)]
1291pub struct AddUserRequest {
1292 #[serde(rename = "accountId")]
1293 pub account_id: i64,
1294 pub username: String,
1295 pub email: String,
1296 #[serde(skip_serializing_if = "Option::is_none")]
1297 pub name: Option<String>,
1298 #[serde(rename = "providerInfo", skip_serializing_if = "Option::is_none")]
1299 pub provider_info: Option<serde_json::Value>,
1300}
1301
1302#[derive(Debug, Clone, Serialize)]
1303pub struct BulkUserRequest {
1304 pub ids: Vec<i64>,
1305}
1306
1307#[derive(Debug, Clone, Serialize, Deserialize)]
1308pub struct BulkUserResponse {
1309 pub users: Vec<UserLite>,
1310}
1311
1312#[derive(Debug, Clone, Serialize)]
1313pub struct EditUserRequest {
1314 pub username: String,
1315 pub email: String,
1316 #[serde(skip_serializing_if = "Option::is_none")]
1317 pub name: Option<String>,
1318 #[serde(rename = "providerInfo", skip_serializing_if = "Option::is_none")]
1319 pub provider_info: Option<serde_json::Value>,
1320}
1321
1322#[derive(Debug, Clone, Default)]
1323pub struct UserListOptions {
1324 pub account_id: i64,
1325 pub search: Option<String>,
1326 pub is_active: Option<bool>,
1327 pub page: Option<i64>,
1328 pub limit: Option<i64>,
1329}
1330
1331#[derive(Debug, Clone, Serialize)]
1334pub struct CreateRegionRequest {
1335 #[serde(rename = "accountId")]
1336 pub account_id: i64,
1337 pub name: String,
1338}
1339
1340#[derive(Debug, Clone, Serialize)]
1341pub struct EditRegionRequest {
1342 #[serde(rename = "accountId")]
1343 pub account_id: i64,
1344 pub name: String,
1345}
1346
1347#[derive(Debug, Clone, Default)]
1348pub struct RegionListOptions {
1349 pub account_id: i64,
1350 pub is_active: Option<bool>,
1351 pub page: Option<i64>,
1352 pub limit: Option<i64>,
1353}
1354
1355#[derive(Debug, Clone, Default)]
1358pub struct ClusterListOptions {
1359 pub account_id: i64,
1360 pub region_id: Option<i64>,
1361 pub is_active: Option<bool>,
1362 pub page: Option<i64>,
1363 pub limit: Option<i64>,
1364}
1365
1366#[derive(Debug, Clone, Serialize)]
1369pub struct CreateMetadataClusterRequest {
1370 pub name: String,
1371}
1372
1373#[derive(Debug, Clone, Serialize)]
1374pub struct EditMetadataClusterRequest {
1375 pub name: String,
1376}
1377
1378#[derive(Debug, Clone, Serialize)]
1379pub struct SetMetadataClusterReadyRequest {
1380 pub ready: bool,
1381}
1382
1383#[derive(Debug, Clone, Serialize, Deserialize)]
1384pub struct SetReadyMetadataClusterResponse {
1385 pub id: i64,
1386 pub ready: bool,
1387}
1388
1389#[derive(Debug, Clone, Default)]
1390pub struct MetadataClusterListOptions {
1391 pub is_active: Option<bool>,
1392 pub page: Option<i64>,
1393 pub limit: Option<i64>,
1394}
1395
1396#[derive(Debug, Clone, Serialize)]
1399pub struct CreateStorageRequest {
1400 #[serde(rename = "accountId")]
1401 pub account_id: i64,
1402 #[serde(rename = "regionId")]
1403 pub region_id: i64,
1404 pub name: String,
1405 #[serde(skip_serializing_if = "Option::is_none")]
1406 pub description: Option<String>,
1407 #[serde(rename = "storageType")]
1408 pub storage_type: String,
1409 #[serde(rename = "providerType")]
1410 pub provider_type: String,
1411 pub endpoint: String,
1412 #[serde(skip_serializing_if = "Option::is_none")]
1413 pub region: Option<String>,
1414 #[serde(skip_serializing_if = "Option::is_none")]
1415 pub bucket: Option<String>,
1416 #[serde(skip_serializing_if = "Option::is_none")]
1417 pub base: Option<String>,
1418 #[serde(rename = "blockRegion", skip_serializing_if = "Option::is_none")]
1419 pub block_region: Option<String>,
1420 #[serde(rename = "blockSize", skip_serializing_if = "Option::is_none")]
1421 pub block_size: Option<i32>,
1422 #[serde(rename = "accessKey", skip_serializing_if = "Option::is_none")]
1423 pub access_key: Option<String>,
1424 #[serde(rename = "secretKey", skip_serializing_if = "Option::is_none")]
1425 pub secret_key: Option<String>,
1426}
1427
1428#[derive(Debug, Clone, Serialize)]
1429pub struct EditStorageRequest {
1430 pub name: String,
1431 #[serde(skip_serializing_if = "Option::is_none")]
1432 pub description: Option<String>,
1433 #[serde(skip_serializing_if = "Option::is_none")]
1434 pub endpoint: Option<String>,
1435 #[serde(rename = "accessKey", skip_serializing_if = "Option::is_none")]
1436 pub access_key: Option<String>,
1437 #[serde(rename = "secretKey", skip_serializing_if = "Option::is_none")]
1438 pub secret_key: Option<String>,
1439 #[serde(rename = "directAccess", skip_serializing_if = "Option::is_none")]
1440 pub direct_access: Option<bool>,
1441}
1442
1443#[derive(Debug, Clone, Serialize)]
1444pub struct TestStorageNewBucketRequest {
1445 pub endpoint: String,
1446 #[serde(skip_serializing_if = "Option::is_none")]
1447 pub region: Option<String>,
1448 pub bucket: String,
1449 #[serde(rename = "accessKey")]
1450 pub access_key: String,
1451 #[serde(rename = "secretKey")]
1452 pub secret_key: String,
1453 #[serde(rename = "providerType", skip_serializing_if = "Option::is_none")]
1454 pub provider_type: Option<String>,
1455}
1456
1457#[derive(Debug, Clone, Serialize, Deserialize)]
1458pub struct TestNewBucketStorageResponse {
1459 #[serde(rename = "bucketExists")]
1460 pub bucket_exists: bool,
1461 pub list: bool,
1462 pub write: bool,
1463 pub read: bool,
1464 pub delete: bool,
1465 pub multipart: bool,
1466}
1467
1468#[derive(Debug, Clone, Serialize, Deserialize)]
1469pub struct TestStorageBucketStorageResponse {
1470 #[serde(rename = "bucketExists")]
1471 pub bucket_exists: bool,
1472 pub list: bool,
1473 pub write: bool,
1474 pub read: bool,
1475 pub delete: bool,
1476 pub multipart: bool,
1477}
1478
1479#[derive(Debug, Clone, Serialize, Deserialize)]
1480pub struct ListCompatibleStorageResponse {
1481 pub storages: Vec<CompatibleStorage>,
1482}
1483
1484#[derive(Debug, Clone, Serialize)]
1485pub struct MoveStorageVolumesRequest {
1486 #[serde(rename = "volumeIds")]
1487 pub volume_ids: Vec<String>,
1488}
1489
1490#[derive(Debug, Clone, Serialize, Deserialize)]
1491pub struct MoveVolumesStorageResponse {
1492 pub moved: Vec<String>,
1493 pub failures: Vec<MoveVolumeFailure>,
1494}
1495
1496#[derive(Debug, Clone, Serialize)]
1497pub struct DrainStorageCopysetRequest {
1498 #[serde(skip_serializing_if = "Option::is_none")]
1499 pub force: Option<bool>,
1500}
1501
1502#[derive(Debug, Clone, Serialize, Deserialize)]
1503pub struct DrainCopysetStorageResponse {
1504 pub id: String,
1505 pub state: String,
1506}
1507
1508#[derive(Debug, Clone, Serialize)]
1509pub struct CancelStorageDrainRequest {
1510 #[serde(skip_serializing_if = "Option::is_none")]
1511 pub force: Option<bool>,
1512}
1513
1514#[derive(Debug, Clone, Serialize, Deserialize)]
1515pub struct CancelDrainStorageResponse {
1516 pub id: String,
1517 pub state: String,
1518}
1519
1520#[derive(Debug, Clone, Serialize)]
1521pub struct UpdateStorageTagsRequest {
1522 #[serde(skip_serializing_if = "Option::is_none")]
1523 pub tags: Option<Vec<String>>,
1524}
1525
1526#[derive(Debug, Clone, Serialize)]
1527pub struct RegisterStorageCopysetRequest {
1528 #[serde(skip_serializing_if = "Option::is_none")]
1529 pub name: Option<String>,
1530 #[serde(rename = "failureDomainA", skip_serializing_if = "Option::is_none")]
1531 pub failure_domain_a: Option<String>,
1532 #[serde(rename = "failureDomainB", skip_serializing_if = "Option::is_none")]
1533 pub failure_domain_b: Option<String>,
1534}
1535
1536#[derive(Debug, Clone, Serialize)]
1537pub struct RegisterStorageCopysetsBulkRequest {
1538 pub count: i32,
1539 #[serde(rename = "failureDomainA", skip_serializing_if = "Option::is_none")]
1540 pub failure_domain_a: Option<String>,
1541 #[serde(rename = "failureDomainB", skip_serializing_if = "Option::is_none")]
1542 pub failure_domain_b: Option<String>,
1543}
1544
1545#[derive(Debug, Clone, Serialize, Deserialize)]
1546pub struct RegisterCopysetsBulkStorageResponse {
1547 pub copysets: Vec<Copyset>,
1548}
1549
1550#[derive(Debug, Clone, Serialize)]
1551pub struct AddStorageCopysetMemberRequest {
1552 #[serde(rename = "failureDomain", skip_serializing_if = "Option::is_none")]
1553 pub failure_domain: Option<String>,
1554}
1555
1556#[derive(Debug, Clone, Serialize)]
1557pub struct MarkStorageMemberLostRequest {
1558 #[serde(rename = "blockVolumeId")]
1559 pub block_volume_id: String,
1560 #[serde(skip_serializing_if = "Option::is_none")]
1561 pub force: Option<bool>,
1562}
1563
1564#[derive(Debug, Clone, Serialize, Deserialize)]
1565pub struct RemoveMemberStorageResponse {
1566 pub id: String,
1567}
1568
1569#[derive(Debug, Clone, Serialize, Deserialize)]
1570pub struct BackfillFingerprintsStorageResponse {
1571 pub scanned: i32,
1572 pub updated: i32,
1573 pub failures: Vec<BackfillFailure>,
1574 #[serde(rename = "hasMore")]
1575 pub has_more: bool,
1576}
1577
1578#[derive(Debug, Clone, Default)]
1579pub struct StorageListOptions {
1580 pub account_id: i64,
1581 pub search: Option<String>,
1582 pub region_id: Option<i64>,
1583 pub storage_type: Option<String>,
1584 pub provider_type: Option<String>,
1585 pub is_active: Option<bool>,
1586 pub direct_access: Option<bool>,
1587 pub page: Option<i64>,
1588 pub limit: Option<i64>,
1589}
1590
1591#[derive(Debug, Clone, Serialize)]
1594pub struct CreateVolumeRequest {
1595 #[serde(rename = "accountId")]
1596 pub account_id: i64,
1597 #[serde(rename = "storageId")]
1598 pub storage_id: i64,
1599 pub name: String,
1600 #[serde(skip_serializing_if = "Option::is_none")]
1601 pub description: Option<String>,
1602 #[serde(rename = "volumeType")]
1603 pub volume_type: String,
1604 #[serde(skip_serializing_if = "Option::is_none")]
1605 pub encryption: Option<bool>,
1606 #[serde(rename = "encryptionKey", skip_serializing_if = "Option::is_none")]
1607 pub encryption_key: Option<String>,
1608 #[serde(skip_serializing_if = "Option::is_none")]
1609 pub retention: Option<VolumeRetentionPolicy>,
1610 #[serde(skip_serializing_if = "Option::is_none")]
1611 pub versioning: Option<VolumeVersioningPolicy>,
1612 #[serde(skip_serializing_if = "Option::is_none")]
1613 pub compaction: Option<String>,
1614 #[serde(rename = "quotaLimit", skip_serializing_if = "Option::is_none")]
1615 pub quota_limit: Option<i64>,
1616 #[serde(rename = "metadataClusterId", skip_serializing_if = "Option::is_none")]
1617 pub metadata_cluster_id: Option<i64>,
1618 #[serde(rename = "metadataClusterUuid", skip_serializing_if = "Option::is_none")]
1619 pub metadata_cluster_uuid: Option<String>,
1620}
1621
1622#[derive(Debug, Clone, Serialize, Deserialize)]
1623pub struct CreateVolumeResponse {
1624 pub id: i64,
1625 #[serde(rename = "encryptionKey", skip_serializing_if = "Option::is_none")]
1626 pub encryption_key: Option<String>,
1627}
1628
1629#[derive(Debug, Clone, Serialize)]
1630pub struct EditVolumeRequest {
1631 #[serde(skip_serializing_if = "Option::is_none")]
1632 pub description: Option<String>,
1633 #[serde(skip_serializing_if = "Option::is_none")]
1634 pub retention: Option<VolumeRetentionPolicy>,
1635 #[serde(skip_serializing_if = "Option::is_none")]
1636 pub versioning: Option<VolumeVersioningPolicy>,
1637 #[serde(skip_serializing_if = "Option::is_none")]
1638 pub compaction: Option<String>,
1639}
1640
1641#[derive(Debug, Clone, Serialize)]
1642pub struct MoveVolumeClusterRequest {
1643 #[serde(rename = "targetClusterId", skip_serializing_if = "Option::is_none")]
1644 pub target_cluster_id: Option<i64>,
1645 #[serde(rename = "targetClusterUuid", skip_serializing_if = "Option::is_none")]
1646 pub target_cluster_uuid: Option<String>,
1647}
1648
1649#[derive(Debug, Clone, Serialize, Deserialize)]
1650pub struct MoveClusterVolumeResponse {
1651 pub id: i64,
1652 #[serde(rename = "sourceClusterId")]
1653 pub source_cluster_id: i64,
1654 #[serde(rename = "targetClusterId")]
1655 pub target_cluster_id: i64,
1656 #[serde(rename = "handoverUntil")]
1657 pub handover_until: i64,
1658}
1659
1660#[derive(Debug, Clone, Serialize)]
1661pub struct DeactivateVolumeRequest {
1662 #[serde(rename = "isCleanupMetaEnabled", skip_serializing_if = "Option::is_none")]
1663 pub is_cleanup_meta_enabled: Option<bool>,
1664 #[serde(rename = "isCleanupStorageEnabled", skip_serializing_if = "Option::is_none")]
1665 pub is_cleanup_storage_enabled: Option<bool>,
1666 #[serde(rename = "isCleanupVaultEnabled", skip_serializing_if = "Option::is_none")]
1667 pub is_cleanup_vault_enabled: Option<bool>,
1668}
1669
1670#[derive(Debug, Clone, Serialize)]
1671pub struct GenerateVolumeAPIKeysRequest {
1672 #[serde(rename = "userId")]
1673 pub user_id: i64,
1674 #[serde(skip_serializing_if = "Option::is_none")]
1675 pub name: Option<String>,
1676}
1677
1678#[derive(Debug, Clone, Serialize, Deserialize)]
1679pub struct GenerateAPIKeysVolumeResponse {
1680 #[serde(rename = "apiKey")]
1681 pub api_key: String,
1682 #[serde(rename = "apiSecret")]
1683 pub api_secret: String,
1684 #[serde(rename = "evictedApiKeys", skip_serializing_if = "Option::is_none")]
1685 pub evicted_api_keys: Option<Vec<String>>,
1686}
1687
1688#[derive(Debug, Clone, Serialize, Deserialize)]
1689pub struct ListAPIKeysVolumeResponse {
1690 pub keys: Vec<VolumeApiKey>,
1691}
1692
1693#[derive(Debug, Clone, Serialize)]
1694pub struct RevokeVolumeAPIKeyRequest {
1695 #[serde(rename = "apiKey")]
1696 pub api_key: String,
1697}
1698
1699#[derive(Debug, Clone, Serialize)]
1700pub struct RevokeVolumeAPIKeysByUserRequest {
1701 #[serde(rename = "userId")]
1702 pub user_id: i64,
1703}
1704
1705#[derive(Debug, Clone, Serialize)]
1706pub struct GenerateVolumeSttKeyRequest {
1707 #[serde(rename = "userId", skip_serializing_if = "Option::is_none")]
1708 pub user_id: Option<i64>,
1709 #[serde(rename = "expirySeconds")]
1710 pub expiry_seconds: i64,
1711}
1712
1713#[derive(Debug, Clone, Serialize, Deserialize)]
1714pub struct GenerateSttKeyVolumeResponse {
1715 #[serde(rename = "apiKey")]
1716 pub api_key: String,
1717 #[serde(rename = "apiSecret")]
1718 pub api_secret: String,
1719 #[serde(rename = "expiresAt")]
1720 pub expires_at: String,
1721}
1722
1723#[derive(Debug, Clone, Serialize)]
1724pub struct UpdateVolumeQuotaRequest {
1725 #[serde(rename = "quotaLimit")]
1726 pub quota_limit: i64,
1727}
1728
1729#[derive(Debug, Clone, Serialize)]
1730pub struct UpdateVolumeCopysetConfigRequest {
1731 #[serde(rename = "targetCopysetCount")]
1732 pub target_copyset_count: i32,
1733}
1734
1735#[derive(Debug, Clone, Serialize, Deserialize)]
1736pub struct StatsVolumeResponse {
1737 #[serde(rename = "volumeId")]
1738 pub volume_id: String,
1739 #[serde(rename = "liveVolume")]
1740 pub live_volume: i64,
1741 #[serde(rename = "totalVolume")]
1742 pub total_volume: i64,
1743 #[serde(rename = "pendingVolume")]
1744 pub pending_volume: i64,
1745 #[serde(rename = "liveInactiveVolume")]
1746 pub live_inactive_volume: i64,
1747}
1748
1749#[derive(Debug, Clone, Serialize, Deserialize)]
1750pub struct SizeHistoryVolumeResponse {
1751 pub points: Vec<VolumeSizePoint>,
1752}
1753
1754#[derive(Debug, Clone, Serialize)]
1755pub struct CreateVolumeForkRequest {
1756 pub name: String,
1757 #[serde(rename = "parentName", skip_serializing_if = "Option::is_none")]
1758 pub parent_name: Option<String>,
1759 #[serde(rename = "asOf", skip_serializing_if = "Option::is_none")]
1760 pub as_of: Option<i64>,
1761 #[serde(rename = "volumeType", skip_serializing_if = "Option::is_none")]
1762 pub volume_type: Option<String>,
1763}
1764
1765#[derive(Debug, Clone, Serialize)]
1766pub struct DeleteVolumeForkRequest {
1767 #[serde(skip_serializing_if = "Option::is_none")]
1768 pub force: Option<bool>,
1769 #[serde(rename = "volumeType", skip_serializing_if = "Option::is_none")]
1770 pub volume_type: Option<String>,
1771}
1772
1773#[derive(Debug, Clone, Serialize, Deserialize)]
1774pub struct DeleteForkVolumeResponse {
1775 #[serde(rename = "inactivatedFids")]
1776 pub inactivated_fids: Vec<i32>,
1777}
1778
1779#[derive(Debug, Clone, Serialize)]
1780pub struct RestoreVolumeForkRequest {
1781 #[serde(rename = "volumeType", skip_serializing_if = "Option::is_none")]
1782 pub volume_type: Option<String>,
1783}
1784
1785#[derive(Debug, Clone, Default)]
1786pub struct VolumeListOptions {
1787 pub account_id: i64,
1788 pub region_id: Option<i64>,
1789 pub metadata_cluster_id: Option<i64>,
1790 pub storage_id: Option<i64>,
1791 pub volume_type: Option<String>,
1792 pub locked: Option<bool>,
1793 pub is_active: Option<bool>,
1794 pub page: Option<i64>,
1795 pub limit: Option<i64>,
1796}
1797
1798#[derive(Debug, Clone, Default)]
1801pub struct VolumeForkTreeListOptions {
1802 pub path: Option<String>,
1803 pub as_of: Option<i64>,
1804 pub cursor: Option<i64>,
1805 pub limit: Option<i64>,
1806 pub sort: Option<String>,
1807 pub kind: Option<String>,
1808}
1809
1810#[derive(Debug, Clone, Default)]
1813pub struct VolumeForkEntryListOptions {
1814 pub path: Option<String>,
1815 pub cursor: Option<i64>,
1816 pub limit: Option<i64>,
1817}
1818
1819#[derive(Debug, Clone, Default)]
1822pub struct VolumeForkSearchListOptions {
1823 pub q: Option<String>,
1824 pub path: Option<String>,
1825 pub as_of: Option<i64>,
1826 pub exact: Option<bool>,
1827 pub cursor: Option<i64>,
1828 pub limit: Option<i64>,
1829 pub kind: Option<String>,
1830}
1831
1832#[derive(Debug, Clone, Default)]
1835pub struct AuditLogListOptions {
1836 pub account_id: i64,
1837 pub region_id: Option<i64>,
1838 pub metadata_cluster_id: Option<i64>,
1839 pub cursor: Option<i64>,
1840 pub limit: Option<i64>,
1841 pub subject: Option<String>,
1842 pub created_by: Option<String>,
1843}
1844
1845#[derive(Debug, Clone, Default)]
1848pub struct RegionAuditLogListOptions {
1849 pub metadata_cluster_id: Option<i64>,
1850 pub cursor: Option<i64>,
1851 pub limit: Option<i64>,
1852 pub subject: Option<String>,
1853 pub node: Option<String>,
1854}
1855
1856#[derive(Debug, Clone, Serialize, Deserialize)]
1859pub struct StatsHistoryServiceNodeResponse {
1860 #[serde(rename = "intervalMs")]
1861 pub interval_ms: i64,
1862 pub samples: Vec<NodeStatsSample>,
1863}
1864
1865#[derive(Debug, Clone, Default)]
1870pub struct ClientSessionListOptions {
1871 pub account_id: i64,
1872 pub region_id: Option<i64>,
1873 pub metadata_cluster_id: Option<i64>,
1874 pub volume_id: Option<i64>,
1875 pub user_id: Option<i64>,
1876 pub client_type: Option<String>,
1877 pub status: Option<ClientSessionStatus>,
1878 pub is_active: Option<bool>,
1879 pub os_name: Option<String>,
1880 pub platform: Option<String>,
1881 pub search: Option<String>,
1882 pub page: Option<i64>,
1883 pub limit: Option<i64>,
1884}
1885
1886#[derive(Debug, Clone, Serialize)]
1891pub struct GenerateMetricTokenRequest {
1892 #[serde(rename = "expirySeconds")]
1893 pub expiry_seconds: i64,
1894}
1895
1896#[derive(Debug, Clone, Serialize)]
1901pub struct LoadLicenseRequest {
1902 pub payloads: Vec<String>,
1903}
1904
1905#[derive(Debug, Clone, Serialize, Deserialize)]
1908pub struct ResolveAlertResponse {
1909 #[serde(rename = "alertId")]
1910 pub alert_id: String,
1911}
1912
1913#[derive(Debug, Clone, Default)]
1914pub struct AlertListOptions {
1915 pub active: Option<bool>,
1916 pub account_id: Option<i64>,
1917 pub region_id: Option<i64>,
1918 pub severity: Option<i64>,
1919 pub category: Option<String>,
1920 pub since: Option<String>,
1921 pub page: Option<i64>,
1922 pub limit: Option<i64>,
1923}
1924
1925#[derive(Debug, Clone, Serialize, Deserialize)]
1928pub struct ResolveRegionAlertResponse {
1929 #[serde(rename = "alertId")]
1930 pub alert_id: String,
1931}
1932
1933#[derive(Debug, Clone, Default)]
1934pub struct RegionAlertListOptions {
1935 pub active: Option<bool>,
1936 pub severity: Option<i64>,
1937 pub category: Option<String>,
1938 pub node_id: Option<String>,
1939 pub metadata_cluster_id: Option<i64>,
1940 pub since: Option<String>,
1941 pub page: Option<i64>,
1942 pub limit: Option<i64>,
1943}
1944
1945#[derive(Debug, Clone, Default)]
1948pub struct GCWorkerEventListOptions {
1949 pub node_id: Option<String>,
1950 pub goal: Option<String>,
1951 pub sid: Option<i64>,
1952 pub metadata_cluster_id: Option<i64>,
1953 pub since: Option<String>,
1954 pub page: Option<i64>,
1955 pub limit: Option<i64>,
1956}
1957
1958