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