Skip to content

Commit 0a68ad4

Browse files
authored
Support Package Update August (#40)
* change date to be YYYY-MM-DDTHH-mm-ssZ * add logic to catch errors for processing * updated dependencies * updated file name
1 parent 51eea43 commit 0a68ad4

File tree

9 files changed

+113
-109
lines changed

9 files changed

+113
-109
lines changed

.devcontainer/devcontainer.json

Lines changed: 0 additions & 19 deletions
This file was deleted.

deno.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,10 @@
2121
"package": "cd bin && tar -czvf ./cf-support_linux_amd64.tar.gz cf-support_linux_amd64 && tar -czvf ./cf-support_linux_arm64.tar.gz ./cf-support_linux_arm64 && tar -czvf ./cf-support_darwin_amd64.tar.gz ./cf-support_darwin_amd64 && tar -czvf ./cf-support_darwin_arm64.tar.gz ./cf-support_darwin_arm64 && zip ./cf-support_windows_amd64.zip ./cf-support_windows_amd64.exe"
2222
},
2323
"imports": {
24-
"@cliffy/command": "jsr:@cliffy/command@1.0.0-rc.7",
24+
"@cliffy/command": "jsr:@cliffy/command@1.0.0-rc.8",
2525
"@cloudydeno/kubernetes-apis": "jsr:@cloudydeno/kubernetes-apis@0.5.2",
2626
"@cloudydeno/kubernetes-client": "jsr:@cloudydeno/kubernetes-client@0.7.5",
2727
"@henrygd/semaphore": "jsr:@henrygd/semaphore@^0.0.2",
28-
"@std/yaml": "jsr:@std/yaml@1.0.7"
28+
"@std/yaml": "jsr:@std/yaml@1.0.9"
2929
}
3030
}

deno.lock

Lines changed: 42 additions & 29 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/gitops.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { getResources, selectNamespace } from './logic/k8s.js';
22
import { preparePackage, processData } from './logic/core.js';
33

