# Trackers Trackers track the value(s) of something. Anything, really. A tracker does this **every hour or every day**. Once a tracker tracks an event, **it sends it to our databases** to be **saved for up to a month**. Trackers are used to easily show statistics without having to manage the data yourself. ## Example ```js const kontrl = require("kontrl"); // This tracker counts the rows of the users table (see tables documentation) const myUserTracker = kontrl.tracker.countResources({ resourceNames: ["users"], precision: "hour" // Can be once an hour or once a day. }); ``` There are a few **premade trackers**. It's also possible to **make your own** trackers. ## Premade trackers - **events** Uses custom events to make a graph (see Events documentation). - **countResource** Tracks how many items there are in a table - **custom trackers** See the "Custom trackers" section. ## Events tracker When you throw events, (see Events page), you can make a tracker to display this data on the dashboard. **Params:** - **eventName** the name of the events. (see Events page). ```js const kontrl = require("kontrl"); const routeVisitsTracker = kontrl.tracker.events({ eventName: "route_visits" }); ``` ## Count Resources tracking A simple premade tracker the items of 1 or more tables. (see Tables page). **Params:** - **resourceNames** an array of 1 or more table names. - **precision** how often you want to track. can be "hour" or "day". ```js const kontrl = require("kontrl"); const userCountTracker = kontrl.tracker.countResources({ resourceNames: ["users"], precision: "hour" }) ``` ## Custom trackers It's incredibly easy to write your own trackers. First, decide whether you want to track a single number or multiple numbers at the same time. ### Tracking a single value You track a single value by using the **kontrl.tracker.single(..)** function. **Params:** - **uniqueName** the name of what are tracking. Unique within your application and maximum 20 characters long. - **precision** the interval at which the value will get tracked. Can be "hour" or "day" meaning hourly and daily respectively. - **getValue** the function which will be called every hour or day that gets the value. This function expects a single number as a return ```js const kontr = require("kontrl"); kontrl.tracker.single({ uniqueName: "new_users_today", precision: "day", getValue() { const newUserCount = 100; // get the data from your database return newUserCount; } }) ``` ### Tracking multiple values You track a combination of values using the **kontrl.tracker.many(..)** function. **Params:** - **uniqueName** the name of what are tracking. Unique within your application and maximum 20 characters long. - **precision** the interval at which the value will get tracked. Can be "hour" or "day" meaning hourly and daily respectively. - **getValue** the function that gets the value. This function **returns an object**. ```js const kontr = require("kontrl"); kontrl.tracker.many({ uniqueName: "stock", precision: "day", getValues() { // Get the current stock items const itemsInStock = { "gameboy": 3, "Pokemon fire red": 9 }; return itemsInStock; } }) ```