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

@mean-expert/loopback-stats-mixin

v1.2.3

Published

A mixin to provide statistical functionallity for Loopback Models, Relations and Nested Datasets

Downloads

94

Readme

Loopback Stats Mixin

This module is designed for the NodeJS Loopback and FireLoop frameworks. It provides statistical functionallity to any Model, Relation or Nested Dataset.

The loopback-stats-mixin module provides the following mixins and functionallity.

  • Stats Mixin.- Provides statistical functionallity by the creation of micro-services.
  • Stats Wrapper.- Provides a way to wrap micro-services into bundled services.

Thanks to these 2 mixins we can create a full set of services that can automatically handle statistical information for the Models in which the mixin is implemented.

INSTALL

  npm install loopback-stats-mixin --save

MIXINSOURCES

With [email protected] mixinSources have been implemented in a way which allows for loading this mixin without changes to the server.js file previously required.

Add the mixins property to your server/model-config.json like the following:

{
  "_meta": {
    "sources": [
      "loopback/common/models",
      "loopback/server/models",
      "../common/models",
      "./models"
    ],
    "mixins": [
      "loopback/common/mixins",
      "../node_modules/loopback-stats-mixin/dist",
      "../common/mixins"
    ]
  }
}

STATS MIXIN

This mixin creates a Remote Method for each configuration object provided within the mixin options, being possible to set configuration objects as needed.

EXAMPLE

The following is the most basic example of how to create a stats micro-service:

"mixins": {
    "Stats": [
        {
            "method": "stats",
            "endpoint": "/stats",
            "description": "A Description for Loopback Explorer",
            "type": "model",
            "count": {
                "on": "createdAt",
                "by": "index"
            }
        }
    ]
}

The code defined above would create a localhost:3000/api/model/stats endpoint with the ability to fetch hourly, daily, weekly, monthly, yearly and custom start and end statistics with information related to the model.

In this example, the information will be processed upon the createdAt date property counted by index which means everytime the createdAt property matches within a timeframe, it will be counted as 1.

HINT 1: "count.on" can be any date property within a model, e.g. created, createdAt, updated, deletedAt, etc.

HINT 2: "count.by" can be the constant word "index" or any numeric/boolean property within the model, e.g. count, amount, isMember.

BOOT OPTIONS

The following options are needed in order to create a micro-service to provide statistical information regarding a model, relation or nested dataset.

HINT: you can create as many micro-services as you need.

| Options | Type | Requried | Possible Values | Examples |:-------------:|:-------------:|:-------------:|:---------------:| :------------------------: | method | String | Yes | Any | stat, myStat, modelStat, etc | endpoint | String | Yes | URL Form | /stats, /:id/stats | description | String | No | Any | Loopback Explorer Description | type | String | Yes | [model | relation | nested] | model, relation, nested | relation | String | No | Model relation name | accounts iff Organization.accounts | nested | String | No | Model nested property | locations iff Organization.locations | count | Object | Yes | [on | by | as | avg] | SEE COUNT OPTIONS

Different configurations can be specified depending on the needs, since you can create statistical information over Models, Relations and Nested Datasets, different configurations will be needed.

Please refer to configuration examples.

COUNT OPTIONS

The counting options are the statistical pieces that makes possible to count results over a timeframe according to indexal counts, sums or averages.

There are different ways to create statistical information and depending on the needs different configurations may be defined.

| Options | Type | Requried | Possible Values | Examples |:-------------:|:-------------:|:-------------:|:---------------:| :------------------------: | on | String | Yes | Model date property | created, createdAt, updatedAt, etc | by | String | Yes | [index | number property | boolean property] | index, amount, isClosed | as | Number | No | Any numeric value (default: 1) | 1, 5, 10 | avg | Boolean | No | [true | false] | true, false

STATS WRAPPER MIXIN

This mixin creates a Remote Method that wraps multiple micro-service into 1 service bundle. It provides a way to group micro-services but also bundled services by creating a statistics tree allowing to fetch a full set of data for multiple stats in just one call.

EXAMPLE

The following is an example of how to create a stats bundled-service:

"mixins": {
    "StatsWrapper": [
        {
            "type": "model",
            "method": "bundledStats",
            "endpoint": "/bundled-stats",
            "description": "Loopback Explorer Description",
            "wraps": [
                "microServiceStats1",
                "microServiceStats2",
                "microServiceStats3",
                "microServiceStats4"
            ]
        }
    ]
}

The code defined above would create a localhost:3000/api/model/bundled-stats endpoint that will result in an object containing the result from all of the micro-services wrapped.

HIN: Wrapping can be done in multiple levels, so you can wrap a set of micro-services, but also a set of bundled-services by creating a tree of services.

BOOT OPTIONS

The following options are needed in order to create a bundled-service to provide statistical information regarding multiple micro-services.

HINT: you can create as many bundled-services as you need.

| Options | Type | Requried | Possible Values | Examples |:-------------:|:-------------:|:-------------:|:---------------:| :------------------------: | method | String | Yes | Any | stat, myStat, modelStat, etc | endpoint | String | Yes | URL Form | /stats, /:id/stats | description | String | No | Any | Loopback Explorer Description | type | String | Yes | [model | relation | nested] | model, relation, nested | relation | String | No | Model relation name | accounts iff Organization.accounts | nested | String | No | Model nested property | locations iff Organization.locations | wraps | [String] | Yes | Micro services name list | ['microService1', 'microService2', '..']

LICENSE

MIT