npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@emartech/aggregate-metric-logger

v5.2.1

Published

aggregate metrics in memory for logging

Downloads

254

Maintainers

mfawalmfawalfcolombo-sapfcolombo-sapmrclsumrclsutaylor-sethtaylor-sethdputtadputtamkrikoormkrikoorsamthomas02samthomas02robertoraczemarsysrobertoraczemarsyseggarciaeggarciarollandghrollandghsap-nssap-nsirvansapirvansapdhruv-sapdhruv-sapandras-marton-emarsysandras-marton-emarsyssseidmedsseidmedfhasefhasealanshialanshijisaacsonjisaacsoni850773i850773csjakaboscsjakabosborcsaborcsabcsizmadiabcsizmadiaschroedersteffenschroedersteffensfarielsfarielbotondjavorkabotondjavorkai534456i534456daniel.balazsdaniel.balazstade82tade82probalazsprobalazsluca.fasolino.seluca.fasolino.sermafteiuscairmafteiuscailhammerllhammerlbencsobencsomfel0123mfel0123franziskajungfranziskajungd056437d056437ekkovatsekkovatslaralangnaularalangnauemarsys-stephen-ivesemarsys-stephen-ivestothbence8tothbence8earlpittsearlpittsiabrahamiabrahamzhollerzhollerbalintkemenyemarsysbalintkemenyemarsysccarrollemccarrollemdunaicapadunaicapabobby_russelbobby_russelsovagossovagostothmarci25tothmarci25mariannagmariannagestefanlesnjakovicestefanlesnjakovicmrmeszarosmrmeszarosbence.tothbence.tothjason-nelson-01jason-nelson-01drahos.istvandrahos.istvanpeccpeccbirokhunbirokhunlaszlo.orilaszlo.oridpkemarsysdpkemarsysnathan-matthews-sapnathan-matthews-saptroywiegandtroywiegandnikolett.tarnikolett.tarbronikabronikacenglersapcenglersapmlesh-sapmlesh-sapgillyesgillyesdanielisapdanielisapsridevirsridevirabieler-sapabieler-sapaidanlesh-sapaidanlesh-saptonyhsaptonyhsapkarlabrandlkarlabrandlkonradschewekonradschewemanasbommakantimanasbommakantidudaaslacidudaaslaciemarsys-securityemarsys-securitynorbert-levajsics-emarsysnorbert-levajsics-emarsysronnykrosseronnykrossevszegedivszegedisap-amsap-amnnieman-sapnnieman-sapariceemariceemdwolter_emarsysdwolter_emarsysrcsullagrcsullagttoth2ttoth2tbucsanszkitbucsanszkidszunomardszunomardschuppadschuppaandras.sarroandras.sarrondomkendomkesevket-atasevensevket-atasevenplsapplsapmattfeldhake_emarsysmattfeldhake_emarsysatittelatittelandrasp3aandrasp3amruellmruelladroszleradroszlererikpetroemarerikpetroemarrimo86rimo86tillmannrtillmannrmarkjarvismarkjarvisgeczirobertgecziroberttsiraitnpmtsiraitnpmbborsibborsizbalazszbalazsziyadgziyadgpinterapinteraapoonapoonianhelmrichianhelmrichvarszegikvarszegikrkumari03rkumari03cseby92cseby92bozsadambozsadamjfillmorejfillmoreviktor.szellviktor.szellbencekadaremarbencekadaremarroxanamsroxanamsdkocsis-emarsysdkocsis-emarsysdemajo_emsdemajo_emsmarko.fritzschemarko.fritzscheagruczaagruczadmorvaidmorvainish343nish343koloshkoloshazorahai3904azorahai3904skrivooskrivoomark.adorjanmark.adorjanburciburcidimitrovndimitrovnivanfroehlichivanfroehlichiulianmihaiiulianmihaixueboliangxuebolianggresztergreszterbercziandbercziandcrileycrileydrewhodsonsapdrewhodsonsapjviesersapjviesersapsixstepsixstepsap-jjfsap-jjfsapfssapfsattilamuller01attilamuller01scotthetrickscotthetrickoliverweisenburgeroliverweisenburgermaurogrecomaurogreconicolaeciumacnicolaeciumacasciortino1asciortino1pendicg24pendicg24marton.matusekmarton.matusekadamszabolcsadamszabolcsbtalosbtalosbence.utobence.utodaniels1404daniels1404saphendricksjoergsaphendricksjoergmmartin2mmartin2fenyopetifenyopetimmothersillmmothersillbrandon-sapbrandon-sappjohnson02pjohnson02mhunyadymhunyadymengjiao.zhaomengjiao.zhaoushnpmushnpmdkorposdkorposxin.hexin.heviauviauzsomborhzsomborhmuddammuddamnvkaur2nvkaur2jbleclercjbleclercjamescockerjamescockerarnaud.buchholzarnaud.buchholzjerryrichardsonjerryrichardsonretfalvibenceretfalvibenceakapaakapamklsmklskaajkaajknagyknagyrehrethrehrethmhegedusmhegedusmmartinmmartinbsoosbsoosemarsys-deployeremarsys-deployerdravendravenjudgejudgedaniel.bankydaniel.bankyszeistszeistrgargyargargyamarton.papp.emarsysmarton.papp.emarsysdgyenesdgyeness.viktors.viktorm4w4q7m4w4q7david.barkoczidavid.barkocziqw3rqw3rtamas.tothtamas.tothgergaczdgergaczdgerikegerikealkraalkraepgrubmairepgrubmairmorbanmorbanettancosettancosepmartiniepmartinigabor.balla.emarsysgabor.balla.emarsysmzsombormzsomborejperssonejperssonejwalkerejwalkerllosonczyllosonczyiben12iben12kartonfarkaskartonfarkasadamoaadamoambarnambarnapevapevabforgacsbforgacskozmakozmangabor84ngabor84zerosuxxzerosuxxedosreckiedosreckieadanieleadanielselatorselatorkkimakkkimakgaborbgaborbglendvaiglendvailverasztolverasztordoczirdoczifentosifentosiboristomicboristomicmbazsombazsodmihalekdmihaleklhalaszlhalaszevspasevskievspasevskidsztankodsztankotbugartbugarfqqdkfqqdkmenyhertfatyolmenyhertfatyolzoltanrideg-emarsyszoltanrideg-emarsyssarakollsarakollmmolnar-emarmmolnar-emarattila.galattila.galbenjamingehlbenjamingehltdorkaatdorkaalkonyalkonyagpap_emagpap_emavimtaaivimtaailloki-emarsyslloki-emarsysborziborzipmaksa_emarsyspmaksa_emarsysdfaragodfarago

