Code Monkey home page Code Monkey logo

Comments (6)

disjunction avatar disjunction commented on May 20, 2024 2

Hi @ericuldall
Thanks for the contribution! I decided for a little simpler solution though, introducing two different metrics: customLabels and transformLabels. The docs were extended accordingly.

I removed validation, since I expect the developers to understand what they're doing ;) The validation is needed where the software's decisions are not straight forward.

Your example would look like this now:

const metricsMiddleware = promBundle({includeMethod: true, customLabels: customTags});

... and transformLabels can be used for a dynamicly changing labels. See https://github.com/jochen-schweizer/express-prom-bundle/blob/master/advanced-example.js

Hope it's not too much of a change compared to your intention.

from express-prom-bundle.

ericuldall avatar ericuldall commented on May 20, 2024

Is the update available on npm?

from express-prom-bundle.

ericuldall avatar ericuldall commented on May 20, 2024

I see the update to the docs there. Thanks for adding this! It will be very useful.

from express-prom-bundle.

kolesan avatar kolesan commented on May 20, 2024

Is it possible to use transformLabels to add a custom tag depending on the response body?

In my case I need a custom label to track GraphQL error metrics. And the list of errors is returned in the response body together with the data.

from express-prom-bundle.

disjunction avatar disjunction commented on May 20, 2024

why not? The signature is: transformLabels: function(labels, req, res). So if you accumulate the data you need in either of req or res, then you can also can transform the labels accordingly.

I'd say res.locals is a fine place for the metrics.

from express-prom-bundle.

kolesan avatar kolesan commented on May 20, 2024

My question was a bit premature, sorry.

It was born from the lack of understanding of how express works, and the intricacies of reading a response body in a middleware.

I did end up putting errors from response body on to res.locals and then transforming a custom label using using their values. Thank you.

If anyone stumbles upon this issue in the same situation I was in, I used this to read the body:

function(res) {
    var end = res.end;
    res.end = function(chunk) {
        res.locals.errors = undefined;
        if (chunk) {
            try {
                res.locals.errors = JSON.parse(chunk.toString('utf-8')).errors;
            } catch {
            }
        }
        end.apply(this, arguments);
    }
}

Inspired by this answer https://stackoverflow.com/a/33881887/6493014

from express-prom-bundle.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.