@oneuptime/common 11.0.10 → 11.0.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (148) hide show
  1. package/Models/DatabaseModels/CephCluster.ts +134 -0
  2. package/Models/DatabaseModels/CloudResource.ts +134 -0
  3. package/Models/DatabaseModels/DockerHost.ts +134 -0
  4. package/Models/DatabaseModels/DockerSwarmCluster.ts +134 -0
  5. package/Models/DatabaseModels/Host.ts +134 -0
  6. package/Models/DatabaseModels/KubernetesCluster.ts +134 -0
  7. package/Models/DatabaseModels/PodmanHost.ts +134 -0
  8. package/Models/DatabaseModels/ProxmoxCluster.ts +134 -0
  9. package/Models/DatabaseModels/RumApplication.ts +134 -0
  10. package/Models/DatabaseModels/ServerlessFunction.ts +134 -0
  11. package/Models/DatabaseModels/Service.ts +134 -0
  12. package/Models/DatabaseModels/StatusPage.ts +0 -42
  13. package/README.md +1 -1
  14. package/Scripts/generate-service-worker.js +46 -36
  15. package/Server/Infrastructure/Postgres/DataSourceOptions.ts +4 -2
  16. package/Server/Infrastructure/Postgres/SchemaMigrations/1782600000000-AddArchiveToResources.ts +331 -0
  17. package/Server/Infrastructure/Postgres/SchemaMigrations/1782700000000-RemoveDeprecatedEnableSubscribersFromStatusPage.ts +35 -0
  18. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +4 -0
  19. package/Server/Infrastructure/Postgres/SchemaMigrations/Readme.md +3 -3
  20. package/Server/Infrastructure/Queue.ts +122 -0
  21. package/Server/Services/AIAgentService.ts +9 -4
  22. package/Server/Services/AnalyticsDatabaseService.ts +89 -56
  23. package/Server/Services/CephClusterService.ts +6 -4
  24. package/Server/Services/CloudResourceService.ts +6 -4
  25. package/Server/Services/DatabaseService.ts +126 -0
  26. package/Server/Services/DockerHostService.ts +6 -4
  27. package/Server/Services/DockerSwarmClusterService.ts +6 -4
  28. package/Server/Services/HostService.ts +6 -4
  29. package/Server/Services/KubernetesClusterService.ts +6 -4
  30. package/Server/Services/PodmanHostService.ts +6 -4
  31. package/Server/Services/ProbeService.ts +10 -4
  32. package/Server/Services/ProxmoxClusterService.ts +6 -4
  33. package/Server/Services/RumApplicationService.ts +6 -4
  34. package/Server/Services/ServerlessFunctionService.ts +6 -4
  35. package/Server/Services/ServiceService.ts +17 -4
  36. package/Server/Types/Markdown.ts +103 -0
  37. package/Server/Utils/AnalyticsDatabase/StatementGenerator.ts +5 -2
  38. package/Server/Utils/CodeRepository/CodeRepository.ts +78 -0
  39. package/Server/Utils/Execute.ts +6 -0
  40. package/Server/Utils/Logger.ts +66 -0
  41. package/Server/Utils/Monitor/MonitorResource.ts +24 -10
  42. package/Server/Utils/Telemetry/EntityRegistry.ts +10 -5
  43. package/Server/Utils/Workspace/Slack/app-manifest.json +86 -92
  44. package/Tests/Server/Services/UpdateColumnsByIdWithoutHooks.test.ts +154 -0
  45. package/Tests/Server/Utils/AnalyticsDatabase/StatementGenerator.test.ts +87 -9
  46. package/Tests/Types/DiskSize.test.ts +49 -0
  47. package/Types/Dashboard/DashboardComponents/DashboardTableComponent.ts +11 -0
  48. package/Types/Icon/IconProp.ts +1 -0
  49. package/Types/Monitor/MonitorType.ts +15 -31
  50. package/Types/Monitor/schema.json +32 -35
  51. package/UI/Components/BulkUpdate/BulkArchiveActions.tsx +150 -0
  52. package/UI/Components/Icon/Icon.tsx +42 -126
  53. package/UI/Components/Navbar/NavBarMenuModal.tsx +2 -5
  54. package/UI/esbuild-config.js +136 -110
  55. package/Utils/ClientAPI/README.md +1 -1
  56. package/build/dist/Models/DatabaseModels/CephCluster.js +136 -0
  57. package/build/dist/Models/DatabaseModels/CephCluster.js.map +1 -1
  58. package/build/dist/Models/DatabaseModels/CloudResource.js +136 -0
  59. package/build/dist/Models/DatabaseModels/CloudResource.js.map +1 -1
  60. package/build/dist/Models/DatabaseModels/DockerHost.js +136 -0
  61. package/build/dist/Models/DatabaseModels/DockerHost.js.map +1 -1
  62. package/build/dist/Models/DatabaseModels/DockerSwarmCluster.js +136 -0
  63. package/build/dist/Models/DatabaseModels/DockerSwarmCluster.js.map +1 -1
  64. package/build/dist/Models/DatabaseModels/Host.js +136 -0
  65. package/build/dist/Models/DatabaseModels/Host.js.map +1 -1
  66. package/build/dist/Models/DatabaseModels/KubernetesCluster.js +136 -0
  67. package/build/dist/Models/DatabaseModels/KubernetesCluster.js.map +1 -1
  68. package/build/dist/Models/DatabaseModels/PodmanHost.js +136 -0
  69. package/build/dist/Models/DatabaseModels/PodmanHost.js.map +1 -1
  70. package/build/dist/Models/DatabaseModels/ProxmoxCluster.js +136 -0
  71. package/build/dist/Models/DatabaseModels/ProxmoxCluster.js.map +1 -1
  72. package/build/dist/Models/DatabaseModels/RumApplication.js +136 -0
  73. package/build/dist/Models/DatabaseModels/RumApplication.js.map +1 -1
  74. package/build/dist/Models/DatabaseModels/ServerlessFunction.js +136 -0
  75. package/build/dist/Models/DatabaseModels/ServerlessFunction.js.map +1 -1
  76. package/build/dist/Models/DatabaseModels/Service.js +136 -0
  77. package/build/dist/Models/DatabaseModels/Service.js.map +1 -1
  78. package/build/dist/Models/DatabaseModels/StatusPage.js +0 -44
  79. package/build/dist/Models/DatabaseModels/StatusPage.js.map +1 -1
  80. package/build/dist/Server/Infrastructure/Postgres/DataSourceOptions.js +4 -2
  81. package/build/dist/Server/Infrastructure/Postgres/DataSourceOptions.js.map +1 -1
  82. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1782600000000-AddArchiveToResources.js +120 -0
  83. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1782600000000-AddArchiveToResources.js.map +1 -0
  84. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1782700000000-RemoveDeprecatedEnableSubscribersFromStatusPage.js +28 -0
  85. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1782700000000-RemoveDeprecatedEnableSubscribersFromStatusPage.js.map +1 -0
  86. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +4 -0
  87. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  88. package/build/dist/Server/Infrastructure/Queue.js +63 -0
  89. package/build/dist/Server/Infrastructure/Queue.js.map +1 -1
  90. package/build/dist/Server/Services/AIAgentService.js +9 -4
  91. package/build/dist/Server/Services/AIAgentService.js.map +1 -1
  92. package/build/dist/Server/Services/AnalyticsDatabaseService.js +52 -17
  93. package/build/dist/Server/Services/AnalyticsDatabaseService.js.map +1 -1
  94. package/build/dist/Server/Services/CephClusterService.js +6 -4
  95. package/build/dist/Server/Services/CephClusterService.js.map +1 -1
  96. package/build/dist/Server/Services/CloudResourceService.js +6 -4
  97. package/build/dist/Server/Services/CloudResourceService.js.map +1 -1
  98. package/build/dist/Server/Services/DatabaseService.js +101 -0
  99. package/build/dist/Server/Services/DatabaseService.js.map +1 -1
  100. package/build/dist/Server/Services/DockerHostService.js +6 -4
  101. package/build/dist/Server/Services/DockerHostService.js.map +1 -1
  102. package/build/dist/Server/Services/DockerSwarmClusterService.js +6 -4
  103. package/build/dist/Server/Services/DockerSwarmClusterService.js.map +1 -1
  104. package/build/dist/Server/Services/HostService.js +6 -4
  105. package/build/dist/Server/Services/HostService.js.map +1 -1
  106. package/build/dist/Server/Services/KubernetesClusterService.js +6 -4
  107. package/build/dist/Server/Services/KubernetesClusterService.js.map +1 -1
  108. package/build/dist/Server/Services/PodmanHostService.js +6 -4
  109. package/build/dist/Server/Services/PodmanHostService.js.map +1 -1
  110. package/build/dist/Server/Services/ProbeService.js +10 -4
  111. package/build/dist/Server/Services/ProbeService.js.map +1 -1
  112. package/build/dist/Server/Services/ProxmoxClusterService.js +6 -4
  113. package/build/dist/Server/Services/ProxmoxClusterService.js.map +1 -1
  114. package/build/dist/Server/Services/RumApplicationService.js +6 -4
  115. package/build/dist/Server/Services/RumApplicationService.js.map +1 -1
  116. package/build/dist/Server/Services/ServerlessFunctionService.js +6 -4
  117. package/build/dist/Server/Services/ServerlessFunctionService.js.map +1 -1
  118. package/build/dist/Server/Services/ServiceService.js +17 -4
  119. package/build/dist/Server/Services/ServiceService.js.map +1 -1
  120. package/build/dist/Server/Types/Markdown.js +87 -0
  121. package/build/dist/Server/Types/Markdown.js.map +1 -1
  122. package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js +3 -0
  123. package/build/dist/Server/Utils/AnalyticsDatabase/StatementGenerator.js.map +1 -1
  124. package/build/dist/Server/Utils/CodeRepository/CodeRepository.js +60 -0
  125. package/build/dist/Server/Utils/CodeRepository/CodeRepository.js.map +1 -1
  126. package/build/dist/Server/Utils/Execute.js +1 -3
  127. package/build/dist/Server/Utils/Execute.js.map +1 -1
  128. package/build/dist/Server/Utils/Logger.js +49 -1
  129. package/build/dist/Server/Utils/Logger.js.map +1 -1
  130. package/build/dist/Server/Utils/Monitor/MonitorResource.js +24 -10
  131. package/build/dist/Server/Utils/Monitor/MonitorResource.js.map +1 -1
  132. package/build/dist/Server/Utils/Telemetry/EntityRegistry.js +10 -5
  133. package/build/dist/Server/Utils/Telemetry/EntityRegistry.js.map +1 -1
  134. package/build/dist/Server/Utils/Workspace/Slack/app-manifest.json +3 -9
  135. package/build/dist/Types/Dashboard/DashboardComponents/DashboardTableComponent.js.map +1 -1
  136. package/build/dist/Types/Icon/IconProp.js +1 -0
  137. package/build/dist/Types/Icon/IconProp.js.map +1 -1
  138. package/build/dist/Types/Monitor/MonitorType.js +15 -31
  139. package/build/dist/Types/Monitor/MonitorType.js.map +1 -1
  140. package/build/dist/UI/Components/BulkUpdate/BulkArchiveActions.js +96 -0
  141. package/build/dist/UI/Components/BulkUpdate/BulkArchiveActions.js.map +1 -0
  142. package/build/dist/UI/Components/Icon/Icon.js +17 -41
  143. package/build/dist/UI/Components/Icon/Icon.js.map +1 -1
  144. package/build/dist/UI/Components/Navbar/NavBarMenuModal.js +2 -3
  145. package/build/dist/UI/Components/Navbar/NavBarMenuModal.js.map +1 -1
  146. package/jest.config.json +47 -66
  147. package/package.json +1 -1
  148. package/tsconfig.json +109 -113
