Skip to content

Commit 37c1124

Browse files
committed
fix: log workload name instead of random log ID
Initially the idea of logging a random ID was to distinguish different workload processing flows as many of them ran concurrently and created log messages. Sometimes it was difficult to follow for example where 3 of the same "Scanning pulled images" messages come from. Logging a random ID actually doesn't give us any meaningful information; instead we can log the workload name, which is already unique as we opt to scan an image only once. It should be much clearer to also figure out which workloads have been processed by the monitor and we can verify that they must appear in Snyk import UI.
1 parent cd59935 commit 37c1124

File tree

11 files changed

+47
-45
lines changed

11 files changed

+47
-45
lines changed

src/kube-scanner/index.ts

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,28 +13,28 @@ import { constructHomebaseDeleteWorkloadPayload, constructHomebaseWorkloadPayloa
1313
import { IDepGraphPayload, IKubeImage, ILocalWorkloadLocator } from '../transmitter/types';
1414

1515
export = class WorkloadWorker {
16-
private readonly logId: string;
16+
private readonly name: string;
1717

18-
constructor(logId: string) {
19-
this.logId = logId;
18+
constructor(name: string) {
19+
this.name = name;
2020
}
2121

2222
public async process(workloadMetadata: IKubeImage[]) {
23-
const logId = this.logId;
23+
const workloadName = this.name;
2424
const allImages = workloadMetadata.map((meta) => meta.imageName);
25-
logger.info({logId, imageCount: allImages.length}, 'Queried workloads');
25+
logger.info({workloadName, imageCount: allImages.length}, 'Queried workloads');
2626
const uniqueImages = [...new Set<string>(allImages)];
2727

28-
logger.info({logId, imageCount: uniqueImages.length}, 'Pulling unique images');
28+
logger.info({workloadName, imageCount: uniqueImages.length}, 'Pulling unique images');
2929
const pulledImages = await pullImages(uniqueImages);
3030
if (pulledImages.length === 0) {
3131
logger.info({}, 'No images were pulled, halting scanner process.');
3232
return;
3333
}
3434

35-
logger.info({logId, imageCount: pulledImages.length}, 'Scanning pulled images');
35+
logger.info({workloadName, imageCount: pulledImages.length}, 'Scanning pulled images');
3636
const scannedImages: ScanResult[] = await scanImages(pulledImages);
37-
logger.info({logId, imageCount: scannedImages.length}, 'Successfully scanned images');
37+
logger.info({workloadName, imageCount: scannedImages.length}, 'Successfully scanned images');
3838
if (scannedImages.length === 0) {
3939
logger.info({}, 'No images were scanned, halting scanner process.');
4040
return;
@@ -46,12 +46,12 @@ export = class WorkloadWorker {
4646
const pulledImageMetadata = workloadMetadata.filter((meta) =>
4747
pulledImages.includes(meta.imageName));
4848

49-
logger.info({logId, imageCount: pulledImageMetadata.length}, 'Processed images');
49+
logger.info({workloadName, imageCount: pulledImageMetadata.length}, 'Processed images');
5050
}
5151

5252
public async delete(localWorkloadLocator: ILocalWorkloadLocator) {
5353
const deletePayload = constructHomebaseDeleteWorkloadPayload(localWorkloadLocator);
54-
logger.info({logId: this.logId, workload: localWorkloadLocator},
54+
logger.info({workloadName: this.name, workload: localWorkloadLocator},
5555
'Removing workloads from homebase');
5656
await deleteHomebaseWorkload(deletePayload);
5757
}
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,27 @@
11
import { V1beta1CronJob } from '@kubernetes/client-node';
2-
import * as uuidv4 from 'uuid/v4';
32
import { WatchEventType } from '../types';
43
import { deleteWorkload } from './index';
54
import { WorkloadKind } from '../../types';
5+
import { FALSY_WORKLOAD_NAME_MARKER } from './types';
66

77
export async function cronJobWatchHandler(eventType: string, cronJob: V1beta1CronJob) {
88
if (eventType !== WatchEventType.Deleted) {
99
return;
1010
}
1111

12-
const logId = uuidv4().substring(0, 8);
13-
1412
if (!cronJob.metadata || !cronJob.spec || !cronJob.spec.jobTemplate.spec ||
1513
!cronJob.spec.jobTemplate.metadata || !cronJob.spec.jobTemplate.spec.template.spec) {
1614
// TODO(ivanstanev): possibly log this. It shouldn't happen but we should track it!
1715
return;
1816
}
1917

18+
const workloadName = cronJob.metadata.name || FALSY_WORKLOAD_NAME_MARKER;
19+
2020
await deleteWorkload({
2121
kind: WorkloadKind.CronJob,
2222
objectMeta: cronJob.metadata,
2323
specMeta: cronJob.spec.jobTemplate.metadata,
2424
containers: cronJob.spec.jobTemplate.spec.template.spec.containers,
2525
ownerRefs: cronJob.metadata.ownerReferences,
26-
}, logId);
26+
}, workloadName);
2727
}
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,27 @@
11
import { V1DaemonSet } from '@kubernetes/client-node';
2-
import * as uuidv4 from 'uuid/v4';
32
import { WatchEventType } from '../types';
43
import { deleteWorkload } from './index';
54
import { WorkloadKind } from '../../types';
5+
import { FALSY_WORKLOAD_NAME_MARKER } from './types';
66

77
export async function daemonSetWatchHandler(eventType: string, daemonSet: V1DaemonSet) {
88
if (eventType !== WatchEventType.Deleted) {
99
return;
1010
}
1111

12-
const logId = uuidv4().substring(0, 8);
13-
1412
if (!daemonSet.metadata || !daemonSet.spec || !daemonSet.spec.template.metadata ||
1513
!daemonSet.spec.template.spec) {
1614
// TODO(ivanstanev): possibly log this. It shouldn't happen but we should track it!
1715
return;
1816
}
1917

18+
const workloadName = daemonSet.metadata.name || FALSY_WORKLOAD_NAME_MARKER;
19+
2020
await deleteWorkload({
2121
kind: WorkloadKind.DaemonSet,
2222
objectMeta: daemonSet.metadata,
2323
specMeta: daemonSet.spec.template.metadata,
2424
containers: daemonSet.spec.template.spec.containers,
2525
ownerRefs: daemonSet.metadata.ownerReferences,
26-
}, logId);
26+
}, workloadName);
2727
}
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,27 @@
11
import { V1Deployment } from '@kubernetes/client-node';
2-
import * as uuidv4 from 'uuid/v4';
32
import { WatchEventType } from '../types';
43
import { deleteWorkload } from './index';
54
import { WorkloadKind } from '../../types';
5+
import { FALSY_WORKLOAD_NAME_MARKER } from './types';
66

77
export async function deploymentWatchHandler(eventType: string, deployment: V1Deployment) {
88
if (eventType !== WatchEventType.Deleted) {
99
return;
1010
}
1111

12-
const logId = uuidv4().substring(0, 8);
13-
1412
if (!deployment.metadata || !deployment.spec || !deployment.spec.template.metadata ||
1513
!deployment.spec.template.spec) {
1614
// TODO(ivanstanev): possibly log this. It shouldn't happen but we should track it!
1715
return;
1816
}
1917

18+
const workloadName = deployment.metadata.name || FALSY_WORKLOAD_NAME_MARKER;
19+
2020
await deleteWorkload({
2121
kind: WorkloadKind.Deployment,
2222
objectMeta: deployment.metadata,
2323
specMeta: deployment.spec.template.metadata,
2424
containers: deployment.spec.template.spec.containers,
2525
ownerRefs: deployment.metadata.ownerReferences,
26-
}, logId);
26+
}, workloadName);
2727
}

