Skip to content

Commit bb07437

Browse files
committed
feat: add error to the observe callback (fixes #1)
BREAKING CHANGE: observer callback signature change.
1 parent 9845737 commit bb07437

File tree

4 files changed

+44
-22
lines changed

4 files changed

+44
-22
lines changed

README.md

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -150,19 +150,23 @@ const main = async () => {
150150
if (isKubernetesCredentialsPresent()) {
151151
const resourceObserver = createResourceObserver();
152152

153-
resourceObserver.observe((podResourceSpecification, podResourceUsage) => {
154-
for (const containerResourceSpecification of podResourceSpecification.containers) {
155-
if (containerResourceSpecification.resources.limits && containerResourceSpecification.resources.limits.memory) {
156-
const containerResourceUsage = podResourceUsage.containers.find((container) => {
157-
return container.name === containerResourceSpecification.name;
158-
});
159-
160-
if (!containerResourceUsage) {
161-
throw new Error('Unexpected state.');
162-
}
163-
164-
if (containerResourceUsage.usage.memory / containerResourceSpecification.resources.limits.memory > MAXIMUM_MEMORY_USAGE) {
165-
lightship.shutdown();
153+
resourceObserver.observe((error, podResourceSpecification, podResourceUsage) => {
154+
if (error) {
155+
// Handle error.
156+
} else {
157+
for (const containerResourceSpecification of podResourceSpecification.containers) {
158+
if (containerResourceSpecification.resources.limits && containerResourceSpecification.resources.limits.memory) {
159+
const containerResourceUsage = podResourceUsage.containers.find((container) => {
160+
return container.name === containerResourceSpecification.name;
161+
});
162+
163+
if (!containerResourceUsage) {
164+
throw new Error('Unexpected state.');
165+
}
166+
167+
if (containerResourceUsage.usage.memory / containerResourceSpecification.resources.limits.memory > MAXIMUM_MEMORY_USAGE) {
168+
lightship.shutdown();
169+
}
166170
}
167171
}
168172
}

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@
2121
"dependencies": {
2222
"bytes-iec": "^3.1.0",
2323
"got": "^9.6.0",
24-
"roarr": "^2.14.6"
24+
"roarr": "^2.14.6",
25+
"serialize-error": "^5.0.0"
2526
},
2627
"description": "Retrieves & observes Kubernetes Pod resource (CPU, memory) utilisation.",
2728
"devDependencies": {

src/factories/createResourceObserver.js

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
// @flow
22

3+
import {
4+
serializeError,
5+
} from 'serialize-error';
36
import {
47
getCredentials,
58
getPodResourceSpecification,
@@ -69,15 +72,25 @@ export default () => {
6972
const context = await ready;
7073

7174
const podResourceSpecification = context.podResourceSpecification;
72-
const podResourceUsage = await getPodResourceUsage();
7375

74-
log.debug({
75-
podResourceSpecification,
76-
podResourceUsage,
77-
}, 'observed resource usage');
76+
try {
77+
const podResourceUsage = await getPodResourceUsage();
78+
79+
log.debug({
80+
podResourceSpecification,
81+
podResourceUsage,
82+
}, 'observed resource usage');
83+
84+
// eslint-disable-next-line callback-return
85+
callback(null, podResourceSpecification, podResourceUsage);
86+
} catch (error) {
87+
log.error({
88+
error: serializeError(error),
89+
}, 'cannot get resource usage');
7890

79-
// eslint-disable-next-line callback-return
80-
callback(podResourceSpecification, podResourceUsage);
91+
// eslint-disable-next-line callback-return
92+
callback(error, null, null);
93+
}
8194

8295
timeout = setTimeout(() => {
8396
tick();

src/types.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,4 +36,8 @@ export type PodResourceSpecificationType = {|
3636
+name: string,
3737
|};
3838

39-
export type IntervalCallbackType = (podResourceSpecification: PodResourceSpecificationType, podResourceUsage: PodResourceUsageType) => void;
39+
export type IntervalCallbackType = (
40+
error: Error | null,
41+
podResourceSpecification: PodResourceSpecificationType | null,
42+
podResourceUsage: PodResourceUsageType | null
43+
) => void;

0 commit comments

Comments
 (0)