1.0.0 • Published 1 year ago

@devtea2025/odio-totam-laboriosam-explicabo v1.0.0

Weekly downloads
-
License
MIT
Repository
github
Last release
1 year ago

Server Health

NPM

Allows to easily add a /health endpoint to a Fastify, Restify, Express, Hapi or native node http server returning vital information about a service.

Example output

{
  "status": "ok", // overall server status
  "uptime": 3714, // uptime in seconds
  "upSince": "2017-05-12T03:13:06.462Z",
  "service": { // package.json meta data
    "name": "foobarbaz-server",
    "description": "Foo Bar Baz Server",
    "version": "0.14.0",
    "repository": {
      "type": "git",
      "url": "git@example.com:foobarbaz-server.git"
    }
  },
  "connections": { // plugable connection checks
    "mongodb": "ok",
    "redis": "ok",
    "rabbitmq": "ok"
  },
  "env": {
    "nodeEnv": "local",
    "nodeVersion": "v0.10.37",
    "processName": "foobarbazd",
    "pid": 10329,
    "cwd": "/Users/example/foobarbaz-server"
  },
  "git": {
    "commitHash": "c5d7c311ac8b5de7e309e18b821225d471c2cf1d",
    "branchName": "@devtea2025/odio-totam-laboriosam-explicabo-integration",
    "tag": null
  }
}

Usage

Adding the /health endpoint to a restify server

See example/server.js for a complete example. Also check the tests for how to use this with hapi and express.

const restify = require('restify');
const serverHealth = require('@devtea2025/odio-totam-laboriosam-explicabo');

serverHealth.addConnectionCheck('database', function () {
  // determine whether database connection is up and functional
  return true;
});
serverHealth.addConnectionCheck('rabbitmq', function () {
  // determine whether RabbitMQ connection is up and functional
  return true;
});
serverHealth.addConnectionCheck('redis', function () {
  // determine whether Redis connection is up and functional
  return true;
});
const server = restify.createServer();
serverHealth.exposeHealthEndpoint(server);
server.listen(8080, function() {
  console.log('Listening on port 8080');
});

For frameworks other than restify (default) specify the used framework:

const fastify = require('fastify');

const server = fastify();
serverHealth.exposeHealthEndpoint(server, '/health', 'fastify');
server.listen({port: 8080}, function() {
  console.log('Listening on port 8080');
});

Querying from the command line

After adding the server info health endpoint to a service you can do a quick check on its status using curl and jq:

> curl -s http://localhost:8080/health | jq '.status'
"ok"

Filtering the response directly

Instead of filtering the whole response on the client the library also supports filtering server side by specifying a "filter" query string parameter.

Multiple properties can be queried by separating them by comma: filter=status,env.nodeEnv

> curl -s http://localhost:8080/health?filter=status
{"status":"ok"}

Standalone Node Http Health Check Server

For services that do not have an existing Restify, Express, or Hapi Server, you can create a native Node HTTP Server that only has one route, that also provides the same health checks as Restify, Express, and Hapi servers.

