@@ -9,12 +9,13 @@ import (
9
9
"github.com/coder/coder/v2/codersdk/agentsdk"
10
10
"github.com/coder/xray/jfrog"
11
11
12
- "cdr.dev/slog"
13
12
corev1 "k8s.io/api/core/v1"
14
13
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
15
14
"k8s.io/client-go/informers"
16
15
"k8s.io/client-go/kubernetes"
17
16
"k8s.io/client-go/tools/cache"
17
+
18
+ "cdr.dev/slog"
18
19
)
19
20
20
21
type K8sReporter struct {
@@ -29,6 +30,7 @@ type K8sReporter struct {
29
30
30
31
ctx context.Context
31
32
podInformer cache.SharedIndexInformer
33
+ errChan chan error
32
34
}
33
35
34
36
type WorkspaceAgent struct {
@@ -38,6 +40,7 @@ type WorkspaceAgent struct {
38
40
39
41
func (k * K8sReporter ) Init (ctx context.Context ) error {
40
42
k .ctx = ctx
43
+ k .errChan = make (chan error )
41
44
42
45
podFactory := informers .NewSharedInformerFactoryWithOptions (k .Client , 0 , informers .WithNamespace (k .Namespace ), informers .WithTweakListOptions (func (lo * v1.ListOptions ) {
43
46
lo .FieldSelector = k .FieldSelector
@@ -54,6 +57,9 @@ func (k *K8sReporter) Init(ctx context.Context) error {
54
57
return
55
58
}
56
59
60
+ log := k .Logger .With (
61
+ slog .F ("pod_name" , pod .Name ),
62
+ )
57
63
var isWorkspace bool
58
64
for _ , container := range pod .Spec .Containers {
59
65
var agentToken string
@@ -69,31 +75,37 @@ func (k *K8sReporter) Init(ctx context.Context) error {
69
75
continue
70
76
}
71
77
78
+ log = log .With (
79
+ slog .F ("container_name" , container .Name ),
80
+ slog .F ("container_image" , container .Image ),
81
+ )
82
+
72
83
image , err := jfrog .ParseImage (container .Image )
73
84
if err != nil {
74
- k .Logger .Error (ctx , "parse image" ,
75
- slog .F ("pod_name" , pod .Name ),
76
- slog .F ("container_name" , container .Name ),
77
- slog .F ("container_image" , container .Image ),
78
- slog .Error (err ),
79
- )
85
+ log .Error (ctx , "parse image" , slog .Error (err ))
80
86
return
81
87
}
82
88
83
89
scan , err := k .JFrogClient .ScanResults (image )
84
90
if err != nil {
85
- k . Logger .Error (ctx , "fetch scan results" , slog .Error (err ))
91
+ log .Error (ctx , "fetch scan results" , slog .Error (err ))
86
92
return
87
93
}
88
94
89
95
agentClient := agentsdk .New (k .CoderURL )
90
96
agentClient .SetSessionToken (agentToken )
91
97
manifest , err := agentClient .Manifest (ctx )
92
98
if err != nil {
93
- k . Logger .Error (ctx , "Get agent manifest" , slog .Error (err ))
99
+ log .Error (ctx , "Get agent manifest" , slog .Error (err ))
94
100
return
95
101
}
96
102
103
+ log = log .With (
104
+ slog .F ("workspace_id" , manifest .WorkspaceID ),
105
+ slog .F ("agent_id" , manifest .AgentID ),
106
+ slog .F ("workspace_name" , manifest .WorkspaceName ),
107
+ )
108
+
97
109
cclient := codersdk .New (k .CoderURL )
98
110
cclient .SetSessionToken (k .CoderToken )
99
111
err = cclient .PostJFrogXrayScan (ctx , codersdk.JFrogXrayScan {
@@ -103,12 +115,12 @@ func (k *K8sReporter) Init(ctx context.Context) error {
103
115
High : scan .SecurityIssues .High ,
104
116
})
105
117
if err != nil {
106
- k . Logger .Error (ctx , "post xray results" , slog .Error (err ))
118
+ log .Error (ctx , "post xray results" , slog .Error (err ))
107
119
return
108
120
}
109
121
}
110
122
if isWorkspace {
111
- k . Logger . Info (ctx , "uploaded workspace results!" , slog .F ("name " , pod .Name ), slog .F ("namespace" , pod .Namespace ))
123
+ log . Info (ctx , "uploaded workspace results!" , slog .F ("pod_name " , pod .Name ), slog .F ("namespace" , pod .Namespace ))
112
124
}
113
125
},
114
126
})
@@ -117,3 +129,7 @@ func (k *K8sReporter) Init(ctx context.Context) error {
117
129
}
118
130
return nil
119
131
}
132
+
133
+ func (k * K8sReporter ) Start (stop chan struct {}) {
134
+ k .podInformer .Run (stop )
135
+ }
0 commit comments