Response handling from External NPM Module

VinistoisR
Tue, 07 May 2024 19:06:04 +0000
General

In a Function Node, I added this NPM module in the setup tab:

GitHub

GitHub - huksley/prometheus-remote-write: Send samples to prometheus via...

Send samples to prometheus via remote_write from NodeJS - huksley/prometheus-remote-write

It's working with the following function code, adapted from the module's readme:

// Send "UP" Heartbeat to Prometheus endpoint using Prometheus-Remote-Write NPM module
// https://www.npmjs.com/package/prometheus-remote-write
// Module imported as prometheusRemoteWrite in Setup Tab
// incoming msg.payload = 1

const { pushTimeseries, pushMetrics } = prometheusRemoteWrite;

const config = {
    url: "http://victoriametrics_vmagent:8429/api/v1/write",
    verbose: true,  // Enable verbose logging
    timing: true // Enable response timing data
};

async function Push() {
    try {
        node.status({ fill: "blue", shape: "dot", text: "connecting" });
        await pushTimeseries({
            labels: {
                __name__: "up",
                instance: "nodered.domain.com",
                job: "node-red"
            },
            samples: [{
                value: msg.payload,
                timestamp: Date.now()
            }]
        }, config);

        msg.result = "Data push successful";
        node.status({fill:"green", shape:"dot", text:"connected"});
        node.send(msg);

    } catch (error) {
        node.error("Error encountered during data push:", error);
        node.status({fill:"red", shape:"ring", text:"Error"});
    }
}

Push();

On the container's console, I get this return:

Failed to send write request, error 204 No Content  { timeseries: [ { labels: [Array], samples: [Array] } ] }
Serialized in 1 ms

The status code 204 is being returned although the data is written into the database without issue.

The relevant line in the module is here:

logger.warn("Failed to send write request, error", r.status + " " + r.statusText + " " + text, writeRequest);

I don't know why it's sending this response when the data is being written successfully?

Looking at the code, it almost seems as though it would only return 200 if you send it nothing to write. I was hoping for confirmation that the write indeed occurred.

5 posts - 3 participants