Readme

aggregate-metric-logger

Aggregate metrics in memory and log them every minute

Setup

Set METRIC_LOGGER_ENABLED env variable to true for aggregate-metric-logger to start collecting and logging measurements.

To change the default aggregate-metric-logger namespace used for logs, set METRIC_LOGGER_NAMESPACE to a custom value.

Setup to send metrics to GCP monitoring

(currently only the metricLogger.count and metricLogger.measureGcp methods send metrics to GCP)

Set METRIC_LOGGER_ENABLED just us for LaaS based metrics.

Set MONITORING_PROJECT_ID and GCP_CREDENTIALS env variables. HOSTNAME env variable also has to be set, but for a pod running on kubernetes this should already be set.

Add Monitoring Metrics Writer Role to the service account in the GCP project.

Usage

The package exposes similar logging methods as the @emartech/json-logger package: trace, debug, info, warn, error and fatal.

When these are called, it will aggregate logs with the same parameters withing a minute, add an extra count property to the logs and log them at the end of the minute with @emartech/json-logger.

const metricLogger = require('@emartech/aggregate-metric-logger')

metricLogger.warn('etwas-went-wrong', { customer_id: 11 });
metricLogger.warn('etwas-went-wrong', { customer_id: 11 });

// will aggregate these to a single warning log

Measure values

If you want aggregate measurements about something you need to simply call the measure method for each value:

const metricLogger = require('@emartech/aggregate-metric-logger')

metricLogger.measure('thing-to-measure', 14)
metricLogger.measure('thing-to-measure', 20)

Every minute metric logger will log min, max, sum, count and average aggregated metrics for each measured tags. (Uses @emartech/json-logger behind the scenes for logging).

Measuring durations

For duration measurements, there are two convenient methods: start, and stop;

You start the measurement with start, the counted value for aggregation will be the duration between this start and the matching stop call;

function exampleIOHeavyFunction() {
  const measurement = metricLogger.start('tag-for-the-measuement');
  const result = db.findItems();
  metricLogger.stop(measurement);
  return result;
}

Group by extra parameters

If you want to group by additional parameters inside a tag, you can pass down these extra params in an object to measure and start as the last optional argument:

metricLogger.measure('thing-to-count', 14, { customer_id: 12 });

const measurement = metricLogger.start(
  'tag-for-the-measuement',
  { event_type: 'nyul', account: 3 }
);

A separate log entry will be created for each seen value combinations seen in the extra params and these extra params will be appended to the log entry.

Be very careful when using extra params, and only include information you really need. If you include too many parameters, you could lose the advantage you gain by aggregating your logs with this package.