Comments (6)
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.
Is the update available on npm?
from express-prom-bundle.
I see the update to the docs there. Thanks for adding this! It will be very useful.
from express-prom-bundle.
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.
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.
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)
- Missing documentation on combination of autoregister false and metricsApp HOT 2
- Intentional breaking changes? HOT 4
- Option to lowercase all paths HOT 2
- Option to erase series without requests for a given time HOT 6
- Adding prefix to "up" metric HOT 3
- Add labels to up metric
- @types/express should be marked as a peerDependency
- prom-client 15 compatibility HOT 1
- Unintentional(?) breaking peer dep change in 6.3.1 HOT 1
- Helped needed... HOT 2
- maxAgeSeconds not part of "opts" type HOT 1
- Type definitions do not include promRegistry as a configurable parameter HOT 1
- Package consuming 10gb of virtual memory HOT 5
- Allow a path whitelist option HOT 3
- excludeRoutes is missing from the TypeScript types HOT 1
- Disable http_request_duration_seconds HOT 3
- Cluster: Operation timed out. HOT 2
- Normalizing URL path: Replace #val with custom values/attributes HOT 1
- Missing `promClient` type in the `express_prom_bundle` interface HOT 6
- Disable http_request_duration_seconds_bucket and http_request_duration_seconds_count, but keep http_request_duration_seconds_sum HOT 5
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from express-prom-bundle.