|
4 | 4 | "bytes"
|
5 | 5 | "context"
|
6 | 6 | "crypto/sha256"
|
| 7 | + "encoding/hex" |
7 | 8 | "encoding/json"
|
8 | 9 | "errors"
|
9 | 10 | "fmt"
|
@@ -698,27 +699,46 @@ func ConvertWorkspaceProxy(proxy database.WorkspaceProxy) WorkspaceProxy {
|
698 | 699 | }
|
699 | 700 | }
|
700 | 701 |
|
| 702 | +func ConvertExternalProvisioner(id uuid.UUID, tags map[string]string, provisioners []database.ProvisionerType) ExternalProvisioner { |
| 703 | + hashedTags := make(map[string]string, len(tags)) |
| 704 | + for k, v := range tags { |
| 705 | + hash := sha256.Sum256([]byte(v)) |
| 706 | + hashedTags[k] = hex.EncodeToString(hash[:]) |
| 707 | + } |
| 708 | + strProvisioners := make([]string, 0, len(provisioners)) |
| 709 | + for _, prov := range provisioners { |
| 710 | + strProvisioners = append(strProvisioners, string(prov)) |
| 711 | + } |
| 712 | + return ExternalProvisioner{ |
| 713 | + ID: id.String(), |
| 714 | + Tags: hashedTags, |
| 715 | + Provisioners: strProvisioners, |
| 716 | + StartedAt: time.Now(), |
| 717 | + } |
| 718 | +} |
| 719 | + |
701 | 720 | // Snapshot represents a point-in-time anonymized database dump.
|
702 | 721 | // Data is aggregated by latest on the server-side, so partial data
|
703 | 722 | // can be sent without issue.
|
704 | 723 | type Snapshot struct {
|
705 | 724 | DeploymentID string `json:"deployment_id"`
|
706 | 725 |
|
707 | 726 | APIKeys []APIKey `json:"api_keys"`
|
708 |
| - ProvisionerJobs []ProvisionerJob `json:"provisioner_jobs"` |
| 727 | + CLIInvocations []clitelemetry.Invocation `json:"cli_invocations"` |
| 728 | + ExternalProvisioners []ExternalProvisioner `json:"external_provisioners"` |
709 | 729 | Licenses []License `json:"licenses"`
|
710 |
| - Templates []Template `json:"templates"` |
| 730 | + ProvisionerJobs []ProvisionerJob `json:"provisioner_jobs"` |
711 | 731 | TemplateVersions []TemplateVersion `json:"template_versions"`
|
| 732 | + Templates []Template `json:"templates"` |
712 | 733 | Users []User `json:"users"`
|
713 |
| - Workspaces []Workspace `json:"workspaces"` |
714 |
| - WorkspaceApps []WorkspaceApp `json:"workspace_apps"` |
715 |
| - WorkspaceAgents []WorkspaceAgent `json:"workspace_agents"` |
716 | 734 | WorkspaceAgentStats []WorkspaceAgentStat `json:"workspace_agent_stats"`
|
| 735 | + WorkspaceAgents []WorkspaceAgent `json:"workspace_agents"` |
| 736 | + WorkspaceApps []WorkspaceApp `json:"workspace_apps"` |
717 | 737 | WorkspaceBuilds []WorkspaceBuild `json:"workspace_build"`
|
718 |
| - WorkspaceResources []WorkspaceResource `json:"workspace_resources"` |
719 |
| - WorkspaceResourceMetadata []WorkspaceResourceMetadata `json:"workspace_resource_metadata"` |
720 | 738 | WorkspaceProxies []WorkspaceProxy `json:"workspace_proxies"`
|
721 |
| - CLIInvocations []clitelemetry.Invocation `json:"cli_invocations"` |
| 739 | + WorkspaceResourceMetadata []WorkspaceResourceMetadata `json:"workspace_resource_metadata"` |
| 740 | + WorkspaceResources []WorkspaceResource `json:"workspace_resources"` |
| 741 | + Workspaces []Workspace `json:"workspaces"` |
722 | 742 | }
|
723 | 743 |
|
724 | 744 | // Deployment contains information about the host running Coder.
|
@@ -900,6 +920,14 @@ type WorkspaceProxy struct {
|
900 | 920 | UpdatedAt time.Time `json:"updated_at"`
|
901 | 921 | }
|
902 | 922 |
|
| 923 | +type ExternalProvisioner struct { |
| 924 | + ID string `json:"id"` |
| 925 | + Tags map[string]string `json:"tags"` |
| 926 | + Provisioners []string `json:"provisioners"` |
| 927 | + StartedAt time.Time `json:"started_at"` |
| 928 | + ShutdownAt *time.Time `json:"shutdown_at"` |
| 929 | +} |
| 930 | + |
903 | 931 | type noopReporter struct{}
|
904 | 932 |
|
905 | 933 | func (*noopReporter) Report(_ *Snapshot) {}
|
|
0 commit comments