Skip to content

Commit

Permalink
Added error handling for nil appwrapper state
Browse files Browse the repository at this point in the history
Signed-off-by: Maia Iyer <maia.raj.iyer@gmail.com>
  • Loading branch information
maia-iyer committed Nov 9, 2023
1 parent 0ee7bb0 commit 54727ad
Showing 1 changed file with 23 additions and 10 deletions.
33 changes: 23 additions & 10 deletions exporter/src/server.ts
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ function getAppwrapperStatus(status: string) {
case "Failed": {
return 2;
}
// 1 is for deleted appwrappers
default: { // unknown state
return 0;
}
Expand Down Expand Up @@ -94,41 +95,53 @@ informer.on('add', (obj) => {
let appwrapperName: string = obj.metadata.name;
let appwrapperNamespace = obj.metadata.namespace;
let appwrapperUID = obj.metadata.uid;
let appwrapperStatus = obj.status.state;
appwrapperStatusMetric.labels(appwrapperName, appwrapperNamespace, appwrapperUID).set(getAppwrapperStatus(appwrapperStatus))
appwrapperCountMetric.labels(appwrapperStatus).inc(1);
let appwrapperStatus = obj.status;
let appwrapperState = "Other"
if (appwrapperStatus) {
appwrapperState = appwrapperStatus.state;
}
appwrapperStatusMetric.labels(appwrapperName, appwrapperNamespace, appwrapperUID).set(getAppwrapperStatus(appwrapperState))
appwrapperCountMetric.labels(appwrapperState).inc(1);
// set previous state
previousAppwrapperStates.set(`${appwrapperNamespace},${appwrapperName},${appwrapperUID}`, appwrapperStatus);
previousAppwrapperStates.set(`${appwrapperNamespace},${appwrapperName},${appwrapperUID}`, appwrapperState);
});
informer.on('update', (obj) => {
let appwrapperName: string = obj.metadata.name;
let appwrapperNamespace = obj.metadata.namespace;
let appwrapperUID = obj.metadata.uid;
let appwrapperStatus = obj.status.state;
let appwrapperStatus = obj.status;
let appwrapperState = "Other"
if (appwrapperStatus) {
appwrapperState = appwrapperStatus.state;
}
//console.log(`update received: ${appwrapperName}, ${appwrapperNamespace}, ${appwrapperStatus}`);
appwrapperStatusMetric.labels(appwrapperName, appwrapperNamespace, appwrapperUID).set(getAppwrapperStatus(appwrapperStatus))
appwrapperStatusMetric.labels(appwrapperName, appwrapperNamespace, appwrapperUID).set(getAppwrapperStatus(appwrapperState))
// decrement count of previous state
let previousState = previousAppwrapperStates.get(`${appwrapperNamespace},${appwrapperName},${appwrapperUID}`);
if (!previousState) {
console.log(`error: update received but no previous state recorded`)
return;
}
appwrapperCountMetric.labels(previousState).dec(1);
appwrapperCountMetric.labels(appwrapperStatus).inc(1);
appwrapperCountMetric.labels(appwrapperState).inc(1);
// set previous state
previousAppwrapperStates.set(`${appwrapperNamespace},${appwrapperName},${appwrapperUID}`, appwrapperStatus);
previousAppwrapperStates.set(`${appwrapperNamespace},${appwrapperName},${appwrapperUID}`, appwrapperState);
});
informer.on('delete', (obj) => {
let appwrapperName: string = obj.metadata.name;
let appwrapperNamespace = obj.metadata.namespace;
let appwrapperUID = obj.metadata.uid;
let appwrapperStatus = obj.status.state;
let appwrapperStatus = obj.status;
let appwrapperState = "Other"
if (appwrapperStatus) {
appwrapperState = appwrapperStatus.state;
}
// Prometheus does not support removing a single tagged series
// Instead, we set to NaN to effectively end the series, as shown in Prometheus charts
// NOTE: Consequently, when querying Prometheus, if one appwrapper is added and deleted with same
// name and namespace multiple times, a query may get information for both
appwrapperStatusMetric.labels(appwrapperName, appwrapperNamespace, appwrapperUID).set(1)
appwrapperCountMetric.labels(appwrapperStatus).dec(1);
appwrapperCountMetric.labels(appwrapperState).dec(1);
// set previous state
previousAppwrapperStates.delete(`${appwrapperNamespace},${appwrapperName},${appwrapperUID}`);
});
Expand Down

0 comments on commit 54727ad

Please sign in to comment.