44
export async function gitops(namespace) {
5-
const dirPath = `./cf-support-gitops-${Math.floor(Date.now() / 1000)}`;
5+
const dirPath = `./cf-support-gitops-${new Date().toISOString().replace(/[:.]/g, '-').replace(/\.\d{3}Z$/, 'Z')}`;
66

77
if (!namespace) {
88
const selected = await selectNamespace();

src/logic/core.js

Lines changed: 55 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -34,67 +34,72 @@ export async function processData(dirPath, k8sResources) {
3434
console.log('Processing and Saving Data');
3535

3636
for (const [k8sType, fetcher] of Object.entries(k8sResources)) {
37-
const resources = await fetcher();
37+
try {
38+
console.log(`Processing Data for ${k8sType}`);
39+
const resources = await fetcher();
3840

39-
if (!resources) {
40-
continue;
41-
}
42-
43-
const semaphore = getSemaphore(k8sType, 10);
44-
console.log(`Processing Data for ${k8sType}`);
45-
46-
if (k8sType == 'pods') {
47-
for (const pod of resources.items) {
48-
await semaphore.acquire();
49-
try {
50-
delete pod.metadata.managedFields;
51-
52-
await writeYaml(pod, `spec_${pod.metadata.name}`, `${dirPath}/${k8sType}/${pod.metadata.name}`);
41+
if (!resources || !resources.items || resources.items.length === 0) {
42+
continue;
43+
}
5344

54-
const logs = await getPodLogs(pod);
55-
console.log(`Gathering logs for pod ${pod.metadata.name}`);
56-
for (const [containerName, logData] of Object.entries(logs)) {
57-
await Deno.writeTextFile(
58-
`${dirPath}/${k8sType}/${pod.metadata.name}/log_${containerName}.log`,
59-
logData,
60-
);
45+
const semaphore = getSemaphore(k8sType, 10);
46+
47+
if (k8sType == 'pods') {
48+
for (const pod of resources.items) {
49+
await semaphore.acquire();
50+
try {
51+
delete pod.metadata.managedFields;
52+
53+
await writeYaml(pod, `spec_${pod.metadata.name}`, `${dirPath}/${k8sType}/${pod.metadata.name}`);
54+
55+
const logs = await getPodLogs(pod);
56+
console.log(`Gathering logs for pod ${pod.metadata.name}`);
57+
for (const [containerName, logData] of Object.entries(logs)) {
58+
await Deno.writeTextFile(
59+
`${dirPath}/${k8sType}/${pod.metadata.name}/log_${containerName}.log`,
60+
logData,
61+
);
62+
}
63+
} finally {
64+
semaphore.release();
6165
}
62-
} finally {
63-
semaphore.release();
6466
}
67+
continue;
6568
}
66-
continue;
67-
}
6869

69-
if (k8sType == 'events.k8s.io') {
70-
const formattedEvents = resources.items.map((event) => {
71-
const lastSeen = event.metadata.creationTimestamp
72-
? new Date(event.metadata.creationTimestamp).toISOString()
73-
: 'Invalid Date';
74-
const type = event.type || 'Unknown';
75-
const reason = event.reason || 'Unknown';
76-
const object = `${event.involvedObject.kind}/${event.involvedObject.name}`;
77-
const message = event.message || 'No message';
70+
if (k8sType == 'events.k8s.io') {
71+
const formattedEvents = resources.items.map((event) => {
72+
const lastSeen = event.metadata.creationTimestamp
73+
? new Date(event.metadata.creationTimestamp).toISOString()
74+
: 'Invalid Date';
75+
const type = event.type || 'Unknown';
76+
const reason = event.reason || 'Unknown';
77+
const object = `${event.involvedObject.kind}/${event.involvedObject.name}`;
78+
const message = event.message || 'No message';
79+
80+
return `${lastSeen}\t${type}\t${reason}\t${object}\t${message}`;
81+
});
7882

79-
return `${lastSeen}\t${type}\t${reason}\t${object}\t${message}`;
80-
});
83+
const header = 'LAST SEEN\tTYPE\tREASON\tOBJECT\tMESSAGE\n';
84+
const content = header + formattedEvents.join('\n');
8185

82-
const header = 'LAST SEEN\tTYPE\tREASON\tOBJECT\tMESSAGE\n';
83-
const content = header + formattedEvents.join('\n');
86+
await Deno.writeTextFile(`${dirPath}/${k8sType}.csv`, content);
8487

85-
await Deno.writeTextFile(`${dirPath}/${k8sType}.csv`, content);
88+
continue;
89+
}
8690

91+
await Promise.all(resources.items.map(async (data) => {
92+
await semaphore.acquire();
93+
try {
94+
delete data.metadata.managedFields;
95+
await writeYaml(data, `${data.metadata.name}_get`, `${dirPath}/${k8sType}`);
96+
} finally {
97+
semaphore.release();
98+
}
99+
}));
100+
} catch (error) {
101+
console.warn(`Failed to fetch ${k8sType}: ${error.message}`);
87102
continue;
88103
}
89-
90-
await Promise.all(resources.items.map(async (data) => {
91-
await semaphore.acquire();
92-
try {
93-
delete data.metadata.managedFields;
94-
await writeYaml(data, `${data.metadata.name}_get`, `${dirPath}/${k8sType}`);
95-
} finally {
96-
semaphore.release();
97-
}
98-
}));
99104
}
100105
}

src/logic/k8s.js

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -69,11 +69,16 @@ async function getCrd(type, namespace) {
6969
}
7070

7171
async function getSortedEvents(namespace) {
72-
const events = await coreApi.namespace(namespace).getEventList();
73-
events.items = events.items.sort((a, b) =>
74-
new Date(a.metadata.creationTimestamp) - new Date(b.metadata.creationTimestamp)
75-
);
76-
return events;
72+
try {
73+
const events = await coreApi.namespace(namespace).getEventList();
74+
events.items = events.items.sort((a, b) =>
75+
new Date(a.metadata.creationTimestamp) - new Date(b.metadata.creationTimestamp)
76+
);
77+
return events;
78+
} catch (error) {
79+
console.warn(`Failed to fetch events: ${error.message}`);
80+
return { items: [] }; // Return empty events list
81+
}
7782
}
7883

7984
export function getResources(namespace) {

src/onprem.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import {
99
} from './logic/codefresh.js';
1010

1111
export async function onprem(namespace) {
12-
const dirPath = `./cf-support-onprem-${Math.floor(Date.now() / 1000)}`;
12+
const dirPath = `./cf-support-onprem-${new Date().toISOString().replace(/[:.]/g, '-').replace(/\.\d{3}Z$/, 'Z')}`;
1313

1414
const cfCreds = getCodefreshCredentials();
1515

src/oss.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { getResources, selectNamespace } from './logic/k8s.js';
22
import { preparePackage, processData } from './logic/core.js';
33

44
export async function oss(namespace) {
5-
const dirPath = `./cf-support-oss-${Math.floor(Date.now() / 1000)}`;
5+
const dirPath = `./cf-support-oss-${new Date().toISOString().replace(/[:.]/g, '-').replace(/\.\d{3}Z$/, 'Z')}`;
66

77
if (!namespace) {
88
const selected = await selectNamespace();

src/pipelines.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { preparePackage, processData, writeYaml } from './logic/core.js';
33
import { getAccountRuntimes, getCodefreshCredentials, getRuntimeSpec } from './logic/codefresh.js';
44

55
export async function pipelines(namespace, runtime) {
6-
const dirPath = `./cf-support-pipelines-${Math.floor(Date.now() / 1000)}`;
6+
const dirPath = `./cf-support-pipelines-${new Date().toISOString().replace(/[:.]/g, '-').replace(/\.\d{3}Z$/, 'Z')}`;
77
const cfCreds = getCodefreshCredentials();
88

99
if (!namespace) {

0 commit comments

Comments
 (0)