@@ -79,6 +79,7 @@ import {
79
79
  * (projectId, clusterIdentifier) unique index.
80
80
  */
81
81
  @Index(["projectId", "name"], { unique: true })
82
+ @Index(["projectId", "isArchived"])
82
83
  @TableMetadata({
83
84
  tableName: "CephCluster",
84
85
  singularName: "Ceph Cluster",
@@ -761,6 +762,139 @@ export default class CephCluster extends BaseModel {
761
762
  })
762
763
  public createdByUserId?: ObjectID = undefined;
763
764
 
765
+ @ColumnAccessControl({
766
+ create: [
767
+ Permission.ProjectOwner,
768
+ Permission.ProjectAdmin,
769
+ Permission.ProjectMember,
770
+ Permission.SettingsAdmin,
771
+ Permission.SettingsMember,
772
+ Permission.CreateCephCluster,
773
+ ],
774
+ read: [
775
+ Permission.ProjectOwner,
776
+ Permission.ProjectAdmin,
777
+ Permission.ProjectMember,
778
+ Permission.Viewer,
779
+ Permission.SettingsAdmin,
780
+ Permission.SettingsMember,
781
+ Permission.SettingsViewer,
782
+ Permission.ReadCephCluster,
783
+ ],
784
+ update: [
785
+ Permission.ProjectOwner,
786
+ Permission.ProjectAdmin,
787
+ Permission.ProjectMember,
788
+ Permission.SettingsAdmin,
789
+ Permission.SettingsMember,
790
+ Permission.EditCephCluster,
791
+ ],
792
+ })
793
+ @TableColumn({
794
+ isDefaultValueColumn: true,
795
+ required: true,
796
+ type: TableColumnType.Boolean,
797
+ title: "Is Archived",
798
+ description:
799
+ "Is this Ceph cluster archived? Archived Ceph clusters are hidden from lists but keep collecting telemetry.",
800
+ defaultValue: false,
801
+ })
802
+ @Column({
803
+ type: ColumnType.Boolean,
804
+ nullable: false,
805
+ default: false,
806
+ })
807
+ public isArchived?: boolean = undefined;
808
+
809
+ @ColumnAccessControl({
810
+ create: [],
811
+ read: [
812
+ Permission.ProjectOwner,
813
+ Permission.ProjectAdmin,
814
+ Permission.ProjectMember,
815
+ Permission.Viewer,
816
+ Permission.SettingsAdmin,
817
+ Permission.SettingsMember,
818
+ Permission.SettingsViewer,
819
+ Permission.ReadCephCluster,
820
+ ],
821
+ update: [],
822
+ })
823
+ @TableColumn({
824
+ required: false,
825
+ type: TableColumnType.Date,
826
+ title: "Archived At",
827
+ description: "When was this Ceph cluster archived?",
828
+ })
829
+ @Column({
830
+ type: ColumnType.Date,
831
+ nullable: true,
832
+ })
833
+ public archivedAt?: Date = undefined;
834
+
835
+ @ColumnAccessControl({
836
+ create: [],
837
+ read: [
838
+ Permission.ProjectOwner,
839
+ Permission.ProjectAdmin,
840
+ Permission.ProjectMember,
841
+ Permission.Viewer,
842
+ Permission.SettingsAdmin,
843
+ Permission.SettingsMember,
844
+ Permission.SettingsViewer,
845
+ Permission.ReadCephCluster,
846
+ ],
847
+ update: [],
848
+ })
849
+ @TableColumn({
850
+ manyToOneRelationColumn: "archivedByUserId",
851
+ type: TableColumnType.Entity,
852
+ modelType: User,
853
+ title: "Archived by User",
854
+ description:
855
+ "Relation to User who archived this object (if this object was archived by a User)",
856
+ })
857
+ @ManyToOne(
858
+ () => {
859
+ return User;
860
+ },
861
+ {
862
+ eager: false,
863
+ nullable: true,
864
+ onDelete: "SET NULL",
865
+ orphanedRowAction: "nullify",
866
+ },
867
+ )
868
+ @JoinColumn({ name: "archivedByUserId" })
869
+ public archivedByUser?: User = undefined;
870
+
871
+ @ColumnAccessControl({
872
+ create: [],
873
+ read: [
874
+ Permission.ProjectOwner,
875
+ Permission.ProjectAdmin,
876
+ Permission.ProjectMember,
877
+ Permission.Viewer,
878
+ Permission.SettingsAdmin,
879
+ Permission.SettingsMember,
880
+ Permission.SettingsViewer,
881
+ Permission.ReadCephCluster,
882
+ ],
883
+ update: [],
884
+ })
885
+ @TableColumn({
886
+ type: TableColumnType.ObjectID,
887
+ title: "Archived by User ID",
888
+ description:
889
+ "User ID who archived this object (if this object was archived by a User)",
890
+ })
891
+ @Column({
892
+ type: ColumnType.ObjectID,
893
+ nullable: true,
894
+ transformer: ObjectID.getDatabaseTransformer(),
895
+ })
896
+ public archivedByUserId?: ObjectID = undefined;
897
+
764
898
  @ColumnAccessControl({
765
899
  create: [],
766
900
  read: [
@@ -77,6 +77,7 @@ import {
77
77
  * workload collapse into a single row instead of racing to create duplicates.
78
78
  */
79
79
  @Index(["projectId", "resourceIdentifier"], { unique: true })
80
+ @Index(["projectId", "isArchived"])
80
81
  @TableMetadata({
81
82
  tableName: "CloudResource",
82
83
  singularName: "Cloud Resource",
@@ -780,6 +781,139 @@ export default class CloudResource extends BaseModel {
780
781
  })
781
782
  public createdByUserId?: ObjectID = undefined;
782
783
 
784
+ @ColumnAccessControl({
785
+ create: [
786
+ Permission.ProjectOwner,
787
+ Permission.ProjectAdmin,
788
+ Permission.ProjectMember,
789
+ Permission.SettingsAdmin,
790
+ Permission.SettingsMember,
791
+ Permission.CreateCloudResource,
792
+ ],
793
+ read: [
794
+ Permission.ProjectOwner,
795
+ Permission.ProjectAdmin,
796
+ Permission.ProjectMember,
797
+ Permission.Viewer,
798
+ Permission.SettingsAdmin,
799
+ Permission.SettingsMember,
800
+ Permission.SettingsViewer,
801
+ Permission.ReadCloudResource,
802
+ ],
803
+ update: [
804
+ Permission.ProjectOwner,
805
+ Permission.ProjectAdmin,
806
+ Permission.ProjectMember,
807
+ Permission.SettingsAdmin,
808
+ Permission.SettingsMember,
809
+ Permission.EditCloudResource,
810
+ ],
811
+ })
812
+ @TableColumn({
813
+ isDefaultValueColumn: true,
814
+ required: true,
815
+ type: TableColumnType.Boolean,
816
+ title: "Is Archived",
817
+ description:
818
+ "Is this cloud resource archived? Archived cloud resources are hidden from lists but keep collecting telemetry.",
819
+ defaultValue: false,
820
+ })
821
+ @Column({
822
+ type: ColumnType.Boolean,
823
+ nullable: false,
824
+ default: false,
825
+ })
826
+ public isArchived?: boolean = undefined;
827
+
828
+ @ColumnAccessControl({
829
+ create: [],
830
+ read: [
831
+ Permission.ProjectOwner,
832
+ Permission.ProjectAdmin,
833
+ Permission.ProjectMember,
834
+ Permission.Viewer,
835
+ Permission.SettingsAdmin,
836
+ Permission.SettingsMember,
837
+ Permission.SettingsViewer,
838
+ Permission.ReadCloudResource,
839
+ ],
840
+ update: [],
841
+ })
842
+ @TableColumn({
843
+ required: false,
844
+ type: TableColumnType.Date,
845
+ title: "Archived At",
846
+ description: "When was this cloud resource archived?",
847
+ })
848
+ @Column({
849
+ type: ColumnType.Date,
850
+ nullable: true,
851
+ })
852
+ public archivedAt?: Date = undefined;
853
+
854
+ @ColumnAccessControl({
855
+ create: [],
856
+ read: [
857
+ Permission.ProjectOwner,
858
+ Permission.ProjectAdmin,
859
+ Permission.ProjectMember,
860
+ Permission.Viewer,
861
+ Permission.SettingsAdmin,
862
+ Permission.SettingsMember,
863
+ Permission.SettingsViewer,
864
+ Permission.ReadCloudResource,
865
+ ],
866
+ update: [],
867
+ })
868
+ @TableColumn({
869
+ manyToOneRelationColumn: "archivedByUserId",
870
+ type: TableColumnType.Entity,
871
+ modelType: User,
872
+ title: "Archived by User",
873
+ description:
874
+ "Relation to User who archived this object (if this object was archived by a User)",
875
+ })
876
+ @ManyToOne(
877
+ () => {
878
+ return User;
879
+ },
880
+ {
881
+ eager: false,
882
+ nullable: true,
883
+ onDelete: "SET NULL",
884
+ orphanedRowAction: "nullify",
885
+ },
886
+ )
887
+ @JoinColumn({ name: "archivedByUserId" })
888
+ public archivedByUser?: User = undefined;
889
+
890
+ @ColumnAccessControl({
891
+ create: [],
892
+ read: [
893
+ Permission.ProjectOwner,
894
+ Permission.ProjectAdmin,
895
+ Permission.ProjectMember,
896
+ Permission.Viewer,
897
+ Permission.SettingsAdmin,
898
+ Permission.SettingsMember,
899
+ Permission.SettingsViewer,
900
+ Permission.ReadCloudResource,
901
+ ],
902
+ update: [],
903
+ })
904
+ @TableColumn({
905
+ type: TableColumnType.ObjectID,
906
+ title: "Archived by User ID",
907
+ description:
908
+ "User ID who archived this object (if this object was archived by a User)",
909
+ })
910
+ @Column({
911
+ type: ColumnType.ObjectID,
912
+ nullable: true,
913
+ transformer: ObjectID.getDatabaseTransformer(),
914
+ })
915
+ public archivedByUserId?: ObjectID = undefined;
916
+
783
917
  @ColumnAccessControl({
784
918
  create: [],
785
919
  read: [
@@ -71,6 +71,7 @@ import {
71
71
  })
72
72
  @CrudApiEndpoint(new Route("/docker-host"))
73
73
  @SlugifyColumn("name", "slug")
74
+ @Index(["projectId", "isArchived"])
74
75
  @TableMetadata({
75
76
  tableName: "DockerHost",
76
77
  singularName: "Docker Host",
@@ -656,6 +657,139 @@ export default class DockerHost extends BaseModel {
656
657
  })
657
658
  public createdByUserId?: ObjectID = undefined;
658
659
 
660
+ @ColumnAccessControl({
661
+ create: [
662
+ Permission.ProjectOwner,
663
+ Permission.ProjectAdmin,
664
+ Permission.ProjectMember,
665
+ Permission.SettingsAdmin,
666
+ Permission.SettingsMember,
667
+ Permission.CreateDockerHost,
668
+ ],
669
+ read: [
670
+ Permission.ProjectOwner,
671
+ Permission.ProjectAdmin,
672
+ Permission.ProjectMember,
673
+ Permission.Viewer,
674
+ Permission.SettingsAdmin,
675
+ Permission.SettingsMember,
676
+ Permission.SettingsViewer,
677
+ Permission.ReadDockerHost,
678
+ ],
679
+ update: [
680
+ Permission.ProjectOwner,
681
+ Permission.ProjectAdmin,
682
+ Permission.ProjectMember,
683
+ Permission.SettingsAdmin,
684
+ Permission.SettingsMember,
685
+ Permission.EditDockerHost,
686
+ ],
687
+ })
688
+ @TableColumn({
689
+ isDefaultValueColumn: true,
690
+ required: true,
691
+ type: TableColumnType.Boolean,
692
+ title: "Is Archived",
693
+ description:
694
+ "Is this Docker host archived? Archived Docker hosts are hidden from lists but keep collecting telemetry.",
695
+ defaultValue: false,
696
+ })
697
+ @Column({
698
+ type: ColumnType.Boolean,
699
+ nullable: false,
700
+ default: false,
701
+ })
702
+ public isArchived?: boolean = undefined;
703
+
704
+ @ColumnAccessControl({
705
+ create: [],
706
+ read: [
707
+ Permission.ProjectOwner,
708
+ Permission.ProjectAdmin,
709
+ Permission.ProjectMember,
710
+ Permission.Viewer,
711
+ Permission.SettingsAdmin,
712
+ Permission.SettingsMember,
713
+ Permission.SettingsViewer,
714
+ Permission.ReadDockerHost,
715
+ ],
716
+ update: [],
717
+ })
718
+ @TableColumn({
719
+ required: false,
720
+ type: TableColumnType.Date,
721
+ title: "Archived At",
722
+ description: "When was this Docker host archived?",
723
+ })
724
+ @Column({
725
+ type: ColumnType.Date,
726
+ nullable: true,
727
+ })
728
+ public archivedAt?: Date = undefined;
729
+
730
+ @ColumnAccessControl({
731
+ create: [],
732
+ read: [
733
+ Permission.ProjectOwner,
734
+ Permission.ProjectAdmin,
735
+ Permission.ProjectMember,
736
+ Permission.Viewer,
737
+ Permission.SettingsAdmin,
738
+ Permission.SettingsMember,
739
+ Permission.SettingsViewer,
740
+ Permission.ReadDockerHost,
741
+ ],
742
+ update: [],
743
+ })
744
+ @TableColumn({
745
+ manyToOneRelationColumn: "archivedByUserId",
746
+ type: TableColumnType.Entity,
747
+ modelType: User,
748
+ title: "Archived by User",
749
+ description:
750
+ "Relation to User who archived this object (if this object was archived by a User)",
751
+ })
752
+ @ManyToOne(
753
+ () => {
754
+ return User;
755
+ },
756
+ {
757
+ eager: false,
758
+ nullable: true,
759
+ onDelete: "SET NULL",
760
+ orphanedRowAction: "nullify",
761
+ },
762
+ )
763
+ @JoinColumn({ name: "archivedByUserId" })
764
+ public archivedByUser?: User = undefined;
765
+
766
+ @ColumnAccessControl({
767
+ create: [],
768
+ read: [
769
+ Permission.ProjectOwner,
770
+ Permission.ProjectAdmin,
771
+ Permission.ProjectMember,
772
+ Permission.Viewer,
773
+ Permission.SettingsAdmin,
774
+ Permission.SettingsMember,
775
+ Permission.SettingsViewer,
776
+ Permission.ReadDockerHost,
777
+ ],
778
+ update: [],
779
+ })
780
+ @TableColumn({
781
+ type: TableColumnType.ObjectID,
782
+ title: "Archived by User ID",
783
+ description:
784
+ "User ID who archived this object (if this object was archived by a User)",
785
+ })
786
+ @Column({
787
+ type: ColumnType.ObjectID,
788
+ nullable: true,
789
+ transformer: ObjectID.getDatabaseTransformer(),
790
+ })
791
+ public archivedByUserId?: ObjectID = undefined;
792
+
659
793
  @ColumnAccessControl({
660
794
  create: [],
661
795
  read: [
@@ -79,6 +79,7 @@ import {
79
79
  * (projectId, clusterIdentifier) unique index.
80
80
  */
81
81
  @Index(["projectId", "name"], { unique: true })
82
+ @Index(["projectId", "isArchived"])
82
83
  @TableMetadata({
83
84
  tableName: "DockerSwarmCluster",
84
85
  singularName: "DockerSwarm Cluster",
@@ -786,6 +787,139 @@ export default class DockerSwarmCluster extends BaseModel {
786
787
  })
787
788
  public createdByUserId?: ObjectID = undefined;
788
789
 
790
+ @ColumnAccessControl({
791
+ create: [
792
+ Permission.ProjectOwner,
793
+ Permission.ProjectAdmin,
794
+ Permission.ProjectMember,
795
+ Permission.SettingsAdmin,
796
+ Permission.SettingsMember,
797
+ Permission.CreateDockerSwarmCluster,
798
+ ],
799
+ read: [
800
+ Permission.ProjectOwner,
801
+ Permission.ProjectAdmin,
802
+ Permission.ProjectMember,
803
+ Permission.Viewer,
804
+ Permission.SettingsAdmin,
805
+ Permission.SettingsMember,
806
+ Permission.SettingsViewer,
807
+ Permission.ReadDockerSwarmCluster,
808
+ ],
809
+ update: [
810
+ Permission.ProjectOwner,
811
+ Permission.ProjectAdmin,
812
+ Permission.ProjectMember,
813
+ Permission.SettingsAdmin,
814
+ Permission.SettingsMember,
815
+ Permission.EditDockerSwarmCluster,
816
+ ],
817
+ })
818
+ @TableColumn({
819
+ isDefaultValueColumn: true,
820
+ required: true,
821
+ type: TableColumnType.Boolean,
822
+ title: "Is Archived",
823
+ description:
824
+ "Is this Docker Swarm cluster archived? Archived Docker Swarm clusters are hidden from lists but keep collecting telemetry.",
825
+ defaultValue: false,
826
+ })
827
+ @Column({
828
+ type: ColumnType.Boolean,
829
+ nullable: false,
830
+ default: false,
831
+ })
832
+ public isArchived?: boolean = undefined;
833
+
834
+ @ColumnAccessControl({
835
+ create: [],
836
+ read: [
837
+ Permission.ProjectOwner,
838
+ Permission.ProjectAdmin,
839
+ Permission.ProjectMember,
840
+ Permission.Viewer,
841
+ Permission.SettingsAdmin,
842
+ Permission.SettingsMember,
843
+ Permission.SettingsViewer,
844
+ Permission.ReadDockerSwarmCluster,
845
+ ],
846
+ update: [],
847
+ })
848
+ @TableColumn({
849
+ required: false,
850
+ type: TableColumnType.Date,
851
+ title: "Archived At",
852
+ description: "When was this Docker Swarm cluster archived?",
853
+ })
854
+ @Column({
855
+ type: ColumnType.Date,
856
+ nullable: true,
857
+ })
858
+ public archivedAt?: Date = undefined;
859
+
860
+ @ColumnAccessControl({
861
+ create: [],
862
+ read: [
863
+ Permission.ProjectOwner,
864
+ Permission.ProjectAdmin,
865
+ Permission.ProjectMember,
866
+ Permission.Viewer,
867
+ Permission.SettingsAdmin,
868
+ Permission.SettingsMember,
869
+ Permission.SettingsViewer,
870
+ Permission.ReadDockerSwarmCluster,
871
+ ],
872
+ update: [],
873
+ })
874
+ @TableColumn({
875
+ manyToOneRelationColumn: "archivedByUserId",
876
+ type: TableColumnType.Entity,
877
+ modelType: User,
878
+ title: "Archived by User",
879
+ description:
880
+ "Relation to User who archived this object (if this object was archived by a User)",
881
+ })
882
+ @ManyToOne(
883
+ () => {
884
+ return User;
885
+ },
886
+ {
887
+ eager: false,
888
+ nullable: true,
889
+ onDelete: "SET NULL",
890
+ orphanedRowAction: "nullify",
891
+ },
892
+ )
893
+ @JoinColumn({ name: "archivedByUserId" })
894
+ public archivedByUser?: User = undefined;
895
+
896
+ @ColumnAccessControl({
897
+ create: [],
898
+ read: [
899
+ Permission.ProjectOwner,
900
+ Permission.ProjectAdmin,
901
+ Permission.ProjectMember,
902
+ Permission.Viewer,
903
+ Permission.SettingsAdmin,
904
+ Permission.SettingsMember,
905
+ Permission.SettingsViewer,
906
+ Permission.ReadDockerSwarmCluster,
907
+ ],
908
+ update: [],
909
+ })
910
+ @TableColumn({
911
+ type: TableColumnType.ObjectID,
912
+ title: "Archived by User ID",
913
+ description:
914
+ "User ID who archived this object (if this object was archived by a User)",
915
+ })
916
+ @Column({
917
+ type: ColumnType.ObjectID,
918
+ nullable: true,
919
+ transformer: ObjectID.getDatabaseTransformer(),
920
+ })
921
+ public archivedByUserId?: ObjectID = undefined;
922
+
789
923
  @ColumnAccessControl({
790
924
  create: [],
791
925
  read: [