src/kube-scanner/watchers/handlers/index.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,14 @@ import WorkloadWorker = require('../../../kube-scanner');
33
import { buildWorkloadMetadata } from '../../metadata-extractor';
44
import { KubeObjectMetadata } from '../../types';
55

6-
export async function deleteWorkload(kubernetesMetadata: KubeObjectMetadata, logId: string) {
6+
export async function deleteWorkload(kubernetesMetadata: KubeObjectMetadata, workloadName: string) {
77
try {
88
if (kubernetesMetadata.ownerRefs !== undefined && kubernetesMetadata.ownerRefs.length > 0) {
99
return;
1010
}
1111

1212
const localWorkloadLocator = buildWorkloadMetadata(kubernetesMetadata);
13-
const workloadWorker = new WorkloadWorker(logId);
13+
const workloadWorker = new WorkloadWorker(workloadName);
1414
await workloadWorker.delete(localWorkloadLocator);
1515
} catch (error) {
1616
logger.error({error, resourceType: kubernetesMetadata.kind, resourceName: kubernetesMetadata.objectMeta.name},
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,26 @@
11
import { V1Job } from '@kubernetes/client-node';
2-
import * as uuidv4 from 'uuid/v4';
32
import { WatchEventType } from '../types';
43
import { deleteWorkload } from './index';
54
import { WorkloadKind } from '../../types';
5+
import { FALSY_WORKLOAD_NAME_MARKER } from './types';
66

77
export async function jobWatchHandler(eventType: string, job: V1Job) {
88
if (eventType !== WatchEventType.Deleted) {
99
return;
1010
}
1111

12-
const logId = uuidv4().substring(0, 8);
13-
1412
if (!job.metadata || !job.spec || !job.spec.template.metadata || !job.spec.template.spec) {
1513
// TODO(ivanstanev): possibly log this. It shouldn't happen but we should track it!
1614
return;
1715
}
1816

17+
const workloadName = job.metadata.name || FALSY_WORKLOAD_NAME_MARKER;
18+
1919
await deleteWorkload({
2020
kind: WorkloadKind.Job,
2121
objectMeta: job.metadata,
2222
specMeta: job.spec.template.metadata,
2323
containers: job.spec.template.spec.containers,
2424
ownerRefs: job.metadata.ownerReferences,
25-
}, logId);
25+
}, workloadName);
2626
}

src/kube-scanner/watchers/handlers/pod.ts

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
import { V1Pod } from '@kubernetes/client-node';
22
import async = require('async');
3-
import * as uuidv4 from 'uuid/v4';
43
import config = require('../../../common/config');
54
import logger = require('../../../common/logger');
65
import WorkloadWorker = require('../../../kube-scanner');
76
import { IKubeImage } from '../../../transmitter/types';
87
import { buildMetadataForWorkload } from '../../metadata-extractor';
98
import { PodPhase, WatchEventType } from '../types';
109
import state = require('../../../state');
10+
import { FALSY_WORKLOAD_NAME_MARKER } from './types';
1111

1212
async function queueWorker(task, callback) {
1313
const {workloadWorker, workloadMetadata, imageKeys} = task;
@@ -49,17 +49,18 @@ export async function podWatchHandler(eventType: string, pod: V1Pod) {
4949
return;
5050
}
5151

52-
const logId = uuidv4().substring(0, 8);
52+
const podName = pod.metadata && pod.metadata.name ? pod.metadata.name : FALSY_WORKLOAD_NAME_MARKER;
5353

5454
try {
5555
const workloadMetadata = await buildMetadataForWorkload(pod);
5656

5757
if (workloadMetadata === undefined || workloadMetadata.length === 0) {
58-
logger.warn({logId, podName: pod.metadata!.name}, 'Could not process Pod. The workload is possibly unsupported');
58+
logger.warn({podName}, 'Could not process Pod. The workload is possibly unsupported');
5959
return;
6060
}
6161

62-
const workloadWorker = new WorkloadWorker(logId);
62+
const workloadName = workloadMetadata[0].name;
63+
const workloadWorker = new WorkloadWorker(workloadName);
6364

6465
switch (eventType) {
6566
case WatchEventType.Added:
@@ -76,7 +77,7 @@ export async function podWatchHandler(eventType: string, pod: V1Pod) {
7677
break;
7778
}
7879
} catch (error) {
79-
logger.error({error, logId, podName: pod.metadata!.name}, 'Could not build image metadata for pod');
80+
logger.error({error, podName}, 'Could not build image metadata for pod');
8081
}
8182
}
8283

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,27 @@
11
import { V1ReplicaSet } from '@kubernetes/client-node';
2-
import * as uuidv4 from 'uuid/v4';
32
import { WatchEventType } from '../types';
43
import { deleteWorkload } from './index';
54
import { WorkloadKind } from '../../types';
5+
import { FALSY_WORKLOAD_NAME_MARKER } from './types';
66

77
export async function replicaSetWatchHandler(eventType: string, replicaSet: V1ReplicaSet) {
88
if (eventType !== WatchEventType.Deleted) {
99
return;
1010
}
1111

12-
const logId = uuidv4().substring(0, 8);
13-
1412
if (!replicaSet.metadata || !replicaSet.spec || !replicaSet.spec.template ||
1513
!replicaSet.spec.template.metadata || !replicaSet.spec.template.spec) {
1614
// TODO(ivanstanev): possibly log this. It shouldn't happen but we should track it!
1715
return;
1816
}
1917

18+
const workloadName = replicaSet.metadata.name || FALSY_WORKLOAD_NAME_MARKER;
19+
2020
await deleteWorkload({
2121
kind: WorkloadKind.ReplicaSet,
2222
objectMeta: replicaSet.metadata,
2323
specMeta: replicaSet.spec.template.metadata,
2424
containers: replicaSet.spec.template.spec.containers,
2525
ownerRefs: replicaSet.metadata.ownerReferences,
26-
}, logId);
26+
}, workloadName);
2727
}
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,28 @@
11
import { V1ReplicationController } from '@kubernetes/client-node';
2-
import * as uuidv4 from 'uuid/v4';
32
import { WatchEventType } from '../types';
43
import { deleteWorkload } from './index';
54
import { WorkloadKind } from '../../types';
5+
import { FALSY_WORKLOAD_NAME_MARKER } from './types';
66

77
export async function replicationControllerWatchHandler(
88
eventType: string, replicationController: V1ReplicationController) {
99
if (eventType !== WatchEventType.Deleted) {
1010
return;
1111
}
1212

13-
const logId = uuidv4().substring(0, 8);
14-
1513
if (!replicationController.metadata || !replicationController.spec || !replicationController.spec.template ||
1614
!replicationController.spec.template.metadata || !replicationController.spec.template.spec) {
1715
// TODO(ivanstanev): possibly log this. It shouldn't happen but we should track it!
1816
return;
1917
}
2018

19+
const workloadName = replicationController.metadata.name || FALSY_WORKLOAD_NAME_MARKER;
20+
2121
await deleteWorkload({
2222
kind: WorkloadKind.ReplicationController,
2323
objectMeta: replicationController.metadata,
2424
specMeta: replicationController.spec.template.metadata,
2525
containers: replicationController.spec.template.spec.containers,
2626
ownerRefs: replicationController.metadata.ownerReferences,
27-
}, logId);
27+
}, workloadName);
2828
}
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,27 @@
11
import { V1StatefulSet } from '@kubernetes/client-node';
2-
import * as uuidv4 from 'uuid/v4';
32
import { WatchEventType } from '../types';
43
import { deleteWorkload } from './index';
54
import { WorkloadKind } from '../../types';
5+
import { FALSY_WORKLOAD_NAME_MARKER } from './types';
66

77
export async function statefulSetWatchHandler(eventType: string, statefulSet: V1StatefulSet) {
88
if (eventType !== WatchEventType.Deleted) {
99
return;
1010
}
1111

12-
const logId = uuidv4().substring(0, 8);
13-
1412
if (!statefulSet.metadata || !statefulSet.spec || !statefulSet.spec.template.metadata ||
1513
!statefulSet.spec.template.spec) {
1614
// TODO(ivanstanev): possibly log this. It shouldn't happen but we should track it!
1715
return;
1816
}
1917

18+
const workloadName = statefulSet.metadata.name || FALSY_WORKLOAD_NAME_MARKER;
19+
2020
await deleteWorkload({
2121
kind: WorkloadKind.StatefulSet,
2222
objectMeta: statefulSet.metadata,
2323
specMeta: statefulSet.spec.template.metadata,
2424
containers: statefulSet.spec.template.spec.containers,
2525
ownerRefs: statefulSet.metadata.ownerReferences,
26-
}, logId);
26+
}, workloadName);
2727
}

0 commit comments

Comments
 (0)