@@ -26,6 +26,7 @@ import (
26
26
"github.com/coder/coder/coderd/httpapi"
27
27
"github.com/coder/coder/coderd/parameter"
28
28
"github.com/coder/coder/coderd/rbac"
29
+ "github.com/coder/coder/coderd/telemetry"
29
30
"github.com/coder/coder/provisionerd/proto"
30
31
"github.com/coder/coder/provisionersdk"
31
32
sdkproto "github.com/coder/coder/provisionersdk/proto"
@@ -80,6 +81,7 @@ func (api *API) ListenProvisionerDaemon(ctx context.Context) (client proto.DRPCP
80
81
Database : api .Database ,
81
82
Pubsub : api .Pubsub ,
82
83
Provisioners : daemon .Provisioners ,
84
+ Telemetry : api .Telemetry ,
83
85
Logger : api .Logger .Named (fmt .Sprintf ("provisionerd-%s" , daemon .Name )),
84
86
})
85
87
if err != nil {
@@ -127,6 +129,7 @@ type provisionerdServer struct {
127
129
Provisioners []database.ProvisionerType
128
130
Database database.Store
129
131
Pubsub database.Pubsub
132
+ Telemetry telemetry.Reporter
130
133
}
131
134
132
135
// AcquireJob queries the database to lock a job.
@@ -543,6 +546,10 @@ func (server *provisionerdServer) CompleteJob(ctx context.Context, completed *pr
543
546
return nil , xerrors .Errorf ("you don't have permission to update this job" )
544
547
}
545
548
549
+ telemetrySnapshot := & telemetry.Snapshot {}
550
+ // Items are added to this snapshot as they complete!
551
+ defer server .Telemetry .Report (telemetrySnapshot )
552
+
546
553
switch jobType := completed .Type .(type ) {
547
554
case * proto.CompletedJob_TemplateImport_ :
548
555
for transition , resources := range map [database.WorkspaceTransition ][]* sdkproto.Resource {
@@ -556,7 +563,7 @@ func (server *provisionerdServer) CompleteJob(ctx context.Context, completed *pr
556
563
slog .F ("resource_type" , resource .Type ),
557
564
slog .F ("transition" , transition ))
558
565
559
- err = insertWorkspaceResource (ctx , server .Database , jobID , transition , resource )
566
+ err = insertWorkspaceResource (ctx , server .Database , jobID , transition , resource , telemetrySnapshot )
560
567
if err != nil {
561
568
return nil , xerrors .Errorf ("insert resource: %w" , err )
562
569
}
@@ -625,7 +632,7 @@ func (server *provisionerdServer) CompleteJob(ctx context.Context, completed *pr
625
632
}
626
633
// This could be a bulk insert to improve performance.
627
634
for _ , protoResource := range jobType .WorkspaceBuild .Resources {
628
- err = insertWorkspaceResource (ctx , db , job .ID , workspaceBuild .Transition , protoResource )
635
+ err = insertWorkspaceResource (ctx , db , job .ID , workspaceBuild .Transition , protoResource , telemetrySnapshot )
629
636
if err != nil {
630
637
return xerrors .Errorf ("insert provisioner job: %w" , err )
631
638
}
@@ -656,7 +663,7 @@ func (server *provisionerdServer) CompleteJob(ctx context.Context, completed *pr
656
663
slog .F ("resource_name" , resource .Name ),
657
664
slog .F ("resource_type" , resource .Type ))
658
665
659
- err = insertWorkspaceResource (ctx , server .Database , jobID , database .WorkspaceTransitionStart , resource )
666
+ err = insertWorkspaceResource (ctx , server .Database , jobID , database .WorkspaceTransitionStart , resource , telemetrySnapshot )
660
667
if err != nil {
661
668
return nil , xerrors .Errorf ("insert resource: %w" , err )
662
669
}
@@ -686,7 +693,7 @@ func (server *provisionerdServer) CompleteJob(ctx context.Context, completed *pr
686
693
return & proto.Empty {}, nil
687
694
}
688
695
689
- func insertWorkspaceResource (ctx context.Context , db database.Store , jobID uuid.UUID , transition database.WorkspaceTransition , protoResource * sdkproto.Resource ) error {
696
+ func insertWorkspaceResource (ctx context.Context , db database.Store , jobID uuid.UUID , transition database.WorkspaceTransition , protoResource * sdkproto.Resource , snapshot * telemetry. Snapshot ) error {
690
697
resource , err := db .InsertWorkspaceResource (ctx , database.InsertWorkspaceResourceParams {
691
698
ID : uuid .New (),
692
699
CreatedAt : database .Now (),
@@ -698,6 +705,8 @@ func insertWorkspaceResource(ctx context.Context, db database.Store, jobID uuid.
698
705
if err != nil {
699
706
return xerrors .Errorf ("insert provisioner job resource %q: %w" , protoResource .Name , err )
700
707
}
708
+ snapshot .WorkspaceResources = append (snapshot .WorkspaceResources , telemetry .ConvertWorkspaceResource (resource ))
709
+
701
710
for _ , agent := range protoResource .Agents {
702
711
var instanceID sql.NullString
703
712
if agent .GetInstanceId () != "" {
@@ -745,9 +754,10 @@ func insertWorkspaceResource(ctx context.Context, db database.Store, jobID uuid.
745
754
if err != nil {
746
755
return xerrors .Errorf ("insert agent: %w" , err )
747
756
}
757
+ snapshot .WorkspaceAgents = append (snapshot .WorkspaceAgents , telemetry .ConvertWorkspaceAgent (dbAgent ))
748
758
749
759
for _ , app := range agent .Apps {
750
- _ , err := db .InsertWorkspaceApp (ctx , database.InsertWorkspaceAppParams {
760
+ dbApp , err := db .InsertWorkspaceApp (ctx , database.InsertWorkspaceAppParams {
751
761
ID : uuid .New (),
752
762
CreatedAt : database .Now (),
753
763
AgentID : dbAgent .ID ,
@@ -766,6 +776,7 @@ func insertWorkspaceResource(ctx context.Context, db database.Store, jobID uuid.
766
776
if err != nil {
767
777
return xerrors .Errorf ("insert app: %w" , err )
768
778
}
779
+ snapshot .WorkspaceApps = append (snapshot .WorkspaceApps , telemetry .ConvertWorkspaceApp (dbApp ))
769
780
}
770
781
}
771
782
return nil
0 commit comments