---
title: "Summary JavaScript"
description: "initialize TenXSummary instances at runtime using JavaScript"
source: "https://github.com/log-10x/modules/tree/main/pipelines/run/units/transform/script/summary/unit.yaml"
icon: "material/star-cog-outline"

---
Enrich [TenXSummary](https://doc.log10x.com/api/js/#TenXSummary "Access aggregate values of tenxObjects which share a target set of field values.") instances produced by an [aggregator](https://doc.log10x.com/run/aggregate "Aggregate and summarize TenXObjects to publish as metrics")
using custom JavaScript constructors.

Enriching summary instances with calculated fields provides a method for creating dynamic [tag dimensions](https://www.baeldung.com/micrometer#1-tags){target="\_blank"}
when publishing to [metric](https://doc.log10x.com/run/output/metric/ "Write aggregated TenXSummary instances to metric outputs (e.g., Prometheus, Datadog)") outputs (e.g., [Prometheus](https://doc.log10x.com/run/output/metric/prometheus/#prometheustagfields)).

Calculated summary fields can combine data from:

1. The [aggregated values](https://doc.log10x.com/run/aggregate/#aggregatorfields "list of field names by which to aggregate TenXObjects") extracted from TenXObjects grouped into the current summary instance.

2. [:material-file-table: TSV/CSV](https://doc.log10x.com/api/js/#TenXLookup.load) lookup files.

3. [:material-globe-model: GeoIP](https://doc.log10x.com/api/js/#TenXLookup.loadGeoIPDB)  to geo-reference instances based on their [ipAddress](https://doc.log10x.com/api/js/#TenXObject+ipAddress "An array of string values of IPV4 parsed from the object's text.").

4. [:material-counter: Counter](https://doc.log10x.com/api/js/#TenXCounter "Get and set the values of global atomic counters.") and [input](https://doc.log10x.com/api/js/#TenXInput "Serves as a base class to allow for custom input initialization.") values.

To load custom summary .js files at run time see [JavaScript](https://doc.log10x.com/config/javascript/) configuration.

The example below enriches summary instances with HTTP message lookup value:

```js

// Extend the TenXSummary class to define a custom ctor

export default tenx.

/**
 * Input constructors can initialize specific resources at the start of pipeline execution.
 */
export class HttpInput extends TenXInput {

 /**
  * This constructor loads the 'http.csv' lookup table to enrich instances of 'HttpSummary' below. 
  */
  constructor() {

  if !TenXLookup.load("data/run/lookup/http.csv", true)
    throw new Error("could not load HTTP lookup!");
}

export class HttpSummary extends TenXSummary {

    /** 
     *  This constructor calculates an HTTP message for TenXSummaries by translating the numeric 'code' 
     *  value into a human-readable 'reason' message which can be used as a metric dimension
     */
    constructor() {
      
      if (this.code) this.reason = TenXLookup.get("http", this.code);
    }
}
```

## :material-menu: Options

Specify the options below to [configure](/config "configure") multiple Summary JavaScript:

|Name|Description|
|---|---|
|[summaryActionsClassName](#summaryactionsclassname "JavaScript class name")|JavaScript class name|
|[summaryActions](#summaryactions "10x JavaScript statement to execute")|10x JavaScript statement to execute|
|[summaryActionsFile](#summaryactionsfile "Declaring .js file")|Declaring .js file|

### :material-menu-right-outline:**`summaryActionsClassName`**

JavaScript class name.

|Type|Required|Names|
|---|---|---|
|String|✔|\[summaryActionsClassName, TenXSummaryClassName\]|

Specifies the JavaScript class name in which [summaryActions](https://doc.log10x.com/run/transform/script/summary/#summaryactions "10x JavaScript statement to execute") are defined.


### :material-menu-right-outline:**`summaryActions`**

10x JavaScript statement to execute.

|Type|Default|Names|
|---|---|---|
|List|\[\]|\[summaryActions, TenXSummary\]|

JavaScript statements for initializing target aggregator(s) TenXSummary instances.

**NOTE**: This argument is not designed to be set directly, but instead by passing a [.js launch file](https://doc.log10x.com/config/javascript/) containing
these statements nested within an [TenXSummary](https://doc.log10x.com/api/js/#TenXSummary "Access aggregate values of tenxObjects which share a target set of field values.") sub-class constructor as command line argument as described above.


### :material-menu-right-outline:**`summaryActionsFile`**

Declaring .js file.

|Type|Default|Names|
|---|---|---|
|String|""|\[summaryActionsFile, TenXSummaryFile\]|

Specifies the .js file name declaring [summaryActions](https://doc.log10x.com/run/transform/script/summary/#summaryactions "10x JavaScript statement to execute").


<br/>:material-github: This unit is defined in [summary/unit.yaml](https://github.com/log-10x/modules/tree/main/pipelines/run/units/transform/script/summary/unit.yaml "summary/unit.yaml"){target="\_blank"}.