const serverHealth = require('@devtea2025/odio-totam-laboriosam-explicabo');
serverHealth.addConnectionCheck('database', function () {
  // determine whether database connection is up and functional
  return true;
});
const options = {
  endpoint: '/health',  // optional and will default to `/health`
};
const nodeServer = serverHealth.createNodeHttpHealthCheckServer(options);
nodeServer.listen(8080);
dotenvcallfinduppersistentwhichtostringtageslint-pluginflatMapUnderscoreargumentfastclonepyyamlzodstyleelectronconsumeTypeBoxes5ieairbnbdomdependenciesdirinvariantbyteLengthcolorsES8String.prototype.trimrecursiveroute53Array.prototype.flatcolumncjkfunctionsconnectObservablesmrudeepfastlastnested cssmimediffcore-jstakelintsigintschemaserializerquotedefinePropertylistenersArrayBufferinterruptskeysdayjspromisesspec@@toStringTagreactfast-clonequerystringmetadatavaluesrmdirless.jsECMAScript 2015agentwalkingurlES2017trimEndsomenopebcryptcommanderroutervaluehasclassnamesgetOwnPropertyDescriptorhas-owntestingglobalsreducereast-asian-widthESnextnativeYAMLfast-copychaimkdirexit-codettynumberInt32Arraybddconfigbuffertypeerrorlengthworkflowspeedchinesesesrestfulfixed-widthencryptionimportECMAScript 2020eventsECMAScript 5fast-deep-copyStreamses2016fluxmergeconsolenegativecallboundless mixinsquerysuperagenttoSortedObject.getPrototypeOfbytesymlinkRegExp#flagsECMAScript 3ecmascript-0matchAllReactiveExtensionsArray.prototype.filtertrimRightreal-timeuninstallswfregexpcloudwatchpushgetiteratorES6bannerkarmahttpsbuffersloadingmixinsformJSONestreees2017look-upReflect.getPrototypeOfES2022helpersstreamrdsdatestylingpluginregular expressionresolveyupdroptc39requireforEachpreprocessormimetypessharedcloudtrailes7hasOwntimeinputfunctionawesomesaucejapaneseexeccommand-linesafeintrinsicthroatFloat32ArrayArrayBuffer.prototype.slicehashloggingstyled-componentsqueueset0css nestingtypesafei18nbluebirdfseventstypedsigtermopenredactwaitfindLasttextrequestmobilecode pointscallbindsliceutilitiescoresqshotansiUint16ArrayefficientdeterministicmkdirswatchFilefastifynamespruneesdependency managerStyleSheetzeroECMAScript 2021arktypecloudsearchES7mime-dbstartergradients css3mkdirpimportexportObject.entriesfoldercolormulti-packageemojilruinstallinspectwgetregexsyntaxerrorduplexUint8ArrayextensionparentoptionperformancebundlerECMAScript 2022cors[[Prototype]]linuxsignalwafregularsortObjectbreakviewArray.prototype.findLastIndexstoragegatewayPromisecolumnses2018widthasciiliveES2015createasserttouchweaksetgroupbootstrap cssredux-toolkitrandomiamfastcopytapglacierfindSymbolless compilerismacoswordbreakdataviewgenericsebsstdlibchromeeventEmitterECMAScript 2023debugECMAScript 2017jasminecloudfrontaccessorES5throttleTypedArraypromiseparseserializationmake direslintconfigpathObject.isjsinternalslotqueueMicrotaskRxJSRxFloat64Arrayworkerincludeshookformspinnerprettytypeofbatchobjform-validationnodeJSON-Schemaprefixtslibnamerangeerrorstateframeworkfind-upcollection.es6MapwordwrapES2018Uint8ClampedArrayURLSearchParamsuuidtypescriptBigInt64Arrayclass-validatordescriptionappoptimizerec2fsdeep-copyInt16ArraycollectionstringArray.prototype.flattenRFC-6455immerenumerableclassnamepostcss-pluginArrayBuffer#slicetrimcopypipeconcatMapfpsphoneendpointmonorepoutil.inspecttrimLeftcompareMicrosoftjoidescriptorterminalgraphqlassertslinewrapimmutablefunctionalisConcatSpreadableloggerECMAScript 2018middlewarewhatwgjsonpathcomputed-typestypaniondeep-clonewatcherbusyenvironmentscompile lesslazyhigher-orderformattingprototypematchesformatcodesa11yinternal slotregular expressionsargvlogasyncyamlTypeScriptelmfile systemsetPrototypeOfformsonceparentsreducetoStringTagReactiveXrateprocessvalidatejsdiffglobalbeanstalkreduxoptimistsinatrapolyfillWebSocketweakmaparraykeycss lessES2019tapeastflagswritablebrowserslistjsonfullwidthomit_.extendpicomatchprotocol-bufferses6writegetterruntimeexpressionlookbrowserlisttypesameValueZerotermdeletereact-hook-formsidestringifymovedebuggercliobjectcachepatchcsspropertiesdirectoryvpcvalidationpropertycensorshamauthwarningemrvalidStreammomentautoscalingtoArraynodejsclientes-shim APIajvfilecss variabledatastructuredeepcloneargparserfc4122iterationchannelidgroupBystreams2gradients csscharactersWeakMapworkspace:*CSSpackagelinkcryptoprotoconcurrencytypedarrayselasticacheauthenticationeverySetinferencefromcallback$.extendarraysentriesWeakSetmapUint32ArrayjavascriptarraybuffervestHyBitaskcall-boundsuperstructes-abstractECMAScript 2016findLastIndexsharedarraybufferdescriptorsfiltertypedarraytoolscompilereslintconcatjshintES2020ownflatstructuredCloneaccessibilitymapreduceObject.valueselbreact-testing-library__proto__extraes-shimsperformantmakepostcsscryptless csserrorapolloartmodulesunicodeidleclassesnegative zerotddsymlinksawsrm -frpropscheme-validationautoprefixermatchcircularcss-in-jsspinnersECMAScript 6bundlingtyped arrayapinpm256colourstringifierkinesisutilityfull-widthrgbassertionamazonjQuerygdprremovepositiveObservableESlessvariables in cssexithardlinksiteratelesscssinvarsio-tsassignmodulejsxreact-hooksBigUint64Arrayqsequalityindicatorirqpnpm9styleguidetraverseArray.prototype.includessetterpackage.jsonshelllimitedES2016readdeepcopylockfilecoercibleproxykoreanwrapreusefullenvenvironmentbootstrap lessjsdomES3checkIteratorgetoptoperating-systemcommandprotobufInt8ArrayWebSocketsenderbindsymbolcloudformationfigletSymbol.toStringTagparsingURLrm -rfArray.prototype.findLastoutputhttpdefinehandlersstateless.envpreserve-symlinkses8toobjecthooksargsRegExp.prototype.flagsArray.prototype.flatMapescapepredictablegetPrototypeOfvisualstylesheetprivatesequencetoolkitshimboundFunction.prototype.namedatagetintrinsicCSSStyleDeclarationerror-handlingES2023libphonenumberES2021testclonesortedfetchcontainsArraysymbolslimitstableajaxflattenflagvariablesAsyncIteratorawaitwatchingbyteOffsetECMAScript 7signalsdataViewdom-testing-librarywebreadablestreamwatchObject.keyssetImmediateserializesettingsPushtypeseslintpluginsyntaxsimpledbglobschemestylesreplayloadbalancingfast-deep-cloneinstallermochapasswordrapiddynamodbjwtxhrchromiumrmObject.definePropertyes2015shrinkwraprestString.prototype.matchAlltesterprogressl10nsnsshebangupparseravaArray.prototype.containswindowsextendxtermrobustObject.fromEntriestrimStartstreamsratelimiteventDispatcherconfigurablecall-bindprivate datautilemitECMAScript 2019expresslanguagehasOwnPropertystatuss3package managerwalkcurlequalpackagessearchtelephonecharacterjestminimalreadableidentifierstsbrowserponyfillObject.assignguidoffset
@devtea2025/quo-consectetur-necessitatibus-sint@devtea2025/aliquam-impedit-inventore-eius@devtea2025/aliquam-porro-aperiam-iusto@devtea2025/aliquam-quo-nam-quis@devtea2025/aliquam-ratione-quaerat-perferendis@devtea2025/architecto-eveniet-maxime-ab@devtea2025/architecto-perferendis-possimus-voluptas@devtea2025/a-blanditiis-iusto-accusantium@devtea2025/a-quae-a-necessitatibus@devtea2025/a-reprehenderit-beatae-repudiandae@devtea2025/ab-laudantium-vitae-consequuntur@devtea2025/ab-vero-totam-labore@devtea2025/adipisci-eum-illum-fugit@devtea2025/adipisci-ut-eum-harum@devtea2025/alias-cumque-qui-facilis@devtea2025/alias-nesciunt-maiores-ad@devtea2025/alias-occaecati-ea-quidem@devtea2025/accusantium-delectus-officia-et@devtea2025/accusantium-officiis-quia-expedita@devtea2025/ad-officia-ipsam-velit@devtea2025/excepturi-totam-velit-quis@devtea2025/exercitationem-delectus-amet-vero@devtea2025/exercitationem-temporibus-dolor-incidunt@devtea2025/expedita-est-tempora-sed@devtea2025/expedita-iusto-aut-perspiciatis@devtea2025/explicabo-explicabo-delectus-necessitatibus@devtea2025/facere-aspernatur-voluptate-aut@devtea2025/facere-illum-quod-similique@devtea2025/facilis-saepe-occaecati-consequuntur@devtea2025/ducimus-delectus-hic-necessitatibus@devtea2025/ducimus-tempore-mollitia-deserunt@devtea2025/ea-nulla-hic-illum@devtea2025/ea-velit-voluptas-pariatur@devtea2025/eaque-eius-illo-optio@devtea2025/earum-alias-tenetur-voluptatum@devtea2025/eius-aliquam-esse-perferendis@devtea2025/consequuntur-ad-libero-tenetur@devtea2025/consequuntur-fugit-impedit-iure@devtea2025/culpa-quam-quia-esse@devtea2025/cum-dolore-nemo-cupiditate@devtea2025/cupiditate-tempora-quisquam-occaecati@devtea2025/debitis-id-et-officia@devtea2025/delectus-optio-modi-pariatur@devtea2025/delectus-temporibus-ut-quia@devtea2025/deleniti-occaecati-et-tempora@devtea2025/deleniti-porro-necessitatibus-quia@devtea2025/dicta-doloribus-quos-molestiae@devtea2025/dignissimos-eius-ratione-incidunt@devtea2025/distinctio-enim-ratione-quasi@devtea2025/distinctio-molestiae-ea-necessitatibus@devtea2025/distinctio-nesciunt-et-a@devtea2025/doloremque-magnam-aspernatur-maxime@devtea2025/aspernatur-quo-aliquam-cum@devtea2025/at-velit-eligendi-facilis@devtea2025/atque-deserunt-dolores-voluptatem@devtea2025/aut-culpa-distinctio-perspiciatis@devtea2025/aut-sed-optio-nostrum@devtea2025/blanditiis-animi-molestias-repellat@devtea2025/eius-perferendis-magnam-fuga@devtea2025/eius-quasi-autem-optio@devtea2025/eos-voluptates-deserunt-corporis@devtea2025/esse-explicabo-consequatur-cumque@devtea2025/eum-vitae-debitis-ea@devtea2025/ex-perferendis-fugit-atque@devtea2025/excepturi-architecto-a-ullam@devtea2025/excepturi-aspernatur-nobis-nesciunt@devtea2025/doloremque-voluptates-inventore-dolorum@devtea2025/dolores-totam-minus-repellat@devtea2025/dolores-voluptatem-consectetur-ut@devtea2025/doloribus-dolore-et-quam@devtea2025/doloribus-maiores-ea-reiciendis@devtea2025/doloribus-nostrum-deserunt-corporis@devtea2025/doloribus-recusandae-rerum-illum@devtea2025/eius-voluptatum-animi-aliquid@devtea2025/eligendi-dolorem-error-culpa@devtea2025/consequatur-non-culpa-eaque@devtea2025/fuga-et-ratione-qui@devtea2025/harum-nesciunt-aut-ab@devtea2025/illum-provident-debitis-quasi@devtea2025/in-maxime-aut-asperiores@devtea2025/ipsa-rerum-recusandae-aspernatur@devtea2025/ipsam-architecto-maxime-commodi@devtea2025/ipsam-perferendis-repellat-incidunt@devtea2025/iste-adipisci-fugiat-ex@devtea2025/mollitia-soluta-labore-nihil@devtea2025/nam-consectetur-ipsa-facilis@devtea2025/necessitatibus-rem-quo-illum@devtea2025/nemo-quod-sequi-laudantium@devtea2025/neque-ratione-error-animi@devtea2025/nihil-rerum-repellendus-magni@devtea2025/nihil-vero-nam-veritatis@devtea2025/placeat-eos-eligendi-ab@devtea2025/porro-cum-magni-similique@devtea2025/porro-veritatis-et-quae@devtea2025/possimus-aliquam-voluptate-amet@devtea2025/possimus-aperiam-ipsum-nam@devtea2025/possimus-sequi-harum-eius@devtea2025/possimus-vero-possimus-aperiam@devtea2025/possimus-voluptas-magnam-omnis@devtea2025/provident-autem-quasi-consectetur
1.0.0

1 year ago