@@ -10,6 +10,7 @@ import (
10
10
"net"
11
11
"net/http"
12
12
"net/url"
13
+ "os"
13
14
"runtime"
14
15
"strings"
15
16
"sync"
@@ -230,6 +231,7 @@ func (r *remoteReporter) deployment() error {
230
231
Architecture : sysInfo .Architecture ,
231
232
BuiltinPostgres : r .options .BuiltinPostgres ,
232
233
Containerized : containerized ,
234
+ Kubernetes : os .Getenv ("KUBERNETES_SERVICE_HOST" ) != "" ,
233
235
GitHubOAuth : r .options .GitHubOAuth ,
234
236
OIDCAuth : r .options .OIDCAuth ,
235
237
OIDCIssuerURL : r .options .OIDCIssuerURL ,
@@ -423,6 +425,17 @@ func (r *remoteReporter) createSnapshot() (*Snapshot, error) {
423
425
}
424
426
return nil
425
427
})
428
+ eg .Go (func () error {
429
+ workspaceMetadata , err := r .options .Database .GetWorkspaceResourceMetadataCreatedAfter (ctx , createdAfter )
430
+ if err != nil {
431
+ return xerrors .Errorf ("get workspace resource metadata: %w" , err )
432
+ }
433
+ snapshot .WorkspaceResourceMetadata = make ([]WorkspaceResourceMetadata , 0 , len (workspaceMetadata ))
434
+ for _ , metadata := range workspaceMetadata {
435
+ snapshot .WorkspaceResourceMetadata = append (snapshot .WorkspaceResourceMetadata , ConvertWorkspaceResourceMetadata (metadata ))
436
+ }
437
+ return nil
438
+ })
426
439
427
440
err := eg .Wait ()
428
441
if err != nil {
@@ -531,6 +544,15 @@ func ConvertWorkspaceResource(resource database.WorkspaceResource) WorkspaceReso
531
544
}
532
545
}
533
546
547
+ // ConvertWorkspaceResourceMetadata anonymizes workspace metadata.
548
+ func ConvertWorkspaceResourceMetadata (metadata database.WorkspaceResourceMetadatum ) WorkspaceResourceMetadata {
549
+ return WorkspaceResourceMetadata {
550
+ ResourceID : metadata .WorkspaceResourceID ,
551
+ Key : metadata .Key ,
552
+ Sensitive : metadata .Sensitive ,
553
+ }
554
+ }
555
+
534
556
// ConvertUser anonymizes a user.
535
557
func ConvertUser (dbUser database.User ) User {
536
558
emailHashed := ""
@@ -584,17 +606,18 @@ func ConvertTemplateVersion(version database.TemplateVersion) TemplateVersion {
584
606
type Snapshot struct {
585
607
DeploymentID string `json:"deployment_id"`
586
608
587
- APIKeys []APIKey `json:"api_keys"`
588
- ParameterSchemas []ParameterSchema `json:"parameter_schemas"`
589
- ProvisionerJobs []ProvisionerJob `json:"provisioner_jobs"`
590
- Templates []Template `json:"templates"`
591
- TemplateVersions []TemplateVersion `json:"template_versions"`
592
- Users []User `json:"users"`
593
- Workspaces []Workspace `json:"workspaces"`
594
- WorkspaceApps []WorkspaceApp `json:"workspace_apps"`
595
- WorkspaceAgents []WorkspaceAgent `json:"workspace_agents"`
596
- WorkspaceBuilds []WorkspaceBuild `json:"workspace_build"`
597
- WorkspaceResources []WorkspaceResource `json:"workspace_resources"`
609
+ APIKeys []APIKey `json:"api_keys"`
610
+ ParameterSchemas []ParameterSchema `json:"parameter_schemas"`
611
+ ProvisionerJobs []ProvisionerJob `json:"provisioner_jobs"`
612
+ Templates []Template `json:"templates"`
613
+ TemplateVersions []TemplateVersion `json:"template_versions"`
614
+ Users []User `json:"users"`
615
+ Workspaces []Workspace `json:"workspaces"`
616
+ WorkspaceApps []WorkspaceApp `json:"workspace_apps"`
617
+ WorkspaceAgents []WorkspaceAgent `json:"workspace_agents"`
618
+ WorkspaceBuilds []WorkspaceBuild `json:"workspace_build"`
619
+ WorkspaceResources []WorkspaceResource `json:"workspace_resources"`
620
+ WorkspaceResourceMetadata []WorkspaceResourceMetadata `json:"workspace_resource_metadata"`
598
621
}
599
622
600
623
// Deployment contains information about the host running Coder.
@@ -603,6 +626,7 @@ type Deployment struct {
603
626
Architecture string `json:"architecture"`
604
627
BuiltinPostgres bool `json:"builtin_postgres"`
605
628
Containerized bool `json:"containerized"`
629
+ Kubernetes bool `json:"kubernetes"`
606
630
Tunnel bool `json:"tunnel"`
607
631
GitHubOAuth bool `json:"github_oauth"`
608
632
OIDCAuth bool `json:"oidc_auth"`
@@ -647,6 +671,12 @@ type WorkspaceResource struct {
647
671
Type string `json:"type"`
648
672
}
649
673
674
+ type WorkspaceResourceMetadata struct {
675
+ ResourceID uuid.UUID `json:"resource_id"`
676
+ Key string `json:"key"`
677
+ Sensitive bool `json:"sensitive"`
678
+ }
679
+
650
680
type WorkspaceAgent struct {
651
681
ID uuid.UUID `json:"id"`
652
682
CreatedAt time.Time `json:"created_at"`
0 commit comments