diff --git a/dist/CHANGELOG.md b/dist/CHANGELOG.md new file mode 100644 index 0000000..9473875 --- /dev/null +++ b/dist/CHANGELOG.md @@ -0,0 +1,38 @@ +# ChangeLog + +| Version | Changes | +| -------------------|-----------| +| 1.3.1 | Tags for prometheus and influxdb (EXPERIMENTAL FEATURE) | +| | Replaced circleci with Github Actions | +| 1.3.0 | More options in display template (Min, Max, Avg, Current, Total etc) | +| | Font awesome icons empty fill | +| | Maths expression in font awesome repeat mode | +| 1.2.1 | Time range in cell links | +| | Time of last data point stat added | +| | Patterns Quick Editor | +| | Sorting Persisted | +| | Link in first column | +| | Option to modify font size | +| 1.2.0 | Template variables in row name, col name, link, tooltip, thresholds, colors | +| 1.1.0 | Colnames in the link | +| 1.0.0 | Typescript & TSLint implementation | +| | Jest testcases implemented | +| | SASS implementation for stylesheets | +| | Display options improved | +| | Display values can have part of series name | +| 0.5.1 | Images as values based on thresholds | +| 0.5.0 | Background Color & Transform value overrides | +| | Bug fixes #43 #44 #45 | +| 0.4.7 | Links in cells i.e., Clickable cells | +| 0.4.6 | Font Awesome icons as values base on thresholds | +| 0.4.x | Time based thresholds | +| | Filter option to hide rows based on value | +| | Option to hide the first column and table header | +| 0.3.x | Options to name the pattern, disable the pattern | +| | Reverse the background colors and transform values in pattern | +| | Removed output data from panel model | +| | Bug fixes | +| 0.2.x | Build script changed from babel to typescript | +| | Assign series alias as row to the default pattern | +| | Bug fixes | +| 0.1.0 | First working Version | diff --git a/dist/LAST_UPDATED b/dist/LAST_UPDATED new file mode 100644 index 0000000..2ff9126 --- /dev/null +++ b/dist/LAST_UPDATED @@ -0,0 +1 @@ +Mon Jun 29 17:20:36 UTC 2020 diff --git a/dist/README.md b/dist/README.md new file mode 100644 index 0000000..51198e0 --- /dev/null +++ b/dist/README.md @@ -0,0 +1,440 @@ +# Boom Table Panel for Grafana + +![Build & Publish](https://github.com/yesoreyeram/yesoreyeram-boomtable-panel/workflows/Build%20&%20Publish/badge.svg) + +Boom Table Panel for Grafana. Table/MultiStat plugin with multiple columns for Graphite, InfluxDB, Prometheus, Azure Monitor. + +![Boom Table - Sample Panel](https://raw.githubusercontent.com/yesoreyeram/yesoreyeram-boomtable-panel/master/dist/src/img/panel.png) + +![Boom Table - Panel with Font Awesome icons](https://raw.githubusercontent.com/yesoreyeram/yesoreyeram-boomtable-panel/master/dist/src/img/panels-fa.png) + + +Features : +---------- + +* Multi column support for graphite, InfluxDB, Prometheus & Azure Monitor +* Individual thresholds for cells based on pattern +* Multi level thresholds (N number of thresholds) +* Individual aggregation method for cell based on pattern +* Time based thresholds +* Individual cell values can be transformed to helpful texts, based on pattern. +* Transformed texts can also contain actual metrics +* Icons in metrics +* Units can be set at cell level based on pattern +* Row/Column name based on multiple graphite/InfluxDB/Prometheus columns +* Filter metrics +* Debug UI to test patterns + +Supported / Tested Data Sources : +-------------------------------- + +* Graphite +* InfluxDB +* Prometheus +* Azure Monitor +* AWS Cloud Watch +* Any datasources that returns data in timeseries format + +Tested Grafana versions : +------------------------- + +* Grafana version 4.5.2 +* Grafana version 5.0.2 +* Grafana version 6.0.0 + + +Screenshots : +------------- + +Pattern Editors Sample screenshots + +![image](https://user-images.githubusercontent.com/153843/53409051-e973f580-39b7-11e9-83e3-e1b6306abafb.png) + +![image](https://user-images.githubusercontent.com/153843/53409071-fa246b80-39b7-11e9-9e8e-05baa8fc1531.png) + +![image](https://user-images.githubusercontent.com/153843/53409114-13c5b300-39b8-11e9-9227-339dcd110276.png) + +Debug UI Sample screenshots + +![image](https://user-images.githubusercontent.com/153843/53409376-acf4c980-39b8-11e9-89bc-363822fe370d.png) + + +# Setup + + +Pattern Guidelines +------------------ + +Pattern are regular expressions / name of the metrics. If there are multiple matching patterns, first match will be considered. To see the matching patterns, enable debug mode in Options panel. + +Sample graphite series / Influx / Prometheus metrics + + prod.server.my-app-01.sys.cpu.usage + prod.server.my-app-01.sys.mem.usage + prod.server.my-app-01.sys.hdd.c.freespace + prod.server.my-app-01.sys.hdd.d.freespace + prod.server.my-app-02.sys.cpu.usage + prod.server.my-app-02.sys.mem.usage + prod.server.my-app-02.sys.hdd.c.freespace + prod.server.my-app-02.sys.hdd.d.freespace + dev.server.my-app-01.sys.cpu.usage + dev.server.my-app-01.sys.mem.usage + dev.server.my-app-01.sys.hdd.c.freespace + dev.server.my-app-01.sys.hdd.d.freespace + prod.app.sales.usage.requests_per_sec + prod.app.orders.usage.requests_per_sec + alias(carbon.agents.a.cache.queries, 'Carbon A usage') + alias(carbon.agents.b.cache.queries, 'Carbon B usage') + +patterns and matching metrics + + usage$ --> All the CPU, Memory metrics from prod and dev and also requests_per_sec metrics and also carbon usage + cpu.usage$ --> All the CPU metrics + free --> All the disk freespace metrics + ^prod --> All the prod metrics + ^dev.*.usage$ --> All the cpu, mem metrics of dev servers + ^prod.*.cpu.usage$ --> All the cpu metrics of prod servers + dev.server.my-app-01.sys.cpu.usage --> only dev.server.my-app-01.sys.cpu.usage + usage$ --> Carbon usage(Note the space before the pattern) + A usage$ --> Only carbon A usage + +Row and Column name guidelines +------------------------------ + +Row and Col names are derived from series name. If n is wrapped by "_", then that will be replaced by n-th column in graphite/influxdb/prometheus metric (seperated by delimiter). Refer below examples and screenshots to get more idea. Or use debug mode to try. (n starts from index 0) + +Sample graphite series / Influx / Prometheus Metrics + + prod.server.my-app-01.sys.cpu.usage + +Pattern & Output + + _4_ --> cpu + _4_ _5_ --> cpu usage + _4_ 2 _5_ --> cpu 2 usage + _4_ use --> cpu use + Production _4_ usage --> Production cpu usage + Production _4_ $somevar --> Production cpu value_of_somevar_variable + _series_ --> prod.server.my-app-01.sys.cpu.usage + _1_ _1_ --> server server + _4_ __5_ --> cpu _usage + +**Note** : If you prefer to change the wrapper from "_" to somthing like "~" or "__", you can do it through the option "Row / Column indentification wrapper" in options tab. + + +Thresholds +---------- + +Thresholds are numbers seperated by comma. There can be multiple thresholds. + +Example: + + 10,20 + 70,90,95 + +Time based thresholds +--------------------- + +Thresholds can be overriden, based on day and time of the browser. + +Multiple time based threshold rules can be set for any given pattern. If multiple rule matches, last rule wins. If no rule matches, default thresholds will be applicable. Example given below. + +Following notations should be followed when added time based threshold rule + +**Name** : Can be any representation in string but not more than 60 characters. + +**From** : in HHMM format examples: 0000 2400 1330 1250 + +**To** : in HHMM format examples: 0000 2400 1330 1250 + +**On** : Days seperated by comma. Order doesnt matter. Examples; "Sat,Sun", "Mon,Sun,Tue" + +**Threshold** : Same format as default threshold + +![Time based thresholds](https://raw.githubusercontent.com/yesoreyeram/yesoreyeram-boomtable-panel/master/dist/src/img/time-based-thresholds.png) + +**WARNING**: "From" and "To" fields will be compared against timestamp of last data received from server. If the last data point is not availble, then browser time will be considered. + +**TIPS** : If your threshold time rage ranges between two day, (example: 2300 of saturday to 0230 of sunday), then split the rule into two each for saturdary and sunday. + +**NOTE** : If you specify n number threshold levels in default pattern (ex: 20,30),then time based thresholds should also follow same number of levels. + +Background color based on thresholds +------------------------------------ + +Works the same way as single stat panel. Background color is a list of colors seperated by pipe symbol. Colors can be named or hexadecimal colors or rgb or rgba. Number of colors should be greater than the number of thresholds. + +Example of color patterns: + + green|orange|red + darkred|red|orange|red + green|red + green|#797979|rgba(0, 0, 255,0.5)|rgb(0, 0, 255)|red + +Example of matching patterns: + + 1: thresholds : 5 + pattern : green|red + value : 5 output : red + value : 6 output : red + value : 4 output : green + + 2: thresholds : 70,90 + pattern : green|orange|red + value : 95 output : red + value : 85 output : orange + value : 65 output : green + + 3: thresholds : 70,90 + pattern : red|orange|green + value : 95 output : green + value : 85 output : orange + value : 65 output : red + +Background color overrides +-------------------------- + +Background colors can be overriden for specific values by using the pattern option `Enable BG Color overrides for specific value?`. Override values should be specified in the `BG Color Overrides` in the following format. If multiple matches found, first one will win. + + 0->Red + 13->Red|8->Green + +Value and colors are seperated by `->`. Multiple combination of values can be given seperated by `|`. + +If background colors based on thresholds also specified along with this, this will be override the threshold based pattern. + +Value transformation based on thresholds +---------------------------------------- + +Logic is same as background color. But the value to be displayed can be altered here. Display value will be replaced with the value provided. Values are seperated by pipe. if the value is wrapped with _, then it will represent the actual value. + +`_value_` will be replaced by actual value with format and decimals + +`_value_raw_` will be replaced by actual value without format and decimals + +`_row_name_` will be replaced by row name. This will be useful when you hide the first column. + +`_col_name_` will be replaced by col name. This will be useful when you hide the table header. + +`_n_` will be replaced by nth part of the series using `_` delimiter. Same rule as row_name and col_name + +The following tokens can be also used in value transform / default value template + +`_value_min_raw_` - Min value of the series without formatting +`_value_min_` - Min value of the series with formatting +`_value_max_raw_`- Max value of the series without formatting +`_value_max_` - Max value of the series with formatting +`_value_avg_raw_`- Average value of the series without formatting +`_value_avg_` - Average value of the series with formatting +`_value_current_raw_`- Current value of the series without formatting +`_value_current_` - Current value of the series with formatting +`_value_total_raw_`- Total value of the series without formatting +`_value_total_` - Total value of the series with formatting + +Example transformation patterns : + + _value_|_value_|_value_ + GOOD|BETTER|BAD + GOOD (_value_)|_value_|_value + Time to party|Ill|RIP + _col_name_ : _value_| _col_name_ : _value_| _col_name_ : _value_ + _row_name_ : _value_| _row_name_ : _value_| _row_name_ : _value_ + _row_name_ _col_name_ : _value_| _row_name_ _col_name_ : _value_| _row_name_ _col_name_ : _value_ + + +Sample value transformation: (Assume your metrics results, 95 and it is percentage data type) + + + _value_ --> 95% + GOOD (_value_) --> GOOD (95%) + HOT (_value_ > threshold of 80%) --> HOT (95% > threshold of 80%) + Contact helpdesk --> Contact helpdesk + + +Transform value overrides +-------------------------- + +Transform values can be overriden for specific values by using the pattern option `Enable value transform overrides?`. Override values should be specified in the `Value transform Overrides` in the following format. If multiple matches found, first one will win. + + 13->Evil + 12->good|37.50->_fa-circle_|99->Oh no... + +Value and transform values are seperated by `->`. Multiple combination of values can be given seperated by `|`. + +If transform values based on thresholds also specified along with this, this will be override the threshold based pattern. + +Table Cell links +---------------- + +Table cells can be clickable and open links in new tabs. + +If the URL contains `_row_name_`, it will be replaced by row name. + +If the URL contains `_col_name_`, it will be replaced by col name. + +Note : If the row_name / col_name contains font awesome keywords like `_fa-circle_`, they will be ignored. + + +Example : `https://mysite.com/_row_name_/_col_name_/?foo=bar` + +First Column Links +------------------ + +To enable link for the first column, Specify link URL in options tab. + +First row link can have token `_row_name_` . Any other tokens will be ignored. If your row name tends to any font awesome icons or images, they will be ignored in the link's `_row_name` + +![image](https://user-images.githubusercontent.com/153843/61057603-8a0a0580-a3ed-11e9-9572-bd76edb0b685.png) + +Example : `http://google.com?q=_row_name_` will be replaced as `http://google.com?q=app_0` if the first columnn name is `app_0` + +Refer issue [#85](https://github.com/yesoreyeram/yesoreyeram-boomtable-panel/issues/85) for more details + +Filter +------ + +If your output have more rows and if you require to hide certain rows based on their output value, you can use the filter option to hide those rows. Series will be hidden if any one of the condition match. + +![Filter rows based on value](https://raw.githubusercontent.com/yesoreyeram/yesoreyeram-boomtable-panel/master/dist/src/img/filters.png) + + +Repeater / Multistat Example +----------------- + +You can use the boom table as multi stat panel. Refer the details given in issue [#40](https://github.com/yesoreyeram/yesoreyeram-boomtable-panel/issues/40) + +![Multistat panel / Repeater ](https://user-images.githubusercontent.com/153843/47859058-4fbf8180-dde5-11e8-8b27-2ef94919d1f8.png) + + +Using Font Awesome icons in row /column / metric fields +------------------------------------------------------- + +If your row name / col name / transform metrics contains strings that starts with `_fa-` and ends with `_`, then they will be replaced with corresponding font awesome icons grafana supported. Example usage given below. + +` _fa-arrow-up_ ` -> UP ARROW icon in default color + +` _fa-arrow-up,green_ ` -> UP ARROW icon in green color + +` _fa-arrow-down,red,5_ ` -> DOWN ARROW icon in red color repeated 5 times + +` _fa-apple,,5_ ` -> APPLE icon in default color repeated 5 times + +` _fa-square,red,3,gray,10_ ` -> 3 RED Square iconds and then 7 gray square icons ( only from version 1.3.0, fill icons considered ) + +` _fa-square,red,76/10,gray,10_ ` -> 8 RED Square iconds and then 2 gray square icons ( only from version 1.3.0, math expressions are considered ) + +` _fa-square,red,34/10,gray,10_ ` -> 3 RED Square iconds and then 7 gray square icons ( only from version 1.3.0, math expressions are considered ) + +In summary, the format of the font awesome token should be in the following format + +* this token should be surrounded by one or more empty spaces. +* this should start with `_fa-` and ends with `_` +* should be comma seperated +* index 0 is fa-iconname where iconname can be any valid font awesome icon +* index 1 should be color of the icon. If empty default text color / threshold text color will be considered +* index 2 should be repeat count ( can be simple one level math expression ) +* index 3 should be empty repeat color. If empty default text color / threshold text color will be considered +* index 4 should be max repeat count ( can be simple one level math expression ) +* index 2 and 4 can have valid math expression like below + * 15 ---- valid + * 23+12 ---- valid and will yield 35 + * 24-10 ---- valid and will yield 14 + * 2.4*10 ---- valid and will yield 24 + * 15/3 ---- valid and will yield 5 + * 29/4 ---- valid and will yield 7 + * 97/10 ---- valid and will yield 10 + * 23max12 ---- valid and will yield 23 + * 23min12 ---- valid and will yield 12 + * 3.36max2 ---- valid and will yield 3 + +**Example implementations of icons in metrics:** (Unlimited possibilites like heatmap) + +![Font Awesome Icons support](https://raw.githubusercontent.com/yesoreyeram/yesoreyeram-boomtable-panel/master/dist/src/img/font-awesome-examples.png) + +* Battery level indicator + * Thresholds : `10,75` + * Transform Values : `_fa-battery-empty,red_ _value_|_fa-battery-quarter,yellow_ _value_|_fa-battery-full,green_ _value_` +* Bar chart indicator + * Thresholds : `10,20,30,40,50,60,70,80,90` + * Transform Values : `_fa-square,green,1_ _fa-square,gray,9_|_fa-square,green,2_ _fa-square,gray,8_|_fa-square,green,3_ _fa-square,gray,7_|_fa-square,green,4_ _fa-square,gray,6_|_fa-square,yellow,5_ _fa-square,gray,5_|_fa-square,yellow,6_ _fa-square,gray,4_|_fa-square,yellow,7_ _fa-square,gray,3_|_fa-square,red,8_ _fa-square,gray,2_|_fa-square,red,9_ _fa-square,gray,1_|_fa-square,red,10_ _fa-square,gray,0_` +* Payment Gateway Status Indicator + * Similar threhold setup. (Note : In the example shown in the above picture each series represented by their own patterns.) + * Hide first column and headers +* Heatmap + * Similar threshold setup + * First column and headers are hidden + +Using images as transform values +-------------------------------- + +If your row name / col name / transform metrics contains strings that starts with `_img-` and ends with `_`, then they will be replaced with images. Example usage given below. + +` _img-https://example.com/happy.gif_ ` -> happy.gif with 20px width, 20px height + +` _img-https://example.com/happy.gif,30px_ ` -> happy.gif with 30px width, 20px height + +` _img-https://example.com/happy.gif,30px,40px_ ` -> happy.gif with 30px width, 40px height + +` _img-https://example.com/happy.gif,30px,40px,3_ ` -> happy.gif with 30px width, 40px height repeated 3 times + +![Image transform](https://raw.githubusercontent.com/yesoreyeram/yesoreyeram-boomtable-panel/master/dist/src/img/img-transform-example.png) + +Note : When using images from other domains, please take care of CORS policy, legal and copyright polices. + +Options +------- + +`Text alignment for first column` -> This option specify the text alignment of first column cells in the table. Can be `left`,`right` or `center`. Default is left. + +`Text alignment for table header` -> This option specify the text alignment of table headers excluding first column. Can be `left`,`right` or `center`. Default is left. + +`Text alignment for values` -> This option specify the text alignment of value cells in the table. Can be `left`,`right` or `center`. Default is left. + +`Non matching cells text` -> If no series matches for the given row and col match, the corresponding text can be specified using this option. This option can also contain font awesome and image replacement tokens. + +`Non matching cells BG Color` -> If no series matches for the given row and col match, the corresponding bg color can be specified using this option + +`Non matching cells Text Color` -> If no series matches for the given row and col match, the corresponding text color can be specified using this option + +`Font Size` -> Specify font size to be used in the table. Leave blank for default. size can be specified in css units such as `1.4rem` , `16px` etc + +Azure Monitor Usage +------------------- + +Same as other time series data sources. You need to properly format your legend to extract the row and column name. + +![Azure Monitor Usage](https://raw.githubusercontent.com/yesoreyeram/yesoreyeram-boomtable-panel/master/dist/src/img/azure-monitor-usage.png) + +Prometheus & InfluxDB Guidelines +--------------------- + +Though this plugin was initially designed to support graphite, It is also capable of handling timeseries database like Prometheus & InfluxDB. In order to achieve this, you need to **alias** your timeseries/Prometheus/Infludb metrics to proper delimited format. Following screenshot explains plugin usage with Prometheus/InfluxDB where the metrics are aliased with pipe delimiter. This can be any delimiter like space, dot, etc.# + +![Prometheus Usage](https://raw.githubusercontent.com/yesoreyeram/yesoreyeram-boomtable-panel/master/dist/src/img/prometheus-usage.png) + +![InfluxDB Usage](https://raw.githubusercontent.com/yesoreyeram/yesoreyeram-boomtable-panel/master/dist/src/img/influx-usage.png) + +Optionally, you can experiement with the new tags feature instead of **alias** . (Not for production use) + +Tag delimiter for influxdb and prometheus ( Experimental Feature ) +==================================================================== + +**WARNING** : This may have bugs. Not suitable for production. + +To use , tags from your series use `tag` as a delimiter as shown below. Then in the row / column, you can specify the tags surronded by double curly braces as shown below. Metric can be referred by {{metric_name}}}. + +Rowname, Colname, Links, Tooltips and display template can also have this tag tokens. + +# Influx DB + +![image](https://user-images.githubusercontent.com/153843/61379520-9be12200-a89f-11e9-8bcd-b55e7f86249d.png) +![image](https://user-images.githubusercontent.com/153843/61379533-a4395d00-a89f-11e9-8fd8-b62c3df0630a.png) +![image](https://user-images.githubusercontent.com/153843/61379567-b1eee280-a89f-11e9-81dc-f128b5ec17dd.png) + + +# Prometheus + +![image](https://user-images.githubusercontent.com/153843/61379602-c206c200-a89f-11e9-8dfb-462e5f28965b.png) +![image](https://user-images.githubusercontent.com/153843/61379630-cf23b100-a89f-11e9-9677-bfa05c05d7ea.png) +![image](https://user-images.githubusercontent.com/153843/61379652-db0f7300-a89f-11e9-8cef-254e8f1a8b7a.png) + diff --git a/dist/app/GrafanaUtils.js b/dist/app/GrafanaUtils.js new file mode 100644 index 0000000..9eb9494 --- /dev/null +++ b/dist/app/GrafanaUtils.js @@ -0,0 +1,67 @@ +System.register(["lodash", "app/core/utils/kbn"], function (exports_1, context_1) { + "use strict"; + var lodash_1, kbn_1, getDecimalsForValue, get_formatted_value; + var __moduleName = context_1 && context_1.id; + return { + setters: [ + function (lodash_1_1) { + lodash_1 = lodash_1_1; + }, + function (kbn_1_1) { + kbn_1 = kbn_1_1; + } + ], + execute: function () { + getDecimalsForValue = function (value, _decimals) { + if (lodash_1.default.isNumber(+_decimals)) { + var o = { + decimals: _decimals, + scaledDecimals: null, + }; + return o; + } + var delta = value / 2; + var dec = -Math.floor(Math.log(delta) / Math.LN10); + var magn = Math.pow(10, -dec), norm = delta / magn, size; + if (norm < 1.5) { + size = 1; + } + else if (norm < 3) { + size = 2; + if (norm > 2.25) { + size = 2.5; + ++dec; + } + } + else if (norm < 7.5) { + size = 5; + } + else { + size = 10; + } + size *= magn; + if (Math.floor(value) === value) { + dec = 0; + } + var result = { + decimals: Math.max(0, dec), + scaledDecimals: Math.max(0, dec) - Math.floor(Math.log(size) / Math.LN10) + 2, + }; + return result; + }; + exports_1("getDecimalsForValue", getDecimalsForValue); + get_formatted_value = function (value, decimals, format) { + if (!isNaN(value)) { + var decimalInfo = getDecimalsForValue(value, decimals); + var formatFunc = kbn_1.default.valueFormats[format]; + return formatFunc(value, decimalInfo.decimals, decimalInfo.scaledDecimals); + } + else { + return value; + } + }; + exports_1("get_formatted_value", get_formatted_value); + } + }; +}); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3JhZmFuYVV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwcC9HcmFmYW5hVXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7WUFJTSxtQkFBbUIsR0FBRyxVQUFTLEtBQUssRUFBRSxTQUFTO2dCQUNuRCxJQUFJLGdCQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUU7b0JBQzFCLElBQUksQ0FBQyxHQUFXO3dCQUNkLFFBQVEsRUFBRSxTQUFTO3dCQUNuQixjQUFjLEVBQUUsSUFBSTtxQkFDckIsQ0FBQztvQkFDRixPQUFPLENBQUMsQ0FBQztpQkFDVjtnQkFFRCxJQUFJLEtBQUssR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDO2dCQUN0QixJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBRW5ELElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQzNCLElBQUksR0FBRyxLQUFLLEdBQUcsSUFBSSxFQUNuQixJQUFJLENBQUM7Z0JBRVAsSUFBSSxJQUFJLEdBQUcsR0FBRyxFQUFFO29CQUNkLElBQUksR0FBRyxDQUFDLENBQUM7aUJBQ1Y7cUJBQU0sSUFBSSxJQUFJLEdBQUcsQ0FBQyxFQUFFO29CQUNuQixJQUFJLEdBQUcsQ0FBQyxDQUFDO29CQUVULElBQUksSUFBSSxHQUFHLElBQUksRUFBRTt3QkFDZixJQUFJLEdBQUcsR0FBRyxDQUFDO3dCQUNYLEVBQUUsR0FBRyxDQUFDO3FCQUNQO2lCQUNGO3FCQUFNLElBQUksSUFBSSxHQUFHLEdBQUcsRUFBRTtvQkFDckIsSUFBSSxHQUFHLENBQUMsQ0FBQztpQkFDVjtxQkFBTTtvQkFDTCxJQUFJLEdBQUcsRUFBRSxDQUFDO2lCQUNYO2dCQUVELElBQUksSUFBSSxJQUFJLENBQUM7Z0JBR2IsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLEtBQUssRUFBRTtvQkFDL0IsR0FBRyxHQUFHLENBQUMsQ0FBQztpQkFDVDtnQkFFRCxJQUFJLE1BQU0sR0FBVztvQkFDbkIsUUFBUSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQztvQkFDMUIsY0FBYyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztpQkFDOUUsQ0FBQztnQkFFRixPQUFPLE1BQU0sQ0FBQztZQUNoQixDQUFDLENBQUM7O1lBQ0ksbUJBQW1CLEdBQUcsVUFBUyxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU07Z0JBQzFELElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUU7b0JBQ2pCLElBQUksV0FBVyxHQUFRLG1CQUFtQixDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztvQkFDNUQsSUFBSSxVQUFVLEdBQUcsYUFBRyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDMUMsT0FBTyxVQUFVLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLGNBQWMsQ0FBQyxDQUFDO2lCQUM1RTtxQkFBTTtvQkFDTCxPQUFPLEtBQUssQ0FBQztpQkFDZDtZQUNILENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vLzxyZWZlcmVuY2UgcGF0aD1cIi4uLy4uL25vZGVfbW9kdWxlcy9ncmFmYW5hLXNkay1tb2Nrcy9hcHAvaGVhZGVycy9jb21tb24uZC50c1wiIC8+XHJcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XHJcbmltcG9ydCBrYm4gZnJvbSAnYXBwL2NvcmUvdXRpbHMva2JuJztcclxuXHJcbmNvbnN0IGdldERlY2ltYWxzRm9yVmFsdWUgPSBmdW5jdGlvbih2YWx1ZSwgX2RlY2ltYWxzKSB7XHJcbiAgaWYgKF8uaXNOdW1iZXIoK19kZWNpbWFscykpIHtcclxuICAgIGxldCBvOiBPYmplY3QgPSB7XHJcbiAgICAgIGRlY2ltYWxzOiBfZGVjaW1hbHMsXHJcbiAgICAgIHNjYWxlZERlY2ltYWxzOiBudWxsLFxyXG4gICAgfTtcclxuICAgIHJldHVybiBvO1xyXG4gIH1cclxuXHJcbiAgbGV0IGRlbHRhID0gdmFsdWUgLyAyO1xyXG4gIGxldCBkZWMgPSAtTWF0aC5mbG9vcihNYXRoLmxvZyhkZWx0YSkgLyBNYXRoLkxOMTApO1xyXG5cclxuICBsZXQgbWFnbiA9IE1hdGgucG93KDEwLCAtZGVjKSxcclxuICAgIG5vcm0gPSBkZWx0YSAvIG1hZ24sIC8vIG5vcm0gaXMgYmV0d2VlbiAxLjAgYW5kIDEwLjBcclxuICAgIHNpemU7XHJcblxyXG4gIGlmIChub3JtIDwgMS41KSB7XHJcbiAgICBzaXplID0gMTtcclxuICB9IGVsc2UgaWYgKG5vcm0gPCAzKSB7XHJcbiAgICBzaXplID0gMjtcclxuICAgIC8vIHNwZWNpYWwgY2FzZSBmb3IgMi41LCByZXF1aXJlcyBhbiBleHRyYSBkZWNpbWFsXHJcbiAgICBpZiAobm9ybSA+IDIuMjUpIHtcclxuICAgICAgc2l6ZSA9IDIuNTtcclxuICAgICAgKytkZWM7XHJcbiAgICB9XHJcbiAgfSBlbHNlIGlmIChub3JtIDwgNy41KSB7XHJcbiAgICBzaXplID0gNTtcclxuICB9IGVsc2Uge1xyXG4gICAgc2l6ZSA9IDEwO1xyXG4gIH1cclxuXHJcbiAgc2l6ZSAqPSBtYWduO1xyXG5cclxuICAvLyByZWR1Y2Ugc3RhcnRpbmcgZGVjaW1hbHMgaWYgbm90IG5lZWRlZFxyXG4gIGlmIChNYXRoLmZsb29yKHZhbHVlKSA9PT0gdmFsdWUpIHtcclxuICAgIGRlYyA9IDA7XHJcbiAgfVxyXG5cclxuICBsZXQgcmVzdWx0OiBPYmplY3QgPSB7XHJcbiAgICBkZWNpbWFsczogTWF0aC5tYXgoMCwgZGVjKSxcclxuICAgIHNjYWxlZERlY2ltYWxzOiBNYXRoLm1heCgwLCBkZWMpIC0gTWF0aC5mbG9vcihNYXRoLmxvZyhzaXplKSAvIE1hdGguTE4xMCkgKyAyLFxyXG4gIH07XHJcblxyXG4gIHJldHVybiByZXN1bHQ7XHJcbn07XHJcbmNvbnN0IGdldF9mb3JtYXR0ZWRfdmFsdWUgPSBmdW5jdGlvbih2YWx1ZSwgZGVjaW1hbHMsIGZvcm1hdCk6IHN0cmluZyB7XHJcbiAgaWYgKCFpc05hTih2YWx1ZSkpIHtcclxuICAgIGxldCBkZWNpbWFsSW5mbzogYW55ID0gZ2V0RGVjaW1hbHNGb3JWYWx1ZSh2YWx1ZSwgZGVjaW1hbHMpO1xyXG4gICAgbGV0IGZvcm1hdEZ1bmMgPSBrYm4udmFsdWVGb3JtYXRzW2Zvcm1hdF07XHJcbiAgICByZXR1cm4gZm9ybWF0RnVuYyh2YWx1ZSwgZGVjaW1hbEluZm8uZGVjaW1hbHMsIGRlY2ltYWxJbmZvLnNjYWxlZERlY2ltYWxzKTtcclxuICB9IGVsc2Uge1xyXG4gICAgcmV0dXJuIHZhbHVlO1xyXG4gIH1cclxufTtcclxuZXhwb3J0IHsgZ2V0X2Zvcm1hdHRlZF92YWx1ZSwgZ2V0RGVjaW1hbHNGb3JWYWx1ZSB9O1xyXG4iXX0= \ No newline at end of file diff --git a/dist/app/app.js b/dist/app/app.js new file mode 100644 index 0000000..bf7183b --- /dev/null +++ b/dist/app/app.js @@ -0,0 +1,74 @@ +System.register(["lodash", "./boom/index", "./config"], function (exports_1, context_1) { + "use strict"; + var lodash_1, index_1, config_1, defaultPattern, seriesToTable; + var __moduleName = context_1 && context_1.id; + return { + setters: [ + function (lodash_1_1) { + lodash_1 = lodash_1_1; + }, + function (index_1_1) { + index_1 = index_1_1; + }, + function (config_1_1) { + config_1 = config_1_1; + } + ], + execute: function () { + defaultPattern = new index_1.BoomPattern(config_1.default_pattern_options); + exports_1("defaultPattern", defaultPattern); + seriesToTable = function (inputdata, options) { + var rows_found = lodash_1.default.uniq(lodash_1.default.map(inputdata, function (d) { return d.row_name; })); + var rows_without_token = lodash_1.default.uniq(lodash_1.default.map(inputdata, function (d) { return d.row_name_raw; })); + var cols_found = lodash_1.default.uniq(lodash_1.default.map(inputdata, function (d) { return d.col_name; })); + var output = []; + lodash_1.default.each(rows_found.sort(), function (row_name) { + var cols = []; + lodash_1.default.each(cols_found.sort(), function (col_name) { + var matched_items = lodash_1.default.filter(inputdata, function (o) { + return o.row_name === row_name && o.col_name === col_name; + }); + if (!matched_items || matched_items.length === 0) { + cols.push({ + col_name: col_name, + color_bg: options.non_matching_cells_color_bg, + color_text: options.non_matching_cells_color_text, + display_value: index_1.replaceTokens(options.non_matching_cells_text), + hidden: false, + link: '-', + row_name: row_name, + tooltip: '-', + value: NaN, + }); + } + else if (matched_items && matched_items.length === 1) { + cols.push(matched_items[0]); + } + else if (matched_items && matched_items.length > 1) { + cols.push({ + col_name: col_name, + color_bg: 'darkred', + color_text: 'white', + display_value: 'Duplicate matches', + hidden: false, + link: '-', + row_name: row_name, + tooltip: '-', + value: NaN, + }); + } + }); + output.push(cols); + }); + return { + cols_found: cols_found, + output: output, + rows_found: rows_found, + rows_without_token: rows_without_token, + }; + }; + exports_1("seriesToTable", seriesToTable); + } + }; +}); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwcC9hcHAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7WUFLTSxjQUFjLEdBQUcsSUFBSSxtQkFBVyxDQUFDLGdDQUF1QixDQUFDLENBQUM7O1lBRTFELGFBQWEsR0FBRyxVQUFTLFNBQXdCLEVBQUUsT0FBd0M7Z0JBQy9GLElBQUksVUFBVSxHQUFHLGdCQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxVQUFBLENBQUMsSUFBSSxPQUFBLENBQUMsQ0FBQyxRQUFRLEVBQVYsQ0FBVSxDQUFDLENBQUMsQ0FBQztnQkFDM0QsSUFBSSxrQkFBa0IsR0FBRyxnQkFBQyxDQUFDLElBQUksQ0FBQyxnQkFBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsVUFBQSxDQUFDLElBQUksT0FBQSxDQUFDLENBQUMsWUFBWSxFQUFkLENBQWMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3ZFLElBQUksVUFBVSxHQUFHLGdCQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxVQUFBLENBQUMsSUFBSSxPQUFBLENBQUMsQ0FBQyxRQUFRLEVBQVYsQ0FBVSxDQUFDLENBQUMsQ0FBQztnQkFDM0QsSUFBSSxNQUFNLEdBQXlCLEVBQUUsQ0FBQztnQkFDdEMsZ0JBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxFQUFFLFVBQUEsUUFBUTtvQkFDaEMsSUFBSSxJQUFJLEdBQXVCLEVBQUUsQ0FBQztvQkFDbEMsZ0JBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxFQUFFLFVBQUEsUUFBUTt3QkFDaEMsSUFBSSxhQUFhLEdBQUcsZ0JBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLFVBQUEsQ0FBQzs0QkFDdkMsT0FBTyxDQUFDLENBQUMsUUFBUSxLQUFLLFFBQVEsSUFBSSxDQUFDLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQzt3QkFDNUQsQ0FBQyxDQUFDLENBQUM7d0JBQ0gsSUFBSSxDQUFDLGFBQWEsSUFBSSxhQUFhLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTs0QkFDaEQsSUFBSSxDQUFDLElBQUksQ0FBQztnQ0FDUixRQUFRLEVBQUUsUUFBUTtnQ0FDbEIsUUFBUSxFQUFFLE9BQU8sQ0FBQywyQkFBMkI7Z0NBQzdDLFVBQVUsRUFBRSxPQUFPLENBQUMsNkJBQTZCO2dDQUNqRCxhQUFhLEVBQUUscUJBQWEsQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQUM7Z0NBQzdELE1BQU0sRUFBRSxLQUFLO2dDQUNiLElBQUksRUFBRSxHQUFHO2dDQUNULFFBQVEsRUFBRSxRQUFRO2dDQUNsQixPQUFPLEVBQUUsR0FBRztnQ0FDWixLQUFLLEVBQUUsR0FBRzs2QkFDWCxDQUFDLENBQUM7eUJBQ0o7NkJBQU0sSUFBSSxhQUFhLElBQUksYUFBYSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7NEJBQ3RELElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7eUJBQzdCOzZCQUFNLElBQUksYUFBYSxJQUFJLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFOzRCQUNwRCxJQUFJLENBQUMsSUFBSSxDQUFDO2dDQUNSLFFBQVEsRUFBRSxRQUFRO2dDQUNsQixRQUFRLEVBQUUsU0FBUztnQ0FDbkIsVUFBVSxFQUFFLE9BQU87Z0NBQ25CLGFBQWEsRUFBRSxtQkFBbUI7Z0NBQ2xDLE1BQU0sRUFBRSxLQUFLO2dDQUNiLElBQUksRUFBRSxHQUFHO2dDQUNULFFBQVEsRUFBRSxRQUFRO2dDQUNsQixPQUFPLEVBQUUsR0FBRztnQ0FDWixLQUFLLEVBQUUsR0FBRzs2QkFDWCxDQUFDLENBQUM7eUJBQ0o7b0JBQ0gsQ0FBQyxDQUFDLENBQUM7b0JBQ0gsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDcEIsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsT0FBTztvQkFDTCxVQUFVLFlBQUE7b0JBQ1YsTUFBTSxRQUFBO29CQUNOLFVBQVUsWUFBQTtvQkFDVixrQkFBa0Isb0JBQUE7aUJBQ25CLENBQUM7WUFDSixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgSUJvb21TZXJpZXMsIElCb29tQ2VsbERldGFpbHMsIElCb29tVGFibGUsIElCb29tVGFibGVUcmFuc2Zvcm1hdGlvbk9wdGlvbnMgfSBmcm9tICcuL2Jvb20vaW5kZXgnO1xuaW1wb3J0IHsgQm9vbVBhdHRlcm4sIHJlcGxhY2VUb2tlbnMgfSBmcm9tICcuL2Jvb20vaW5kZXgnO1xuaW1wb3J0IHsgZGVmYXVsdF9wYXR0ZXJuX29wdGlvbnMgfSBmcm9tICcuL2NvbmZpZyc7XG5cbmNvbnN0IGRlZmF1bHRQYXR0ZXJuID0gbmV3IEJvb21QYXR0ZXJuKGRlZmF1bHRfcGF0dGVybl9vcHRpb25zKTtcblxuY29uc3Qgc2VyaWVzVG9UYWJsZSA9IGZ1bmN0aW9uKGlucHV0ZGF0YTogSUJvb21TZXJpZXNbXSwgb3B0aW9uczogSUJvb21UYWJsZVRyYW5zZm9ybWF0aW9uT3B0aW9ucyk6IElCb29tVGFibGUge1xuICBsZXQgcm93c19mb3VuZCA9IF8udW5pcShfLm1hcChpbnB1dGRhdGEsIGQgPT4gZC5yb3dfbmFtZSkpO1xuICBsZXQgcm93c193aXRob3V0X3Rva2VuID0gXy51bmlxKF8ubWFwKGlucHV0ZGF0YSwgZCA9PiBkLnJvd19uYW1lX3JhdykpO1xuICBsZXQgY29sc19mb3VuZCA9IF8udW5pcShfLm1hcChpbnB1dGRhdGEsIGQgPT4gZC5jb2xfbmFtZSkpO1xuICBsZXQgb3V0cHV0OiBJQm9vbUNlbGxEZXRhaWxzW11bXSA9IFtdO1xuICBfLmVhY2gocm93c19mb3VuZC5zb3J0KCksIHJvd19uYW1lID0+IHtcbiAgICBsZXQgY29sczogSUJvb21DZWxsRGV0YWlsc1tdID0gW107XG4gICAgXy5lYWNoKGNvbHNfZm91bmQuc29ydCgpLCBjb2xfbmFtZSA9PiB7XG4gICAgICBsZXQgbWF0Y2hlZF9pdGVtcyA9IF8uZmlsdGVyKGlucHV0ZGF0YSwgbyA9PiB7XG4gICAgICAgIHJldHVybiBvLnJvd19uYW1lID09PSByb3dfbmFtZSAmJiBvLmNvbF9uYW1lID09PSBjb2xfbmFtZTtcbiAgICAgIH0pO1xuICAgICAgaWYgKCFtYXRjaGVkX2l0ZW1zIHx8IG1hdGNoZWRfaXRlbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNvbHMucHVzaCh7XG4gICAgICAgICAgY29sX25hbWU6IGNvbF9uYW1lLFxuICAgICAgICAgIGNvbG9yX2JnOiBvcHRpb25zLm5vbl9tYXRjaGluZ19jZWxsc19jb2xvcl9iZyxcbiAgICAgICAgICBjb2xvcl90ZXh0OiBvcHRpb25zLm5vbl9tYXRjaGluZ19jZWxsc19jb2xvcl90ZXh0LFxuICAgICAgICAgIGRpc3BsYXlfdmFsdWU6IHJlcGxhY2VUb2tlbnMob3B0aW9ucy5ub25fbWF0Y2hpbmdfY2VsbHNfdGV4dCksXG4gICAgICAgICAgaGlkZGVuOiBmYWxzZSxcbiAgICAgICAgICBsaW5rOiAnLScsXG4gICAgICAgICAgcm93X25hbWU6IHJvd19uYW1lLFxuICAgICAgICAgIHRvb2x0aXA6ICctJyxcbiAgICAgICAgICB2YWx1ZTogTmFOLFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAobWF0Y2hlZF9pdGVtcyAmJiBtYXRjaGVkX2l0ZW1zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBjb2xzLnB1c2gobWF0Y2hlZF9pdGVtc1swXSk7XG4gICAgICB9IGVsc2UgaWYgKG1hdGNoZWRfaXRlbXMgJiYgbWF0Y2hlZF9pdGVtcy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGNvbHMucHVzaCh7XG4gICAgICAgICAgY29sX25hbWU6IGNvbF9uYW1lLFxuICAgICAgICAgIGNvbG9yX2JnOiAnZGFya3JlZCcsXG4gICAgICAgICAgY29sb3JfdGV4dDogJ3doaXRlJyxcbiAgICAgICAgICBkaXNwbGF5X3ZhbHVlOiAnRHVwbGljYXRlIG1hdGNoZXMnLFxuICAgICAgICAgIGhpZGRlbjogZmFsc2UsXG4gICAgICAgICAgbGluazogJy0nLFxuICAgICAgICAgIHJvd19uYW1lOiByb3dfbmFtZSxcbiAgICAgICAgICB0b29sdGlwOiAnLScsXG4gICAgICAgICAgdmFsdWU6IE5hTixcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgb3V0cHV0LnB1c2goY29scyk7XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGNvbHNfZm91bmQsXG4gICAgb3V0cHV0LFxuICAgIHJvd3NfZm91bmQsXG4gICAgcm93c193aXRob3V0X3Rva2VuLFxuICB9O1xufTtcblxuZXhwb3J0IHsgZGVmYXVsdFBhdHRlcm4sIHNlcmllc1RvVGFibGUgfTtcbiJdfQ== \ No newline at end of file diff --git a/dist/app/boom/Boom.interface.js b/dist/app/boom/Boom.interface.js new file mode 100644 index 0000000..1f2cc55 --- /dev/null +++ b/dist/app/boom/Boom.interface.js @@ -0,0 +1,10 @@ +System.register([], function (exports_1, context_1) { + "use strict"; + var __moduleName = context_1 && context_1.id; + return { + setters: [], + execute: function () { + } + }; +}); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQm9vbS5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBwL2Jvb20vQm9vbS5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImludGVyZmFjZSBJQm9vbVBhdHRlcm4ge1xyXG4gIGJnQ29sb3JzOiBzdHJpbmc7XHJcbiAgYmdDb2xvcnNfb3ZlcnJpZGVzOiBzdHJpbmc7XHJcbiAgY2xpY2thYmxlX2NlbGxzX2xpbms6IHN0cmluZztcclxuICBjb2xfbmFtZTogc3RyaW5nO1xyXG4gIGRlY2ltYWxzOiBOdW1iZXI7XHJcbiAgZGVsaW1pdGVyOiBzdHJpbmc7XHJcbiAgZW5hYmxlX2JnQ29sb3I6IEJvb2xlYW47XHJcbiAgZW5hYmxlX2JnQ29sb3Jfb3ZlcnJpZGVzOiBCb29sZWFuO1xyXG4gIGVuYWJsZV9jbGlja2FibGVfY2VsbHM6IEJvb2xlYW47XHJcbiAgZW5hYmxlX3RleHRDb2xvcjogQm9vbGVhbjtcclxuICBlbmFibGVfdGV4dENvbG9yX292ZXJyaWRlczogQm9vbGVhbjtcclxuICBlbmFibGVfdGltZV9iYXNlZF90aHJlc2hvbGRzOiBCb29sZWFuO1xyXG4gIGVuYWJsZV90cmFuc2Zvcm06IEJvb2xlYW47XHJcbiAgZW5hYmxlX3RyYW5zZm9ybV9vdmVycmlkZXM6IEJvb2xlYW47XHJcbiAgZGlzcGxheVRlbXBsYXRlOiBzdHJpbmc7XHJcbiAgZGVmYXVsdEJHQ29sb3I6IHN0cmluZztcclxuICBkZWZhdWx0VGV4dENvbG9yOiBzdHJpbmc7XHJcbiAgZmlsdGVyOiB7XHJcbiAgICB2YWx1ZV9hYm92ZTogc3RyaW5nO1xyXG4gICAgdmFsdWVfYmVsb3c6IHN0cmluZztcclxuICB9O1xyXG4gIGZvcm1hdDogc3RyaW5nO1xyXG4gIG5hbWU6IHN0cmluZztcclxuICBudWxsX2NvbG9yOiBzdHJpbmc7XHJcbiAgbnVsbF92YWx1ZTogc3RyaW5nO1xyXG4gIG51bGxfdGV4dGNvbG9yOiBzdHJpbmc7XHJcbiAgcGF0dGVybjogc3RyaW5nO1xyXG4gIHJvd19uYW1lOiBzdHJpbmc7XHJcbiAgdGV4dENvbG9yczogc3RyaW5nO1xyXG4gIHRleHRDb2xvcnNfb3ZlcnJpZGVzOiBzdHJpbmc7XHJcbiAgdGhyZXNob2xkczogc3RyaW5nO1xyXG4gIHRpbWVfYmFzZWRfdGhyZXNob2xkczogSUJvb21UaW1lQmFzZWRUaHJlc2hvbGRbXTtcclxuICB0cmFuc2Zvcm1fdmFsdWVzOiBzdHJpbmc7XHJcbiAgdHJhbnNmb3JtX3ZhbHVlc19vdmVycmlkZXM6IHN0cmluZztcclxuICB0b29sdGlwVGVtcGxhdGU6IHN0cmluZztcclxuICB2YWx1ZU5hbWU6IHN0cmluZztcclxufVxyXG5pbnRlcmZhY2UgSUJvb21TZXJpZXMge1xyXG4gIGhpZGRlbjogQm9vbGVhbjtcclxuICBjb2xfbmFtZTogc3RyaW5nO1xyXG4gIHJvd19uYW1lOiBzdHJpbmc7XHJcbiAgcm93X25hbWVfcmF3OiBzdHJpbmc7XHJcbiAgZGlzcGxheV92YWx1ZTogc3RyaW5nO1xyXG4gIGNvbG9yX2JnOiBzdHJpbmc7XHJcbiAgY29sb3JfdGV4dDogc3RyaW5nO1xyXG4gIHRvb2x0aXA6IHN0cmluZztcclxuICB2YWx1ZV9mb3JtYXR0ZWQ6IHN0cmluZztcclxuICBsaW5rOiBzdHJpbmc7XHJcbiAgX3RhZ3M6IGFueVtdO1xyXG4gIF9tZXRyaWNuYW1lOiBzdHJpbmc7XHJcbn1cclxuaW50ZXJmYWNlIElCb29tVGltZUJhc2VkVGhyZXNob2xkIHtcclxuICBlbmFibGVkRGF5czogc3RyaW5nO1xyXG4gIGZyb206IHN0cmluZztcclxuICBuYW1lOiBzdHJpbmc7XHJcbiAgdGhyZXNob2xkOiBzdHJpbmc7XHJcbiAgdG86IHN0cmluZztcclxufVxyXG5pbnRlcmZhY2UgSUJvb21UYWJsZVRyYW5zZm9ybWF0aW9uT3B0aW9ucyB7XHJcbiAgbm9uX21hdGNoaW5nX2NlbGxzX2NvbG9yX2JnOiBzdHJpbmc7XHJcbiAgbm9uX21hdGNoaW5nX2NlbGxzX2NvbG9yX3RleHQ6IHN0cmluZztcclxuICBub25fbWF0Y2hpbmdfY2VsbHNfdGV4dDogc3RyaW5nO1xyXG59XHJcbmludGVyZmFjZSBJQm9vbVJlbmRlcmluZ09wdGlvbnMge1xyXG4gIGRlZmF1bHRfdGl0bGVfZm9yX3Jvd3M6IFN0cmluZztcclxuICBoaWRlX2ZpcnN0X2NvbHVtbjogQm9vbGVhbjtcclxuICBoaWRlX2hlYWRlcnM6IEJvb2xlYW47XHJcbiAgdGV4dF9hbGlnbm1lbnRfZmlyc3Rjb2x1bW46IFN0cmluZztcclxuICB0ZXh0X2FsaWdubWVudF92YWx1ZXM6IFN0cmluZztcclxuICBmaXJzdF9jb2x1bW5fbGluazogU3RyaW5nO1xyXG59XHJcbmludGVyZmFjZSBJQm9vbUNlbGxEZXRhaWxzIHtcclxuICBoaWRkZW46IEJvb2xlYW47XHJcbiAgY29sX25hbWU6IHN0cmluZztcclxuICByb3dfbmFtZTogc3RyaW5nO1xyXG4gIGNvbG9yX2JnOiBzdHJpbmc7XHJcbiAgY29sb3JfdGV4dDogc3RyaW5nO1xyXG4gIGRpc3BsYXlfdmFsdWU6IHN0cmluZztcclxuICBsaW5rOiBzdHJpbmc7XHJcbiAgdG9vbHRpcDogc3RyaW5nO1xyXG4gIHZhbHVlOiBudW1iZXI7XHJcbn1cclxuaW50ZXJmYWNlIElCb29tVGFibGUge1xyXG4gIHJvd3Nfd2l0aG91dF90b2tlbjogc3RyaW5nW107XHJcbiAgcm93c19mb3VuZDogc3RyaW5nW107XHJcbiAgY29sc19mb3VuZDogc3RyaW5nW107XHJcbiAgb3V0cHV0OiBJQm9vbUNlbGxEZXRhaWxzW11bXTtcclxufVxyXG5pbnRlcmZhY2UgSUJvb21IVE1MIHtcclxuICBib2R5OiBzdHJpbmc7XHJcbn1cclxuZXhwb3J0IHtcclxuICBJQm9vbVRhYmxlVHJhbnNmb3JtYXRpb25PcHRpb25zLFxyXG4gIElCb29tUmVuZGVyaW5nT3B0aW9ucyxcclxuICBJQm9vbVBhdHRlcm4sXHJcbiAgSUJvb21TZXJpZXMsXHJcbiAgSUJvb21UaW1lQmFzZWRUaHJlc2hvbGQsXHJcbiAgSUJvb21IVE1MLFxyXG4gIElCb29tVGFibGUsXHJcbiAgSUJvb21DZWxsRGV0YWlscyxcclxufTtcclxuIl19 \ No newline at end of file diff --git a/dist/app/boom/BoomOutput.js b/dist/app/boom/BoomOutput.js new file mode 100644 index 0000000..ac182d5 --- /dev/null +++ b/dist/app/boom/BoomOutput.js @@ -0,0 +1,90 @@ +System.register(["lodash", "./BoomUtils"], function (exports_1, context_1) { + "use strict"; + var lodash_1, BoomUtils_1, BoomOutput; + var __moduleName = context_1 && context_1.id; + return { + setters: [ + function (lodash_1_1) { + lodash_1 = lodash_1_1; + }, + function (BoomUtils_1_1) { + BoomUtils_1 = BoomUtils_1_1; + } + ], + execute: function () { + BoomOutput = (function () { + function BoomOutput(options) { + this.default_title_for_rows = options.default_title_for_rows || ''; + this.hide_first_column = options.hide_first_column; + this.hide_headers = options.hide_headers; + this.text_alignment_firstcolumn = options.text_alignment_firstcolumn || ''; + this.text_alignment_values = options.text_alignment_values || ''; + this.first_column_link = options.first_column_link || '#'; + } + return BoomOutput; + }()); + exports_1("BoomOutput", BoomOutput); + BoomOutput.prototype.getDataAsHTML = function (data, sorting_props) { + var _this = this; + var getLinkifiedColumn = function (rowName, first_column_link, raw_rowName) { + if (first_column_link !== '#') { + first_column_link = first_column_link.replace(new RegExp('_row_name_', 'g'), BoomUtils_1.getActualNameWithoutTokens(raw_rowName).trim()); + rowName = "" + rowName + ""; + } + return rowName; + }; + var output = { + body: '', + }; + if (sorting_props && + sorting_props.col_index !== undefined && + sorting_props.col_index > -1 && + data && + data.output && + data.output.length >= sorting_props.col_index) { + var sortFunction_1 = function (a, b, sortMethod) { + if (sortMethod === 'asc') { + return a[sorting_props.col_index].value - b[sorting_props.col_index].value; + } + else { + return b[sorting_props.col_index].value - a[sorting_props.col_index].value; + } + }; + data.output = data.output + .filter(function (a) { return !isNaN(a[sorting_props.col_index].value); }) + .concat(data.output.filter(function (a) { return isNaN(a[sorting_props.col_index].value); })) + .sort(function (a, b) { return sortFunction_1(a, b, sorting_props.direction); }); + } + lodash_1.default.each(data.output, function (o) { + if (o.map(function (item) { return item.hidden.toString(); }).indexOf('false') > -1) { + output.body += ''; + if (_this.hide_first_column !== true) { + var raw_rowName = lodash_1.default.first(o.map(function (item) { return item.row_name_raw; })); + output.body += "\n \n " + getLinkifiedColumn(lodash_1.default.first(o.map(function (item) { return item.row_name; })), String(_this.first_column_link), raw_rowName) + "\n "; + } + lodash_1.default.each(o, function (item) { + var item_style = "padding:4px;background-color:" + item.color_bg + ";color:" + item.color_text + ";text-align:" + _this.text_alignment_values; + var item_display = item.link === '#' + ? item.display_value + : "" + item.display_value + ""; + var tooltip = !item.tooltip || item.tooltip === '-' + ? undefined + : " data-toggle=\"tooltip\" data-html=\"true\" data-placement=\"auto\" title=\"" + item.tooltip + "\" "; + output.body += "\n \n " + (tooltip ? "" : '') + "\n " + item_display + "\n " + (tooltip ? "" : '') + "\n \n "; + }); + output.body += ''; + } + }); + return output; + }; + BoomOutput.prototype.getDataAsDebugHTML = function (data) { + var debugdata = ""; + debugdata = lodash_1.default.map(data, function (d) { + return "\n \n " + d.seriesName + "\n " + (d.pattern.name || d.pattern.pattern || 'Default') + "\n " + d.display_value + "\n " + d.row_name + "\n " + d.col_name + "\n " + d.thresholds.join(',') + "\n " + d.color_bg + "\n " + d.color_text + "\n \n "; + }).join(""); + return debugdata; + }; + } + }; +}); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQm9vbU91dHB1dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcHAvYm9vbS9Cb29tT3V0cHV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O1lBSUE7Z0JBU0Usb0JBQVksT0FBOEI7b0JBQ3hDLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxPQUFPLENBQUMsc0JBQXNCLElBQUksRUFBRSxDQUFDO29CQUNuRSxJQUFJLENBQUMsaUJBQWlCLEdBQUcsT0FBTyxDQUFDLGlCQUFpQixDQUFDO29CQUNuRCxJQUFJLENBQUMsWUFBWSxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUM7b0JBQ3pDLElBQUksQ0FBQywwQkFBMEIsR0FBRyxPQUFPLENBQUMsMEJBQTBCLElBQUksRUFBRSxDQUFDO29CQUMzRSxJQUFJLENBQUMscUJBQXFCLEdBQUcsT0FBTyxDQUFDLHFCQUFxQixJQUFJLEVBQUUsQ0FBQztvQkFDakUsSUFBSSxDQUFDLGlCQUFpQixHQUFHLE9BQU8sQ0FBQyxpQkFBaUIsSUFBSSxHQUFHLENBQUM7Z0JBQzVELENBQUM7Z0JBQ0gsaUJBQUM7WUFBRCxDQUFDLEFBakJELElBaUJDOztZQUNELFVBQVUsQ0FBQyxTQUFTLENBQUMsYUFBYSxHQUFHLFVBQVMsSUFBZ0IsRUFBRSxhQUFhO2dCQUF4QyxpQkErRHBDO2dCQTlEQyxJQUFJLGtCQUFrQixHQUFHLFVBQVMsT0FBZSxFQUFFLGlCQUF5QixFQUFFLFdBQW1CO29CQUMvRixJQUFJLGlCQUFpQixLQUFLLEdBQUcsRUFBRTt3QkFDN0IsaUJBQWlCLEdBQUcsaUJBQWlCLENBQUMsT0FBTyxDQUFDLElBQUksTUFBTSxDQUFDLFlBQVksRUFBRSxHQUFHLENBQUMsRUFBRSxzQ0FBMEIsQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO3dCQUM3SCxPQUFPLEdBQUcsZUFBWSxpQkFBaUIsNkJBQXFCLE9BQU8sU0FBTSxDQUFDO3FCQUMzRTtv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TSxDQUM5SCxDQUFDLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FDbEIsa0JBQWEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLFdBQUssQ0FBQyxDQUFDLGFBQWEsa0dBQ3lCLENBQUMsQ0FBQyxRQUFRLGtHQUNWLENBQUMsQ0FBQyxRQUFRLG9HQUNSLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxrR0FDeEIsQ0FBQyxDQUFDLFFBQVEsb0dBQ1IsQ0FBQyxDQUFDLFVBQVUsbUNBRXZGLENBQUM7Z0JBQ1IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNaLE9BQU8sU0FBUyxDQUFDO1lBQ25CLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBJQm9vbUhUTUwsIElCb29tVGFibGUsIElCb29tUmVuZGVyaW5nT3B0aW9ucywgSUJvb21TZXJpZXMgfSBmcm9tICcuL2luZGV4JztcbmltcG9ydCB7IGdldEFjdHVhbE5hbWVXaXRob3V0VG9rZW5zIH0gZnJvbSAnLi9Cb29tVXRpbHMnO1xuXG5leHBvcnQgY2xhc3MgQm9vbU91dHB1dCB7XG4gIHB1YmxpYyBkZWZhdWx0X3RpdGxlX2Zvcl9yb3dzOiBTdHJpbmc7XG4gIHB1YmxpYyBoaWRlX2ZpcnN0X2NvbHVtbjogQm9vbGVhbjtcbiAgcHVibGljIGhpZGVfaGVhZGVyczogQm9vbGVhbjtcbiAgcHVibGljIHRleHRfYWxpZ25tZW50X2ZpcnN0Y29sdW1uOiBTdHJpbmc7XG4gIHB1YmxpYyB0ZXh0X2FsaWdubWVudF92YWx1ZXM6IFN0cmluZztcbiAgcHVibGljIGZpcnN0X2NvbHVtbl9saW5rOiBTdHJpbmc7XG4gIHB1YmxpYyBnZXREYXRhQXNIVE1MO1xuICBwdWJsaWMgZ2V0RGF0YUFzRGVidWdIVE1MO1xuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBJQm9vbVJlbmRlcmluZ09wdGlvbnMpIHtcbiAgICB0aGlzLmRlZmF1bHRfdGl0bGVfZm9yX3Jvd3MgPSBvcHRpb25zLmRlZmF1bHRfdGl0bGVfZm9yX3Jvd3MgfHwgJyc7XG4gICAgdGhpcy5oaWRlX2ZpcnN0X2NvbHVtbiA9IG9wdGlvbnMuaGlkZV9maXJzdF9jb2x1bW47XG4gICAgdGhpcy5oaWRlX2hlYWRlcnMgPSBvcHRpb25zLmhpZGVfaGVhZGVycztcbiAgICB0aGlzLnRleHRfYWxpZ25tZW50X2ZpcnN0Y29sdW1uID0gb3B0aW9ucy50ZXh0X2FsaWdubWVudF9maXJzdGNvbHVtbiB8fCAnJztcbiAgICB0aGlzLnRleHRfYWxpZ25tZW50X3ZhbHVlcyA9IG9wdGlvbnMudGV4dF9hbGlnbm1lbnRfdmFsdWVzIHx8ICcnO1xuICAgIHRoaXMuZmlyc3RfY29sdW1uX2xpbmsgPSBvcHRpb25zLmZpcnN0X2NvbHVtbl9saW5rIHx8ICcjJztcbiAgfVxufVxuQm9vbU91dHB1dC5wcm90b3R5cGUuZ2V0RGF0YUFzSFRNTCA9IGZ1bmN0aW9uKGRhdGE6IElCb29tVGFibGUsIHNvcnRpbmdfcHJvcHMpOiBJQm9vbUhUTUwge1xuICBsZXQgZ2V0TGlua2lmaWVkQ29sdW1uID0gZnVuY3Rpb24ocm93TmFtZTogc3RyaW5nLCBmaXJzdF9jb2x1bW5fbGluazogc3RyaW5nLCByYXdfcm93TmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoZmlyc3RfY29sdW1uX2xpbmsgIT09ICcjJykge1xuICAgICAgZmlyc3RfY29sdW1uX2xpbmsgPSBmaXJzdF9jb2x1bW5fbGluay5yZXBsYWNlKG5ldyBSZWdFeHAoJ19yb3dfbmFtZV8nLCAnZycpLCBnZXRBY3R1YWxOYW1lV2l0aG91dFRva2VucyhyYXdfcm93TmFtZSkudHJpbSgpKTtcbiAgICAgIHJvd05hbWUgPSBgPGEgaHJlZj1cIiR7Zmlyc3RfY29sdW1uX2xpbmt9XCIgdGFyZ2V0PVwiX2JsYW5rXCI+JHtyb3dOYW1lfTwvYT5gO1xuICAgIH1cbiAgICByZXR1cm4gcm93TmFtZTtcbiAgfTtcbiAgbGV0IG91dHB1dDogSUJvb21IVE1MID0ge1xuICAgIGJvZHk6ICcnLFxuICB9O1xuICBpZiAoXG4gICAgc29ydGluZ19wcm9wcyAmJlxuICAgIHNvcnRpbmdfcHJvcHMuY29sX2luZGV4ICE9PSB1bmRlZmluZWQgJiZcbiAgICBzb3J0aW5nX3Byb3BzLmNvbF9pbmRleCA+IC0xICYmXG4gICAgZGF0YSAmJlxuICAgIGRhdGEub3V0cHV0ICYmXG4gICAgZGF0YS5vdXRwdXQubGVuZ3RoID49IHNvcnRpbmdfcHJvcHMuY29sX2luZGV4XG4gICkge1xuICAgIGxldCBzb3J0RnVuY3Rpb24gPSAoYSwgYiwgc29ydE1ldGhvZCkgPT4ge1xuICAgICAgaWYgKHNvcnRNZXRob2QgPT09ICdhc2MnKSB7XG4gICAgICAgIHJldHVybiBhW3NvcnRpbmdfcHJvcHMuY29sX2luZGV4XS52YWx1ZSAtIGJbc29ydGluZ19wcm9wcy5jb2xfaW5kZXhdLnZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGJbc29ydGluZ19wcm9wcy5jb2xfaW5kZXhdLnZhbHVlIC0gYVtzb3J0aW5nX3Byb3BzLmNvbF9pbmRleF0udmFsdWU7XG4gICAgICB9XG4gICAgfTtcbiAgICBkYXRhLm91dHB1dCA9IGRhdGEub3V0cHV0XG4gICAgICAuZmlsdGVyKGEgPT4gIWlzTmFOKGFbc29ydGluZ19wcm9wcy5jb2xfaW5kZXhdLnZhbHVlKSlcbiAgICAgIC5jb25jYXQoZGF0YS5vdXRwdXQuZmlsdGVyKGEgPT4gaXNOYU4oYVtzb3J0aW5nX3Byb3BzLmNvbF9pbmRleF0udmFsdWUpKSlcbiAgICAgIC5zb3J0KChhLCBiKSA9PiBzb3J0RnVuY3Rpb24oYSwgYiwgc29ydGluZ19wcm9wcy5kaXJlY3Rpb24pKTtcbiAgfVxuICBfLmVhY2goZGF0YS5vdXRwdXQsIG8gPT4ge1xuICAgIGlmIChvLm1hcChpdGVtID0+IGl0ZW0uaGlkZGVuLnRvU3RyaW5nKCkpLmluZGV4T2YoJ2ZhbHNlJykgPiAtMSkge1xuICAgICAgb3V0cHV0LmJvZHkgKz0gJzx0cj4nO1xuICAgICAgaWYgKHRoaXMuaGlkZV9maXJzdF9jb2x1bW4gIT09IHRydWUpIHtcbiAgICAgICAgbGV0IHJhd19yb3dOYW1lID0gXy5maXJzdChvLm1hcChpdGVtID0+IGl0ZW0ucm93X25hbWVfcmF3KSk7XG4gICAgICAgIG91dHB1dC5ib2R5ICs9IGBcbiAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPVwicGFkZGluZzo0cHg7dGV4dC1hbGlnbjoke3RoaXMudGV4dF9hbGlnbm1lbnRfZmlyc3Rjb2x1bW59XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAke2dldExpbmtpZmllZENvbHVtbihfLmZpcnN0KG8ubWFwKGl0ZW0gPT4gaXRlbS5yb3dfbmFtZSkpLCBTdHJpbmcodGhpcy5maXJzdF9jb2x1bW5fbGluayksIHJhd19yb3dOYW1lKX1cbiAgICAgICAgICAgICAgICAgICAgPC90ZD5gO1xuICAgICAgfVxuICAgICAgXy5lYWNoKG8sIGl0ZW0gPT4ge1xuICAgICAgICBsZXQgaXRlbV9zdHlsZSA9IGBwYWRkaW5nOjRweDtiYWNrZ3JvdW5kLWNvbG9yOiR7aXRlbS5jb2xvcl9iZ307Y29sb3I6JHtpdGVtLmNvbG9yX3RleHR9O3RleHQtYWxpZ246JHt0aGlzLnRleHRfYWxpZ25tZW50X3ZhbHVlc31gO1xuICAgICAgICBsZXQgaXRlbV9kaXNwbGF5ID1cbiAgICAgICAgICBpdGVtLmxpbmsgPT09ICcjJ1xuICAgICAgICAgICAgPyBpdGVtLmRpc3BsYXlfdmFsdWVcbiAgICAgICAgICAgIDogYDxhIGhyZWY9XCIke2l0ZW0ubGlua31cIiB0YXJnZXQ9XCJfYmxhbmtcIiBzdHlsZT1cImNvbG9yOiR7aXRlbS5jb2xvcl90ZXh0fVwiPiR7aXRlbS5kaXNwbGF5X3ZhbHVlfTwvYT5gO1xuICAgICAgICBsZXQgdG9vbHRpcCA9XG4gICAgICAgICAgIWl0ZW0udG9vbHRpcCB8fCBpdGVtLnRvb2x0aXAgPT09ICctJ1xuICAgICAgICAgICAgPyB1bmRlZmluZWRcbiAgICAgICAgICAgIDogYCBkYXRhLXRvZ2dsZT1cInRvb2x0aXBcIiBkYXRhLWh0bWw9XCJ0cnVlXCIgZGF0YS1wbGFjZW1lbnQ9XCJhdXRvXCIgdGl0bGU9XCIke2l0ZW0udG9vbHRpcH1cIiBgO1xuICAgICAgICBvdXRwdXQuYm9keSArPSBgXG4gICAgICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT1cIiR7aXRlbV9zdHlsZX1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICR7dG9vbHRpcCA/IGA8c3BhbiAke3Rvb2x0aXB9PmAgOiAnJ31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2l0ZW1fZGlzcGxheX1cbiAgICAgICAgICAgICAgICAgICAgICAgICR7dG9vbHRpcCA/IGA8L3NwYW4+YCA6ICcnfVxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgIGA7XG4gICAgICB9KTtcbiAgICAgIG91dHB1dC5ib2R5ICs9ICc8L3RyPic7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIG91dHB1dDtcbn07XG5Cb29tT3V0cHV0LnByb3RvdHlwZS5nZXREYXRhQXNEZWJ1Z0hUTUwgPSBmdW5jdGlvbihkYXRhOiBJQm9vbVNlcmllc1tdKTogc3RyaW5nIHtcbiAgbGV0IGRlYnVnZGF0YSA9IGBgO1xuICBkZWJ1Z2RhdGEgPSBfLm1hcChkYXRhLCBkID0+IHtcbiAgICByZXR1cm4gYFxuICAgICAgICA8dHI+XG4gICAgICAgICAgICA8dGQgc3R5bGU9XCJwYWRkaW5nOjRweDt0ZXh0LWFsaWduOmxlZnQ7d2lkdGg6MzAlOyB0aXRsZT1cIlNlcmllcyBOYW1lXCIgPiR7ZC5zZXJpZXNOYW1lfTwvdGQ+XG4gICAgICAgICAgICA8dGQgc3R5bGU9XCJwYWRkaW5nOjRweDt0ZXh0LWFsaWduOmxlZnQ7d2lkdGg6MTAlOyB0aXRsZT1cIk1hdGNoaW5nIFBhdHRlcm4gTmFtZVwiID4ke2QucGF0dGVybi5uYW1lIHx8IGQucGF0dGVybi5wYXR0ZXJuIHx8ICdEZWZhdWx0J308L3RkPlxuICAgICAgICAgICAgPHRkIHN0eWxlPVwicGFkZGluZzo0cHg7dGV4dC1hbGlnbjpsZWZ0O3dpZHRoOjEwJTsgdGl0bGU9XCJWYWx1ZSA6ICR7U3RyaW5nKGQudmFsdWVfZm9ybWF0dGVkIHx8ICdudWxsJyl9IC8gUmF3IDogJHtTdHJpbmcoXG4gICAgICBkLnZhbHVlIHx8ICdudWxsJ1xuICAgICl9IC8gU3RhdCA6ICR7ZC5wYXR0ZXJuLnZhbHVlTmFtZX1cIj4ke2QuZGlzcGxheV92YWx1ZX08L3RkPlxuICAgICAgICAgICAgPHRkIHN0eWxlPVwicGFkZGluZzo0cHg7dGV4dC1hbGlnbjpsZWZ0O3dpZHRoOjEwJTsgdGl0bGU9XCJSb3cgbmFtZVwiID4ke2Qucm93X25hbWV9PC90ZD5cbiAgICAgICAgICAgIDx0ZCBzdHlsZT1cInBhZGRpbmc6NHB4O3RleHQtYWxpZ246bGVmdDt3aWR0aDoxMCU7IHRpdGxlPVwiQ29sIG5hbWVcIiA+JHtkLmNvbF9uYW1lfTwvdGQ+XG4gICAgICAgICAgICA8dGQgc3R5bGU9XCJwYWRkaW5nOjRweDt0ZXh0LWFsaWduOmxlZnQ7d2lkdGg6MTAlOyB0aXRsZT1cIlRocmVzaG9sZHNcIiA+JHtkLnRocmVzaG9sZHMuam9pbignLCcpfTwvdGQ+XG4gICAgICAgICAgICA8dGQgc3R5bGU9XCJwYWRkaW5nOjRweDt0ZXh0LWFsaWduOmxlZnQ7d2lkdGg6MTAlOyB0aXRsZT1cIkJHIENvbG9yXCIgPiR7ZC5jb2xvcl9iZ308L3RkPlxuICAgICAgICAgICAgPHRkIHN0eWxlPVwicGFkZGluZzo0cHg7dGV4dC1hbGlnbjpsZWZ0O3dpZHRoOjEwJTsgdGl0bGU9XCJUZXh0IENvbG9yXCIgPiR7ZC5jb2xvcl90ZXh0fTwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICAgIGA7XG4gIH0pLmpvaW4oYGApO1xuICByZXR1cm4gZGVidWdkYXRhO1xufTtcbiJdfQ== \ No newline at end of file diff --git a/dist/app/boom/BoomPattern.js b/dist/app/boom/BoomPattern.js new file mode 100644 index 0000000..7571e6f --- /dev/null +++ b/dist/app/boom/BoomPattern.js @@ -0,0 +1,101 @@ +System.register(["./index"], function (exports_1, context_1) { + "use strict"; + var index_1, BoomPattern; + var __moduleName = context_1 && context_1.id; + return { + setters: [ + function (index_1_1) { + index_1 = index_1_1; + } + ], + execute: function () { + BoomPattern = (function () { + function BoomPattern(options) { + this.row_col_wrapper = '_'; + if (options && options.row_col_wrapper) { + this.row_col_wrapper = options.row_col_wrapper; + } + this.bgColors = options && options.bgColors ? options.bgColors : 'green|orange|red'; + this.bgColors_overrides = options && options.bgColors_overrides ? options.bgColors_overrides : '0->green|2->red|1->yellow'; + this.textColors = options && options.textColors ? options.textColors : 'red|orange|green'; + this.textColors_overrides = options && options.textColors_overrides ? options.textColors_overrides : '0->red|2->green|1->yellow'; + this.clickable_cells_link = options && options.clickable_cells_link ? options.clickable_cells_link : ''; + this.col_name = options && options.col_name ? options.col_name : this.row_col_wrapper + '1' + this.row_col_wrapper; + this.decimals = options && options.decimals ? options.decimals : 2; + this.delimiter = options && options.delimiter ? options.delimiter : '.'; + this.displayTemplate = options && options.displayTemplate ? options.displayTemplate : '_value_'; + this.defaultBGColor = options && options.defaultBGColor ? options.defaultBGColor : ''; + this.defaultTextColor = options && options.defaultTextColor ? options.defaultTextColor : ''; + this.enable_bgColor = false; + this.enable_bgColor_overrides = false; + this.enable_textColor = false; + this.enable_textColor_overrides = false; + this.enable_clickable_cells = false; + this.enable_time_based_thresholds = false; + this.enable_transform = false; + this.enable_transform_overrides = false; + this.filter = { + value_above: '', + value_below: '', + }; + this.format = options && options.format ? options.format : 'none'; + this.name = options && options.name ? options.name : 'New Pattern'; + this.null_color = options && options.null_color ? options.null_color : 'darkred'; + this.null_textcolor = options && options.null_Textcolor ? options.null_Textcolor : 'black'; + this.null_value = options && options.null_value ? options.null_value : 'No data'; + this.pattern = options && options.pattern ? options.pattern : '^server.*cpu$'; + this.row_name = options && options.row_name ? options.row_name : this.row_col_wrapper + '0' + this.row_col_wrapper; + this.thresholds = options && options.thresholds ? options.thresholds : '70,90'; + this.time_based_thresholds = []; + this.transform_values = options && options.transform_values ? options.transform_values : '_value_|_value_|_value_'; + this.transform_values_overrides = options && options.transform_values_overrides ? options.transform_values_overrides : '0->down|1->up'; + this.tooltipTemplate = + options && options.tooltipTemplate + ? options.tooltipTemplate + : 'Series : _series_
Row Name : _row_name_
Col Name : _col_name_
Value : _value_'; + this.valueName = options && options.valueName ? options.valueName : 'avg'; + } + return BoomPattern; + }()); + exports_1("BoomPattern", BoomPattern); + BoomPattern.prototype.inverseBGColors = function () { + this.bgColors = this.bgColors + ? this.bgColors + .split('|') + .reverse() + .join('|') + : ''; + }; + BoomPattern.prototype.inverseTextColors = function () { + this.textColors = this.textColors + ? this.textColors + .split('|') + .reverse() + .join('|') + : ''; + }; + BoomPattern.prototype.inverseTransformValues = function () { + this.transform_values = this.transform_values + ? this.transform_values + .split('|') + .reverse() + .join('|') + : ''; + }; + BoomPattern.prototype.add_time_based_thresholds = function () { + var new_time_based_threshold = new index_1.BoomTimeBasedThreshold(); + this.time_based_thresholds = this.time_based_thresholds || []; + this.time_based_thresholds.push(new_time_based_threshold); + }; + BoomPattern.prototype.remove_time_based_thresholds = function (index) { + if (this.time_based_thresholds.length > 0) { + this.time_based_thresholds.splice(Number(index), 1); + } + }; + BoomPattern.prototype.setUnitFormat = function (format) { + this.format = format && format.value ? format.value : 'none'; + }; + } + }; +}); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQm9vbVBhdHRlcm4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBwL2Jvb20vQm9vbVBhdHRlcm4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7WUFFQTtnQkE0Q0UscUJBQVksT0FBWTtvQkEzQ2hCLG9CQUFlLEdBQUcsR0FBRyxDQUFDO29CQTRDNUIsSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLGVBQWUsRUFBRTt3QkFDdEMsSUFBSSxDQUFDLGVBQWUsR0FBRyxPQUFPLENBQUMsZUFBZSxDQUFDO3FCQUNoRDtvQkFDRCxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQztvQkFDcEYsSUFBSSxDQUFDLGtCQUFrQixHQUFHLE9BQU8sSUFBSSxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsMkJBQTJCLENBQUM7b0JBQzNILElBQUksQ0FBQyxVQUFVLEdBQUcsT0FBTyxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDO29CQUMxRixJQUFJLENBQUMsb0JBQW9CLEdBQUcsT0FBTyxJQUFJLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQywyQkFBMkIsQ0FBQztvQkFDakksSUFBSSxDQUFDLG9CQUFvQixHQUFHLE9BQU8sSUFBSSxPQUFPLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUN4RyxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sSUFBSSxPQUFPLENBQUMsUUFBUSxD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QUMsTUFBTSxHQUFHLE1BQU0sSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7WUFDL0QsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSUJvb21QYXR0ZXJuLCBJQm9vbVRpbWVCYXNlZFRocmVzaG9sZCwgQm9vbVRpbWVCYXNlZFRocmVzaG9sZCB9IGZyb20gJy4vaW5kZXgnO1xuXG5jbGFzcyBCb29tUGF0dGVybiBpbXBsZW1lbnRzIElCb29tUGF0dGVybiB7XG4gIHByaXZhdGUgcm93X2NvbF93cmFwcGVyID0gJ18nO1xuICBwdWJsaWMgYmdDb2xvcnM6IHN0cmluZztcbiAgcHVibGljIGJnQ29sb3JzX292ZXJyaWRlczogc3RyaW5nO1xuICBwdWJsaWMgY2xpY2thYmxlX2NlbGxzX2xpbms6IHN0cmluZztcbiAgcHVibGljIGNvbF9uYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyBkaXNwbGF5VGVtcGxhdGU6IHN0cmluZztcbiAgcHVibGljIGRlZmF1bHRCR0NvbG9yOiBzdHJpbmc7XG4gIHB1YmxpYyBkZWZhdWx0VGV4dENvbG9yOiBzdHJpbmc7XG4gIHB1YmxpYyBkZWNpbWFsczogTnVtYmVyO1xuICBwdWJsaWMgZGVsaW1pdGVyOiBzdHJpbmc7XG4gIHB1YmxpYyBlbmFibGVfYmdDb2xvcjogQm9vbGVhbjtcbiAgcHVibGljIGVuYWJsZV9iZ0NvbG9yX292ZXJyaWRlczogQm9vbGVhbjtcbiAgcHVibGljIGVuYWJsZV9jbGlja2FibGVfY2VsbHM6IEJvb2xlYW47XG4gIHB1YmxpYyBlbmFibGVfdGV4dENvbG9yOiBCb29sZWFuO1xuICBwdWJsaWMgZW5hYmxlX3RleHRDb2xvcl9vdmVycmlkZXM6IEJvb2xlYW47XG4gIHB1YmxpYyBlbmFibGVfdGltZV9iYXNlZF90aHJlc2hvbGRzOiBCb29sZWFuO1xuICBwdWJsaWMgZW5hYmxlX3RyYW5zZm9ybTogQm9vbGVhbjtcbiAgcHVibGljIGVuYWJsZV90cmFuc2Zvcm1fb3ZlcnJpZGVzOiBCb29sZWFuO1xuICBwdWJsaWMgZmlsdGVyOiB7XG4gICAgdmFsdWVfYWJvdmU6IHN0cmluZztcbiAgICB2YWx1ZV9iZWxvdzogc3RyaW5nO1xuICB9O1xuICBwdWJsaWMgZm9ybWF0OiBzdHJpbmc7XG4gIHB1YmxpYyBuYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyBudWxsX2NvbG9yOiBzdHJpbmc7XG4gIHB1YmxpYyBudWxsX3ZhbHVlOiBzdHJpbmc7XG4gIHB1YmxpYyBudWxsX3RleHRjb2xvcjogc3RyaW5nO1xuICBwdWJsaWMgcGF0dGVybjogc3RyaW5nO1xuICBwdWJsaWMgcm93X25hbWU6IHN0cmluZztcbiAgcHVibGljIHRleHRDb2xvcnM6IHN0cmluZztcbiAgcHVibGljIHRleHRDb2xvcnNfb3ZlcnJpZGVzOiBzdHJpbmc7XG4gIHB1YmxpYyB0aHJlc2hvbGRzOiBzdHJpbmc7XG4gIHB1YmxpYyB0aW1lX2Jhc2VkX3RocmVzaG9sZHM6IElCb29tVGltZUJhc2VkVGhyZXNob2xkW107XG4gIHB1YmxpYyB0cmFuc2Zvcm1fdmFsdWVzOiBzdHJpbmc7XG4gIHB1YmxpYyB0cmFuc2Zvcm1fdmFsdWVzX292ZXJyaWRlczogc3RyaW5nO1xuICBwdWJsaWMgdG9vbHRpcFRlbXBsYXRlOiBzdHJpbmc7XG4gIHB1YmxpYyB2YWx1ZU5hbWU6IHN0cmluZztcbiAgcHVibGljIGludmVyc2VCR0NvbG9ycztcbiAgcHVibGljIGludmVyc2VUZXh0Q29sb3JzO1xuICBwdWJsaWMgaW52ZXJzZVRyYW5zZm9ybVZhbHVlcztcbiAgcHVibGljIGFkZF90aW1lX2Jhc2VkX3RocmVzaG9sZHM7XG4gIHB1YmxpYyByZW1vdmVfdGltZV9iYXNlZF90aHJlc2hvbGRzO1xuICBwdWJsaWMgc2V0VW5pdEZvcm1hdDtcbiAgY29uc3RydWN0b3Iob3B0aW9uczogYW55KSB7XG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5yb3dfY29sX3dyYXBwZXIpIHtcbiAgICAgIHRoaXMucm93X2NvbF93cmFwcGVyID0gb3B0aW9ucy5yb3dfY29sX3dyYXBwZXI7XG4gICAgfVxuICAgIHRoaXMuYmdDb2xvcnMgPSBvcHRpb25zICYmIG9wdGlvbnMuYmdDb2xvcnMgPyBvcHRpb25zLmJnQ29sb3JzIDogJ2dyZWVufG9yYW5nZXxyZWQnO1xuICAgIHRoaXMuYmdDb2xvcnNfb3ZlcnJpZGVzID0gb3B0aW9ucyAmJiBvcHRpb25zLmJnQ29sb3JzX292ZXJyaWRlcyA/IG9wdGlvbnMuYmdDb2xvcnNfb3ZlcnJpZGVzIDogJzAtPmdyZWVufDItPnJlZHwxLT55ZWxsb3cnO1xuICAgIHRoaXMudGV4dENvbG9ycyA9IG9wdGlvbnMgJiYgb3B0aW9ucy50ZXh0Q29sb3JzID8gb3B0aW9ucy50ZXh0Q29sb3JzIDogJ3JlZHxvcmFuZ2V8Z3JlZW4nO1xuICAgIHRoaXMudGV4dENvbG9yc19vdmVycmlkZXMgPSBvcHRpb25zICYmIG9wdGlvbnMudGV4dENvbG9yc19vdmVycmlkZXMgPyBvcHRpb25zLnRleHRDb2xvcnNfb3ZlcnJpZGVzIDogJzAtPnJlZHwyLT5ncmVlbnwxLT55ZWxsb3cnO1xuICAgIHRoaXMuY2xpY2thYmxlX2NlbGxzX2xpbmsgPSBvcHRpb25zICYmIG9wdGlvbnMuY2xpY2thYmxlX2NlbGxzX2xpbmsgPyBvcHRpb25zLmNsaWNrYWJsZV9jZWxsc19saW5rIDogJyc7XG4gICAgdGhpcy5jb2xfbmFtZSA9IG9wdGlvbnMgJiYgb3B0aW9ucy5jb2xfbmFtZSA/IG9wdGlvbnMuY29sX25hbWUgOiB0aGlzLnJvd19jb2xfd3JhcHBlciArICcxJyArIHRoaXMucm93X2NvbF93cmFwcGVyO1xuICAgIHRoaXMuZGVjaW1hbHMgPSBvcHRpb25zICYmIG9wdGlvbnMuZGVjaW1hbHMgPyBvcHRpb25zLmRlY2ltYWxzIDogMjtcbiAgICB0aGlzLmRlbGltaXRlciA9IG9wdGlvbnMgJiYgb3B0aW9ucy5kZWxpbWl0ZXIgPyBvcHRpb25zLmRlbGltaXRlciA6ICcuJztcbiAgICB0aGlzLmRpc3BsYXlUZW1wbGF0ZSA9IG9wdGlvbnMgJiYgb3B0aW9ucy5kaXNwbGF5VGVtcGxhdGUgPyBvcHRpb25zLmRpc3BsYXlUZW1wbGF0ZSA6ICdfdmFsdWVfJztcbiAgICB0aGlzLmRlZmF1bHRCR0NvbG9yID0gb3B0aW9ucyAmJiBvcHRpb25zLmRlZmF1bHRCR0NvbG9yID8gb3B0aW9ucy5kZWZhdWx0QkdDb2xvciA6ICcnO1xuICAgIHRoaXMuZGVmYXVsdFRleHRDb2xvciA9IG9wdGlvbnMgJiYgb3B0aW9ucy5kZWZhdWx0VGV4dENvbG9yID8gb3B0aW9ucy5kZWZhdWx0VGV4dENvbG9yIDogJyc7XG4gICAgdGhpcy5lbmFibGVfYmdDb2xvciA9IGZhbHNlO1xuICAgIHRoaXMuZW5hYmxlX2JnQ29sb3Jfb3ZlcnJpZGVzID0gZmFsc2U7XG4gICAgdGhpcy5lbmFibGVfdGV4dENvbG9yID0gZmFsc2U7XG4gICAgdGhpcy5lbmFibGVfdGV4dENvbG9yX292ZXJyaWRlcyA9IGZhbHNlO1xuICAgIHRoaXMuZW5hYmxlX2NsaWNrYWJsZV9jZWxscyA9IGZhbHNlO1xuICAgIHRoaXMuZW5hYmxlX3RpbWVfYmFzZWRfdGhyZXNob2xkcyA9IGZhbHNlO1xuICAgIHRoaXMuZW5hYmxlX3RyYW5zZm9ybSA9IGZhbHNlO1xuICAgIHRoaXMuZW5hYmxlX3RyYW5zZm9ybV9vdmVycmlkZXMgPSBmYWxzZTtcbiAgICB0aGlzLmZpbHRlciA9IHtcbiAgICAgIHZhbHVlX2Fib3ZlOiAnJyxcbiAgICAgIHZhbHVlX2JlbG93OiAnJyxcbiAgICB9O1xuICAgIHRoaXMuZm9ybWF0ID0gb3B0aW9ucyAmJiBvcHRpb25zLmZvcm1hdCA/IG9wdGlvbnMuZm9ybWF0IDogJ25vbmUnO1xuICAgIHRoaXMubmFtZSA9IG9wdGlvbnMgJiYgb3B0aW9ucy5uYW1lID8gb3B0aW9ucy5uYW1lIDogJ05ldyBQYXR0ZXJuJztcbiAgICB0aGlzLm51bGxfY29sb3IgPSBvcHRpb25zICYmIG9wdGlvbnMubnVsbF9jb2xvciA/IG9wdGlvbnMubnVsbF9jb2xvciA6ICdkYXJrcmVkJztcbiAgICB0aGlzLm51bGxfdGV4dGNvbG9yID0gb3B0aW9ucyAmJiBvcHRpb25zLm51bGxfVGV4dGNvbG9yID8gb3B0aW9ucy5udWxsX1RleHRjb2xvciA6ICdibGFjayc7XG4gICAgdGhpcy5udWxsX3ZhbHVlID0gb3B0aW9ucyAmJiBvcHRpb25zLm51bGxfdmFsdWUgPyBvcHRpb25zLm51bGxfdmFsdWUgOiAnTm8gZGF0YSc7XG4gICAgdGhpcy5wYXR0ZXJuID0gb3B0aW9ucyAmJiBvcHRpb25zLnBhdHRlcm4gPyBvcHRpb25zLnBhdHRlcm4gOiAnXnNlcnZlci4qY3B1JCc7XG4gICAgdGhpcy5yb3dfbmFtZSA9IG9wdGlvbnMgJiYgb3B0aW9ucy5yb3dfbmFtZSA/IG9wdGlvbnMucm93X25hbWUgOiB0aGlzLnJvd19jb2xfd3JhcHBlciArICcwJyArIHRoaXMucm93X2NvbF93cmFwcGVyO1xuICAgIHRoaXMudGhyZXNob2xkcyA9IG9wdGlvbnMgJiYgb3B0aW9ucy50aHJlc2hvbGRzID8gb3B0aW9ucy50aHJlc2hvbGRzIDogJzcwLDkwJztcbiAgICB0aGlzLnRpbWVfYmFzZWRfdGhyZXNob2xkcyA9IFtdO1xuICAgIHRoaXMudHJhbnNmb3JtX3ZhbHVlcyA9IG9wdGlvbnMgJiYgb3B0aW9ucy50cmFuc2Zvcm1fdmFsdWVzID8gb3B0aW9ucy50cmFuc2Zvcm1fdmFsdWVzIDogJ192YWx1ZV98X3ZhbHVlX3xfdmFsdWVfJztcbiAgICB0aGlzLnRyYW5zZm9ybV92YWx1ZXNfb3ZlcnJpZGVzID0gb3B0aW9ucyAmJiBvcHRpb25zLnRyYW5zZm9ybV92YWx1ZXNfb3ZlcnJpZGVzID8gb3B0aW9ucy50cmFuc2Zvcm1fdmFsdWVzX292ZXJyaWRlcyA6ICcwLT5kb3dufDEtPnVwJztcbiAgICB0aGlzLnRvb2x0aXBUZW1wbGF0ZSA9XG4gICAgICBvcHRpb25zICYmIG9wdGlvbnMudG9vbHRpcFRlbXBsYXRlXG4gICAgICAgID8gb3B0aW9ucy50b29sdGlwVGVtcGxhdGVcbiAgICAgICAgOiAnU2VyaWVzIDogX3Nlcmllc18gPGJyLz5Sb3cgTmFtZSA6IF9yb3dfbmFtZV8gPGJyLz5Db2wgTmFtZSA6IF9jb2xfbmFtZV8gPGJyLz5WYWx1ZSA6IF92YWx1ZV8nO1xuICAgIHRoaXMudmFsdWVOYW1lID0gb3B0aW9ucyAmJiBvcHRpb25zLnZhbHVlTmFtZSA/IG9wdGlvbnMudmFsdWVOYW1lIDogJ2F2Zyc7XG4gIH1cbn1cblxuQm9vbVBhdHRlcm4ucHJvdG90eXBlLmludmVyc2VCR0NvbG9ycyA9IGZ1bmN0aW9uKCk6IHZvaWQge1xuICB0aGlzLmJnQ29sb3JzID0gdGhpcy5iZ0NvbG9yc1xuICAgID8gdGhpcy5iZ0NvbG9yc1xuICAgICAgICAuc3BsaXQoJ3wnKVxuICAgICAgICAucmV2ZXJzZSgpXG4gICAgICAgIC5qb2luKCd8JylcbiAgICA6ICcnO1xufTtcblxuQm9vbVBhdHRlcm4ucHJvdG90eXBlLmludmVyc2VUZXh0Q29sb3JzID0gZnVuY3Rpb24oKTogdm9pZCB7XG4gIHRoaXMudGV4dENvbG9ycyA9IHRoaXMudGV4dENvbG9yc1xuICAgID8gdGhpcy50ZXh0Q29sb3JzXG4gICAgICAgIC5zcGxpdCgnfCcpXG4gICAgICAgIC5yZXZlcnNlKClcbiAgICAgICAgLmpvaW4oJ3wnKVxuICAgIDogJyc7XG59O1xuXG5Cb29tUGF0dGVybi5wcm90b3R5cGUuaW52ZXJzZVRyYW5zZm9ybVZhbHVlcyA9IGZ1bmN0aW9uKCk6IHZvaWQge1xuICB0aGlzLnRyYW5zZm9ybV92YWx1ZXMgPSB0aGlzLnRyYW5zZm9ybV92YWx1ZXNcbiAgICA/IHRoaXMudHJhbnNmb3JtX3ZhbHVlc1xuICAgICAgICAuc3BsaXQoJ3wnKVxuICAgICAgICAucmV2ZXJzZSgpXG4gICAgICAgIC5qb2luKCd8JylcbiAgICA6ICcnO1xufTtcblxuQm9vbVBhdHRlcm4ucHJvdG90eXBlLmFkZF90aW1lX2Jhc2VkX3RocmVzaG9sZHMgPSBmdW5jdGlvbigpOiB2b2lkIHtcbiAgbGV0IG5ld190aW1lX2Jhc2VkX3RocmVzaG9sZDogSUJvb21UaW1lQmFzZWRUaHJlc2hvbGQgPSBuZXcgQm9vbVRpbWVCYXNlZFRocmVzaG9sZCgpO1xuICB0aGlzLnRpbWVfYmFzZWRfdGhyZXNob2xkcyA9IHRoaXMudGltZV9iYXNlZF90aHJlc2hvbGRzIHx8IFtdO1xuICB0aGlzLnRpbWVfYmFzZWRfdGhyZXNob2xkcy5wdXNoKG5ld190aW1lX2Jhc2VkX3RocmVzaG9sZCk7XG59O1xuXG5Cb29tUGF0dGVybi5wcm90b3R5cGUucmVtb3ZlX3RpbWVfYmFzZWRfdGhyZXNob2xkcyA9IGZ1bmN0aW9uKGluZGV4OiBOdW1iZXIpOiB2b2lkIHtcbiAgaWYgKHRoaXMudGltZV9iYXNlZF90aHJlc2hvbGRzLmxlbmd0aCA+IDApIHtcbiAgICB0aGlzLnRpbWVfYmFzZWRfdGhyZXNob2xkcy5zcGxpY2UoTnVtYmVyKGluZGV4KSwgMSk7XG4gIH1cbn07XG5cbkJvb21QYXR0ZXJuLnByb3RvdHlwZS5zZXRVbml0Rm9ybWF0ID0gZnVuY3Rpb24oZm9ybWF0OiBhbnkpOiB2b2lkIHtcbiAgdGhpcy5mb3JtYXQgPSBmb3JtYXQgJiYgZm9ybWF0LnZhbHVlID8gZm9ybWF0LnZhbHVlIDogJ25vbmUnO1xufTtcblxuZXhwb3J0IHsgQm9vbVBhdHRlcm4gfTtcbiJdfQ== \ No newline at end of file diff --git a/dist/app/boom/BoomSeries.js b/dist/app/boom/BoomSeries.js new file mode 100644 index 0000000..c0dcff3 --- /dev/null +++ b/dist/app/boom/BoomSeries.js @@ -0,0 +1,109 @@ +System.register(["app/core/time_series2", "lodash", "./index", "./BoomSeriesUtils", "./BoomUtils", "./../GrafanaUtils"], function (exports_1, context_1) { + "use strict"; + var time_series2_1, lodash_1, index_1, BoomSeriesUtils_1, BoomUtils_1, GrafanaUtils_1, BoomSeries; + var __moduleName = context_1 && context_1.id; + return { + setters: [ + function (time_series2_1_1) { + time_series2_1 = time_series2_1_1; + }, + function (lodash_1_1) { + lodash_1 = lodash_1_1; + }, + function (index_1_1) { + index_1 = index_1_1; + }, + function (BoomSeriesUtils_1_1) { + BoomSeriesUtils_1 = BoomSeriesUtils_1_1; + }, + function (BoomUtils_1_1) { + BoomUtils_1 = BoomUtils_1_1; + }, + function (GrafanaUtils_1_1) { + GrafanaUtils_1 = GrafanaUtils_1_1; + } + ], + execute: function () { + BoomSeries = (function () { + function BoomSeries(seriesData, panelDefaultPattern, panelPatterns, options, scopedVars, templateSrv, timeSrv) { + this.pattern = undefined; + this.template_value = ""; + this.row_col_wrapper = "_"; + this.display_value = "-"; + this.tooltip = "-"; + this.value = NaN; + this.value_formatted = "-"; + this.link = "-"; + this.hidden = false; + this._metricname = ""; + this._tags = []; + var series = new time_series2_1.default({ + alias: seriesData.target, + datapoints: seriesData.datapoints || [] + }); + series.flotpairs = series.getFlotPairs("connected"); + this.debug_mode = options && options.debug_mode === true ? true : false; + this.row_col_wrapper = options && options.row_col_wrapper ? options.row_col_wrapper : this.row_col_wrapper; + this.currentTimeStamp = BoomUtils_1.getCurrentTimeStamp(series.dataPoints); + this.seriesName = series.alias || series.aliasEscaped || series.label || series.id || ""; + var getMatchingAndEnabledPattern = function (patterns, seriesName) { return patterns.find(function (p) { return seriesName.match(p.pattern) && p.disabled !== true; }); }; + this.pattern = getMatchingAndEnabledPattern(panelPatterns, this.seriesName) || panelDefaultPattern; + this.decimals = this.pattern.decimals || panelDefaultPattern.decimals || 2; + this.value = BoomUtils_1.getSeriesValue(series, this.pattern.valueName); + this.value_formatted = GrafanaUtils_1.get_formatted_value(this.value, this.decimals, this.pattern.format); + this.display_value = ((lodash_1.default.isNaN(this.value) || this.value === null) ? this.pattern.null_value : String(this.value)).toString(); + this.hidden = BoomUtils_1.doesValueNeedsToHide(this.value, this.pattern.filter); + this._metricname = this.pattern.delimiter.toLowerCase() === "tag" ? index_1.getMetricNameFromTaggedAlias(seriesData.target) : ""; + this._tags = this.pattern.delimiter.toLowerCase() === "tag" ? index_1.getLablesFromTaggedAlias(seriesData.target, this._metricname) : []; + this.row_name = BoomUtils_1.getRowName(this.pattern.row_name, this.pattern.delimiter, this.row_col_wrapper, this.seriesName, this._metricname, this._tags); + this.row_name_raw = BoomUtils_1.getRowName(this.pattern.row_name, this.pattern.delimiter, this.row_col_wrapper, this.seriesName, this._metricname, this._tags); + this.col_name = BoomUtils_1.getColName(this.pattern.col_name, this.pattern.delimiter, this.row_col_wrapper, this.seriesName, this.row_name, this._metricname, this._tags); + this.thresholds = BoomSeriesUtils_1.getThresholds(templateSrv.replace(this.pattern.thresholds, scopedVars).split(",").map(function (d) { return +d; }), this.pattern.enable_time_based_thresholds, this.pattern.time_based_thresholds, this.currentTimeStamp); + this.color_bg = BoomSeriesUtils_1.getBGColor(this.value, this.pattern, this.thresholds, templateSrv.replace(this.pattern.bgColors, scopedVars).split("|"), templateSrv.replace(this.pattern.bgColors_overrides, scopedVars).split("|")); + this.color_text = BoomSeriesUtils_1.getTextColor(this.value, this.pattern, this.thresholds, templateSrv.replace(this.pattern.textColors, scopedVars).split("|"), templateSrv.replace(this.pattern.textColors_overrides, scopedVars).split("|")); + this.template_value = BoomUtils_1.getDisplayValueTemplate(this.value, this.pattern, this.seriesName, this.row_col_wrapper, this.thresholds); + this.link = BoomSeriesUtils_1.getLink(this.pattern.enable_clickable_cells, this.pattern.clickable_cells_link, timeSrv.timeRangeForUrl()); + this.link = BoomUtils_1.replaceDelimitedColumns(this.link, this.seriesName, this.pattern.delimiter, this.row_col_wrapper); + this.tooltip = this.pattern.tooltipTemplate || "Series : _series_
Row Name : _row_name_
Col Name : _col_name_
Value : _value_"; + this.replaceSeriesRowColTokens(); + this.link = BoomSeriesUtils_1.GetValuesReplaced(this.link, this.value, this.value_formatted, series.stats, this.decimals, this.pattern.format, this._metricname, this._tags, this.pattern.delimiter || ""); + this.tooltip = BoomSeriesUtils_1.GetValuesReplaced(this.tooltip, this.value, this.value_formatted, series.stats, this.decimals, this.pattern.format, this._metricname, this._tags, this.pattern.delimiter || ""); + this.display_value = BoomSeriesUtils_1.GetValuesReplaced(this.display_value, this.value, this.value_formatted, series.stats, this.decimals, this.pattern.format, this._metricname, this._tags, this.pattern.delimiter || ""); + this.row_name = index_1.replaceTokens(this.row_name); + this.col_name = index_1.replaceTokens(this.col_name); + this.display_value = index_1.replaceTokens(this.display_value); + this.row_name = templateSrv.replace(this.row_name, scopedVars); + this.col_name = templateSrv.replace(this.col_name, scopedVars); + this.display_value = templateSrv.replace(this.display_value, scopedVars); + this.tooltip = templateSrv.replace(this.tooltip, scopedVars); + this.link = templateSrv.replace(this.link, scopedVars); + if (this.debug_mode !== true) { + delete this.seriesName; + delete this.pattern; + delete this.thresholds; + delete this.decimals; + delete this.template_value; + delete this.value_formatted; + delete this.currentTimeStamp; + } + } + BoomSeries.prototype.replaceSeriesRowColTokens = function () { + this.link = this.link.replace(new RegExp("_series_", "g"), this.seriesName.toString().trim()); + this.tooltip = this.tooltip.replace(new RegExp("_series_", "g"), this.seriesName.toString().trim()); + this.display_value = this.template_value.replace(new RegExp("_series_", "g"), this.seriesName.toString()); + this.col_name = this.col_name.replace(new RegExp("_row_name_", "g"), this.row_name.toString()); + this.link = this.link.replace(new RegExp("_row_name_", "g"), index_1.getActualNameWithoutTokens(this.row_name.toString()).trim()); + this.tooltip = this.tooltip.replace(new RegExp("_row_name_", "g"), index_1.getActualNameWithoutTokens(this.row_name.toString()).trim()); + this.display_value = this.display_value.replace(new RegExp("_row_name_", "g"), this.row_name.toString()); + this.row_name = this.row_name.replace(new RegExp("_col_name_", "g"), this.col_name.toString()); + this.link = this.link.replace(new RegExp("_col_name_", "g"), index_1.getActualNameWithoutTokens(this.col_name.toString()).trim()); + this.tooltip = this.tooltip.replace(new RegExp("_col_name_", "g"), index_1.getActualNameWithoutTokens(this.col_name.toString()).trim()); + this.display_value = this.display_value.replace(new RegExp("_col_name_", "g"), this.col_name.toString()); + }; + return BoomSeries; + }()); + exports_1("BoomSeries", BoomSeries); + } + }; +}); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQm9vbVNlcmllcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcHAvYm9vbS9Cb29tU2VyaWVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1lBVUE7Z0JBd0JJLG9CQUFZLFVBQWUsRUFBRSxtQkFBd0IsRUFBRSxhQUFvQixFQUFFLE9BQVksRUFBRSxVQUFlLEVBQUUsV0FBZ0IsRUFBRSxPQUFZO29CQXJCbEksWUFBTyxHQUFRLFNBQVMsQ0FBQztvQkFHekIsbUJBQWMsR0FBRyxFQUFFLENBQUM7b0JBQ3BCLG9CQUFlLEdBQUcsR0FBRyxDQUFDO29CQU92QixrQkFBYSxHQUFHLEdBQUcsQ0FBQztvQkFDcEIsWUFBTyxHQUFHLEdBQUcsQ0FBQztvQkFDZCxVQUFLLEdBQUcsR0FBRyxDQUFDO29CQUNaLG9CQUFlLEdBQUcsR0FBRyxDQUFDO29CQUN0QixTQUFJLEdBQUcsR0FBRyxDQUFDO29CQUVYLFdBQU0sR0FBWSxLQUFLLENBQUM7b0JBQ3hCLGdCQUFXLEdBQUcsRUFBRSxDQUFDO29CQUNqQixVQUFLLEdBQVUsRUFBRSxDQUFDO29CQUlyQixJQUFJLE1BQU0sR0FBRyxJQUFJLHNCQUFVLENBQUM7d0JBQ3hCLEtBQUssRUFBRSxVQUFVLENBQUMsTUFBTTt3QkFDeEIsVUFBVSxFQUFFLFVBQVUsQ0FBQyxVQUFVLElBQUksRUFBRTtxQkFDMUMsQ0FBQyxDQUFDO29CQUNILE1BQU0sQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQztvQkFFcEQsSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLElBQUksT0FBTyxDQUFDLFVBQVUsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO29CQUN4RSxJQUFJLENBQUMsZUFBZSxHQUFHLE9BQU8sSUFBSSxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FB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QVksRUFBRSxHQUFHLENBQUMsRUFBRSxrQ0FBMEIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztvQkFDMUgsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxZQUFZLEVBQUUsR0FBRyxDQUFDLEVBQUUsa0NBQTBCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7b0JBQ2hJLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsSUFBSSxNQUFNLENBQUMsWUFBWSxFQUFFLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztnQkFFN0csQ0FBQztnQkFFTCxpQkFBQztZQUFELENBQUMsQUE1R0QsSUE0R0MiLCJzb3VyY2VzQ29udGVudCI6WyIvLy88cmVmZXJlbmNlIHBhdGg9XCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvZ3JhZmFuYS1zZGstbW9ja3MvYXBwL2hlYWRlcnMvY29tbW9uLmQudHNcIiAvPlxuXG5pbXBvcnQgVGltZVNlcmllcyBmcm9tIFwiYXBwL2NvcmUvdGltZV9zZXJpZXMyXCI7XG5pbXBvcnQgXyBmcm9tIFwibG9kYXNoXCI7XG5pbXBvcnQgeyByZXBsYWNlVG9rZW5zLCBnZXRBY3R1YWxOYW1lV2l0aG91dFRva2VucywgZ2V0TWV0cmljTmFtZUZyb21UYWdnZWRBbGlhcywgZ2V0TGFibGVzRnJvbVRhZ2dlZEFsaWFzIH0gZnJvbSBcIi4vaW5kZXhcIjtcbmltcG9ydCB7IGdldFRocmVzaG9sZHMsIGdldEJHQ29sb3IsIGdldFRleHRDb2xvciwgZ2V0TGluaywgR2V0VmFsdWVzUmVwbGFjZWQgfSBmcm9tIFwiLi9Cb29tU2VyaWVzVXRpbHNcIjtcbmltcG9ydCB7IGdldERpc3BsYXlWYWx1ZVRlbXBsYXRlLCBnZXRTZXJpZXNWYWx1ZSwgZ2V0Q3VycmVudFRpbWVTdGFtcCwgcmVwbGFjZURlbGltaXRlZENvbHVtbnMsIGdldFJvd05hbWUsIGdldENvbE5hbWUsIGRvZXNWYWx1ZU5lZWRzVG9IaWRlIH0gZnJvbSBcIi4vQm9vbVV0aWxzXCI7XG5pbXBvcnQgeyBnZXRfZm9ybWF0dGVkX3ZhbHVlIH0gZnJvbSAgXCIuLy4uL0dyYWZhbmFVdGlsc1wiO1xuaW1wb3J0IHsgSUJvb21TZXJpZXMgfSBmcm9tIFwiLi9Cb29tLmludGVyZmFjZVwiO1xuXG5jbGFzcyBCb29tU2VyaWVzIGltcGxlbWVudHMgSUJvb21TZXJpZXMge1xuXG4gICAgcHJpdmF0ZSBkZWJ1Z19tb2RlOiBCb29sZWFuO1xuICAgIHByaXZhdGUgcGF0dGVybjogYW55ID0gdW5kZWZpbmVkO1xuICAgIHByaXZhdGUgc2VyaWVzTmFtZTogc3RyaW5nO1xuICAgIHByaXZhdGUgY3VycmVudFRpbWVTdGFtcDogRGF0ZTtcbiAgICBwcml2YXRlIHRlbXBsYXRlX3ZhbHVlID0gXCJcIjtcbiAgICBwcml2YXRlIHJvd19jb2xfd3JhcHBlciA9IFwiX1wiO1xuICAgIHByaXZhdGUgZGVjaW1hbHM6IE51bWJlcjtcbiAgICBwdWJsaWMgY29sX25hbWU6IHN0cmluZztcbiAgICBwdWJsaWMgcm93X25hbWU6IHN0cmluZztcbiAgICBwdWJsaWMgcm93X25hbWVfcmF3OiBzdHJpbmc7XG4gICAgcHVibGljIGNvbG9yX2JnOiBzdHJpbmc7XG4gICAgcHVibGljIGNvbG9yX3RleHQ6IHN0cmluZztcbiAgICBwdWJsaWMgZGlzcGxheV92YWx1ZSA9IFwiLVwiO1xuICAgIHB1YmxpYyB0b29sdGlwID0gXCItXCI7XG4gICAgcHVibGljIHZhbHVlID0gTmFOO1xuICAgIHB1YmxpYyB2YWx1ZV9mb3JtYXR0ZWQgPSBcIi1cIjtcbiAgICBwdWJsaWMgbGluayA9IFwiLVwiO1xuICAgIHB1YmxpYyB0aHJlc2hvbGRzOiBOdW1iZXJbXTtcbiAgICBwdWJsaWMgaGlkZGVuOiBCb29sZWFuID0gZmFsc2U7XG4gICAgcHVibGljIF9tZXRyaWNuYW1lID0gXCJcIjtcbiAgICBwdWJsaWMgX3RhZ3M6IGFueVtdID0gW107XG5cbiAgICBjb25zdHJ1Y3RvcihzZXJpZXNEYXRhOiBhbnksIHBhbmVsRGVmYXVsdFBhdHRlcm46IGFueSwgcGFuZWxQYXR0ZXJuczogYW55W10sIG9wdGlvbnM6IGFueSwgc2NvcGVkVmFyczogYW55LCB0ZW1wbGF0ZVNydjogYW55LCB0aW1lU3J2OiBhbnkpIHtcblxuICAgICAgICBsZXQgc2VyaWVzID0gbmV3IFRpbWVTZXJpZXMoe1xuICAgICAgICAgICAgYWxpYXM6IHNlcmllc0RhdGEudGFyZ2V0LFxuICAgICAgICAgICAgZGF0YXBvaW50czogc2VyaWVzRGF0YS5kYXRhcG9pbnRzIHx8IFtdXG4gICAgICAgIH0pO1xuICAgICAgICBzZXJpZXMuZmxvdHBhaXJzID0gc2VyaWVzLmdldEZsb3RQYWlycyhcImNvbm5lY3RlZFwiKTtcblxuICAgICAgICB0aGlzLmRlYnVnX21vZGUgPSBvcHRpb25zICYmIG9wdGlvbnMuZGVidWdfbW9kZSA9PT0gdHJ1ZSA/IHRydWUgOiBmYWxzZTtcbiAgICAgICAgdGhpcy5yb3dfY29sX3dyYXBwZXIgPSBvcHRpb25zICYmIG9wdGlvbnMucm93X2NvbF93cmFwcGVyID8gb3B0aW9ucy5yb3dfY29sX3dyYXBwZXIgOiB0aGlzLnJvd19jb2xfd3JhcHBlcjtcbiAgICAgICAgdGhpcy5jdXJyZW50VGltZVN0YW1wID0gZ2V0Q3VycmVudFRpbWVTdGFtcChzZXJpZXMuZGF0YVBvaW50cyk7XG4gICAgICAgIHRoaXMuc2VyaWVzTmFtZSA9IHNlcmllcy5hbGlhcyB8fCBzZXJpZXMuYWxpYXNFc2NhcGVkIHx8IHNlcmllcy5sYWJlbCB8fCBzZXJpZXMuaWQgfHwgXCJcIjtcblxuICAgICAgICBsZXQgZ2V0TWF0Y2hpbmdBbmRFbmFibGVkUGF0dGVybiA9IChwYXR0ZXJucywgc2VyaWVzTmFtZSkgPT4gcGF0dGVybnMuZmluZChwID0+IHNlcmllc05hbWUubWF0Y2gocC5wYXR0ZXJuKSAmJiBwLmRpc2FibGVkICE9PSB0cnVlKTtcbiAgICAgICAgdGhpcy5wYXR0ZXJuID0gZ2V0TWF0Y2hpbmdBbmRFbmFibGVkUGF0dGVybihwYW5lbFBhdHRlcm5zLCB0aGlzLnNlcmllc05hbWUpIHx8IHBhbmVsRGVmYXVsdFBhdHRlcm47XG5cbiAgICAgICAgdGhpcy5kZWNpbWFscyA9IHRoaXMucGF0dGVybi5kZWNpbWFscyB8fCBwYW5lbERlZmF1bHRQYXR0ZXJuLmRlY2ltYWxzIHx8IDI7XG4gICAgICAgIHRoaXMudmFsdWUgPSBnZXRTZXJpZXNWYWx1ZShzZXJpZXMsIHRoaXMucGF0dGVybi52YWx1ZU5hbWUpO1xuICAgICAgICB0aGlzLnZhbHVlX2Zvcm1hdHRlZCA9IGdldF9mb3JtYXR0ZWRfdmFsdWUodGhpcy52YWx1ZSwgdGhpcy5kZWNpbWFscywgdGhpcy5wYXR0ZXJuLmZvcm1hdCk7XG4gICAgICAgIHRoaXMuZGlzcGxheV92YWx1ZSA9ICgoXy5pc05hTih0aGlzLnZhbHVlKSB8fCB0aGlzLnZhbHVlID09PSBudWxsKSA/IHRoaXMucGF0dGVybi5udWxsX3ZhbHVlIDogU3RyaW5nKHRoaXMudmFsdWUpKS50b1N0cmluZygpO1xuICAgICAgICB0aGlzLmhpZGRlbiA9IGRvZXNWYWx1ZU5lZWRzVG9IaWRlKHRoaXMudmFsdWUsIHRoaXMucGF0dGVybi5maWx0ZXIpO1xuICAgICAgICB0aGlzLl9tZXRyaWNuYW1lID0gdGhpcy5wYXR0ZXJuLmRlbGltaXRlci50b0xvd2VyQ2FzZSgpID09PSBcInRhZ1wiID8gZ2V0TWV0cmljTmFtZUZyb21UYWdnZWRBbGlhcyhzZXJpZXNEYXRhLnRhcmdldCkgOiBcIlwiO1xuICAgICAgICB0aGlzLl90YWdzID0gdGhpcy5wYXR0ZXJuLmRlbGltaXRlci50b0xvd2VyQ2FzZSgpID09PSBcInRhZ1wiID8gZ2V0TGFibGVzRnJvbVRhZ2dlZEFsaWFzKHNlcmllc0RhdGEudGFyZ2V0LCB0aGlzLl9tZXRyaWNuYW1lKSA6IFtdO1xuXG4gICAgICAgIHRoaXMucm93X25hbWUgPSBnZXRSb3dOYW1lKHRoaXMucGF0dGVybi5yb3dfbmFtZSwgdGhpcy5wYXR0ZXJuLmRlbGltaXRlciwgdGhpcy5yb3dfY29sX3dyYXBwZXIsIHRoaXMuc2VyaWVzTmFtZSwgdGhpcy5fbWV0cmljbmFtZSwgdGhpcy5fdGFncyk7XG4gICAgICAgIHRoaXMucm93X25hbWVfcmF3ID0gZ2V0Um93TmFtZSh0aGlzLnBhdHRlcm4ucm93X25hbWUsIHRoaXMucGF0dGVybi5kZWxpbWl0ZXIsIHRoaXMucm93X2NvbF93cmFwcGVyLCB0aGlzLnNlcmllc05hbWUsIHRoaXMuX21ldHJpY25hbWUsIHRoaXMuX3RhZ3MpO1xuICAgICAgICB0aGlzLmNvbF9uYW1lID0gZ2V0Q29sTmFtZSh0aGlzLnBhdHRlcm4uY29sX25hbWUsIHRoaXMucGF0dGVybi5kZWxpbWl0ZXIsIHRoaXMucm93X2NvbF93cmFwcGVyLCB0aGlzLnNlcmllc05hbWUsIHRoaXMucm93X25hbWUsIHRoaXMuX21ldHJpY25hbWUsIHRoaXMuX3RhZ3MpO1xuXG4gICAgICAgIHRoaXMudGhyZXNob2xkcyA9IGdldFRocmVzaG9sZHModGVtcGxhdGVTcnYucmVwbGFjZSh0aGlzLnBhdHRlcm4udGhyZXNob2xkcywgc2NvcGVkVmFycykuc3BsaXQoXCIsXCIpLm1hcChkID0+ICtkKSwgdGhpcy5wYXR0ZXJuLmVuYWJsZV90aW1lX2Jhc2VkX3RocmVzaG9sZHMsIHRoaXMucGF0dGVybi50aW1lX2Jhc2VkX3RocmVzaG9sZHMsIHRoaXMuY3VycmVudFRpbWVTdGFtcCk7XG4gICAgICAgIHRoaXMuY29sb3JfYmcgPSBnZXRCR0NvbG9yKHRoaXMudmFsdWUsIHRoaXMucGF0dGVybiwgdGhpcy50aHJlc2hvbGRzLCB0ZW1wbGF0ZVNydi5yZXBsYWNlKHRoaXMucGF0dGVybi5iZ0NvbG9ycywgc2NvcGVkVmFycykuc3BsaXQoXCJ8XCIpLCB0ZW1wbGF0ZVNydi5yZXBsYWNlKHRoaXMucGF0dGVybi5iZ0NvbG9yc19vdmVycmlkZXMsIHNjb3BlZFZhcnMpLnNwbGl0KFwifFwiKSk7XG4gICAgICAgIHRoaXMuY29sb3JfdGV4dCA9IGdldFRleHRDb2xvcih0aGlzLnZhbHVlLCB0aGlzLnBhdHRlcm4sIHRoaXMudGhyZXNob2xkcywgdGVtcGxhdGVTcnYucmVwbGFjZSh0aGlzLnBhdHRlcm4udGV4dENvbG9ycywgc2NvcGVkVmFycykuc3BsaXQoXCJ8XCIpLCB0ZW1wbGF0ZVNydi5yZXBsYWNlKHRoaXMucGF0dGVybi50ZXh0Q29sb3JzX292ZXJyaWRlcywgc2NvcGVkVmFycykuc3BsaXQoXCJ8XCIpKTtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZV92YWx1ZSA9IGdldERpc3BsYXlWYWx1ZVRlbXBsYXRlKHRoaXMudmFsdWUsIHRoaXMucGF0dGVybiwgdGhpcy5zZXJpZXNOYW1lLCB0aGlzLnJvd19jb2xfd3JhcHBlciwgdGhpcy50aHJlc2hvbGRzKTtcblxuICAgICAgICB0aGlzLmxpbmsgPSBnZXRMaW5rKHRoaXMucGF0dGVybi5lbmFibGVfY2xpY2thYmxlX2NlbGxzLCB0aGlzLnBhdHRlcm4uY2xpY2thYmxlX2NlbGxzX2xpbmssIHRpbWVTcnYudGltZVJhbmdlRm9yVXJsKCkpO1xuICAgICAgICB0aGlzLmxpbmsgPSByZXBsYWNlRGVsaW1pdGVkQ29sdW1ucyh0aGlzLmxpbmssIHRoaXMuc2VyaWVzTmFtZSwgdGhpcy5wYXR0ZXJuLmRlbGltaXRlciwgdGhpcy5yb3dfY29sX3dyYXBwZXIpO1xuXG4gICAgICAgIHRoaXMudG9vbHRpcCA9IHRoaXMucGF0dGVybi50b29sdGlwVGVtcGxhdGUgfHwgXCJTZXJpZXMgOiBfc2VyaWVzXyA8YnIvPlJvdyBOYW1lIDogX3Jvd19uYW1lXyA8YnIvPkNvbCBOYW1lIDogX2NvbF9uYW1lXyA8YnIvPlZhbHVlIDogX3ZhbHVlX1wiO1xuXG4gICAgICAgIHRoaXMucmVwbGFjZVNlcmllc1Jvd0NvbFRva2VucygpO1xuXG4gICAgICAgIHRoaXMubGluayA9IEdldFZhbHVlc1JlcGxhY2VkKHRoaXMubGluaywgdGhpcy52YWx1ZSwgdGhpcy52YWx1ZV9mb3JtYXR0ZWQsIHNlcmllcy5zdGF0cywgdGhpcy5kZWNpbWFscywgdGhpcy5wYXR0ZXJuLmZvcm1hdCwgdGhpcy5fbWV0cmljbmFtZSwgdGhpcy5fdGFncywgdGhpcy5wYXR0ZXJuLmRlbGltaXRlciB8fCBcIlwiKTtcbiAgICAgICAgdGhpcy50b29sdGlwID0gR2V0VmFsdWVzUmVwbGFjZWQodGhpcy50b29sdGlwLCB0aGlzLnZhbHVlLCB0aGlzLnZhbHVlX2Zvcm1hdHRlZCwgc2VyaWVzLnN0YXRzLCB0aGlzLmRlY2ltYWxzLCB0aGlzLnBhdHRlcm4uZm9ybWF0LCB0aGlzLl9tZXRyaWNuYW1lLCB0aGlzLl90YWdzLCB0aGlzLnBhdHRlcm4uZGVsaW1pdGVyIHx8IFwiXCIpO1xuICAgICAgICB0aGlzLmRpc3BsYXlfdmFsdWUgPSBHZXRWYWx1ZXNSZXBsYWNlZCh0aGlzLmRpc3BsYXlfdmFsdWUsIHRoaXMudmFsdWUsIHRoaXMudmFsdWVfZm9ybWF0dGVkLCBzZXJpZXMuc3RhdHMsIHRoaXMuZGVjaW1hbHMsIHRoaXMucGF0dGVybi5mb3JtYXQsIHRoaXMuX21ldHJpY25hbWUsIHRoaXMuX3RhZ3MsIHRoaXMucGF0dGVybi5kZWxpbWl0ZXIgfHwgXCJcIik7XG5cbiAgICAgICAgdGhpcy5yb3dfbmFtZSA9IHJlcGxhY2VUb2tlbnModGhpcy5yb3dfbmFtZSk7XG4gICAgICAgIHRoaXMuY29sX25hbWUgPSByZXBsYWNlVG9rZW5zKHRoaXMuY29sX25hbWUpO1xuICAgICAgICB0aGlzLmRpc3BsYXlfdmFsdWUgPSByZXBsYWNlVG9rZW5zKHRoaXMuZGlzcGxheV92YWx1ZSk7XG5cbiAgICAgICAgdGhpcy5yb3dfbmFtZSA9IHRlbXBsYXRlU3J2LnJlcGxhY2UodGhpcy5yb3dfbmFtZSwgc2NvcGVkVmFycyk7XG4gICAgICAgIHRoaXMuY29sX25hbWUgPSB0ZW1wbGF0ZVNydi5yZXBsYWNlKHRoaXMuY29sX25hbWUsIHNjb3BlZFZhcnMpO1xuICAgICAgICB0aGlzLmRpc3BsYXlfdmFsdWUgPSB0ZW1wbGF0ZVNydi5yZXBsYWNlKHRoaXMuZGlzcGxheV92YWx1ZSwgc2NvcGVkVmFycyk7XG5cbiAgICAgICAgdGhpcy50b29sdGlwID0gdGVtcGxhdGVTcnYucmVwbGFjZSh0aGlzLnRvb2x0aXAsIHNjb3BlZFZhcnMpO1xuICAgICAgICB0aGlzLmxpbmsgPSB0ZW1wbGF0ZVNydi5yZXBsYWNlKHRoaXMubGluaywgc2NvcGVkVmFycyk7XG5cbiAgICAgICAgaWYgKHRoaXMuZGVidWdfbW9kZSAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuc2VyaWVzTmFtZTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnBhdHRlcm47XG4gICAgICAgICAgICBkZWxldGUgdGhpcy50aHJlc2hvbGRzO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuZGVjaW1hbHM7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy50ZW1wbGF0ZV92YWx1ZTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnZhbHVlX2Zvcm1hdHRlZDtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmN1cnJlbnRUaW1lU3RhbXA7XG4gICAgICAgIH1cblxuICAgIH1cbiAgICBwcml2YXRlIHJlcGxhY2VTZXJpZXNSb3dDb2xUb2tlbnMoKSB7XG5cbiAgICAgICAgdGhpcy5saW5rID0gdGhpcy5saW5rLnJlcGxhY2UobmV3IFJlZ0V4cChcIl9zZXJpZXNfXCIsIFwiZ1wiKSwgdGhpcy5zZXJpZXNOYW1lLnRvU3RyaW5nKCkudHJpbSgpKTtcbiAgICAgICAgdGhpcy50b29sdGlwID0gdGhpcy50b29sdGlwLnJlcGxhY2UobmV3IFJlZ0V4cChcIl9zZXJpZXNfXCIsIFwiZ1wiKSwgdGhpcy5zZXJpZXNOYW1lLnRvU3RyaW5nKCkudHJpbSgpKTtcbiAgICAgICAgdGhpcy5kaXNwbGF5X3ZhbHVlID0gdGhpcy50ZW1wbGF0ZV92YWx1ZS5yZXBsYWNlKG5ldyBSZWdFeHAoXCJfc2VyaWVzX1wiLCBcImdcIiksIHRoaXMuc2VyaWVzTmFtZS50b1N0cmluZygpKTtcblxuICAgICAgICB0aGlzLmNvbF9uYW1lID0gdGhpcy5jb2xfbmFtZS5yZXBsYWNlKG5ldyBSZWdFeHAoXCJfcm93X25hbWVfXCIsIFwiZ1wiKSwgdGhpcy5yb3dfbmFtZS50b1N0cmluZygpKTtcbiAgICAgICAgdGhpcy5saW5rID0gdGhpcy5saW5rLnJlcGxhY2UobmV3IFJlZ0V4cChcIl9yb3dfbmFtZV9cIiwgXCJnXCIpLCBnZXRBY3R1YWxOYW1lV2l0aG91dFRva2Vucyh0aGlzLnJvd19uYW1lLnRvU3RyaW5nKCkpLnRyaW0oKSk7XG4gICAgICAgIHRoaXMudG9vbHRpcCA9IHRoaXMudG9vbHRpcC5yZXBsYWNlKG5ldyBSZWdFeHAoXCJfcm93X25hbWVfXCIsIFwiZ1wiKSwgZ2V0QWN0dWFsTmFtZVdpdGhvdXRUb2tlbnModGhpcy5yb3dfbmFtZS50b1N0cmluZygpKS50cmltKCkpO1xuICAgICAgICB0aGlzLmRpc3BsYXlfdmFsdWUgPSB0aGlzLmRpc3BsYXlfdmFsdWUucmVwbGFjZShuZXcgUmVnRXhwKFwiX3Jvd19uYW1lX1wiLCBcImdcIiksIHRoaXMucm93X25hbWUudG9TdHJpbmcoKSk7XG5cbiAgICAgICAgdGhpcy5yb3dfbmFtZSA9IHRoaXMucm93X25hbWUucmVwbGFjZShuZXcgUmVnRXhwKFwiX2NvbF9uYW1lX1wiLCBcImdcIiksIHRoaXMuY29sX25hbWUudG9TdHJpbmcoKSk7XG4gICAgICAgIHRoaXMubGluayA9IHRoaXMubGluay5yZXBsYWNlKG5ldyBSZWdFeHAoXCJfY29sX25hbWVfXCIsIFwiZ1wiKSwgZ2V0QWN0dWFsTmFtZVdpdGhvdXRUb2tlbnModGhpcy5jb2xfbmFtZS50b1N0cmluZygpKS50cmltKCkpO1xuICAgICAgICB0aGlzLnRvb2x0aXAgPSB0aGlzLnRvb2x0aXAucmVwbGFjZShuZXcgUmVnRXhwKFwiX2NvbF9uYW1lX1wiLCBcImdcIiksIGdldEFjdHVhbE5hbWVXaXRob3V0VG9rZW5zKHRoaXMuY29sX25hbWUudG9TdHJpbmcoKSkudHJpbSgpKTtcbiAgICAgICAgdGhpcy5kaXNwbGF5X3ZhbHVlID0gdGhpcy5kaXNwbGF5X3ZhbHVlLnJlcGxhY2UobmV3IFJlZ0V4cChcIl9jb2xfbmFtZV9cIiwgXCJnXCIpLCB0aGlzLmNvbF9uYW1lLnRvU3RyaW5nKCkpO1xuXG4gICAgfVxuXG59XG5cbmV4cG9ydCB7XG4gICAgQm9vbVNlcmllc1xufTtcbiJdfQ== \ No newline at end of file diff --git a/dist/app/boom/BoomSeriesUtils.js b/dist/app/boom/BoomSeriesUtils.js new file mode 100644 index 0000000..fb292fb --- /dev/null +++ b/dist/app/boom/BoomSeriesUtils.js @@ -0,0 +1,119 @@ +System.register(["lodash", "./index", "../GrafanaUtils"], function (exports_1, context_1) { + "use strict"; + var lodash_1, index_1, GrafanaUtils_1, getBGColor, getTextColor, getThresholds, getLink, GetValuesReplaced; + var __moduleName = context_1 && context_1.id; + return { + setters: [ + function (lodash_1_1) { + lodash_1 = lodash_1_1; + }, + function (index_1_1) { + index_1 = index_1_1; + }, + function (GrafanaUtils_1_1) { + GrafanaUtils_1 = GrafanaUtils_1_1; + } + ], + execute: function () { + exports_1("getBGColor", getBGColor = function (value, pattern, thresholds, list_of_bgColors_based_on_thresholds, bgColorOverRides) { + var bgColor = 'transparent'; + if (lodash_1.default.isNaN(value) || value === null) { + bgColor = pattern.null_color || 'darkred'; + if (pattern.null_color === '') { + bgColor = 'transparent'; + } + } + else { + bgColor = pattern.defaultBGColor || bgColor; + if (pattern.enable_bgColor && pattern.bgColors) { + bgColor = index_1.getItemBasedOnThreshold(thresholds, list_of_bgColors_based_on_thresholds, value, bgColor); + } + if (pattern.enable_bgColor_overrides && pattern.bgColors_overrides !== '') { + var _bgColors_overrides = bgColorOverRides + .filter(function (con) { return con.indexOf('->'); }) + .map(function (con) { return con.split('->'); }) + .filter(function (con) { return +con[0] === value; }) + .map(function (con) { return con[1]; }); + if (_bgColors_overrides.length > 0 && _bgColors_overrides[0] !== '') { + bgColor = ('' + _bgColors_overrides[0]).trim(); + } + } + } + return index_1.normalizeColor(bgColor); + }); + exports_1("getTextColor", getTextColor = function (value, pattern, thresholds, list_of_textColors_based_on_thresholds, txtColorOverrides) { + var textColor = document.body.classList.contains('theme-light') ? 'black' : 'white'; + if (lodash_1.default.isNaN(value) || value === null) { + textColor = pattern.null_textcolor || textColor; + } + else { + textColor = pattern.defaultTextColor || textColor; + if (pattern.enable_textColor && pattern.textColors) { + textColor = index_1.getItemBasedOnThreshold(thresholds, list_of_textColors_based_on_thresholds, value, textColor); + } + if (pattern.enable_textColor_overrides && pattern.textColors_overrides !== '') { + var _textColors_overrides = txtColorOverrides + .filter(function (con) { return con.indexOf('->'); }) + .map(function (con) { return con.split('->'); }) + .filter(function (con) { return +con[0] === value; }) + .map(function (con) { return con[1]; }); + if (_textColors_overrides.length > 0 && _textColors_overrides[0] !== '') { + textColor = ('' + _textColors_overrides[0]).trim(); + } + } + } + return index_1.normalizeColor(textColor); + }); + exports_1("getThresholds", getThresholds = function (thresholdsArray, enable_time_based_thresholds, time_based_thresholds, currentTimeStamp) { + if (enable_time_based_thresholds) { + var metricrecivedTimeStamp_1 = currentTimeStamp || new Date(); + var metricrecivedTimeStamp_innumber_1 = metricrecivedTimeStamp_1.getHours() * 100 + metricrecivedTimeStamp_1.getMinutes(); + var weekdays_1 = ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat']; + lodash_1.default.each(time_based_thresholds, function (tbtx) { + if (tbtx && + tbtx.from && + tbtx.to && + tbtx.enabledDays && + metricrecivedTimeStamp_innumber_1 >= +tbtx.from && + metricrecivedTimeStamp_innumber_1 <= +tbtx.to && + tbtx.enabledDays.toLowerCase().indexOf(weekdays_1[metricrecivedTimeStamp_1.getDay()]) > -1 && + tbtx.threshold) { + thresholdsArray = (tbtx.threshold + '').split(',').map(function (d) { return +d; }); + } + }); + } + return thresholdsArray || []; + }); + exports_1("getLink", getLink = function (enable_clickable_cells, clickable_cells_link, range) { + var link = enable_clickable_cells ? clickable_cells_link || '#' : '#'; + if (link && link !== '#') { + link += link.indexOf('?') > -1 ? "&from=" + range.from : "?from=" + range.from; + link += "&to=" + range.to; + } + return link; + }); + exports_1("GetValuesReplaced", GetValuesReplaced = function (strToReplace, value, valueformatted, stats, decimals, format, _metricname, _tags, delimiter) { + var value_raw = lodash_1.default.isNaN(value) || value === null ? 'null' : value.toString().trim(); + var value_formatted = lodash_1.default.isNaN(value) || value === null ? 'null' : valueformatted.toString().trim(); + strToReplace = strToReplace.replace(new RegExp('_value_min_raw_', 'g'), stats.min); + strToReplace = strToReplace.replace(new RegExp('_value_max_raw_', 'g'), stats.max); + strToReplace = strToReplace.replace(new RegExp('_value_avg_raw_', 'g'), stats.avg); + strToReplace = strToReplace.replace(new RegExp('_value_current_raw_', 'g'), stats.current); + strToReplace = strToReplace.replace(new RegExp('_value_total_raw_', 'g'), stats.total); + strToReplace = strToReplace.replace(new RegExp('_value_raw_', 'g'), value_raw); + strToReplace = strToReplace.replace(new RegExp('_value_min_', 'g'), GrafanaUtils_1.get_formatted_value(stats.min, decimals, format)); + strToReplace = strToReplace.replace(new RegExp('_value_max_', 'g'), GrafanaUtils_1.get_formatted_value(stats.max, decimals, format)); + strToReplace = strToReplace.replace(new RegExp('_value_avg_', 'g'), GrafanaUtils_1.get_formatted_value(stats.avg, decimals, format)); + strToReplace = strToReplace.replace(new RegExp('_value_current_', 'g'), GrafanaUtils_1.get_formatted_value(stats.current, decimals, format)); + strToReplace = strToReplace.replace(new RegExp('_value_total_', 'g'), GrafanaUtils_1.get_formatted_value(stats.total, decimals, format)); + strToReplace = strToReplace.replace(new RegExp('_value_', 'g'), value_formatted); + if (delimiter.toLowerCase() === 'tag') { + strToReplace = strToReplace.replace(new RegExp('{{metric_name}}', 'g'), _metricname); + strToReplace = index_1.replace_tags_from_field(strToReplace, _tags); + } + return strToReplace; + }); + } + }; +}); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQm9vbVNlcmllc1V0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwcC9ib29tL0Jvb21TZXJpZXNVdGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztZQU1BLHdCQUFXLFVBQVUsR0FBRyxVQUN0QixLQUFhLEVBQ2IsT0FBcUIsRUFDckIsVUFBaUIsRUFDakIsb0NBQThDLEVBQzlDLGdCQUEwQjtnQkFFMUIsSUFBSSxPQUFPLEdBQUcsYUFBYSxDQUFDO2dCQUM1QixJQUFJLGdCQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssS0FBSyxJQUFJLEVBQUU7b0JBQ3BDLE9BQU8sR0FBRyxPQUFPLENBQUMsVUFBVSxJQUFJLFNBQVMsQ0FBQztvQkFDMUMsSUFBSSxPQUFPLENBQUMsVUFBVSxLQUFLLEVBQUUsRUFBRTt3QkFDN0IsT0FBTyxHQUFHLGFBQWEsQ0FBQztxQkFDekI7aUJBQ0Y7cUJBQU07b0JBQ0wsT0FBTyxHQUFHLE9BQU8sQ0FBQyxjQUFjLElBQUksT0FBTyxDQUFDO29CQUM1QyxJQUFJLE9BQU8sQ0FBQyxjQUFjLElBQUksT0FBTyxDQUFDLFFBQVEsRUFBRTt3QkFDOUMsT0FBTyxHQUFHLCtCQUF1QixDQUFDLFVBQVUsRUFBRSxvQ0FBb0MsRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7cUJBQ3JHO29CQUNELElBQUksT0FBTyxDQUFDLHdCQUF3QixJQUFJLE9BQU8sQ0FBQyxrQkFBa0IsS0FBSyxFQUFFLEVBQUU7d0JBQ3pFLElBQUksbUJBQW1CLEdBQUcsZ0JBQWdCOzZCQUN2QyxNQUFNLENBQUMsVUFBQSxHQUFHLElBQUksT0FBQSxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFqQixDQUFpQixDQUFDOzZCQUNoQyxHQUFHLENBQUMsVUFBQSxHQUFHLElBQUksT0FBQSxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFm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Q0FBQyxPQUFPLENBQUMsSUFBSSxNQUFNLENBQUMsZUFBZSxFQUFFLEdBQUcsQ0FBQyxFQUFFLGtDQUFtQixDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7Z0JBQzFILFlBQVksR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksTUFBTSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsRUFBRSxlQUFlLENBQUMsQ0FBQztnQkFFakYsSUFBSSxTQUFTLENBQUMsV0FBVyxFQUFFLEtBQUssS0FBSyxFQUFFO29CQUNyQyxZQUFZLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQztvQkFDckYsWUFBWSxHQUFHLCtCQUF1QixDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsQ0FBQztpQkFDN0Q7Z0JBRUQsT0FBTyxZQUFZLENBQUM7WUFDdEIsQ0FBQyxFQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcclxuXHJcbmltcG9ydCB7IGdldEl0ZW1CYXNlZE9uVGhyZXNob2xkLCBub3JtYWxpemVDb2xvciwgcmVwbGFjZV90YWdzX2Zyb21fZmllbGQgfSBmcm9tICcuL2luZGV4JztcclxuaW1wb3J0IHsgZ2V0X2Zvcm1hdHRlZF92YWx1ZSB9IGZyb20gJy4uL0dyYWZhbmFVdGlscyc7XHJcbmltcG9ydCB7IElCb29tUGF0dGVybiB9IGZyb20gJy4vQm9vbS5pbnRlcmZhY2UnO1xyXG5cclxuZXhwb3J0IGxldCBnZXRCR0NvbG9yID0gZnVuY3Rpb24oXHJcbiAgdmFsdWU6IG51bWJlcixcclxuICBwYXR0ZXJuOiBJQm9vbVBhdHRlcm4sXHJcbiAgdGhyZXNob2xkczogYW55W10sXHJcbiAgbGlzdF9vZl9iZ0NvbG9yc19iYXNlZF9vbl90aHJlc2hvbGRzOiBzdHJpbmdbXSxcclxuICBiZ0NvbG9yT3ZlclJpZGVzOiBzdHJpbmdbXVxyXG4pOiBzdHJpbmcge1xyXG4gIGxldCBiZ0NvbG9yID0gJ3RyYW5zcGFyZW50JztcclxuICBpZiAoXy5pc05hTih2YWx1ZSkgfHwgdmFsdWUgPT09IG51bGwpIHtcclxuICAgIGJnQ29sb3IgPSBwYXR0ZXJuLm51bGxfY29sb3IgfHwgJ2RhcmtyZWQnO1xyXG4gICAgaWYgKHBhdHRlcm4ubnVsbF9jb2xvciA9PT0gJycpIHtcclxuICAgICAgYmdDb2xvciA9ICd0cmFuc3BhcmVudCc7XHJcbiAgICB9XHJcbiAgfSBlbHNlIHtcclxuICAgIGJnQ29sb3IgPSBwYXR0ZXJuLmRlZmF1bHRCR0NvbG9yIHx8IGJnQ29sb3I7XHJcbiAgICBpZiAocGF0dGVybi5lbmFibGVfYmdDb2xvciAmJiBwYXR0ZXJuLmJnQ29sb3JzKSB7XHJcbiAgICAgIGJnQ29sb3IgPSBnZXRJdGVtQmFzZWRPblRocmVzaG9sZCh0aHJlc2hvbGRzLCBsaXN0X29mX2JnQ29sb3JzX2Jhc2VkX29uX3RocmVzaG9sZHMsIHZhbHVlLCBiZ0NvbG9yKTtcclxuICAgIH1cclxuICAgIGlmIChwYXR0ZXJuLmVuYWJsZV9iZ0NvbG9yX292ZXJyaWRlcyAmJiBwYXR0ZXJuLmJnQ29sb3JzX292ZXJyaWRlcyAhPT0gJycpIHtcclxuICAgICAgbGV0IF9iZ0NvbG9yc19vdmVycmlkZXMgPSBiZ0NvbG9yT3ZlclJpZGVzXHJcbiAgICAgICAgLmZpbHRlcihjb24gPT4gY29uLmluZGV4T2YoJy0+JykpXHJcbiAgICAgICAgLm1hcChjb24gPT4gY29uLnNwbGl0KCctPicpKVxyXG4gICAgICAgIC5maWx0ZXIoY29uID0+ICtjb25bMF0gPT09IHZhbHVlKVxyXG4gICAgICAgIC5tYXAoY29uID0+IGNvblsxXSk7XHJcbiAgICAgIGlmIChfYmdDb2xvcnNfb3ZlcnJpZGVzLmxlbmd0aCA+IDAgJiYgX2JnQ29sb3JzX292ZXJyaWRlc1swXSAhPT0gJycpIHtcclxuICAgICAgICBiZ0NvbG9yID0gKCcnICsgX2JnQ29sb3JzX292ZXJyaWRlc1swXSkudHJpbSgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiBub3JtYWxpemVDb2xvcihiZ0NvbG9yKTtcclxufTtcclxuZXhwb3J0IGxldCBnZXRUZXh0Q29sb3IgPSBmdW5jdGlvbihcclxuICB2YWx1ZTogbnVtYmVyLFxyXG4gIHBhdHRlcm46IElCb29tUGF0dGVybixcclxuICB0aHJlc2hvbGRzLFxyXG4gIGxpc3Rfb2ZfdGV4dENvbG9yc19iYXNlZF9vbl90aHJlc2hvbGRzOiBzdHJpbmcsXHJcbiAgdHh0Q29sb3JPdmVycmlkZXM6IHN0cmluZ1tdXHJcbik6IHN0cmluZyB7XHJcbiAgbGV0IHRleHRDb2xvciA9IGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmNvbnRhaW5zKCd0aGVtZS1saWdodCcpID8gJ2JsYWNrJyA6ICd3aGl0ZSc7XHJcbiAgaWYgKF8uaXNOYU4odmFsdWUpIHx8IHZhbHVlID09PSBudWxsKSB7XHJcbiAgICB0ZXh0Q29sb3IgPSBwYXR0ZXJuLm51bGxfdGV4dGNvbG9yIHx8IHRleHRDb2xvcjtcclxuICB9IGVsc2Uge1xyXG4gICAgdGV4dENvbG9yID0gcGF0dGVybi5kZWZhdWx0VGV4dENvbG9yIHx8IHRleHRDb2xvcjtcclxuICAgIGlmIChwYXR0ZXJuLmVuYWJsZV90ZXh0Q29sb3IgJiYgcGF0dGVybi50ZXh0Q29sb3JzKSB7XHJcbiAgICAgIHRleHRDb2xvciA9IGdldEl0ZW1CYXNlZE9uVGhyZXNob2xkKHRocmVzaG9sZHMsIGxpc3Rfb2ZfdGV4dENvbG9yc19iYXNlZF9vbl90aHJlc2hvbGRzLCB2YWx1ZSwgdGV4dENvbG9yKTtcclxuICAgIH1cclxuICAgIGlmIChwYXR0ZXJuLmVuYWJsZV90ZXh0Q29sb3Jfb3ZlcnJpZGVzICYmIHBhdHRlcm4udGV4dENvbG9yc19vdmVycmlkZXMgIT09ICcnKSB7XHJcbiAgICAgIGxldCBfdGV4dENvbG9yc19vdmVycmlkZXMgPSB0eHRDb2xvck92ZXJyaWRlc1xyXG4gICAgICAgIC5maWx0ZXIoY29uID0+IGNvbi5pbmRleE9mKCctPicpKVxyXG4gICAgICAgIC5tYXAoY29uID0+IGNvbi5zcGxpdCgnLT4nKSlcclxuICAgICAgICAuZmlsdGVyKGNvbiA9PiArY29uWzBdID09PSB2YWx1ZSlcclxuICAgICAgICAubWFwKGNvbiA9PiBjb25bMV0pO1xyXG4gICAgICBpZiAoX3RleHRDb2xvcnNfb3ZlcnJpZGVzLmxlbmd0aCA+IDAgJiYgX3RleHRDb2xvcnNfb3ZlcnJpZGVzWzBdICE9PSAnJykge1xyXG4gICAgICAgIHRleHRDb2xvciA9ICgnJyArIF90ZXh0Q29sb3JzX292ZXJyaWRlc1swXSkudHJpbSgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiBub3JtYWxpemVDb2xvcih0ZXh0Q29sb3IpO1xyXG59O1xyXG5leHBvcnQgbGV0IGdldFRocmVzaG9sZHMgPSBmdW5jdGlvbihcclxuICB0aHJlc2hvbGRzQXJyYXk6IGFueVtdLFxyXG4gIGVuYWJsZV90aW1lX2Jhc2VkX3RocmVzaG9sZHM6IGJvb2xlYW4sXHJcbiAgdGltZV9iYXNlZF90aHJlc2hvbGRzOiBhbnlbXSxcclxuICBjdXJyZW50VGltZVN0YW1wOiBEYXRlXHJcbikge1xyXG4gIGlmIChlbmFibGVfdGltZV9iYXNlZF90aHJlc2hvbGRzKSB7XHJcbiAgICBsZXQgbWV0cmljcmVjaXZlZFRpbWVTdGFtcCA9IGN1cnJlbnRUaW1lU3RhbXAgfHwgbmV3IERhdGUoKTtcclxuICAgIGxldCBtZXRyaWNyZWNpdmVkVGltZVN0YW1wX2lubnVtYmVyID0gbWV0cmljcmVjaXZlZFRpbWVTdGFtcC5nZXRIb3VycygpICogMTAwICsgbWV0cmljcmVjaXZlZFRpbWVTdGFtcC5nZXRNaW51dGVzKCk7XHJcbiAgICBsZXQgd2Vla2RheXMgPSBbJ3N1bicsICdtb24nLCAndHVlJywgJ3dlZCcsICd0aHUnLCAnZnJpJywgJ3NhdCddO1xyXG4gICAgXy5lYWNoKHRpbWVfYmFzZWRfdGhyZXNob2xkcywgdGJ0eCA9PiB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICB0YnR4ICYmXHJcbiAgICAgICAgdGJ0eC5mcm9tICYmXHJcbiAgICAgICAgdGJ0eC50byAmJlxyXG4gICAgICAgIHRidHguZW5hYmxlZERheXMgJiZcclxuICAgICAgICBtZXRyaWNyZWNpdmVkVGltZVN0YW1wX2lubnVtYmVyID49ICt0YnR4LmZyb20gJiZcclxuICAgICAgICBtZXRyaWNyZWNpdmVkVGltZVN0YW1wX2lubnVtYmVyIDw9ICt0YnR4LnRvICYmXHJcbiAgICAgICAgdGJ0eC5lbmFibGVkRGF5cy50b0xvd2VyQ2FzZSgpLmluZGV4T2Yod2Vla2RheXNbbWV0cmljcmVjaXZlZFRpbWVTdGFtcC5nZXREYXkoKV0pID4gLTEgJiZcclxuICAgICAgICB0YnR4LnRocmVzaG9sZFxyXG4gICAgICApIHtcclxuICAgICAgICB0aHJlc2hvbGRzQXJyYXkgPSAodGJ0eC50aHJlc2hvbGQgKyAnJykuc3BsaXQoJywnKS5tYXAoZCA9PiArZCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuICByZXR1cm4gdGhyZXNob2xkc0FycmF5IHx8IFtdO1xyXG59O1xyXG5leHBvcnQgbGV0IGdldExpbmsgPSBmdW5jdGlvbihlbmFibGVfY2xpY2thYmxlX2NlbGxzOiBib29sZWFuLCBjbGlja2FibGVfY2VsbHNfbGluazogc3RyaW5nLCByYW5nZTogYW55KTogc3RyaW5nIHtcclxuICBsZXQgbGluayA9IGVuYWJsZV9jbGlja2FibGVfY2VsbHMgPyBjbGlja2FibGVfY2VsbHNfbGluayB8fCAnIycgOiAnIyc7XHJcbiAgaWYgKGxpbmsgJiYgbGluayAhPT0gJyMnKSB7XHJcbiAgICBsaW5rICs9IGxpbmsuaW5kZXhPZignPycpID4gLTEgPyBgJmZyb209JHtyYW5nZS5mcm9tfWAgOiBgP2Zyb209JHtyYW5nZS5mcm9tfWA7XHJcbiAgICBsaW5rICs9IGAmdG89JHtyYW5nZS50b31gO1xyXG4gIH1cclxuICByZXR1cm4gbGluaztcclxufTtcclxuZXhwb3J0IGxldCBHZXRWYWx1ZXNSZXBsYWNlZCA9IGZ1bmN0aW9uKFxyXG4gIHN0clRvUmVwbGFjZTogc3RyaW5nLFxyXG4gIHZhbHVlLFxyXG4gIHZhbHVlZm9ybWF0dGVkLFxyXG4gIHN0YXRzOiBhbnksXHJcbiAgZGVjaW1hbHM6IE51bWJlcixcclxuICBmb3JtYXQ6IHN0cmluZyxcclxuICBfbWV0cmljbmFtZTogc3RyaW5nLFxyXG4gIF90YWdzOiBhbnlbXSxcclxuICBkZWxpbWl0ZXI6IHN0cmluZ1xyXG4pOiBzdHJpbmcge1xyXG4gIGxldCB2YWx1ZV9yYXcgPSBfLmlzTmFOKHZhbHVlKSB8fCB2YWx1ZSA9PT0gbnVsbCA/ICdudWxsJyA6IHZhbHVlLnRvU3RyaW5nKCkudHJpbSgpO1xyXG4gIGxldCB2YWx1ZV9mb3JtYXR0ZWQgPSBfLmlzTmFOKHZhbHVlKSB8fCB2YWx1ZSA9PT0gbnVsbCA/ICdudWxsJyA6IHZhbHVlZm9ybWF0dGVkLnRvU3RyaW5nKCkudHJpbSgpO1xyXG5cclxuICBzdHJUb1JlcGxhY2UgPSBzdHJUb1JlcGxhY2UucmVwbGFjZShuZXcgUmVnRXhwKCdfdmFsdWVfbWluX3Jhd18nLCAnZycpLCBzdGF0cy5taW4pO1xyXG4gIHN0clRvUmVwbGFjZSA9IHN0clRvUmVwbGFjZS5yZXBsYWNlKG5ldyBSZWdFeHAoJ192YWx1ZV9tYXhfcmF3XycsICdnJyksIHN0YXRzLm1heCk7XHJcbiAgc3RyVG9SZXBsYWNlID0gc3RyVG9SZXBsYWNlLnJlcGxhY2UobmV3IFJlZ0V4cCgnX3ZhbHVlX2F2Z19yYXdfJywgJ2cnKSwgc3RhdHMuYXZnKTtcclxuICBzdHJUb1JlcGxhY2UgPSBzdHJUb1JlcGxhY2UucmVwbGFjZShuZXcgUmVnRXhwKCdfdmFsdWVfY3VycmVudF9yYXdfJywgJ2cnKSwgc3RhdHMuY3VycmVudCk7XHJcbiAgc3RyVG9SZXBsYWNlID0gc3RyVG9SZXBsYWNlLnJlcGxhY2UobmV3IFJlZ0V4cCgnX3ZhbHVlX3RvdGFsX3Jhd18nLCAnZycpLCBzdGF0cy50b3RhbCk7XHJcbiAgc3RyVG9SZXBsYWNlID0gc3RyVG9SZXBsYWNlLnJlcGxhY2UobmV3IFJlZ0V4cCgnX3ZhbHVlX3Jhd18nLCAnZycpLCB2YWx1ZV9yYXcpO1xyXG5cclxuICBzdHJUb1JlcGxhY2UgPSBzdHJUb1JlcGxhY2UucmVwbGFjZShuZXcgUmVnRXhwKCdfdmFsdWVfbWluXycsICdnJyksIGdldF9mb3JtYXR0ZWRfdmFsdWUoc3RhdHMubWluLCBkZWNpbWFscywgZm9ybWF0KSk7XHJcbiAgc3RyVG9SZXBsYWNlID0gc3RyVG9SZXBsYWNlLnJlcGxhY2UobmV3IFJlZ0V4cCgnX3ZhbHVlX21heF8nLCAnZycpLCBnZXRfZm9ybWF0dGVkX3ZhbHVlKHN0YXRzLm1heCwgZGVjaW1hbHMsIGZvcm1hdCkpO1xyXG4gIHN0clRvUmVwbGFjZSA9IHN0clRvUmVwbGFjZS5yZXBsYWNlKG5ldyBSZWdFeHAoJ192YWx1ZV9hdmdfJywgJ2cnKSwgZ2V0X2Zvcm1hdHRlZF92YWx1ZShzdGF0cy5hdmcsIGRlY2ltYWxzLCBmb3JtYXQpKTtcclxuICBzdHJUb1JlcGxhY2UgPSBzdHJUb1JlcGxhY2UucmVwbGFjZShuZXcgUmVnRXhwKCdfdmFsdWVfY3VycmVudF8nLCAnZycpLCBnZXRfZm9ybWF0dGVkX3ZhbHVlKHN0YXRzLmN1cnJlbnQsIGRlY2ltYWxzLCBmb3JtYXQpKTtcclxuICBzdHJUb1JlcGxhY2UgPSBzdHJUb1JlcGxhY2UucmVwbGFjZShuZXcgUmVnRXhwKCdfdmFsdWVfdG90YWxfJywgJ2cnKSwgZ2V0X2Zvcm1hdHRlZF92YWx1ZShzdGF0cy50b3RhbCwgZGVjaW1hbHMsIGZvcm1hdCkpO1xyXG4gIHN0clRvUmVwbGFjZSA9IHN0clRvUmVwbGFjZS5yZXBsYWNlKG5ldyBSZWdFeHAoJ192YWx1ZV8nLCAnZycpLCB2YWx1ZV9mb3JtYXR0ZWQpO1xyXG5cclxuICBpZiAoZGVsaW1pdGVyLnRvTG93ZXJDYXNlKCkgPT09ICd0YWcnKSB7XHJcbiAgICBzdHJUb1JlcGxhY2UgPSBzdHJUb1JlcGxhY2UucmVwbGFjZShuZXcgUmVnRXhwKCd7e21ldHJpY19uYW1lfX0nLCAnZycpLCBfbWV0cmljbmFtZSk7XHJcbiAgICBzdHJUb1JlcGxhY2UgPSByZXBsYWNlX3RhZ3NfZnJvbV9maWVsZChzdHJUb1JlcGxhY2UsIF90YWdzKTtcclxuICB9XHJcblxyXG4gIHJldHVybiBzdHJUb1JlcGxhY2U7XHJcbn07XHJcbiJdfQ== \ No newline at end of file diff --git a/dist/app/boom/BoomTimeBasedThreshold.js b/dist/app/boom/BoomTimeBasedThreshold.js new file mode 100644 index 0000000..1a54655 --- /dev/null +++ b/dist/app/boom/BoomTimeBasedThreshold.js @@ -0,0 +1,22 @@ +System.register([], function (exports_1, context_1) { + "use strict"; + var BoomTimeBasedThreshold; + var __moduleName = context_1 && context_1.id; + return { + setters: [], + execute: function () { + BoomTimeBasedThreshold = (function () { + function BoomTimeBasedThreshold() { + this.enabledDays = 'Sun,Mon,Tue,Wed,Thu,Fri,Sat'; + this.from = '0000'; + this.name = 'Early morning of everyday'; + this.threshold = '70,90'; + this.to = '0530'; + } + return BoomTimeBasedThreshold; + }()); + exports_1("BoomTimeBasedThreshold", BoomTimeBasedThreshold); + } + }; +}); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQm9vbVRpbWVCYXNlZFRocmVzaG9sZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcHAvYm9vbS9Cb29tVGltZUJhc2VkVGhyZXNob2xkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7WUFFQTtnQkFNRTtvQkFDRSxJQUFJLENBQUMsV0FBVyxHQUFHLDZCQUE2QixDQUFDO29CQUNqRCxJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztvQkFDbkIsSUFBSSxDQUFDLElBQUksR0FBRywyQkFBMkIsQ0FBQztvQkFDeEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUM7b0JBQ3pCLElBQUksQ0FBQyxFQUFFLEdBQUcsTUFBTSxDQUFDO2dCQUNuQixDQUFDO2dCQUNILDZCQUFDO1lBQUQsQ0FBQyxBQWJELElBYUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJQm9vbVRpbWVCYXNlZFRocmVzaG9sZCB9IGZyb20gJy4vaW5kZXgnO1xuXG5jbGFzcyBCb29tVGltZUJhc2VkVGhyZXNob2xkIGltcGxlbWVudHMgSUJvb21UaW1lQmFzZWRUaHJlc2hvbGQge1xuICBwdWJsaWMgZW5hYmxlZERheXM6IHN0cmluZztcbiAgcHVibGljIGZyb206IHN0cmluZztcbiAgcHVibGljIG5hbWU6IHN0cmluZztcbiAgcHVibGljIHRocmVzaG9sZDogc3RyaW5nO1xuICBwdWJsaWMgdG86IHN0cmluZztcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5lbmFibGVkRGF5cyA9ICdTdW4sTW9uLFR1ZSxXZWQsVGh1LEZyaSxTYXQnO1xuICAgIHRoaXMuZnJvbSA9ICcwMDAwJztcbiAgICB0aGlzLm5hbWUgPSAnRWFybHkgbW9ybmluZyBvZiBldmVyeWRheSc7XG4gICAgdGhpcy50aHJlc2hvbGQgPSAnNzAsOTAnO1xuICAgIHRoaXMudG8gPSAnMDUzMCc7XG4gIH1cbn1cblxuZXhwb3J0IHsgQm9vbVRpbWVCYXNlZFRocmVzaG9sZCB9O1xuIl19 \ No newline at end of file diff --git a/dist/app/boom/BoomUtils.js b/dist/app/boom/BoomUtils.js new file mode 100644 index 0000000..367e7d9 --- /dev/null +++ b/dist/app/boom/BoomUtils.js @@ -0,0 +1,300 @@ +System.register(["lodash"], function (exports_1, context_1) { + "use strict"; + var lodash_1, normalizeColor, parseMath, parseMathExpression, getColor, replaceTokens, getActualNameWithoutTokens, getItemBasedOnThreshold, getMetricNameFromTaggedAlias, getLablesFromTaggedAlias, replace_tags_from_field, getSeriesValue, getCurrentTimeStamp, replaceDelimitedColumns, getRowName, getColName, getDisplayValueTemplate, doesValueNeedsToHide; + var __moduleName = context_1 && context_1.id; + return { + setters: [ + function (lodash_1_1) { + lodash_1 = lodash_1_1; + } + ], + execute: function () { + exports_1("normalizeColor", normalizeColor = function (color) { + if (color.toLowerCase() === 'green') { + return 'rgba(50, 172, 45, 0.97)'; + } + else if (color.toLowerCase() === 'orange') { + return 'rgba(237, 129, 40, 0.89)'; + } + else if (color.toLowerCase() === 'red') { + return 'rgba(245, 54, 54, 0.9)'; + } + else { + return color.trim(); + } + }); + exports_1("parseMath", parseMath = function (valuestring) { + var returnvalue = 0; + if (valuestring.indexOf('+') > -1) { + returnvalue = +valuestring.split('+')[0] + +valuestring.split('+')[1]; + } + else if (valuestring.indexOf('-') > -1) { + returnvalue = +valuestring.split('-')[0] - +valuestring.split('-')[1]; + } + else if (valuestring.indexOf('*') > -1) { + returnvalue = +valuestring.split('*')[0] * +valuestring.split('*')[1]; + } + else if (valuestring.indexOf('/') > -1) { + returnvalue = +valuestring.split('/')[0] / +valuestring.split('/')[1]; + } + else if (valuestring.indexOf('min') > -1) { + returnvalue = lodash_1.default.min([+valuestring.split('min')[0], +valuestring.split('min')[1]]) || 0; + } + else if (valuestring.indexOf('max') > -1) { + returnvalue = lodash_1.default.max([+valuestring.split('max')[0], +valuestring.split('max')[1]]) || 0; + } + else if (valuestring.indexOf('mean') > -1) { + returnvalue = lodash_1.default.mean([+valuestring.split('avg')[0], +valuestring.split('avg')[1]]) || 0; + } + else { + returnvalue = +valuestring; + } + return Math.round(+returnvalue); + }); + exports_1("parseMathExpression", parseMathExpression = function (expression, index) { + var valuestring = expression.replace(/\_/g, '').split(',')[index]; + return +parseMath(valuestring); + }); + exports_1("getColor", getColor = function (expression, index) { + var returnValue = (expression || '').split(',').length > index ? " style=\"color:" + normalizeColor(expression.replace(/\_/g, '').split(',')[index]) + "\" " : ''; + return returnValue; + }); + exports_1("replaceTokens", replaceTokens = function (value) { + if (!value) { + return value; + } + value = value + ''; + value = value + .split(' ') + .map(function (a) { + if (a.startsWith('_fa-') && a.endsWith('_')) { + var returnvalue = ''; + var icon = a.replace(/\_/g, '').split(',')[0]; + var color = getColor(a, 1); + var repeatCount = a.split(',').length >= 3 ? parseMathExpression(a, 2) : 1; + returnvalue = (" ").repeat(repeatCount); + if (a.split(',').length >= 4) { + var maxColor = getColor(a, 3); + var maxLength = a.split(',').length >= 5 ? parseMathExpression(a, 4) : 0; + returnvalue += (" ").repeat(lodash_1.default.max([maxLength - repeatCount, 0]) || 0); + } + return returnvalue; + } + else if (a.startsWith('_img-') && a.endsWith('_')) { + a = a.slice(0, -1); + var imgUrl = a.replace('_img-', '').split(',')[0]; + var imgWidth = a.split(',').length > 1 ? a.replace('_img-', '').split(',')[1] : '20px'; + var imgHeight = a.split(',').length > 2 ? a.replace('_img-', '').split(',')[2] : '20px'; + var repeatCount = a.split(',').length > 3 ? +a.replace('_img-', '').split(',')[3] : 1; + a = ("").repeat(repeatCount); + } + return a; + }) + .join(' '); + return value; + }); + exports_1("getActualNameWithoutTokens", getActualNameWithoutTokens = function (value) { + if (!value) { + return value + ''; + } + value = value + ''; + return value + .split(' ') + .map(function (a) { + if (a.startsWith('_fa-') && a.endsWith('_')) { + a = ""; + } + else if (a.startsWith('_img-') && a.endsWith('_')) { + a = ""; + } + return a; + }) + .join(' '); + }); + exports_1("getItemBasedOnThreshold", getItemBasedOnThreshold = function (thresholds, ranges, value, defaultValue) { + var c = defaultValue; + if (thresholds && ranges && typeof value === 'number' && thresholds.length + 1 <= ranges.length) { + ranges = lodash_1.default.dropRight(ranges, ranges.length - thresholds.length - 1); + if (ranges[ranges.length - 1] === '') { + ranges[ranges.length - 1] = defaultValue; + } + for (var i = thresholds.length; i > 0; i--) { + if (value >= thresholds[i - 1]) { + return ranges[i]; + } + } + return lodash_1.default.first(ranges) || ''; + } + return c; + }); + exports_1("getMetricNameFromTaggedAlias", getMetricNameFromTaggedAlias = function (target) { + target = target.trim(); + var _metricname = target; + if (target.indexOf('{') > -1 && target.indexOf('}') > -1 && target[target.length - 1] === '}') { + _metricname = target.split('{')[0].trim(); + } + else { + _metricname = target; + } + return _metricname; + }); + exports_1("getLablesFromTaggedAlias", getLablesFromTaggedAlias = function (target, label) { + var _tags = []; + target = target.trim(); + var tagsstring = target.replace(label, '').trim(); + if (tagsstring.startsWith('{') && tagsstring.endsWith('}')) { + var parsePrometheusLabels = function (labels) { + var labelsByKey = {}; + labels.replace(/\b(\w+)(!?=~?)"([^"\n]*?)"/g, function (__, key, operator, value) { + if (!operator) { + console.log(operator); + } + labelsByKey[key] = value; + return ''; + }); + return labelsByKey; + }; + lodash_1.default.each(parsePrometheusLabels(tagsstring), function (k, v) { + _tags.push({ tag: v, value: k }); + }); + if (tagsstring.indexOf(':') > -1 && _tags.length === 0) { + var label_values = tagsstring + .slice(1) + .trim() + .slice(0, -1) + .trim() || ''; + _tags = label_values + .split(',') + .map(function (item) { return (item || '').trim(); }) + .filter(function (item) { return item && item.indexOf(':') > -1; }) + .map(function (item) { + if (item.split(':').length === 2) { + var ret = {}; + ret.tag = item.split(':')[0].trim(); + ret.value = item.split(':')[1].trim(); + return ret; + } + else { + return null; + } + }) + .filter(function (item) { return item; }); + } + } + return _tags; + }); + exports_1("replace_tags_from_field", replace_tags_from_field = function (field, tags) { + if (tags && tags.length > 0) { + field = tags.reduce(function (r, it) { + return r.replace(new RegExp('{{' + it.tag.trim() + '}}', 'g'), it.value).replace(/\"/g, ''); + }, field); + } + return field; + }); + exports_1("getSeriesValue", getSeriesValue = function (series, statType) { + var value = NaN; + statType = (statType || '').toLowerCase(); + if (series) { + if (statType === 'last_time' && series.datapoints && series.datapoints.length > 0) { + if (lodash_1.default.last(series.datapoints)) { + value = lodash_1.default.last(series.datapoints)[1]; + } + } + else if (statType === 'last_time_nonnull') { + var non_null_data = series.datapoints.filter(function (s) { return s[0]; }); + if (lodash_1.default.last(non_null_data) && lodash_1.default.last(non_null_data)[1]) { + value = lodash_1.default.last(non_null_data)[1]; + } + } + else if (series.stats) { + value = series.stats[statType] || null; + } + } + return value; + }); + exports_1("getCurrentTimeStamp", getCurrentTimeStamp = function (dataPoints) { + var currentTimeStamp = new Date(); + if (dataPoints && dataPoints.length > 0 && lodash_1.default.last(dataPoints).length === 2) { + currentTimeStamp = new Date(lodash_1.default.last(dataPoints)[1]); + } + return currentTimeStamp; + }); + exports_1("replaceDelimitedColumns", replaceDelimitedColumns = function (inputstring, seriesName, delimiter, row_col_wrapper) { + var outputString = seriesName.split(delimiter || '.').reduce(function (r, it, i) { + return r.replace(new RegExp(row_col_wrapper + i + row_col_wrapper, 'g'), it); + }, inputstring); + return outputString; + }); + exports_1("getRowName", getRowName = function (row_name, delimiter, row_col_wrapper, seriesName, _metricname, _tags) { + if (delimiter.toLowerCase() === 'tag') { + row_name = row_name.replace(new RegExp('{{metric_name}}', 'g'), _metricname); + row_name = replace_tags_from_field(row_name, _tags); + } + else { + row_name = replaceDelimitedColumns(row_name, seriesName, delimiter, row_col_wrapper); + if (seriesName.split(delimiter || '.').length === 1) { + row_name = seriesName; + } + } + return row_name.replace(new RegExp('_series_', 'g'), seriesName.toString()); + }); + exports_1("getColName", getColName = function (col_name, delimiter, row_col_wrapper, seriesName, row_name, _metricname, _tags) { + if (delimiter.toLowerCase() === 'tag') { + col_name = col_name.replace(new RegExp('{{metric_name}}', 'g'), _metricname); + row_name = replace_tags_from_field(col_name, _tags); + } + else { + col_name = replaceDelimitedColumns(col_name, seriesName, delimiter, row_col_wrapper); + if (seriesName.split(delimiter || '.').length === 1 || row_name === seriesName) { + col_name = col_name || 'Value'; + } + } + return col_name.replace(new RegExp('_series_', 'g'), seriesName.toString()); + }); + exports_1("getDisplayValueTemplate", getDisplayValueTemplate = function (value, pattern, seriesName, row_col_wrapper, thresholds) { + var template = '_value_'; + if (lodash_1.default.isNaN(value) || value === null) { + template = pattern.null_value || 'No data'; + if (pattern.null_value === '') { + template = ''; + } + } + else { + template = pattern.displayTemplate || template; + if (pattern.enable_transform) { + var transform_values = pattern.transform_values.split('|'); + template = getItemBasedOnThreshold(thresholds, transform_values, value, template); + } + if (pattern.enable_transform_overrides && pattern.transform_values_overrides !== '') { + var _transform_values_overrides = pattern.transform_values_overrides + .split('|') + .filter(function (con) { return con.indexOf('->'); }) + .map(function (con) { return con.split('->'); }) + .filter(function (con) { return +con[0] === value; }) + .map(function (con) { return con[1]; }); + if (_transform_values_overrides.length > 0 && _transform_values_overrides[0] !== '') { + template = ('' + _transform_values_overrides[0]).trim(); + } + } + if (pattern.enable_transform || pattern.enable_transform_overrides) { + template = replaceDelimitedColumns(template, seriesName, pattern.delimiter, row_col_wrapper); + } + } + return template; + }); + exports_1("doesValueNeedsToHide", doesValueNeedsToHide = function (value, filter) { + var hidden = false; + if ((value || value === 0) && filter && (filter.value_below !== '' || filter.value_above !== '')) { + if (filter.value_below !== '' && value < +filter.value_below) { + hidden = true; + } + if (filter.value_above !== '' && value > +filter.value_above) { + hidden = true; + } + } + return hidden; + }); + } + }; +}); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQm9vbVV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwcC9ib29tL0Jvb21VdGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztZQUdBLDRCQUFhLGNBQWMsR0FBRyxVQUFVLEtBQWE7Z0JBQ25ELElBQUksS0FBSyxDQUFDLFdBQVcsRUFBRSxLQUFLLE9BQU8sRUFBRTtvQkFDbkMsT0FBTyx5QkFBeUIsQ0FBQztpQkFDbEM7cUJBQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFLEtBQUssUUFBUSxFQUFFO29CQUMzQyxPQUFPLDBCQUEwQixDQUFDO2lCQUNuQztxQkFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUUsS0FBSyxLQUFLLEVBQUU7b0JBQ3hDLE9BQU8sd0JBQXdCLENBQUM7aUJBQ2pDO3FCQUFNO29CQUNMLE9BQU8sS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO2lCQUNyQjtZQUNILENBQUMsRUFBQztZQUNGLHVCQUFhLFNBQVMsR0FBRyxVQUFVLFdBQW1CO2dCQUNwRCxJQUFJLFdBQVcsR0FBRyxDQUFDLENBQUM7Z0JBQ3BCLElBQUksV0FBVyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtvQkFDakMsV0FBVyxHQUFHLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ3ZFO3FCQUFNLElBQUksV0FBVyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtvQkFDeEMsV0FBVyxHQUFHLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ3ZFO3FCQUFNLElBQUksV0FBVyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtvQkFDeEMsV0FBVyxHQUFHLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ3ZFO3FCQUFNLElBQUksV0FBVyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtvQkFDeEMsV0FBVyxHQUFHLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQ3ZFO3FCQUFNLElBQUksV0FBVyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtvQkFDMUMsV0FBVyxHQUFHLGdCQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUN4RjtxQkFBTSxJQUFJLFdBQVcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7b0JBQzFDLFdBQVcsR0FBRyxnQkFBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDeEY7cUJBQU0sSUFBSSxXQUFXLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO29CQUMzQyxXQUFXLEdBQUcsZ0JBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7aUJBQ3pGO3FCQUFNO29CQUNMLFdBQVcsR0FBRyxDQUFDLFdBQVcsQ0FBQztpQkFDNUI7Z0JBQ0QsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDbEMsQ0FBQyxFQUFDO1lBQ0YsaUNBQWEsbUJBQW1CLEdBQUcsVUFBVSxVQUFrQixFQUFFLEtBQWE7Z0JBQzVFLElBQUksV0FBVyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDbEUsT0FBTyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNqQyxDQUFDLEVBQUM7WUFDRixzQkFBYSxRQUFRLEdBQUcsVUFBVSxVQUFrQixFQUFFLEtBQWE7Z0JBQ2pFLElBQUksV0FBVyxHQUNiLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxvQkFBaUIsY0FBYyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDM0ksT0FBTyxXQUFXLENBQUM7WUFDckIsQ0FBQyxFQUFDO1lBQ0YsMkJBQWEsYUFBYSxHQUFHLFVBQVUsS0FBYTtnQkFDbEQsSUFBSSxDQUFDLEtBQUssRUFBRTtvQkFDVixPQUFPLEtBQUssQ0FBQztpQkFDZDtnQkFDRCxLQUFLLEdBQUcsS0FBSyxHQUFHLEVBQUUsQ0FBQztnQkFDbkIsS0FBSyxHQUFHLEtBQUs7cUJBQ1YsS0FBSyxDQUFDLEdBQUcsQ0FBQztxQkFDVixHQUFHLENBQUMsVUFBQSxDQUFDO29CQUNKLElBQUksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFO3dCQUMzQyxJQUFJLFdBQVcsR0FBRyxFQUFFLENBQUM7d0JBQ3JCLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDOUMsSUFBSSxLQUFLLEdBQUcsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzt3QkFDM0IsSUFBSSxXQUFXLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDM0UsV0FBVyxHQUFHLENBQUEsbUJBQWdCLElBQUksV0FBSyxLQUFLLFdBQVEsQ0FBQSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQzt3QkFDekUsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7NEJBQzVCLElBQUksUUFBUSxHQUFHLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7NEJBQzlCLElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7NEJBQ3pFLFdBQVcsSUFBSSxDQUFBLG1CQUFnQixJQUFJLFdBQUssUUFBUSxXQUFRLENBQUEsQ0FBQyxNQUFNLENBQUMsZ0JBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLEdBQUcsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7eUJBQzNHO3dCQUNELE9BQU8sV0FBVyxDQUFDO3FCQUNwQjt5QkFBTSxJQUFJLENBQUMsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTt3QkFDbkQsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQ25CLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDbEQsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQzt3QkFDdkYsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQzt3QkFDeEYsSUFBSSxXQUFXLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUN0RixDQUFDLEdBQUcsQ0FBQSxrQkFBZSxRQUFRLG9CQUFhLFNBQVMsaUJBQVUsTUFBTSxTQUFLLENBQUEsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7cUJBQzVGO29CQUNELE9BQU8sQ0FBQyxDQUFDO2dCQUNYLENBQUMsQ0FBQztxQkFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ2IsT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDLEVBQUM7WUFDRix3Q0FBYSwwQkFBMEIsR0FBRyxVQUFVLEtBQWE7Z0JBQy9ELElBQUksQ0FBQyxLQUFLLEVBQUU7b0JBQ1YsT0FBTyxLQUFLLEdBQUcsRUFBRSxDQUFDO2lCQUNuQjtnQkFDRCxLQUFLLEdBQUcsS0FBSyxHQUFHLEVBQUUsQ0FBQztnQkFDbkIsT0FBTyxLQUFLO3FCQUNULEtBQUssQ0FBQyxHQUFHLENBQUM7cUJBQ1YsR0FBRyxDQUFDLFVBQUEsQ0FBQztvQkFDSixJQUFJLENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTt3QkFDM0MsQ0FBQyxHQUFHLEVBQUUsQ0FBQztxQkFDUjt5QkFBTSxJQUFJLENBQUMsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTt3QkFDbkQsQ0FBQyxHQUFHLEVBQUUsQ0FBQztxQkFDUjtvQkFDRCxPQUFPLENBQUMsQ0FBQztnQkFDWCxDQUFDLENBQUM7cUJBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2YsQ0FBQyxFQUFDO1lBQ0YscUNBQWEsdUJBQXVCLEdBQUcsVUFBVSxVQUFpQixFQUFFLE1BQVcsRUFBRSxLQUFhLEVBQUUsWUFBb0I7Z0JBQ2xILElBQUksQ0FBQyxHQUFHLFlBQVksQ0FBQztnQkFDckIsSUFBSSxVQUFVLElBQUksTUFBTSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFO29CQUMvRixNQUFNLEdBQUcsZ0JBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNLEdBQUcsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztvQkFDcEUsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7d0JBQ3BDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLFlBQVksQ0FBQztxQkFDMUM7b0JBQ0QsS0FBSyxJQUFJLENBQUMsR0FBRyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7d0JBQzFDLElBQUksS0FBSyxJQUFJLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7NEJBQzlCLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO3lCQUNsQjtxQkFDRjtvQkFDRCxPQUFPLGdCQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztpQkFDOUI7Z0JBQ0QsT0FBTyxDQUFDLENBQUM7WUFDWCxDQUFDLEVBQUM7WUFDRiwwQ0FBYSw0QkFBNEIsR0FBRyxVQUFVLE1BQU07Z0JBQzFELE1BQU0sR0FBRyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ3ZCLElBQUksV0FBVyxHQUFHLE1BQU0sQ0FBQztnQkFDekIsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFO29CQUM3RixXQUFXLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztpQkFDM0M7cUJBQU07b0JBQ0wsV0FBVyxHQUFHLE1BQU0sQ0FBQztpQkFDdEI7Z0JBQ0QsT0FBTyxXQUFXLENBQUM7WUFDckIsQ0FBQyxFQUFDO1lBQ0Ysc0NBQWEsd0JBQXdCLEdBQUcsVUFBVSxNQUFNLEVBQUUsS0FBSztnQkFDN0QsSUFBSSxLQUFLLEdBQVUsRUFBRSxDQUFDO2dCQUN0QixNQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUN2QixJQUFJLFVBQVUsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDbEQsSUFBSSxVQUFVLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7b0JBRTFELElBQU0scUJBQXFCLEdBQUcsVUFBVSxNQUFjO3dCQUNwRCxJQUFNLFdBQVcsR0FBUSxFQUFFLENBQUM7d0JBQzVCLE1BQU0sQ0FBQyxPQUFPLENBQUMsNkJBQTZCLEVBQUUsVUFBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxLQUFLOzRCQUNyRSxJQUFJLENBQUMsUUFBUSxFQUFFO2dDQUNiLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7NkJBQ3ZCOzRCQUNELFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7NEJBQ3pCLE9BQU8sRUFBRSxDQUFDO3dCQUNaLENBQUMsQ0FBQyxDQUFDO3dCQUNILE9BQU8sV0FBVyxDQUFDO29CQUNyQixDQUFDLENBQUM7b0JBQ0YsZ0JBQUMsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsVUFBVSxDQUFDLEVBQUUsVUFBQyxDQUFTLEVBQUUsQ0FBUzt3QkFDN0QsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ25DLENBQUMsQ0FBQyxDQUFDO29CQUNILElBQUksVUFBVSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTt3QkFDdEQsSUFBSSxZQUFZLEdBQ2QsVUFBVTs2QkFDUCxLQUFLLENBQUMsQ0FBQyxDQUFDOzZCQUNSLElBQUksRUFBRTs2QkFDTixLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDOzZCQUNaLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQzt3QkFDbEIsS0FBSyxHQUFHLFlBQVk7NkJBQ2pCLEtBQUssQ0FBQyxHQUFHLENBQUM7NkJBQ1YsR0FBRyxDQUFDLFVBQUEsSUFBSSxJQUFJLE9BQUEsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQW5CLENBQW1CLENBQUM7NkJBQ2hDLE1BQU0sQ0FBQyxVQUFBLElBQUksSUFBSSxPQUFBLElBQUksSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUE5QixDQUE4QixDQUFDOzZCQUM5QyxHQUFHLENBQUMsVUFBQSxJQUFJOzRCQUNQLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO2dDQUNoQyxJQUFJLEdBQUcsR0FBUSxFQUFFLENBQUM7Z0NBQ2xCLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQ0FDcEMsR0FBRyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO2dDQUN0QyxPQUFPLEdBQUcsQ0FBQzs2QkFDWjtpQ0FBTTtnQ0FDTCxPQUFPLElBQUksQ0FBQzs2QkFDYjt3QkFDSCxDQUFDLENBQUM7NkJBQ0QsTUFBTSxDQUFDLFVBQUEsSUFBSSxJQUFJLE9BQUEsSUFBSSxFQUFKLENBQUksQ0FBQyxDQUFDO3FCQUN6QjtpQkFDRjtnQkFDRCxPQUFPLEtBQUssQ0FBQztZQUNmLENBQUMsRUFBQztZQUNGLHFDQUFhLHVCQUF1QixHQUFHLFVBQVUsS0FBYSxFQUFFLElBQVc7Z0JBQ3pFLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO29CQUMzQixLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFDLENBQUMsRUFBRSxFQUFFO3dCQUN4QixPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxNQUFNLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO29CQUM5RixDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7aUJBQ1g7Z0JBQ0QsT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDLEVBQUM7WUFDRiw0QkFBYSxjQUFjLEdBQUcsVUFBVSxNQUFXLEVBQUUsUUFBZ0I7Z0JBQ25FLElBQUksS0FBSyxHQUFHLEdBQUcsQ0FBQztnQkFDaEIsUUFBUSxHQUFHLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUMxQyxJQUFJLE1BQU0sRUFBRTtvQkFDVixJQUFJLFFBQVEsS0FBSyxXQUFXLElBQUksTUFBTSxDQUFDLFVBQVUsSUFBSSxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7d0JBQ2pGLElBQUksZ0JBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxFQUFFOzRCQUM3QixLQUFLLEdBQUcsZ0JBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO3lCQUN0QztxQkFDRjt5QkFBTSxJQUFJLFFBQVEsS0FBSyxtQkFBbUIsRUFBRTt3QkFDM0MsSUFBSSxhQUFhLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsVUFBQSxDQUFDLElBQUksT0FBQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUosQ0FBSSxDQUFDLENBQUM7d0JBQ3hELElBQUksZ0JBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksZ0JBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7NEJBQ3JELEtBQUssR0FBRyxnQkFBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzt5QkFDbEM7cUJBQ0Y7eUJBQU0sSUFBSSxNQUFNLENBQUMsS0FBSyxFQUFFO3dCQUN2QixLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLENBQUM7cUJBQ3hDO2lCQUNGO2dCQUNELE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQyxFQUFDO1lBQ0YsaUNBQWEsbUJBQW1CLEdBQUcsVUFBVSxVQUFpQjtnQkFDNUQsSUFBSSxnQkFBZ0IsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUNsQyxJQUFJLFVBQVUsSUFBSSxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxnQkFBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO29CQUMxRSxnQkFBZ0IsR0FBRyxJQUFJLElBQUksQ0FBQyxnQkFBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUNwRDtnQkFDRCxPQUFPLGdCQUFnQixDQUFDO1lBQzFCLENBQUMsRUFBQztZQUNGLHFDQUFhLHVCQUF1QixHQUFHLFVBQVUsV0FBbUIsRUFBRSxVQUFrQixFQUFFLFNBQWlCLEVBQUUsZUFBdUI7Z0JBQ2xJLElBQUksWUFBWSxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsU0FBUyxJQUFJLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztvQkFDcEUsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksTUFBTSxDQUFDLGVBQWUsR0FBRyxDQUFDLEdBQUcsZUFBZSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUMvRSxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUM7Z0JBQ2hCLE9BQU8sWUFBWSxDQUFDO1lBQ3RCLENBQUMsRUFBQztZQUNGLHdCQUFhLFVBQVUsR0FBRyxVQUN4QixRQUFnQixFQUNoQixTQUFpQixFQUNqQixlQUF1QixFQUN2QixVQUFrQixFQUNsQixXQUFtQixFQUNuQixLQUFZO2dCQUVaLElBQUksU0FBUyxDQUFDLFdBQVcsRUFBRSxLQUFLLEtBQUssRUFBRTtvQkFDckMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxNQUFNLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUM7b0JBQzdFLFFBQVEsR0FBRyx1QkFBdUIsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7aUJBQ3JEO3FCQUFNO29CQUNMLFFBQVEsR0FBRyx1QkFBdUIsQ0FBQyxRQUFRLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxlQUFlLENBQUMsQ0FBQztvQkFDckYsSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLFNBQVMsSUFBSSxHQUFHLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO3dCQUNuRCxRQUFRLEdBQUcsVUFBVSxDQUFDO3FCQUN2QjtpQkFDRjtnQkFDRCxPQUFPLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQzlFLENBQUMsRUFBQztZQUNGLHdCQUFhLFVBQVUsR0FBRyxVQUN4QixRQUFnQixFQUNoQixTQUFpQixFQUNqQixlQUF1QixFQUN2QixVQUFrQixFQUNsQixRQUFnQixFQUNoQixXQUFtQixFQUNuQixLQUFZO2dCQUVaLElBQUksU0FBUyxDQUFDLFdBQVcsRUFBRSxLQUFLLEtBQUssRUFBRTtvQkFDckMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxNQUFNLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUM7b0JBQzdFLFFBQVEsR0FBRyx1QkFBdUIsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7aUJBQ3JEO3FCQUFNO29CQUNMLFFBQVEsR0FBRyx1QkFBdUIsQ0FBQyxRQUFRLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxlQUFlLENBQUMsQ0FBQztvQkFDckYsSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLFNBQVMsSUFBSSxHQUFHLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLFFBQVEsS0FBSyxVQUFVLEVBQUU7d0JBQzlFLFFBQVEsR0FBRyxRQUFRLElBQUksT0FBTyxDQUFDO3FCQUNoQztpQkFDRjtnQkFDRCxPQUFPLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQzlFLENBQUMsRUFBQztZQUNGLHFDQUFhLHVCQUF1QixHQUFHLFVBQ3JDLEtBQWEsRUFDYixPQUFxQixFQUNyQixVQUFrQixFQUNsQixlQUF1QixFQUN2QixVQUFpQjtnQkFFakIsSUFBSSxRQUFRLEdBQUcsU0FBUyxDQUFDO2dCQUN6QixJQUFJLGdCQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssS0FBSyxJQUFJLEVBQUU7b0JBQ3BDLFFBQVEsR0FBRyxPQUFPLENBQUMsVUFBVSxJQUFJLFNBQVMsQ0FBQztvQkFDM0MsSUFBSSxPQUFPLENBQUMsVUFBVSxLQUFLLEVBQUUsRUFBRTt3QkFDN0IsUUFBUSxHQUFHLEVBQUUsQ0FBQztxQkFDZjtpQkFDRjtxQkFBTTtvQkFDTCxRQUFRLEdBQUcsT0FBTyxDQUFDLGVBQWUsSUFBSSxRQUFRLENBQUM7b0JBQy9DLElBQUksT0FBTyxDQUFDLGdCQUFnQixFQUFFO3dCQUM1QixJQUFJLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7d0JBQzNELFFBQVEsR0FBRyx1QkFBdUIsQ0FBQyxVQUFVLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO3FCQUNuRjtvQkFDRCxJQUFJLE9BQU8sQ0FBQywwQkFBMEIsSUFBSSxPQUFPLENBQUMsMEJBQTBCLEtBQUssRUFBRSxFQUFFO3dCQUNuRixJQUFJLDJCQUEyQixHQUFHLE9BQU8sQ0FBQywwQkFBMEI7NkJBQ2pFLEtBQUssQ0FBQyxHQUFHLENBQUM7NkJBQ1YsTUFBTSxDQUFDLFVBQUEsR0FBRyxJQUFJLE9BQUEsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBakIsQ0FBaUIsQ0FBQzs2QkFDaEMsR0FBRyxDQUFDLFVBQUEsR0FBRyxJQUFJLE9BQUEsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBZixDQUFlLENBQUM7NkJBQzNCLE1BQU0sQ0FBQyxVQUFBLEdBQUcsSUFBSSxPQUFBLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssRUFBakIsQ0FBaUIsQ0FBQzs2QkFDaEMsR0FBRyxDQUFDLFVBQUEsR0FBRyxJQUFJLE9BQUEsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFOLENBQU0sQ0FBQyxDQUFDO3dCQUN0QixJQUFJLDJCQUEyQixDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksMkJBQTJCLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFOzRCQUNuRixRQUFRLEdBQUcsQ0FBQyxFQUFFLEdBQUcsMkJBQTJCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQzt5QkFDekQ7cUJBQ0Y7b0JBQ0QsSUFBSSxPQUFPLENBQUMsZ0JBQWdCLElBQUksT0FBTyxDQUFDLDBCQUEwQixFQUFFO3dCQUNsRSxRQUFRLEdBQUcsdUJBQXVCLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxPQUFPLENBQUMsU0FBUyxFQUFFLGVBQWUsQ0FBQyxDQUFDO3FCQUM5RjtpQkFDRjtnQkFDRCxPQUFPLFFBQVEsQ0FBQztZQUNsQixDQUFDLEVBQUM7WUFDRixrQ0FBYSxvQkFBb0IsR0FBRyxVQUFVLEtBQWEsRUFBRSxNQUFXO2dCQUN0RSxJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUM7Z0JBQ25CLElBQUksQ0FBQyxLQUFLLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQyxJQUFJLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEtBQUssRUFBRSxJQUFJLE1BQU0sQ0FBQyxXQUFXLEtBQUssRUFBRSxDQUFDLEVBQUU7b0JBQ2hHLElBQUksTUFBTSxDQUFDLFdBQVcsS0FBSyxFQUFFLElBQUksS0FBSyxHQUFHLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRTt3QkFDNUQsTUFBTSxHQUFHLElBQUksQ0FBQztxQkFDZjtvQkFDRCxJQUFJLE1BQU0sQ0FBQyxXQUFXLEtBQUssRUFBRSxJQUFJLEtBQUssR0FBRyxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUU7d0JBQzVELE1BQU0sR0FBRyxJQUFJLENBQUM7cUJBQ2Y7aUJBQ0Y7Z0JBQ0QsT0FBTyxNQUFNLENBQUM7WUFDaEIsQ0FBQyxFQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcclxuaW1wb3J0IHsgSUJvb21QYXR0ZXJuIH0gZnJvbSAnLi9Cb29tLmludGVyZmFjZSc7XHJcblxyXG5leHBvcnQgY29uc3Qgbm9ybWFsaXplQ29sb3IgPSBmdW5jdGlvbiAoY29sb3I6IHN0cmluZykge1xyXG4gIGlmIChjb2xvci50b0xvd2VyQ2FzZSgpID09PSAnZ3JlZW4nKSB7XHJcbiAgICByZXR1cm4gJ3JnYmEoNTAsIDE3MiwgNDUsIDAuOTcpJztcclxuICB9IGVsc2UgaWYgKGNvbG9yLnRvTG93ZXJDYXNlKCkgPT09ICdvcmFuZ2UnKSB7XHJcbiAgICByZXR1cm4gJ3JnYmEoMjM3LCAxMjksIDQwLCAwLjg5KSc7XHJcbiAgfSBlbHNlIGlmIChjb2xvci50b0xvd2VyQ2FzZSgpID09PSAncmVkJykge1xyXG4gICAgcmV0dXJuICdyZ2JhKDI0NSwgNTQsIDU0LCAwLjkpJztcclxuICB9IGVsc2Uge1xyXG4gICAgcmV0dXJuIGNvbG9yLnRyaW0oKTtcclxuICB9XHJcbn07XHJcbmV4cG9ydCBjb25zdCBwYXJzZU1hdGggPSBmdW5jdGlvbiAodmFsdWVzdHJpbmc6IHN0cmluZyk6IG51bWJlciB7XHJcbiAgbGV0IHJldHVybnZhbHVlID0gMDtcclxuICBpZiAodmFsdWVzdHJpbmcuaW5kZXhPZignKycpID4gLTEpIHtcclxuICAgIHJldHVybnZhbHVlID0gK3ZhbHVlc3RyaW5nLnNwbGl0KCcrJylbMF0gKyArdmFsdWVzdHJpbmcuc3BsaXQoJysnKVsxXTtcclxuICB9IGVsc2UgaWYgKHZhbHVlc3RyaW5nLmluZGV4T2YoJy0nKSA+IC0xKSB7XHJcbiAgICByZXR1cm52YWx1ZSA9ICt2YWx1ZXN0cmluZy5zcGxpdCgnLScpWzBdIC0gK3ZhbHVlc3RyaW5nLnNwbGl0KCctJylbMV07XHJcbiAgfSBlbHNlIGlmICh2YWx1ZXN0cmluZy5pbmRleE9mKCcqJykgPiAtMSkge1xyXG4gICAgcmV0dXJudmFsdWUgPSArdmFsdWVzdHJpbmcuc3BsaXQoJyonKVswXSAqICt2YWx1ZXN0cmluZy5zcGxpdCgnKicpWzFdO1xyXG4gIH0gZWxzZSBpZiAodmFsdWVzdHJpbmcuaW5kZXhPZignLycpID4gLTEpIHtcclxuICAgIHJldHVybnZhbHVlID0gK3ZhbHVlc3RyaW5nLnNwbGl0KCcvJylbMF0gLyArdmFsdWVzdHJpbmcuc3BsaXQoJy8nKVsxXTtcclxuICB9IGVsc2UgaWYgKHZhbHVlc3RyaW5nLmluZGV4T2YoJ21pbicpID4gLTEpIHtcclxuICAgIHJldHVybnZhbHVlID0gXy5taW4oWyt2YWx1ZXN0cmluZy5zcGxpdCgnbWluJylbMF0sICt2YWx1ZXN0cmluZy5zcGxpdCgnbWluJylbMV1dKSB8fCAwO1xyXG4gIH0gZWxzZSBpZiAodmFsdWVzdHJpbmcuaW5kZXhPZignbWF4JykgPiAtMSkge1xyXG4gICAgcmV0dXJudmFsdWUgPSBfLm1heChbK3ZhbHVlc3RyaW5nLnNwbGl0KCdtYXgnKVswXSwgK3ZhbHVlc3RyaW5nLnNwbGl0KCdtYXgnKVsxXV0pIHx8IDA7XHJcbiAgfSBlbHNlIGlmICh2YWx1ZXN0cmluZy5pbmRleE9mKCdtZWFuJykgPiAtMSkge1xyXG4gICAgcmV0dXJudmFsdWUgPSBfLm1lYW4oWyt2YWx1ZXN0cmluZy5zcGxpdCgnYXZnJylbMF0sICt2YWx1ZXN0cmluZy5zcGxpdCgnYXZnJylbMV1dKSB8fCAwO1xyXG4gIH0gZWxzZSB7XHJcbiAgICByZXR1cm52YWx1ZSA9ICt2YWx1ZXN0cmluZztcclxuICB9XHJcbiAgcmV0dXJuIE1hdGgucm91bmQoK3JldHVybnZhbHVlKTtcclxufTtcclxuZXhwb3J0IGNvbnN0IHBhcnNlTWF0aEV4cHJlc3Npb24gPSBmdW5jdGlvbiAoZXhwcmVzc2lvbjogc3RyaW5nLCBpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcclxuICBsZXQgdmFsdWVzdHJpbmcgPSBleHByZXNzaW9uLnJlcGxhY2UoL1xcXy9nLCAnJykuc3BsaXQoJywnKVtpbmRleF07XHJcbiAgcmV0dXJuICtwYXJzZU1hdGgodmFsdWVzdHJpbmcpO1xyXG59O1xyXG5leHBvcnQgY29uc3QgZ2V0Q29sb3IgPSBmdW5jdGlvbiAoZXhwcmVzc2lvbjogc3RyaW5nLCBpbmRleDogbnVtYmVyKSB7XHJcbiAgbGV0IHJldHVyblZhbHVlID1cclxuICAgIChleHByZXNzaW9uIHx8ICcnKS5zcGxpdCgnLCcpLmxlbmd0aCA+IGluZGV4ID8gYCBzdHlsZT1cImNvbG9yOiR7bm9ybWFsaXplQ29sb3IoZXhwcmVzc2lvbi5yZXBsYWNlKC9cXF8vZywgJycpLnNwbGl0KCcsJylbaW5kZXhdKX1cIiBgIDogJyc7XHJcbiAgcmV0dXJuIHJldHVyblZhbHVlO1xyXG59O1xyXG5leHBvcnQgY29uc3QgcmVwbGFjZVRva2VucyA9IGZ1bmN0aW9uICh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgaWYgKCF2YWx1ZSkge1xyXG4gICAgcmV0dXJuIHZhbHVlO1xyXG4gIH1cclxuICB2YWx1ZSA9IHZhbHVlICsgJyc7XHJcbiAgdmFsdWUgPSB2YWx1ZVxyXG4gICAgLnNwbGl0KCcgJylcclxuICAgIC5tYXAoYSA9PiB7XHJcbiAgICAgIGlmIChhLnN0YXJ0c1dpdGgoJ19mYS0nKSAmJiBhLmVuZHNXaXRoKCdfJykpIHtcclxuICAgICAgICBsZXQgcmV0dXJudmFsdWUgPSAnJztcclxuICAgICAgICBsZXQgaWNvbiA9IGEucmVwbGFjZSgvXFxfL2csICcnKS5zcGxpdCgnLCcpWzBdO1xyXG4gICAgICAgIGxldCBjb2xvciA9IGdldENvbG9yKGEsIDEpO1xyXG4gICAgICAgIGxldCByZXBlYXRDb3VudCA9IGEuc3BsaXQoJywnKS5sZW5ndGggPj0gMyA/IHBhcnNlTWF0aEV4cHJlc3Npb24oYSwgMikgOiAxO1xyXG4gICAgICAgIHJldHVybnZhbHVlID0gYDxpIGNsYXNzPVwiZmEgJHtpY29ufVwiICR7Y29sb3J9PjwvaT4gYC5yZXBlYXQocmVwZWF0Q291bnQpO1xyXG4gICAgICAgIGlmIChhLnNwbGl0KCcsJykubGVuZ3RoID49IDQpIHtcclxuICAgICAgICAgIGxldCBtYXhDb2xvciA9IGdldENvbG9yKGEsIDMpO1xyXG4gICAgICAgICAgbGV0IG1heExlbmd0aCA9IGEuc3BsaXQoJywnKS5sZW5ndGggPj0gNSA/IHBhcnNlTWF0aEV4cHJlc3Npb24oYSwgNCkgOiAwO1xyXG4gICAgICAgICAgcmV0dXJudmFsdWUgKz0gYDxpIGNsYXNzPVwiZmEgJHtpY29ufVwiICR7bWF4Q29sb3J9PjwvaT4gYC5yZXBlYXQoXy5tYXgoW21heExlbmd0aCAtIHJlcGVhdENvdW50LCAwXSkgfHwgMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXR1cm52YWx1ZTtcclxuICAgICAgfSBlbHNlIGlmIChhLnN0YXJ0c1dpdGgoJ19pbWctJykgJiYgYS5lbmRzV2l0aCgnXycpKSB7XHJcbiAgICAgICAgYSA9IGEuc2xpY2UoMCwgLTEpO1xyXG4gICAgICAgIGxldCBpbWdVcmwgPSBhLnJlcGxhY2UoJ19pbWctJywgJycpLnNwbGl0KCcsJylbMF07XHJcbiAgICAgICAgbGV0IGltZ1dpZHRoID0gYS5zcGxpdCgnLCcpLmxlbmd0aCA+IDEgPyBhLnJlcGxhY2UoJ19pbWctJywgJycpLnNwbGl0KCcsJylbMV0gOiAnMjBweCc7XHJcbiAgICAgICAgbGV0IGltZ0hlaWdodCA9IGEuc3BsaXQoJywnKS5sZW5ndGggPiAyID8gYS5yZXBsYWNlKCdfaW1nLScsICcnKS5zcGxpdCgnLCcpWzJdIDogJzIwcHgnO1xyXG4gICAgICAgIGxldCByZXBlYXRDb3VudCA9IGEuc3BsaXQoJywnKS5sZW5ndGggPiAzID8gK2EucmVwbGFjZSgnX2ltZy0nLCAnJykuc3BsaXQoJywnKVszXSA6IDE7XHJcbiAgICAgICAgYSA9IGA8aW1nIHdpZHRoPVwiJHtpbWdXaWR0aH1cIiBoZWlnaHQ9XCIke2ltZ0hlaWdodH1cIiBzcmM9XCIke2ltZ1VybH1cIi8+YC5yZXBlYXQocmVwZWF0Q291bnQpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBhO1xyXG4gICAgfSlcclxuICAgIC5qb2luKCcgJyk7XHJcbiAgcmV0dXJuIHZhbHVlO1xyXG59O1xyXG5leHBvcnQgY29uc3QgZ2V0QWN0dWFsTmFtZVdpdGhvdXRUb2tlbnMgPSBmdW5jdGlvbiAodmFsdWU6IHN0cmluZykge1xyXG4gIGlmICghdmFsdWUpIHtcclxuICAgIHJldHVybiB2YWx1ZSArICcnO1xyXG4gIH1cclxuICB2YWx1ZSA9IHZhbHVlICsgJyc7XHJcbiAgcmV0dXJuIHZhbHVlXHJcbiAgICAuc3BsaXQoJyAnKVxyXG4gICAgLm1hcChhID0+IHtcclxuICAgICAgaWYgKGEuc3RhcnRzV2l0aCgnX2ZhLScpICYmIGEuZW5kc1dpdGgoJ18nKSkge1xyXG4gICAgICAgIGEgPSBgYDtcclxuICAgICAgfSBlbHNlIGlmIChhLnN0YXJ0c1dpdGgoJ19pbWctJykgJiYgYS5lbmRzV2l0aCgnXycpKSB7XHJcbiAgICAgICAgYSA9IGBgO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBhO1xyXG4gICAgfSlcclxuICAgIC5qb2luKCcgJyk7XHJcbn07XHJcbmV4cG9ydCBjb25zdCBnZXRJdGVtQmFzZWRPblRocmVzaG9sZCA9IGZ1bmN0aW9uICh0aHJlc2hvbGRzOiBhbnlbXSwgcmFuZ2VzOiBhbnksIHZhbHVlOiBudW1iZXIsIGRlZmF1bHRWYWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICBsZXQgYyA9IGRlZmF1bHRWYWx1ZTtcclxuICBpZiAodGhyZXNob2xkcyAmJiByYW5nZXMgJiYgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiB0aHJlc2hvbGRzLmxlbmd0aCArIDEgPD0gcmFuZ2VzLmxlbmd0aCkge1xyXG4gICAgcmFuZ2VzID0gXy5kcm9wUmlnaHQocmFuZ2VzLCByYW5nZXMubGVuZ3RoIC0gdGhyZXNob2xkcy5sZW5ndGggLSAxKTtcclxuICAgIGlmIChyYW5nZXNbcmFuZ2VzLmxlbmd0aCAtIDFdID09PSAnJykge1xyXG4gICAgICByYW5nZXNbcmFuZ2VzLmxlbmd0aCAtIDFdID0gZGVmYXVsdFZhbHVlO1xyXG4gICAgfVxyXG4gICAgZm9yIChsZXQgaSA9IHRocmVzaG9sZHMubGVuZ3RoOyBpID4gMDsgaS0tKSB7XHJcbiAgICAgIGlmICh2YWx1ZSA+PSB0aHJlc2hvbGRzW2kgLSAxXSkge1xyXG4gICAgICAgIHJldHVybiByYW5nZXNbaV07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBfLmZpcnN0KHJhbmdlcykgfHwgJyc7XHJcbiAgfVxyXG4gIHJldHVybiBjO1xyXG59O1xyXG5leHBvcnQgY29uc3QgZ2V0TWV0cmljTmFtZUZyb21UYWdnZWRBbGlhcyA9IGZ1bmN0aW9uICh0YXJnZXQpOiBzdHJpbmcge1xyXG4gIHRhcmdldCA9IHRhcmdldC50cmltKCk7XHJcbiAgbGV0IF9tZXRyaWNuYW1lID0gdGFyZ2V0O1xyXG4gIGlmICh0YXJnZXQuaW5kZXhPZigneycpID4gLTEgJiYgdGFyZ2V0LmluZGV4T2YoJ30nKSA+IC0xICYmIHRhcmdldFt0YXJnZXQubGVuZ3RoIC0gMV0gPT09ICd9Jykge1xyXG4gICAgX21ldHJpY25hbWUgPSB0YXJnZXQuc3BsaXQoJ3snKVswXS50cmltKCk7XHJcbiAgfSBlbHNlIHtcclxuICAgIF9tZXRyaWNuYW1lID0gdGFyZ2V0O1xyXG4gIH1cclxuICByZXR1cm4gX21ldHJpY25hbWU7XHJcbn07XHJcbmV4cG9ydCBjb25zdCBnZXRMYWJsZXNGcm9tVGFnZ2VkQWxpYXMgPSBmdW5jdGlvbiAodGFyZ2V0LCBsYWJlbCk6IGFueVtdIHtcclxuICBsZXQgX3RhZ3M6IGFueVtdID0gW107XHJcbiAgdGFyZ2V0ID0gdGFyZ2V0LnRyaW0oKTtcclxuICBsZXQgdGFnc3N0cmluZyA9IHRhcmdldC5yZXBsYWNlKGxhYmVsLCAnJykudHJpbSgpO1xyXG4gIGlmICh0YWdzc3RyaW5nLnN0YXJ0c1dpdGgoJ3snKSAmJiB0YWdzc3RyaW5nLmVuZHNXaXRoKCd9JykpIHtcclxuICAgIC8vIFNuaXBwZXQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vZ3JhZmFuYS9ncmFmYW5hL2Jsb2IvM2YxNTE3MDkxNGMzMTg5ZWU3ODM1ZjBiMTlmZjUwMGRiMTEzYWY3My9wYWNrYWdlcy9ncmFmYW5hLWRhdGEvc3JjL3V0aWxzL2xhYmVscy50c1xyXG4gICAgY29uc3QgcGFyc2VQcm9tZXRoZXVzTGFiZWxzID0gZnVuY3Rpb24gKGxhYmVsczogc3RyaW5nKSB7XHJcbiAgICAgIGNvbnN0IGxhYmVsc0J5S2V5OiBhbnkgPSB7fTtcclxuICAgICAgbGFiZWxzLnJlcGxhY2UoL1xcYihcXHcrKSghPz1+PylcIihbXlwiXFxuXSo/KVwiL2csIChfXywga2V5LCBvcGVyYXRvciwgdmFsdWUpID0+IHtcclxuICAgICAgICBpZiAoIW9wZXJhdG9yKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhvcGVyYXRvcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxhYmVsc0J5S2V5W2tleV0gPSB2YWx1ZTtcclxuICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gbGFiZWxzQnlLZXk7XHJcbiAgICB9O1xyXG4gICAgXy5lYWNoKHBhcnNlUHJvbWV0aGV1c0xhYmVscyh0YWdzc3RyaW5nKSwgKGs6IHN0cmluZywgdjogc3RyaW5nKSA9PiB7XHJcbiAgICAgIF90YWdzLnB1c2goeyB0YWc6IHYsIHZhbHVlOiBrIH0pO1xyXG4gICAgfSk7XHJcbiAgICBpZiAodGFnc3N0cmluZy5pbmRleE9mKCc6JykgPiAtMSAmJiBfdGFncy5sZW5ndGggPT09IDApIHtcclxuICAgICAgbGV0IGxhYmVsX3ZhbHVlcyA9XHJcbiAgICAgICAgdGFnc3N0cmluZ1xyXG4gICAgICAgICAgLnNsaWNlKDEpXHJcbiAgICAgICAgICAudHJpbSgpXHJcbiAgICAgICAgICAuc2xpY2UoMCwgLTEpXHJcbiAgICAgICAgICAudHJpbSgpIHx8ICcnO1xyXG4gICAgICBfdGFncyA9IGxhYmVsX3ZhbHVlc1xyXG4gICAgICAgIC5zcGxpdCgnLCcpXHJcbiAgICAgICAgLm1hcChpdGVtID0+IChpdGVtIHx8ICcnKS50cmltKCkpXHJcbiAgICAgICAgLmZpbHRlcihpdGVtID0+IGl0ZW0gJiYgaXRlbS5pbmRleE9mKCc6JykgPiAtMSlcclxuICAgICAgICAubWFwKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgaWYgKGl0ZW0uc3BsaXQoJzonKS5sZW5ndGggPT09IDIpIHtcclxuICAgICAgICAgICAgbGV0IHJldDogYW55ID0ge307XHJcbiAgICAgICAgICAgIHJldC50YWcgPSBpdGVtLnNwbGl0KCc6JylbMF0udHJpbSgpO1xyXG4gICAgICAgICAgICByZXQudmFsdWUgPSBpdGVtLnNwbGl0KCc6JylbMV0udHJpbSgpO1xyXG4gICAgICAgICAgICByZXR1cm4gcmV0O1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuZmlsdGVyKGl0ZW0gPT4gaXRlbSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiBfdGFncztcclxufTtcclxuZXhwb3J0IGNvbnN0IHJlcGxhY2VfdGFnc19mcm9tX2ZpZWxkID0gZnVuY3Rpb24gKGZpZWxkOiBzdHJpbmcsIHRhZ3M6IGFueVtdKTogc3RyaW5nIHtcclxuICBpZiAodGFncyAmJiB0YWdzLmxlbmd0aCA+IDApIHtcclxuICAgIGZpZWxkID0gdGFncy5yZWR1Y2UoKHIsIGl0KSA9PiB7XHJcbiAgICAgIHJldHVybiByLnJlcGxhY2UobmV3IFJlZ0V4cCgne3snICsgaXQudGFnLnRyaW0oKSArICd9fScsICdnJyksIGl0LnZhbHVlKS5yZXBsYWNlKC9cXFwiL2csICcnKTtcclxuICAgIH0sIGZpZWxkKTtcclxuICB9XHJcbiAgcmV0dXJuIGZpZWxkO1xyXG59O1xyXG5leHBvcnQgY29uc3QgZ2V0U2VyaWVzVmFsdWUgPSBmdW5jdGlvbiAoc2VyaWVzOiBhbnksIHN0YXRUeXBlOiBzdHJpbmcpOiBudW1iZXIge1xyXG4gIGxldCB2YWx1ZSA9IE5hTjtcclxuICBzdGF0VHlwZSA9IChzdGF0VHlwZSB8fCAnJykudG9Mb3dlckNhc2UoKTtcclxuICBpZiAoc2VyaWVzKSB7XHJcbiAgICBpZiAoc3RhdFR5cGUgPT09ICdsYXN0X3RpbWUnICYmIHNlcmllcy5kYXRhcG9pbnRzICYmIHNlcmllcy5kYXRhcG9pbnRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgaWYgKF8ubGFzdChzZXJpZXMuZGF0YXBvaW50cykpIHtcclxuICAgICAgICB2YWx1ZSA9IF8ubGFzdChzZXJpZXMuZGF0YXBvaW50cylbMV07XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoc3RhdFR5cGUgPT09ICdsYXN0X3RpbWVfbm9ubnVsbCcpIHtcclxuICAgICAgbGV0IG5vbl9udWxsX2RhdGEgPSBzZXJpZXMuZGF0YXBvaW50cy5maWx0ZXIocyA9PiBzWzBdKTtcclxuICAgICAgaWYgKF8ubGFzdChub25fbnVsbF9kYXRhKSAmJiBfLmxhc3Qobm9uX251bGxfZGF0YSlbMV0pIHtcclxuICAgICAgICB2YWx1ZSA9IF8ubGFzdChub25fbnVsbF9kYXRhKVsxXTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChzZXJpZXMuc3RhdHMpIHtcclxuICAgICAgdmFsdWUgPSBzZXJpZXMuc3RhdHNbc3RhdFR5cGVdIHx8IG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiB2YWx1ZTtcclxufTtcclxuZXhwb3J0IGNvbnN0IGdldEN1cnJlbnRUaW1lU3RhbXAgPSBmdW5jdGlvbiAoZGF0YVBvaW50czogYW55W10pOiBEYXRlIHtcclxuICBsZXQgY3VycmVudFRpbWVTdGFtcCA9IG5ldyBEYXRlKCk7XHJcbiAgaWYgKGRhdGFQb2ludHMgJiYgZGF0YVBvaW50cy5sZW5ndGggPiAwICYmIF8ubGFzdChkYXRhUG9pbnRzKS5sZW5ndGggPT09IDIpIHtcclxuICAgIGN1cnJlbnRUaW1lU3RhbXAgPSBuZXcgRGF0ZShfLmxhc3QoZGF0YVBvaW50cylbMV0pO1xyXG4gIH1cclxuICByZXR1cm4gY3VycmVudFRpbWVTdGFtcDtcclxufTtcclxuZXhwb3J0IGNvbnN0IHJlcGxhY2VEZWxpbWl0ZWRDb2x1bW5zID0gZnVuY3Rpb24gKGlucHV0c3RyaW5nOiBzdHJpbmcsIHNlcmllc05hbWU6IHN0cmluZywgZGVsaW1pdGVyOiBzdHJpbmcsIHJvd19jb2xfd3JhcHBlcjogc3RyaW5nKTogc3RyaW5nIHtcclxuICBsZXQgb3V0cHV0U3RyaW5nID0gc2VyaWVzTmFtZS5zcGxpdChkZWxpbWl0ZXIgfHwgJy4nKS5yZWR1Y2UoKHIsIGl0LCBpKSA9PiB7XHJcbiAgICByZXR1cm4gci5yZXBsYWNlKG5ldyBSZWdFeHAocm93X2NvbF93cmFwcGVyICsgaSArIHJvd19jb2xfd3JhcHBlciwgJ2cnKSwgaXQpO1xyXG4gIH0sIGlucHV0c3RyaW5nKTtcclxuICByZXR1cm4gb3V0cHV0U3RyaW5nO1xyXG59O1xyXG5leHBvcnQgY29uc3QgZ2V0Um93TmFtZSA9IGZ1bmN0aW9uIChcclxuICByb3dfbmFtZTogc3RyaW5nLFxyXG4gIGRlbGltaXRlcjogc3RyaW5nLFxyXG4gIHJvd19jb2xfd3JhcHBlcjogc3RyaW5nLFxyXG4gIHNlcmllc05hbWU6IHN0cmluZyxcclxuICBfbWV0cmljbmFtZTogc3RyaW5nLFxyXG4gIF90YWdzOiBhbnlbXVxyXG4pOiBzdHJpbmcge1xyXG4gIGlmIChkZWxpbWl0ZXIudG9Mb3dlckNhc2UoKSA9PT0gJ3RhZycpIHtcclxuICAgIHJvd19uYW1lID0gcm93X25hbWUucmVwbGFjZShuZXcgUmVnRXhwKCd7e21ldHJpY19uYW1lfX0nLCAnZycpLCBfbWV0cmljbmFtZSk7XHJcbiAgICByb3dfbmFtZSA9IHJlcGxhY2VfdGFnc19mcm9tX2ZpZWxkKHJvd19uYW1lLCBfdGFncyk7XHJcbiAgfSBlbHNlIHtcclxuICAgIHJvd19uYW1lID0gcmVwbGFjZURlbGltaXRlZENvbHVtbnMocm93X25hbWUsIHNlcmllc05hbWUsIGRlbGltaXRlciwgcm93X2NvbF93cmFwcGVyKTtcclxuICAgIGlmIChzZXJpZXNOYW1lLnNwbGl0KGRlbGltaXRlciB8fCAnLicpLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICByb3dfbmFtZSA9IHNlcmllc05hbWU7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiByb3dfbmFtZS5yZXBsYWNlKG5ldyBSZWdFeHAoJ19zZXJpZXNfJywgJ2cnKSwgc2VyaWVzTmFtZS50b1N0cmluZygpKTtcclxufTtcclxuZXhwb3J0IGNvbnN0IGdldENvbE5hbWUgPSBmdW5jdGlvbiAoXHJcbiAgY29sX25hbWU6IHN0cmluZyxcclxuICBkZWxpbWl0ZXI6IHN0cmluZyxcclxuICByb3dfY29sX3dyYXBwZXI6IHN0cmluZyxcclxuICBzZXJpZXNOYW1lOiBzdHJpbmcsXHJcbiAgcm93X25hbWU6IHN0cmluZyxcclxuICBfbWV0cmljbmFtZTogc3RyaW5nLFxyXG4gIF90YWdzOiBhbnlbXVxyXG4pOiBzdHJpbmcge1xyXG4gIGlmIChkZWxpbWl0ZXIudG9Mb3dlckNhc2UoKSA9PT0gJ3RhZycpIHtcclxuICAgIGNvbF9uYW1lID0gY29sX25hbWUucmVwbGFjZShuZXcgUmVnRXhwKCd7e21ldHJpY19uYW1lfX0nLCAnZycpLCBfbWV0cmljbmFtZSk7XHJcbiAgICByb3dfbmFtZSA9IHJlcGxhY2VfdGFnc19mcm9tX2ZpZWxkKGNvbF9uYW1lLCBfdGFncyk7XHJcbiAgfSBlbHNlIHtcclxuICAgIGNvbF9uYW1lID0gcmVwbGFjZURlbGltaXRlZENvbHVtbnMoY29sX25hbWUsIHNlcmllc05hbWUsIGRlbGltaXRlciwgcm93X2NvbF93cmFwcGVyKTtcclxuICAgIGlmIChzZXJpZXNOYW1lLnNwbGl0KGRlbGltaXRlciB8fCAnLicpLmxlbmd0aCA9PT0gMSB8fCByb3dfbmFtZSA9PT0gc2VyaWVzTmFtZSkge1xyXG4gICAgICBjb2xfbmFtZSA9IGNvbF9uYW1lIHx8ICdWYWx1ZSc7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiBjb2xfbmFtZS5yZXBsYWNlKG5ldyBSZWdFeHAoJ19zZXJpZXNfJywgJ2cnKSwgc2VyaWVzTmFtZS50b1N0cmluZygpKTtcclxufTtcclxuZXhwb3J0IGNvbnN0IGdldERpc3BsYXlWYWx1ZVRlbXBsYXRlID0gZnVuY3Rpb24gKFxyXG4gIHZhbHVlOiBudW1iZXIsXHJcbiAgcGF0dGVybjogSUJvb21QYXR0ZXJuLFxyXG4gIHNlcmllc05hbWU6IHN0cmluZyxcclxuICByb3dfY29sX3dyYXBwZXI6IHN0cmluZyxcclxuICB0aHJlc2hvbGRzOiBhbnlbXVxyXG4pOiBzdHJpbmcge1xyXG4gIGxldCB0ZW1wbGF0ZSA9ICdfdmFsdWVfJztcclxuICBpZiAoXy5pc05hTih2YWx1ZSkgfHwgdmFsdWUgPT09IG51bGwpIHtcclxuICAgIHRlbXBsYXRlID0gcGF0dGVybi5udWxsX3ZhbHVlIHx8ICdObyBkYXRhJztcclxuICAgIGlmIChwYXR0ZXJuLm51bGxfdmFsdWUgPT09ICcnKSB7XHJcbiAgICAgIHRlbXBsYXRlID0gJyc7XHJcbiAgICB9XHJcbiAgfSBlbHNlIHtcclxuICAgIHRlbXBsYXRlID0gcGF0dGVybi5kaXNwbGF5VGVtcGxhdGUgfHwgdGVtcGxhdGU7XHJcbiAgICBpZiAocGF0dGVybi5lbmFibGVfdHJhbnNmb3JtKSB7XHJcbiAgICAgIGxldCB0cmFuc2Zvcm1fdmFsdWVzID0gcGF0dGVybi50cmFuc2Zvcm1fdmFsdWVzLnNwbGl0KCd8Jyk7XHJcbiAgICAgIHRlbXBsYXRlID0gZ2V0SXRlbUJhc2VkT25UaHJlc2hvbGQodGhyZXNob2xkcywgdHJhbnNmb3JtX3ZhbHVlcywgdmFsdWUsIHRlbXBsYXRlKTtcclxuICAgIH1cclxuICAgIGlmIChwYXR0ZXJuLmVuYWJsZV90cmFuc2Zvcm1fb3ZlcnJpZGVzICYmIHBhdHRlcm4udHJhbnNmb3JtX3ZhbHVlc19vdmVycmlkZXMgIT09ICcnKSB7XHJcbiAgICAgIGxldCBfdHJhbnNmb3JtX3ZhbHVlc19vdmVycmlkZXMgPSBwYXR0ZXJuLnRyYW5zZm9ybV92YWx1ZXNfb3ZlcnJpZGVzXHJcbiAgICAgICAgLnNwbGl0KCd8JylcclxuICAgICAgICAuZmlsdGVyKGNvbiA9PiBjb24uaW5kZXhPZignLT4nKSlcclxuICAgICAgICAubWFwKGNvbiA9PiBjb24uc3BsaXQoJy0+JykpXHJcbiAgICAgICAgLmZpbHRlcihjb24gPT4gK2NvblswXSA9PT0gdmFsdWUpXHJcbiAgICAgICAgLm1hcChjb24gPT4gY29uWzFdKTtcclxuICAgICAgaWYgKF90cmFuc2Zvcm1fdmFsdWVzX292ZXJyaWRlcy5sZW5ndGggPiAwICYmIF90cmFuc2Zvcm1fdmFsdWVzX292ZXJyaWRlc1swXSAhPT0gJycpIHtcclxuICAgICAgICB0ZW1wbGF0ZSA9ICgnJyArIF90cmFuc2Zvcm1fdmFsdWVzX292ZXJyaWRlc1swXSkudHJpbSgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAocGF0dGVybi5lbmFibGVfdHJhbnNmb3JtIHx8IHBhdHRlcm4uZW5hYmxlX3RyYW5zZm9ybV9vdmVycmlkZXMpIHtcclxuICAgICAgdGVtcGxhdGUgPSByZXBsYWNlRGVsaW1pdGVkQ29sdW1ucyh0ZW1wbGF0ZSwgc2VyaWVzTmFtZSwgcGF0dGVybi5kZWxpbWl0ZXIsIHJvd19jb2xfd3JhcHBlcik7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiB0ZW1wbGF0ZTtcclxufTtcclxuZXhwb3J0IGNvbnN0IGRvZXNWYWx1ZU5lZWRzVG9IaWRlID0gZnVuY3Rpb24gKHZhbHVlOiBudW1iZXIsIGZpbHRlcjogYW55KTogYm9vbGVhbiB7XHJcbiAgbGV0IGhpZGRlbiA9IGZhbHNlO1xyXG4gIGlmICgodmFsdWUgfHwgdmFsdWUgPT09IDApICYmIGZpbHRlciAmJiAoZmlsdGVyLnZhbHVlX2JlbG93ICE9PSAnJyB8fCBmaWx0ZXIudmFsdWVfYWJvdmUgIT09ICcnKSkge1xyXG4gICAgaWYgKGZpbHRlci52YWx1ZV9iZWxvdyAhPT0gJycgJiYgdmFsdWUgPCArZmlsdGVyLnZhbHVlX2JlbG93KSB7XHJcbiAgICAgIGhpZGRlbiA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBpZiAoZmlsdGVyLnZhbHVlX2Fib3ZlICE9PSAnJyAmJiB2YWx1ZSA+ICtmaWx0ZXIudmFsdWVfYWJvdmUpIHtcclxuICAgICAgaGlkZGVuID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcbiAgcmV0dXJuIGhpZGRlbjtcclxufTtcclxuIl19 \ No newline at end of file diff --git a/dist/app/boom/index.js b/dist/app/boom/index.js new file mode 100644 index 0000000..535e6f3 --- /dev/null +++ b/dist/app/boom/index.js @@ -0,0 +1,45 @@ +System.register(["./BoomUtils", "./BoomTimeBasedThreshold", "./BoomPattern", "./BoomSeries", "./BoomOutput"], function (exports_1, context_1) { + "use strict"; + var __moduleName = context_1 && context_1.id; + return { + setters: [ + function (BoomUtils_1_1) { + exports_1({ + "normalizeColor": BoomUtils_1_1["normalizeColor"], + "replaceTokens": BoomUtils_1_1["replaceTokens"], + "getActualNameWithoutTokens": BoomUtils_1_1["getActualNameWithoutTokens"], + "getItemBasedOnThreshold": BoomUtils_1_1["getItemBasedOnThreshold"], + "getMetricNameFromTaggedAlias": BoomUtils_1_1["getMetricNameFromTaggedAlias"], + "getLablesFromTaggedAlias": BoomUtils_1_1["getLablesFromTaggedAlias"], + "replace_tags_from_field": BoomUtils_1_1["replace_tags_from_field"], + "parseMath": BoomUtils_1_1["parseMath"], + "parseMathExpression": BoomUtils_1_1["parseMathExpression"], + "getColor": BoomUtils_1_1["getColor"] + }); + }, + function (BoomTimeBasedThreshold_1_1) { + exports_1({ + "BoomTimeBasedThreshold": BoomTimeBasedThreshold_1_1["BoomTimeBasedThreshold"] + }); + }, + function (BoomPattern_1_1) { + exports_1({ + "BoomPattern": BoomPattern_1_1["BoomPattern"] + }); + }, + function (BoomSeries_1_1) { + exports_1({ + "BoomSeries": BoomSeries_1_1["BoomSeries"] + }); + }, + function (BoomOutput_1_1) { + exports_1({ + "BoomOutput": BoomOutput_1_1["BoomOutput"] + }); + } + ], + execute: function () { + } + }; +}); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBwL2Jvb20vaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IElCb29tUGF0dGVybiwgSUJvb21TZXJpZXMsIElCb29tVGltZUJhc2VkVGhyZXNob2xkLCBJQm9vbVJlbmRlcmluZ09wdGlvbnMsIElCb29tVGFibGUsIElCb29tSFRNTCwgSUJvb21DZWxsRGV0YWlscywgSUJvb21UYWJsZVRyYW5zZm9ybWF0aW9uT3B0aW9ucyB9IGZyb20gXCIuL0Jvb20uaW50ZXJmYWNlXCI7XG5leHBvcnQgeyBub3JtYWxpemVDb2xvciwgcmVwbGFjZVRva2VucywgZ2V0QWN0dWFsTmFtZVdpdGhvdXRUb2tlbnMsIGdldEl0ZW1CYXNlZE9uVGhyZXNob2xkLCBnZXRNZXRyaWNOYW1lRnJvbVRhZ2dlZEFsaWFzLCBnZXRMYWJsZXNGcm9tVGFnZ2VkQWxpYXMsIHJlcGxhY2VfdGFnc19mcm9tX2ZpZWxkLCBwYXJzZU1hdGgsIHBhcnNlTWF0aEV4cHJlc3Npb24sIGdldENvbG9yIH0gZnJvbSBcIi4vQm9vbVV0aWxzXCI7XG5leHBvcnQgeyBCb29tVGltZUJhc2VkVGhyZXNob2xkIH0gZnJvbSBcIi4vQm9vbVRpbWVCYXNlZFRocmVzaG9sZFwiO1xuZXhwb3J0IHsgQm9vbVBhdHRlcm4gfSBmcm9tIFwiLi9Cb29tUGF0dGVyblwiO1xuZXhwb3J0IHsgQm9vbVNlcmllcyB9IGZyb20gXCIuL0Jvb21TZXJpZXNcIjtcbmV4cG9ydCB7IEJvb21PdXRwdXQgfSBmcm9tIFwiLi9Cb29tT3V0cHV0XCI7XG4iXX0= \ No newline at end of file diff --git a/dist/app/config.js b/dist/app/config.js new file mode 100644 index 0000000..ecbbfc3 --- /dev/null +++ b/dist/app/config.js @@ -0,0 +1,78 @@ +System.register([], function (exports_1, context_1) { + "use strict"; + var plugin_id, value_name_options, textAlignmentOptions, config, default_pattern_options; + var __moduleName = context_1 && context_1.id; + return { + setters: [], + execute: function () { + plugin_id = 'yesoreyeram-boomtable-panel'; + exports_1("plugin_id", plugin_id); + value_name_options = [ + { text: 'Min', value: 'min' }, + { text: 'Max', value: 'max' }, + { text: 'Average', value: 'avg' }, + { text: 'Current', value: 'current' }, + { text: 'Time of last data point', value: 'last_time' }, + { text: 'Time of last non null data point', value: 'last_time_nonnull' }, + { text: 'Total', value: 'total' }, + ]; + exports_1("value_name_options", value_name_options); + textAlignmentOptions = ['left', 'right', 'center']; + exports_1("textAlignmentOptions", textAlignmentOptions); + config = { + debug_mode: false, + error: undefined, + groupedData: undefined, + hide_first_column: false, + hide_headers: false, + panelDefaults: { + activePatternIndex: -1, + default_title_for_rows: 'Metric', + patterns: [], + row_col_wrapper: '_', + }, + }; + exports_1("config", config); + default_pattern_options = { + bgColors: 'green|orange|red', + bgColors_overrides: '0->green|2->red|1->yellow', + clickable_cells_link: '', + col_name: 'Value', + decimals: 2, + defaultBGColor: 'transparent', + defaultTextColor: '', + delimiter: '.', + displayTemplate: '_value_', + enable_bgColor: false, + enable_bgColor_overrides: false, + enable_clickable_cells: false, + enable_textColor: false, + enable_textColor_overrides: false, + enable_time_based_thresholds: false, + enable_transform: false, + enable_transform_overrides: false, + filter: { + value_above: '', + value_below: '', + }, + format: 'none', + name: 'Default Pattern', + null_color: 'darkred', + null_textcolor: 'white', + null_value: 'No data', + pattern: '*', + row_name: '_series_', + textColors: 'red|orange|green', + textColors_overrides: '0->red|2->green|1->yellow', + thresholds: '70,90', + time_based_thresholds: [], + tooltipTemplate: '', + transform_values: '_value_|_value_|_value_', + transform_values_overrides: '0->down|1->up', + valueName: 'avg', + }; + exports_1("default_pattern_options", default_pattern_options); + } + }; +}); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwcC9jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7OztZQUFNLFNBQVMsR0FBRyw2QkFBNkIsQ0FBQzs7WUFDMUMsa0JBQWtCLEdBQUc7Z0JBQ3pCLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFO2dCQUM3QixFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRTtnQkFDN0IsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7Z0JBQ2pDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFO2dCQUNyQyxFQUFFLElBQUksRUFBRSx5QkFBeUIsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFO2dCQUN2RCxFQUFFLElBQUksRUFBRSxrQ0FBa0MsRUFBRSxLQUFLLEVBQUUsbUJBQW1CLEVBQUU7Z0JBQ3hFLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFO2FBQ2xDLENBQUM7O1lBQ0ksb0JBQW9CLEdBQUcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDOztZQUNuRCxNQUFNLEdBQVE7Z0JBQ2xCLFVBQVUsRUFBRSxLQUFLO2dCQUNqQixLQUFLLEVBQUUsU0FBUztnQkFDaEIsV0FBVyxFQUFFLFNBQVM7Z0JBQ3RCLGlCQUFpQixFQUFFLEtBQUs7Z0JBQ3hCLFlBQVksRUFBRSxLQUFLO2dCQUNuQixhQUFhLEVBQUU7b0JBQ2Isa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO29CQUN0QixzQkFBc0IsRUFBRSxRQUFRO29CQUNoQyxRQUFRLEVBQUUsRUFBRTtvQkFDWixlQUFlLEVBQUUsR0FBRztpQkFDckI7YUFDRixDQUFDOztZQUNJLHVCQUF1QixHQUFRO2dCQUNuQyxRQUFRLEVBQUUsa0JBQWtCO2dCQUM1QixrQkFBa0IsRUFBRSwyQkFBMkI7Z0JBQy9DLG9CQUFvQixFQUFFLEVBQUU7Z0JBQ3hCLFFBQVEsRUFBRSxPQUFPO2dCQUNqQixRQUFRLEVBQUUsQ0FBQztnQkFDWCxjQUFjLEVBQUUsYUFBYTtnQkFDN0IsZ0JBQWdCLEVBQUUsRUFBRTtnQkFDcEIsU0FBUyxFQUFFLEdBQUc7Z0JBQ2QsZUFBZSxFQUFFLFNBQVM7Z0JBQzFCLGNBQWMsRUFBRSxLQUFLO2dCQUNyQix3QkFBd0IsRUFBRSxLQUFLO2dCQUMvQixzQkFBc0IsRUFBRSxLQUFLO2dCQUM3QixnQkFBZ0IsRUFBRSxLQUFLO2dCQUN2QiwwQkFBMEIsRUFBRSxLQUFLO2dCQUNqQyw0QkFBNEIsRUFBRSxLQUFLO2dCQUNuQyxnQkFBZ0IsRUFBRSxLQUFLO2dCQUN2QiwwQkFBMEIsRUFBRSxLQUFLO2dCQUNqQyxNQUFNLEVBQUU7b0JBQ04sV0FBVyxFQUFFLEVBQUU7b0JBQ2YsV0FBVyxFQUFFLEVBQUU7aUJBQ2hCO2dCQUNELE1BQU0sRUFBRSxNQUFNO2dCQUNkLElBQUksRUFBRSxpQkFBaUI7Z0JBQ3ZCLFVBQVUsRUFBRSxTQUFTO2dCQUNyQixjQUFjLEVBQUUsT0FBTztnQkFDdkIsVUFBVSxFQUFFLFNBQVM7Z0JBQ3JCLE9BQU8sRUFBRSxHQUFHO2dCQUNaLFFBQVEsRUFBRSxVQUFVO2dCQUNwQixVQUFVLEVBQUUsa0JBQWtCO2dCQUM5QixvQkFBb0IsRUFBRSwyQkFBMkI7Z0JBQ2pELFVBQVUsRUFBRSxPQUFPO2dCQUNuQixxQkFBcUIsRUFBRSxFQUFFO2dCQUN6QixlQUFlLEVBQUUsRUFBRTtnQkFDbkIsZ0JBQWdCLEVBQUUseUJBQXlCO2dCQUMzQywwQkFBMEIsRUFBRSxlQUFlO2dCQUMzQyxTQUFTLEVBQUUsS0FBSzthQUNqQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgcGx1Z2luX2lkID0gJ3llc29yZXllcmFtLWJvb210YWJsZS1wYW5lbCc7XHJcbmNvbnN0IHZhbHVlX25hbWVfb3B0aW9ucyA9IFtcclxuICB7IHRleHQ6ICdNaW4nLCB2YWx1ZTogJ21pbicgfSxcclxuICB7IHRleHQ6ICdNYXgnLCB2YWx1ZTogJ21heCcgfSxcclxuICB7IHRleHQ6ICdBdmVyYWdlJywgdmFsdWU6ICdhdmcnIH0sXHJcbiAgeyB0ZXh0OiAnQ3VycmVudCcsIHZhbHVlOiAnY3VycmVudCcgfSxcclxuICB7IHRleHQ6ICdUaW1lIG9mIGxhc3QgZGF0YSBwb2ludCcsIHZhbHVlOiAnbGFzdF90aW1lJyB9LFxyXG4gIHsgdGV4dDogJ1RpbWUgb2YgbGFzdCBub24gbnVsbCBkYXRhIHBvaW50JywgdmFsdWU6ICdsYXN0X3RpbWVfbm9ubnVsbCcgfSxcclxuICB7IHRleHQ6ICdUb3RhbCcsIHZhbHVlOiAndG90YWwnIH0sXHJcbl07XHJcbmNvbnN0IHRleHRBbGlnbm1lbnRPcHRpb25zID0gWydsZWZ0JywgJ3JpZ2h0JywgJ2NlbnRlciddO1xyXG5jb25zdCBjb25maWc6IGFueSA9IHtcclxuICBkZWJ1Z19tb2RlOiBmYWxzZSxcclxuICBlcnJvcjogdW5kZWZpbmVkLFxyXG4gIGdyb3VwZWREYXRhOiB1bmRlZmluZWQsXHJcbiAgaGlkZV9maXJzdF9jb2x1bW46IGZhbHNlLFxyXG4gIGhpZGVfaGVhZGVyczogZmFsc2UsXHJcbiAgcGFuZWxEZWZhdWx0czoge1xyXG4gICAgYWN0aXZlUGF0dGVybkluZGV4OiAtMSxcclxuICAgIGRlZmF1bHRfdGl0bGVfZm9yX3Jvd3M6ICdNZXRyaWMnLFxyXG4gICAgcGF0dGVybnM6IFtdLFxyXG4gICAgcm93X2NvbF93cmFwcGVyOiAnXycsXHJcbiAgfSxcclxufTtcclxuY29uc3QgZGVmYXVsdF9wYXR0ZXJuX29wdGlvbnM6IGFueSA9IHtcclxuICBiZ0NvbG9yczogJ2dyZWVufG9yYW5nZXxyZWQnLFxyXG4gIGJnQ29sb3JzX292ZXJyaWRlczogJzAtPmdyZWVufDItPnJlZHwxLT55ZWxsb3cnLFxyXG4gIGNsaWNrYWJsZV9jZWxsc19saW5rOiAnJyxcclxuICBjb2xfbmFtZTogJ1ZhbHVlJyxcclxuICBkZWNpbWFsczogMixcclxuICBkZWZhdWx0QkdDb2xvcjogJ3RyYW5zcGFyZW50JyxcclxuICBkZWZhdWx0VGV4dENvbG9yOiAnJyxcclxuICBkZWxpbWl0ZXI6ICcuJyxcclxuICBkaXNwbGF5VGVtcGxhdGU6ICdfdmFsdWVfJyxcclxuICBlbmFibGVfYmdDb2xvcjogZmFsc2UsXHJcbiAgZW5hYmxlX2JnQ29sb3Jfb3ZlcnJpZGVzOiBmYWxzZSxcclxuICBlbmFibGVfY2xpY2thYmxlX2NlbGxzOiBmYWxzZSxcclxuICBlbmFibGVfdGV4dENvbG9yOiBmYWxzZSxcclxuICBlbmFibGVfdGV4dENvbG9yX292ZXJyaWRlczogZmFsc2UsXHJcbiAgZW5hYmxlX3RpbWVfYmFzZWRfdGhyZXNob2xkczogZmFsc2UsXHJcbiAgZW5hYmxlX3RyYW5zZm9ybTogZmFsc2UsXHJcbiAgZW5hYmxlX3RyYW5zZm9ybV9vdmVycmlkZXM6IGZhbHNlLFxyXG4gIGZpbHRlcjoge1xyXG4gICAgdmFsdWVfYWJvdmU6ICcnLFxyXG4gICAgdmFsdWVfYmVsb3c6ICcnLFxyXG4gIH0sXHJcbiAgZm9ybWF0OiAnbm9uZScsXHJcbiAgbmFtZTogJ0RlZmF1bHQgUGF0dGVybicsXHJcbiAgbnVsbF9jb2xvcjogJ2RhcmtyZWQnLFxyXG4gIG51bGxfdGV4dGNvbG9yOiAnd2hpdGUnLFxyXG4gIG51bGxfdmFsdWU6ICdObyBkYXRhJyxcclxuICBwYXR0ZXJuOiAnKicsXHJcbiAgcm93X25hbWU6ICdfc2VyaWVzXycsXHJcbiAgdGV4dENvbG9yczogJ3JlZHxvcmFuZ2V8Z3JlZW4nLFxyXG4gIHRleHRDb2xvcnNfb3ZlcnJpZGVzOiAnMC0+cmVkfDItPmdyZWVufDEtPnllbGxvdycsXHJcbiAgdGhyZXNob2xkczogJzcwLDkwJyxcclxuICB0aW1lX2Jhc2VkX3RocmVzaG9sZHM6IFtdLFxyXG4gIHRvb2x0aXBUZW1wbGF0ZTogJycsXHJcbiAgdHJhbnNmb3JtX3ZhbHVlczogJ192YWx1ZV98X3ZhbHVlX3xfdmFsdWVfJyxcclxuICB0cmFuc2Zvcm1fdmFsdWVzX292ZXJyaWRlczogJzAtPmRvd258MS0+dXAnLFxyXG4gIHZhbHVlTmFtZTogJ2F2ZycsXHJcbn07XHJcbmV4cG9ydCB7IHBsdWdpbl9pZCwgZGVmYXVsdF9wYXR0ZXJuX29wdGlvbnMsIHZhbHVlX25hbWVfb3B0aW9ucywgdGV4dEFsaWdubWVudE9wdGlvbnMsIGNvbmZpZyB9O1xyXG4iXX0= \ No newline at end of file diff --git a/dist/css/default.dark.css b/dist/css/default.dark.css new file mode 100644 index 0000000..25330c6 --- /dev/null +++ b/dist/css/default.dark.css @@ -0,0 +1,45 @@ +.boom-table .mini-split { + margin-right: 10px; } + +.boom-table .split { + margin-right: 20px; } + +.boom-table .boom-btn { + padding: 10px; + margin-right: 10px; + min-width: 200px; + text-transform: lowercase; } + +.boom-table h6.text-header { + padding: 0 0 10px 0; + font-weight: bolder; } + .boom-table h6.text-header i { + font-weight: 100; } + +.boom-table .debug { + margin-top: 30px; } + +.boom-table .boom-label { + padding-left: 10px; } + +.boom-table .debug table tr { + border: 2px solid red; } + +.boom-table .inline-form-control { + display: inline-block; + margin: 10px 20px 10px 0px; + padding: 5px; } + +.boom-table .btn-small { + margin-left: 20px; } + +.boom-table .btn-small .fa { + margin-right: 5px; } + +.boom-table h6.text-header { + color: cadetblue; } + .boom-table h6.text-header i { + color: darkcyan; } + +.boom-table .sortarrows { + color: darkcyan; } diff --git a/dist/css/default.light.css b/dist/css/default.light.css new file mode 100644 index 0000000..862cae4 --- /dev/null +++ b/dist/css/default.light.css @@ -0,0 +1,45 @@ +.boom-table .mini-split { + margin-right: 10px; } + +.boom-table .split { + margin-right: 20px; } + +.boom-table .boom-btn { + padding: 10px; + margin-right: 10px; + min-width: 200px; + text-transform: lowercase; } + +.boom-table h6.text-header { + padding: 0 0 10px 0; + font-weight: bolder; } + .boom-table h6.text-header i { + font-weight: 100; } + +.boom-table .debug { + margin-top: 30px; } + +.boom-table .boom-label { + padding-left: 10px; } + +.boom-table .debug table tr { + border: 2px solid red; } + +.boom-table .inline-form-control { + display: inline-block; + margin: 10px 20px 10px 0px; + padding: 5px; } + +.boom-table .btn-small { + margin-left: 20px; } + +.boom-table .btn-small .fa { + margin-right: 5px; } + +.boom-table h6.text-header { + color: darkmagenta; } + .boom-table h6.text-header i { + color: darksalmon; } + +.boom-table .sortarrows { + color: darksalmon; } diff --git a/dist/module.js b/dist/module.js new file mode 100644 index 0000000..aa87c1e --- /dev/null +++ b/dist/module.js @@ -0,0 +1,195 @@ +System.register(["lodash", "app/core/utils/kbn", "app/plugins/sdk", "./app/boom/index", "./app/app", "./app/config"], function (exports_1, context_1) { + "use strict"; + var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; + })(); + var lodash_1, kbn_1, sdk_1, index_1, app_1, config_1, GrafanaBoomTableCtrl; + var __moduleName = context_1 && context_1.id; + return { + setters: [ + function (lodash_1_1) { + lodash_1 = lodash_1_1; + }, + function (kbn_1_1) { + kbn_1 = kbn_1_1; + }, + function (sdk_1_1) { + sdk_1 = sdk_1_1; + }, + function (index_1_1) { + index_1 = index_1_1; + }, + function (app_1_1) { + app_1 = app_1_1; + }, + function (config_1_1) { + config_1 = config_1_1; + } + ], + execute: function () { + sdk_1.loadPluginCss({ + dark: "plugins/" + config_1.plugin_id + "/css/default.dark.css", + light: "plugins/" + config_1.plugin_id + "/css/default.light.css", + }); + GrafanaBoomTableCtrl = (function (_super) { + __extends(GrafanaBoomTableCtrl, _super); + function GrafanaBoomTableCtrl($scope, $injector, $sce) { + var _this = _super.call(this, $scope, $injector) || this; + _this.unitFormats = kbn_1.default.getUnitFormats(); + _this.valueNameOptions = config_1.value_name_options; + _this.textAlignmentOptions = config_1.textAlignmentOptions; + lodash_1.default.defaults(_this.panel, config_1.config.panelDefaults); + _this.panel.defaultPattern = _this.panel.defaultPattern || app_1.defaultPattern; + _this.$sce = $sce; + _this.templateSrv = $injector.get('templateSrv'); + _this.timeSrv = $injector.get('timeSrv'); + _this.updatePrototypes(); + _this.events.on('data-received', _this.onDataReceived.bind(_this)); + _this.events.on('data-snapshot-load', _this.onDataReceived.bind(_this)); + _this.events.on('init-edit-mode', _this.onInitEditMode.bind(_this)); + _this.panel.activePatternIndex = _this.panel.activePatternIndex === -1 ? _this.panel.patterns.length : _this.panel.activePatternIndex; + return _this; + } + GrafanaBoomTableCtrl.prototype.updatePrototypes = function () { + Object.setPrototypeOf(this.panel.defaultPattern, index_1.BoomPattern.prototype); + this.panel.patterns.map(function (pattern) { + Object.setPrototypeOf(pattern, index_1.BoomPattern.prototype); + return pattern; + }); + }; + GrafanaBoomTableCtrl.prototype.onDataReceived = function (data) { + this.dataReceived = data; + this.render(); + }; + GrafanaBoomTableCtrl.prototype.onInitEditMode = function () { + this.addEditorTab('Patterns', "public/plugins/" + config_1.plugin_id + "/partials/editor.html", 2); + }; + GrafanaBoomTableCtrl.prototype.addPattern = function () { + var newPattern = new index_1.BoomPattern({ + row_col_wrapper: this.panel.row_col_wrapper, + }); + this.panel.patterns.push(newPattern); + this.panel.activePatternIndex = this.panel.activePatternIndex === -2 ? -2 : this.panel.patterns.length - 1; + this.render(); + }; + GrafanaBoomTableCtrl.prototype.removePattern = function (index) { + this.panel.patterns.splice(index, 1); + this.panel.activePatternIndex = + this.panel.activePatternIndex === -2 ? -2 : this.panel.patterns && this.panel.patterns.length > 0 ? this.panel.patterns.length - 1 : -1; + this.render(); + }; + GrafanaBoomTableCtrl.prototype.movePattern = function (direction, index) { + var tempElement = this.panel.patterns[Number(index)]; + if (direction === 'UP') { + this.panel.patterns[Number(index)] = this.panel.patterns[Number(index) - 1]; + this.panel.patterns[Number(index) - 1] = tempElement; + this.panel.activePatternIndex = this.panel.activePatternIndex === -2 ? -2 : Number(index) - 1; + } + if (direction === 'DOWN') { + this.panel.patterns[Number(index)] = this.panel.patterns[Number(index) + 1]; + this.panel.patterns[Number(index) + 1] = tempElement; + this.panel.activePatternIndex = this.panel.activePatternIndex === -2 ? -2 : Number(index) + 1; + } + this.render(); + }; + GrafanaBoomTableCtrl.prototype.clonePattern = function (index) { + var copiedPattern = Object.assign({}, this.panel.patterns[Number(index)]); + Object.setPrototypeOf(copiedPattern, index_1.BoomPattern.prototype); + this.panel.patterns.push(copiedPattern); + this.render(); + }; + GrafanaBoomTableCtrl.prototype.sortByHeader = function (headerIndex) { + this.panel.sorting_props = this.panel.sorting_props || { + col_index: -1, + direction: 'desc', + }; + this.panel.sorting_props.col_index = headerIndex; + this.panel.sorting_props.direction = this.panel.sorting_props.direction === 'asc' ? 'desc' : 'asc'; + this.render(); + }; + GrafanaBoomTableCtrl.prototype.limitText = function (text, maxlength) { + if (text.split('').length > maxlength) { + text = text.substring(0, Number(maxlength) - 3) + '...'; + } + return text; + }; + GrafanaBoomTableCtrl.prototype.adjustScrollBar = function () { + var rootElem = this.elem.find('.table-panel-scroll'); + var originalHeight = this.ctrl.height; + if (isNaN(originalHeight)) { + if (this.ctrl && this.ctrl.elem && this.ctrl.elem[0] && this.ctrl.elem[0].clientHeight) { + originalHeight = this.ctrl.elem[0].clientHeight; + } + } + var maxheightofpanel = this.panel.debug_mode ? originalHeight - 111 : originalHeight - 31; + rootElem.css({ 'max-height': maxheightofpanel + 'px' }); + }; + GrafanaBoomTableCtrl.prototype.link = function (scope, elem, attrs, ctrl) { + this.scope = scope; + this.elem = elem; + this.attrs = attrs; + this.ctrl = ctrl; + this.panel = ctrl.panel; + this.panel.sorting_props = this.panel.sorting_props || { + col_index: -1, + direction: 'desc', + }; + }; + GrafanaBoomTableCtrl.templateUrl = 'partials/module.html'; + return GrafanaBoomTableCtrl; + }(sdk_1.MetricsPanelCtrl)); + exports_1("PanelCtrl", GrafanaBoomTableCtrl); + GrafanaBoomTableCtrl.prototype.render = function () { + var _this = this; + if (this.dataReceived) { + var outputdata = this.dataReceived.map(function (seriesData) { + var seriesOptions = { + debug_mode: _this.panel.debug_mode, + row_col_wrapper: _this.panel.row_col_wrapper || '_', + }; + return new index_1.BoomSeries(seriesData, _this.panel.defaultPattern, _this.panel.patterns, seriesOptions, _this.panel.scopedVars, _this.templateSrv, _this.timeSrv); + }); + var boomTableTransformationOptions = { + non_matching_cells_color_bg: this.panel.non_matching_cells_color_bg, + non_matching_cells_color_text: this.panel.non_matching_cells_color_text, + non_matching_cells_text: this.panel.non_matching_cells_text, + }; + var boomtabledata = app_1.seriesToTable(outputdata, boomTableTransformationOptions); + var renderingOptions = { + default_title_for_rows: this.panel.default_title_for_rows || config_1.config.default_title_for_rows, + first_column_link: this.panel.first_column_link || '#', + hide_first_column: this.panel.hide_first_column, + hide_headers: this.panel.hide_headers, + text_alignment_firstcolumn: this.panel.text_alignment_firstcolumn, + text_alignment_values: this.panel.text_alignment_values, + }; + var boom_output = new index_1.BoomOutput(renderingOptions); + this.outdata = { + cols_found: boomtabledata.cols_found.map(function (col) { + return _this.$sce.trustAsHtml(col); + }), + }; + var renderingdata = boom_output.getDataAsHTML(boomtabledata, this.panel.sorting_props); + this.elem.find('#boomtable_output_body').html("" + renderingdata.body); + this.elem.find('#boomtable_output_body_debug').html(this.panel.debug_mode ? boom_output.getDataAsDebugHTML(outputdata) : ""); + this.elem.find("[data-toggle='tooltip']").tooltip({ + boundary: 'scrollParent', + }); + this.adjustScrollBar(); + this.renderingCompleted(); + } + }; + } + }; +}); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL21vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7WUFrQkEsbUJBQWEsQ0FBQztnQkFDWixJQUFJLEVBQUUsYUFBVyxrQkFBUywwQkFBdUI7Z0JBQ2pELEtBQUssRUFBRSxhQUFXLGtCQUFTLDJCQUF3QjthQUNwRCxDQUFDLENBQUM7O2dCQUVnQyx3Q0FBZ0I7Z0JBV2pELDhCQUFZLE1BQU0sRUFBRSxTQUFTLEVBQUUsSUFBSTtvQkFBbkMsWUFDRSxrQkFBTSxNQUFNLEVBQUUsU0FBUyxDQUFDLFNBV3pCO29CQXJCTSxpQkFBVyxHQUFHLGFBQUcsQ0FBQyxjQUFjLEVBQUUsQ0FBQztvQkFDbkMsc0JBQWdCLEdBQUcsMkJBQWtCLENBQUM7b0JBQ3RDLDBCQUFvQixHQUFHLDZCQUFvQixDQUFDO29CQVNqRCxnQkFBQyxDQUFDLFFBQVEsQ0FBQyxLQUFJLENBQUMsS0FBSyxFQUFFLGVBQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztvQkFDN0MsS0FBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsS0FBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLElBQUksb0JBQWMsQ0FBQztvQkFDeEUsS0FBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7b0JBQ2pCLEtBQUksQ0FBQyxXQUFXLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztvQkFDaEQsS0FBSSxDQUFDLE9BQU8sR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO29CQUN4QyxLQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztvQkFDeEIsS0FBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsZUFBZSxFQUFFLEtBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUksQ0FBQyxDQUFDLENBQUM7b0JBQ2hFLEtBQUks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Q0FBQyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQzdILElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLENBQUMsT0FBTyxDQUFDO3dCQUNoRCxRQUFRLEVBQUUsY0FBYztxQkFDekIsQ0FBQyxDQUFDO29CQUNILElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztvQkFDdkIsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7aUJBQzNCO1lBQ0gsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8vPHJlZmVyZW5jZSBwYXRoPVwiLi4vbm9kZV9tb2R1bGVzL2dyYWZhbmEtc2RrLW1vY2tzL2FwcC9oZWFkZXJzL2NvbW1vbi5kLnRzXCIgLz5cclxuXHJcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XHJcbmltcG9ydCBrYm4gZnJvbSAnYXBwL2NvcmUvdXRpbHMva2JuJztcclxuaW1wb3J0IHsgbG9hZFBsdWdpbkNzcywgTWV0cmljc1BhbmVsQ3RybCB9IGZyb20gJ2FwcC9wbHVnaW5zL3Nkayc7XHJcbmltcG9ydCB7XHJcbiAgSUJvb21TZXJpZXMsXHJcbiAgSUJvb21SZW5kZXJpbmdPcHRpb25zLFxyXG4gIElCb29tVGFibGUsXHJcbiAgSUJvb21IVE1MLFxyXG4gIElCb29tVGFibGVUcmFuc2Zvcm1hdGlvbk9wdGlvbnMsXHJcbiAgQm9vbVBhdHRlcm4sXHJcbiAgQm9vbVNlcmllcyxcclxuICBCb29tT3V0cHV0LFxyXG59IGZyb20gJy4vYXBwL2Jvb20vaW5kZXgnO1xyXG5pbXBvcnQgeyBkZWZhdWx0UGF0dGVybiwgc2VyaWVzVG9UYWJsZSB9IGZyb20gXCIuL2FwcC9hcHBcIjtcclxuaW1wb3J0IHsgcGx1Z2luX2lkLCB2YWx1ZV9uYW1lX29wdGlvbnMsIHRleHRBbGlnbm1lbnRPcHRpb25zLCBjb25maWcgfSBmcm9tIFwiLi9hcHAvY29uZmlnXCI7XHJcblxyXG5sb2FkUGx1Z2luQ3NzKHtcclxuICBkYXJrOiBgcGx1Z2lucy8ke3BsdWdpbl9pZH0vY3NzL2RlZmF1bHQuZGFyay5jc3NgLFxyXG4gIGxpZ2h0OiBgcGx1Z2lucy8ke3BsdWdpbl9pZH0vY3NzL2RlZmF1bHQubGlnaHQuY3NzYCxcclxufSk7XHJcblxyXG5jbGFzcyBHcmFmYW5hQm9vbVRhYmxlQ3RybCBleHRlbmRzIE1ldHJpY3NQYW5lbEN0cmwge1xyXG4gIHB1YmxpYyBzdGF0aWMgdGVtcGxhdGVVcmwgPSAncGFydGlhbHMvbW9kdWxlLmh0bWwnO1xyXG4gIHB1YmxpYyB1bml0Rm9ybWF0cyA9IGtibi5nZXRVbml0Rm9ybWF0cygpO1xyXG4gIHB1YmxpYyB2YWx1ZU5hbWVPcHRpb25zID0gdmFsdWVfbmFtZV9vcHRpb25zO1xyXG4gIHB1YmxpYyB0ZXh0QWxpZ25tZW50T3B0aW9ucyA9IHRleHRBbGlnbm1lbnRPcHRpb25zO1xyXG4gIHB1YmxpYyBvdXRkYXRhO1xyXG4gIHB1YmxpYyBkYXRhUmVjZWl2ZWQ6IGFueTtcclxuICBwdWJsaWMgY3RybDogYW55O1xyXG4gIHB1YmxpYyBlbGVtOiBhbnk7XHJcbiAgcHVibGljIGF0dHJzOiBhbnk7XHJcbiAgcHVibGljICRzY2U6IGFueTtcclxuICBjb25zdHJ1Y3Rvcigkc2NvcGUsICRpbmplY3RvciwgJHNjZSkge1xyXG4gICAgc3VwZXIoJHNjb3BlLCAkaW5qZWN0b3IpO1xyXG4gICAgXy5kZWZhdWx0cyh0aGlzLnBhbmVsLCBjb25maWcucGFuZWxEZWZhdWx0cyk7XHJcbiAgICB0aGlzLnBhbmVsLmRlZmF1bHRQYXR0ZXJuID0gdGhpcy5wYW5lbC5kZWZhdWx0UGF0dGVybiB8fCBkZWZhdWx0UGF0dGVybjtcclxuICAgIHRoaXMuJHNjZSA9ICRzY2U7XHJcbiAgICB0aGlzLnRlbXBsYXRlU3J2ID0gJGluamVjdG9yLmdldCgndGVtcGxhdGVTcnYnKTtcclxuICAgIHRoaXMudGltZVNydiA9ICRpbmplY3Rvci5nZXQoJ3RpbWVTcnYnKTtcclxuICAgIHRoaXMudXBkYXRlUHJvdG90eXBlcygpO1xyXG4gICAgdGhpcy5ldmVudHMub24oJ2RhdGEtcmVjZWl2ZWQnLCB0aGlzLm9uRGF0YVJlY2VpdmVkLmJpbmQodGhpcykpO1xyXG4gICAgdGhpcy5ldmVudHMub24oJ2RhdGEtc25hcHNob3QtbG9hZCcsIHRoaXMub25EYXRhUmVjZWl2ZWQuYmluZCh0aGlzKSk7XHJcbiAgICB0aGlzLmV2ZW50cy5vbignaW5pdC1lZGl0LW1vZGUnLCB0aGlzLm9uSW5pdEVkaXRNb2RlLmJpbmQodGhpcykpO1xyXG4gICAgdGhpcy5wYW5lbC5hY3RpdmVQYXR0ZXJuSW5kZXggPSB0aGlzLnBhbmVsLmFjdGl2ZVBhdHRlcm5JbmRleCA9PT0gLTEgPyB0aGlzLnBhbmVsLnBhdHRlcm5zLmxlbmd0aCA6IHRoaXMucGFuZWwuYWN0aXZlUGF0dGVybkluZGV4O1xyXG4gIH1cclxuICBwcml2YXRlIHVwZGF0ZVByb3RvdHlwZXMoKTogdm9pZCB7XHJcbiAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcy5wYW5lbC5kZWZhdWx0UGF0dGVybiwgQm9vbVBhdHRlcm4ucHJvdG90eXBlKTtcclxuICAgIHRoaXMucGFuZWwucGF0dGVybnMubWFwKHBhdHRlcm4gPT4ge1xyXG4gICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YocGF0dGVybiwgQm9vbVBhdHRlcm4ucHJvdG90eXBlKTtcclxuICAgICAgcmV0dXJuIHBhdHRlcm47XHJcbiAgICB9KTtcclxuICB9XHJcbiAgcHVibGljIG9uRGF0YVJlY2VpdmVkKGRhdGE6IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5kYXRhUmVjZWl2ZWQgPSBkYXRhO1xyXG4gICAgdGhpcy5yZW5kZXIoKTtcclxuICB9XHJcbiAgcHVibGljIG9uSW5pdEVkaXRNb2RlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5hZGRFZGl0b3JUYWIoJ1BhdHRlcm5zJywgYHB1YmxpYy9wbHVnaW5zLyR7cGx1Z2luX2lkfS9wYXJ0aWFscy9lZGl0b3IuaHRtbGAsIDIpO1xyXG4gIH1cclxuICBwdWJsaWMgYWRkUGF0dGVybigpOiB2b2lkIHtcclxuICAgIGxldCBuZXdQYXR0ZXJuID0gbmV3IEJvb21QYXR0ZXJuKHtcclxuICAgICAgcm93X2NvbF93cmFwcGVyOiB0aGlzLnBhbmVsLnJvd19jb2xfd3JhcHBlcixcclxuICAgIH0pO1xyXG4gICAgdGhpcy5wYW5lbC5wYXR0ZXJucy5wdXNoKG5ld1BhdHRlcm4pO1xyXG4gICAgdGhpcy5wYW5lbC5hY3RpdmVQYXR0ZXJuSW5kZXggPSB0aGlzLnBhbmVsLmFjdGl2ZVBhdHRlcm5JbmRleCA9PT0gLTIgPyAtMiA6IHRoaXMucGFuZWwucGF0dGVybnMubGVuZ3RoIC0gMTtcclxuICAgIHRoaXMucmVuZGVyKCk7XHJcbiAgfVxyXG4gIHB1YmxpYyByZW1vdmVQYXR0ZXJuKGluZGV4OiBOdW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMucGFuZWwucGF0dGVybnMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgIHRoaXMucGFuZWwuYWN0aXZlUGF0dGVybkluZGV4ID1cclxuICAgICAgdGhpcy5wYW5lbC5hY3RpdmVQYXR0ZXJuSW5kZXggPT09IC0yID8gLTIgOiB0aGlzLnBhbmVsLnBhdHRlcm5zICYmIHRoaXMucGFuZWwucGF0dGVybnMubGVuZ3RoID4gMCA/IHRoaXMucGFuZWwucGF0dGVybnMubGVuZ3RoIC0gMSA6IC0xO1xyXG4gICAgdGhpcy5yZW5kZXIoKTtcclxuICB9XHJcbiAgcHVibGljIG1vdmVQYXR0ZXJuKGRpcmVjdGlvbjogc3RyaW5nLCBpbmRleDogTnVtYmVyKSB7XHJcbiAgICBsZXQgdGVtcEVsZW1lbnQgPSB0aGlzLnBhbmVsLnBhdHRlcm5zW051bWJlcihpbmRleCldO1xyXG4gICAgaWYgKGRpcmVjdGlvbiA9PT0gJ1VQJykge1xyXG4gICAgICB0aGlzLnBhbmVsLnBhdHRlcm5zW051bWJlcihpbmRleCldID0gdGhpcy5wYW5lbC5wYXR0ZXJuc1tOdW1iZXIoaW5kZXgpIC0gMV07XHJcbiAgICAgIHRoaXMucGFuZWwucGF0dGVybnNbTnVtYmVyKGluZGV4KSAtIDFdID0gdGVtcEVsZW1lbnQ7XHJcbiAgICAgIHRoaXMucGFuZWwuYWN0aXZlUGF0dGVybkluZGV4ID0gdGhpcy5wYW5lbC5hY3RpdmVQYXR0ZXJuSW5kZXggPT09IC0yID8gLTIgOiBOdW1iZXIoaW5kZXgpIC0gMTtcclxuICAgIH1cclxuICAgIGlmIChkaXJlY3Rpb24gPT09ICdET1dOJykge1xyXG4gICAgICB0aGlzLnBhbmVsLnBhdHRlcm5zW051bWJlcihpbmRleCldID0gdGhpcy5wYW5lbC5wYXR0ZXJuc1tOdW1iZXIoaW5kZXgpICsgMV07XHJcbiAgICAgIHRoaXMucGFuZWwucGF0dGVybnNbTnVtYmVyKGluZGV4KSArIDFdID0gdGVtcEVsZW1lbnQ7XHJcbiAgICAgIHRoaXMucGFuZWwuYWN0aXZlUGF0dGVybkluZGV4ID0gdGhpcy5wYW5lbC5hY3RpdmVQYXR0ZXJuSW5kZXggPT09IC0yID8gLTIgOiBOdW1iZXIoaW5kZXgpICsgMTtcclxuICAgIH1cclxuICAgIHRoaXMucmVuZGVyKCk7XHJcbiAgfVxyXG4gIHB1YmxpYyBjbG9uZVBhdHRlcm4oaW5kZXg6IE51bWJlcik6IHZvaWQge1xyXG4gICAgbGV0IGNvcGllZFBhdHRlcm4gPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLnBhbmVsLnBhdHRlcm5zW051bWJlcihpbmRleCldKTtcclxuICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihjb3BpZWRQYXR0ZXJuLCBCb29tUGF0dGVybi5wcm90b3R5cGUpO1xyXG4gICAgdGhpcy5wYW5lbC5wYXR0ZXJucy5wdXNoKGNvcGllZFBhdHRlcm4pO1xyXG4gICAgdGhpcy5yZW5kZXIoKTtcclxuICB9XHJcbiAgcHVibGljIHNvcnRCeUhlYWRlcihoZWFkZXJJbmRleDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnBhbmVsLnNvcnRpbmdfcHJvcHMgPSB0aGlzLnBhbmVsLnNvcnRpbmdfcHJvcHMgfHwge1xyXG4gICAgICBjb2xfaW5kZXg6IC0xLFxyXG4gICAgICBkaXJlY3Rpb246ICdkZXNjJyxcclxuICAgIH07XHJcbiAgICB0aGlzLnBhbmVsLnNvcnRpbmdfcHJvcHMuY29sX2luZGV4ID0gaGVhZGVySW5kZXg7XHJcbiAgICB0aGlzLnBhbmVsLnNvcnRpbmdfcHJvcHMuZGlyZWN0aW9uID0gdGhpcy5wYW5lbC5zb3J0aW5nX3Byb3BzLmRpcmVjdGlvbiA9PT0gJ2FzYycgPyAnZGVzYycgOiAnYXNjJztcclxuICAgIHRoaXMucmVuZGVyKCk7XHJcbiAgfVxyXG4gIHB1YmxpYyBsaW1pdFRleHQodGV4dDogc3RyaW5nLCBtYXhsZW5ndGg6IE51bWJlcik6IHN0cmluZyB7XHJcbiAgICBpZiAodGV4dC5zcGxpdCgnJykubGVuZ3RoID4gbWF4bGVuZ3RoKSB7XHJcbiAgICAgIHRleHQgPSB0ZXh0LnN1YnN0cmluZygwLCBOdW1iZXIobWF4bGVuZ3RoKSAtIDMpICsgJy4uLic7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGV4dDtcclxuICB9XHJcbiAgcHVibGljIGFkanVzdFNjcm9sbEJhcigpOiB2b2lkIHtcclxuICAgIGxldCByb290RWxlbSA9IHRoaXMuZWxlbS5maW5kKCcudGFibGUtcGFuZWwtc2Nyb2xsJyk7XHJcbiAgICBsZXQgb3JpZ2luYWxIZWlnaHQgPSB0aGlzLmN0cmwuaGVpZ2h0O1xyXG4gICAgaWYgKGlzTmFOKG9yaWdpbmFsSGVpZ2h0KSkge1xyXG4gICAgICBpZiAodGhpcy5jdHJsICYmIHRoaXMuY3RybC5lbGVtICYmIHRoaXMuY3RybC5lbGVtWzBdICYmIHRoaXMuY3RybC5lbGVtWzBdLmNsaWVudEhlaWdodCkge1xyXG4gICAgICAgIG9yaWdpbmFsSGVpZ2h0ID0gdGhpcy5jdHJsLmVsZW1bMF0uY2xpZW50SGVpZ2h0O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBsZXQgbWF4aGVpZ2h0b2ZwYW5lbCA9IHRoaXMucGFuZWwuZGVidWdfbW9kZSA/IG9yaWdpbmFsSGVpZ2h0IC0gMTExIDogb3JpZ2luYWxIZWlnaHQgLSAzMTtcclxuICAgIHJvb3RFbGVtLmNzcyh7ICdtYXgtaGVpZ2h0JzogbWF4aGVpZ2h0b2ZwYW5lbCArICdweCcgfSk7XHJcbiAgfVxyXG4gIHB1YmxpYyBsaW5rKHNjb3BlOiBhbnksIGVsZW06IGFueSwgYXR0cnM6IGFueSwgY3RybDogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnNjb3BlID0gc2NvcGU7XHJcbiAgICB0aGlzLmVsZW0gPSBlbGVtO1xyXG4gICAgdGhpcy5hdHRycyA9IGF0dHJzO1xyXG4gICAgdGhpcy5jdHJsID0gY3RybDtcclxuICAgIHRoaXMucGFuZWwgPSBjdHJsLnBhbmVsO1xyXG4gICAgdGhpcy5wYW5lbC5zb3J0aW5nX3Byb3BzID0gdGhpcy5wYW5lbC5zb3J0aW5nX3Byb3BzIHx8IHtcclxuICAgICAgY29sX2luZGV4OiAtMSxcclxuICAgICAgZGlyZWN0aW9uOiAnZGVzYycsXHJcbiAgICB9O1xyXG4gIH1cclxufVxyXG5cclxuR3JhZmFuYUJvb21UYWJsZUN0cmwucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uICgpIHtcclxuICBpZiAodGhpcy5kYXRhUmVjZWl2ZWQpIHtcclxuICAgIGxldCBvdXRwdXRkYXRhOiBJQm9vbVNlcmllc1tdID0gdGhpcy5kYXRhUmVjZWl2ZWQubWFwKHNlcmllc0RhdGEgPT4ge1xyXG4gICAgICBsZXQgc2VyaWVzT3B0aW9ucyA9IHtcclxuICAgICAgICBkZWJ1Z19tb2RlOiB0aGlzLnBhbmVsLmRlYnVnX21vZGUsXHJcbiAgICAgICAgcm93X2NvbF93cmFwcGVyOiB0aGlzLnBhbmVsLnJvd19jb2xfd3JhcHBlciB8fCAnXycsXHJcbiAgICAgIH07XHJcbiAgICAgIHJldHVybiBuZXcgQm9vbVNlcmllcyhcclxuICAgICAgICBzZXJpZXNEYXRhLFxyXG4gICAgICAgIHRoaXMucGFuZWwuZGVmYXVsdFBhdHRlcm4sXHJcbiAgICAgICAgdGhpcy5wYW5lbC5wYXR0ZXJucyxcclxuICAgICAgICBzZXJpZXNPcHRpb25zLFxyXG4gICAgICAgIHRoaXMucGFuZWwuc2NvcGVkVmFycyxcclxuICAgICAgICB0aGlzLnRlbXBsYXRlU3J2LFxyXG4gICAgICAgIHRoaXMudGltZVNydlxyXG4gICAgICApO1xyXG4gICAgfSk7XHJcbiAgICBsZXQgYm9vbVRhYmxlVHJhbnNmb3JtYXRpb25PcHRpb25zOiBJQm9vbVRhYmxlVHJhbnNmb3JtYXRpb25PcHRpb25zID0ge1xyXG4gICAgICBub25fbWF0Y2hpbmdfY2VsbHNfY29sb3JfYmc6IHRoaXMucGFuZWwubm9uX21hdGNoaW5nX2NlbGxzX2NvbG9yX2JnLFxyXG4gICAgICBub25fbWF0Y2hpbmdfY2VsbHNfY29sb3JfdGV4dDogdGhpcy5wYW5lbC5ub25fbWF0Y2hpbmdfY2VsbHNfY29sb3JfdGV4dCxcclxuICAgICAgbm9uX21hdGNoaW5nX2NlbGxzX3RleHQ6IHRoaXMucGFuZWwubm9uX21hdGNoaW5nX2NlbGxzX3RleHQsXHJcbiAgICB9O1xyXG4gICAgbGV0IGJvb210YWJsZWRhdGE6IElCb29tVGFibGUgPSBzZXJpZXNUb1RhYmxlKG91dHB1dGRhdGEsIGJvb21UYWJsZVRyYW5zZm9ybWF0aW9uT3B0aW9ucyk7XHJcbiAgICBsZXQgcmVuZGVyaW5nT3B0aW9uczogSUJvb21SZW5kZXJpbmdPcHRpb25zID0ge1xyXG4gICAgICBkZWZhdWx0X3RpdGxlX2Zvcl9yb3dzOiB0aGlzLnBhbmVsLmRlZmF1bHRfdGl0bGVfZm9yX3Jvd3MgfHwgY29uZmlnLmRlZmF1bHRfdGl0bGVfZm9yX3Jvd3MsXHJcbiAgICAgIGZpcnN0X2NvbHVtbl9saW5rOiB0aGlzLnBhbmVsLmZpcnN0X2NvbHVtbl9saW5rIHx8ICcjJyxcclxuICAgICAgaGlkZV9maXJzdF9jb2x1bW46IHRoaXMucGFuZWwuaGlkZV9maXJzdF9jb2x1bW4sXHJcbiAgICAgIGhpZGVfaGVhZGVyczogdGhpcy5wYW5lbC5oaWRlX2hlYWRlcnMsXHJcbiAgICAgIHRleHRfYWxpZ25tZW50X2ZpcnN0Y29sdW1uOiB0aGlzLnBhbmVsLnRleHRfYWxpZ25tZW50X2ZpcnN0Y29sdW1uLFxyXG4gICAgICB0ZXh0X2FsaWdubWVudF92YWx1ZXM6IHRoaXMucGFuZWwudGV4dF9hbGlnbm1lbnRfdmFsdWVzLFxyXG4gICAgfTtcclxuICAgIGxldCBib29tX291dHB1dCA9IG5ldyBCb29tT3V0cHV0KHJlbmRlcmluZ09wdGlvbnMpO1xyXG4gICAgdGhpcy5vdXRkYXRhID0ge1xyXG4gICAgICBjb2xzX2ZvdW5kOiBib29tdGFibGVkYXRhLmNvbHNfZm91bmQubWFwKGNvbCA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJHNjZS50cnVzdEFzSHRtbChjb2wpO1xyXG4gICAgICB9KSxcclxuICAgIH07XHJcbiAgICBsZXQgcmVuZGVyaW5nZGF0YTogSUJvb21IVE1MID0gYm9vbV9vdXRwdXQuZ2V0RGF0YUFzSFRNTChib29tdGFibGVkYXRhLCB0aGlzLnBhbmVsLnNvcnRpbmdfcHJvcHMpO1xyXG4gICAgdGhpcy5lbGVtLmZpbmQoJyNib29tdGFibGVfb3V0cHV0X2JvZHknKS5odG1sKGBgICsgcmVuZGVyaW5nZGF0YS5ib2R5KTtcclxuICAgIHRoaXMuZWxlbS5maW5kKCcjYm9vbXRhYmxlX291dHB1dF9ib2R5X2RlYnVnJykuaHRtbCh0aGlzLnBhbmVsLmRlYnVnX21vZGUgPyBib29tX291dHB1dC5nZXREYXRhQXNEZWJ1Z0hUTUwob3V0cHV0ZGF0YSkgOiBgYCk7XHJcbiAgICB0aGlzLmVsZW0uZmluZChcIltkYXRhLXRvZ2dsZT0ndG9vbHRpcCddXCIpLnRvb2x0aXAoe1xyXG4gICAgICBib3VuZGFyeTogJ3Njcm9sbFBhcmVudCcsXHJcbiAgICB9KTtcclxuICAgIHRoaXMuYWRqdXN0U2Nyb2xsQmFyKCk7XHJcbiAgICB0aGlzLnJlbmRlcmluZ0NvbXBsZXRlZCgpO1xyXG4gIH1cclxufTtcclxuXHJcbmV4cG9ydCB7IEdyYWZhbmFCb29tVGFibGVDdHJsIGFzIFBhbmVsQ3RybCB9O1xyXG4iXX0= \ No newline at end of file diff --git a/dist/partials/editor.html b/dist/partials/editor.html new file mode 100644 index 0000000..862195c --- /dev/null +++ b/dist/partials/editor.html @@ -0,0 +1,605 @@ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
PatterndelimiterRow NameCol NameStatFormatDecimalsEdit
+ + + + + + + + + + + +
+
+ + + + + + + +
+
+
+
+ +
+
+
+
+
+
+
+
Warning : This pattern is currently Disabled
+
+
+
+
+
+
+
+
Pattern
+
+
+
+
+ + + + + + + + + + +
+
+
+
+ + + + + +
+
+
+
+
+
+
+
+
Stats
+
+
+
+
+ + + + +
+ + + +
+
+
+
+ + + + + + + + +
+
+
+
+
+
+
+
+
Thresholds
+
+
+
+
+ + +
+
+ +
+
+ + + + + + +
+
+
+
+ + + + + + +
+
+
+
+ + + + + + +
+
+
+
+
+
+
+
+
Dynamic Thresholds
+
+
+
+
+ + + + +
+
+
+
+
+ + + + + + + + + + + + + + + +
+
+
+
+
+
+
+
+
+
Overrides
+
+
+
+ + + + + +
+
+
+
+ + + + + +
+
+
+
+ + + + + +
+
+
+
+
+
+
+
+
Null Handling
+
+
+
+
+ + + + + + + + +
+
+
+
+ +
+
+
+
+
Hide Series
+
+
+
+
+ + + + + +
+
+
+
+
+
+
+
+
Pattern Management
+
+
+
+
+ + + + + Currently Enabled + Currently Disabled +
+
+
+
+ + + +
+
+
+
+ + + +
+
+
+
+
+
+
+
+
+
+
Options
+
+
+
+
+
+ + +
+
+
+
+
+
+ + +
+
+
+
+
+
+ + +
+
+
+
+
+
+ + +
+
+
+
+
+
+ + +
+
+
+
+
+
+ + +
+
+
+
+
+
+ + +
+
+
+
+
+
+ + +
+
+
+
+
+
+ + +
+
+
+
+
+
+
+
+
+
Non matching series
+
+
+
+
+
+ + +
+
+
+
+
+
+ + +
+
+
+
+
+
+ + +
+
+
+
+
+
+
+
+
+
Other Optons
+
+
+
+
+
+ + +
+
+
+
+
+
+ + +
+
+
+
+
+
+
+
diff --git a/dist/partials/module.html b/dist/partials/module.html new file mode 100644 index 0000000..46caba6 --- /dev/null +++ b/dist/partials/module.html @@ -0,0 +1,40 @@ +
+
+
WARNING: Panel running in debug mode
+
+
+
+ + + + + + + + + + + + + + + +
MetricPatternValueRow NameCol NameThresholdsBG ColorText Color
+
+ + + + + + + + + +
+ + + + +
+
+
\ No newline at end of file diff --git a/dist/plugin.json b/dist/plugin.json new file mode 100644 index 0000000..5a5bcdf --- /dev/null +++ b/dist/plugin.json @@ -0,0 +1,37 @@ +{ + "type": "panel", + "name": "Boom Table", + "id": "yesoreyeram-boomtable-panel", + "dataFormats": [ + "time_series" + ], + "info": { + "description": "Boom table panel for Graphite, InfluxDB, Prometheus", + "author": { + "name": "Sriramajeyam Sugumaran", + "url": "https://www.google.com/search?q=Sriramajeyam+Sugumaran" + }, + "keywords": [ + "grafana", + "plugin", + "panel", + "table", + "graphite", + "influxdb", + "prometheus", + "multi column", + "time based thresholds" + ], + "links": [ + { + "name": "Github", + "url": "https://github.com/yesoreyeram/yesoreyeram-boomtable-panel" + } + ], + "version": "1.4.0" + }, + "dependencies": { + "grafanaVersion": "4.x.x", + "plugins": [] + } +} \ No newline at end of file diff --git a/dist/src/img/azure-monitor-usage.png b/dist/src/img/azure-monitor-usage.png new file mode 100644 index 0000000..a5711e6 Binary files /dev/null and b/dist/src/img/azure-monitor-usage.png differ diff --git a/dist/src/img/debug-ui.png b/dist/src/img/debug-ui.png new file mode 100644 index 0000000..cea9fe1 Binary files /dev/null and b/dist/src/img/debug-ui.png differ diff --git a/dist/src/img/editor-1.png b/dist/src/img/editor-1.png new file mode 100644 index 0000000..bdb908f Binary files /dev/null and b/dist/src/img/editor-1.png differ diff --git a/dist/src/img/editor-2.png b/dist/src/img/editor-2.png new file mode 100644 index 0000000..7939100 Binary files /dev/null and b/dist/src/img/editor-2.png differ diff --git a/dist/src/img/editor-default.png b/dist/src/img/editor-default.png new file mode 100644 index 0000000..742684f Binary files /dev/null and b/dist/src/img/editor-default.png differ diff --git a/dist/src/img/filters.png b/dist/src/img/filters.png new file mode 100644 index 0000000..ab0386c Binary files /dev/null and b/dist/src/img/filters.png differ diff --git a/dist/src/img/font-awesome-examples.png b/dist/src/img/font-awesome-examples.png new file mode 100644 index 0000000..a27b938 Binary files /dev/null and b/dist/src/img/font-awesome-examples.png differ diff --git a/dist/src/img/img-transform-example.png b/dist/src/img/img-transform-example.png new file mode 100644 index 0000000..d67daae Binary files /dev/null and b/dist/src/img/img-transform-example.png differ diff --git a/dist/src/img/influx-usage.png b/dist/src/img/influx-usage.png new file mode 100644 index 0000000..97ec213 Binary files /dev/null and b/dist/src/img/influx-usage.png differ diff --git a/dist/src/img/metrics.png b/dist/src/img/metrics.png new file mode 100644 index 0000000..2a24005 Binary files /dev/null and b/dist/src/img/metrics.png differ diff --git a/dist/src/img/panel.png b/dist/src/img/panel.png new file mode 100644 index 0000000..916ba8b Binary files /dev/null and b/dist/src/img/panel.png differ diff --git a/dist/src/img/panels-fa.png b/dist/src/img/panels-fa.png new file mode 100644 index 0000000..120a061 Binary files /dev/null and b/dist/src/img/panels-fa.png differ diff --git a/dist/src/img/prometheus-usage.png b/dist/src/img/prometheus-usage.png new file mode 100644 index 0000000..151f2c6 Binary files /dev/null and b/dist/src/img/prometheus-usage.png differ diff --git a/dist/src/img/time-based-thresholds.png b/dist/src/img/time-based-thresholds.png new file mode 100644 index 0000000..3a263e5 Binary files /dev/null and b/dist/src/img/time-based-thresholds.png differ diff --git a/dist/src/img/version-5.0.2.png b/dist/src/img/version-5.0.2.png new file mode 100644 index 0000000..277535e Binary files /dev/null and b/dist/src/img/version-5.0.2.png differ diff --git a/dist/tests/BoomSeries.spec.js b/dist/tests/BoomSeries.spec.js new file mode 100644 index 0000000..cb8d51c --- /dev/null +++ b/dist/tests/BoomSeries.spec.js @@ -0,0 +1,227 @@ +System.register(["./../app/boom/BoomUtils"], function (exports_1, context_1) { + "use strict"; + var BoomUtils_1, dummy_series_1, dummy_series_2; + var __moduleName = context_1 && context_1.id; + return { + setters: [ + function (BoomUtils_1_1) { + BoomUtils_1 = BoomUtils_1_1; + } + ], + execute: function () { + dummy_series_1 = { + stats: { + "avg": 9.077777777777778, + "count": 360, + "current": 6, + "delta": 1396, + "diff": 4, + "first": 2, + "logmin": 1, + "max": 24, + "min": 0, + "range": 24, + "timeStep": 60000, + "total": 3268, + } + }; + dummy_series_2 = { + "alias": "COM # count", + "aliasEscaped": "COM # count", + "datapoints": [ + [ + 108, + 1575198840000 + ], + [ + 86, + 1575198900000 + ], + [ + 93, + 1575198960000 + ], + [ + 48, + 1575199020000 + ], + [ + null, + 1575199080000 + ], + [ + null, + 1575199140000 + ], + [ + null, + 1575199200000 + ], + [ + null, + 1575199260000 + ] + ], + "id": "COM # count", + "label": "COM # count", + "stats": { + "avg": 41.875, + "count": 8, + "current": 0, + "delta": 93, + "diff": -108, + "first": 108, + "logmin": 48, + "max": 108, + "min": 0, + "range": 108, + "timeStep": 60000, + "total": 335, + } + }; + describe("Boom Series", function () { + it("getSeriesValue", function () { + expect(BoomUtils_1.getSeriesValue({}, "total")).toBe(NaN); + expect(BoomUtils_1.getSeriesValue({}, "foo")).toBe(NaN); + expect(BoomUtils_1.getSeriesValue(dummy_series_1, "foo")).toBe(null); + expect(BoomUtils_1.getSeriesValue(dummy_series_1, "total")).toBe(3268); + expect(BoomUtils_1.getSeriesValue(dummy_series_1, "TOTAL")).toBe(3268); + expect(BoomUtils_1.getSeriesValue(dummy_series_1, "last_time")).toBe(null); + expect(BoomUtils_1.getSeriesValue(dummy_series_1, "LAST_TIME")).toBe(null); + expect(BoomUtils_1.getSeriesValue(dummy_series_2, "total")).toBe(dummy_series_2.stats.total); + expect(BoomUtils_1.getSeriesValue(dummy_series_2, "last_time_nonnull")).toBe(1575199020000); + expect(BoomUtils_1.getSeriesValue(dummy_series_2, "last_time")).toBe(1575199260000); + }); + it("getCurrentTimeStamp", function () { + expect(BoomUtils_1.getCurrentTimeStamp(dummy_series_2.datapoints)).toStrictEqual(new Date(1575199260000)); + }); + it("replaceDelimitedColumns", function () { + expect(BoomUtils_1.replaceDelimitedColumns("Hello _0_ is _1_", "foo.bar.baz", ".", "_")).toBe("Hello foo is bar"); + expect(BoomUtils_1.replaceDelimitedColumns("Hello _0__1_", "foo.bar.baz", ".", "_")).toBe("Hello foobar"); + expect(BoomUtils_1.replaceDelimitedColumns("Hello _0__1__1_", "foo.bar.baz", ".", "_")).toBe("Hello foobarbar"); + expect(BoomUtils_1.replaceDelimitedColumns("Hello _0__1__3_", "foo.bar.baz", ".", "_")).toBe("Hello foobar_3_"); + expect(BoomUtils_1.replaceDelimitedColumns("Hello _0__1__1_", "foo bar baz", " ", "_")).toBe("Hello foobarbar"); + expect(BoomUtils_1.replaceDelimitedColumns("Hello #0##1##1#", "foo bar baz", " ", "#")).toBe("Hello foobarbar"); + }); + it("getRowName", function () { + expect(BoomUtils_1.getRowName("Hello _0_ is _1_", ".", "_", "foo.bar.baz", "", [])).toBe("Hello foo is bar"); + expect(BoomUtils_1.getRowName("Hello _0_ is _1_ _series_ _series_", ".", "_", "foo.bar.baz", "", [])).toBe("Hello foo is bar foo.bar.baz foo.bar.baz"); + }); + it("getColName", function () { + expect(BoomUtils_1.getColName("Hello _0_ is _1_", ".", "_", "foo.bar.baz", "rowName", "", [])).toBe("Hello foo is bar"); + expect(BoomUtils_1.getColName("foo.bar", ".", "_", "foo.bar", "foo.bar", "", [])).toBe("foo.bar"); + }); + }); + describe("Normalize Color", function () { + it("Normalize Named Colors", function () { + expect(BoomUtils_1.normalizeColor("Green")).toBe("rgba(50, 172, 45, 0.97)"); + expect(BoomUtils_1.normalizeColor("Orange")).toBe("rgba(237, 129, 40, 0.89)"); + expect(BoomUtils_1.normalizeColor("Red")).toBe("rgba(245, 54, 54, 0.9)"); + expect(BoomUtils_1.normalizeColor("Purple")).toBe("Purple"); + }); + }); + describe("Get Color", function () { + it("Color Strings", function () { + expect(BoomUtils_1.getColor("Green", 0)).toBe(" style=\"color:rgba(50, 172, 45, 0.97)\" "); + expect(BoomUtils_1.getColor("Orange", 0)).toBe(" style=\"color:rgba(237, 129, 40, 0.89)\" "); + expect(BoomUtils_1.getColor("Red", 0)).toBe(" style=\"color:rgba(245, 54, 54, 0.9)\" "); + expect(BoomUtils_1.getColor("Purple", 0)).toBe(" style=\"color:Purple\" "); + }); + }); + describe("Parse Math Tokens", function () { + it("Sum", function () { + expect(BoomUtils_1.parseMathExpression("15+5", 0)).toBe(20); + expect(BoomUtils_1.parseMathExpression("0.2+2.3", 0)).toBe(3); + }); + it("Substraction", function () { + expect(BoomUtils_1.parseMathExpression("15-5", 0)).toBe(10); + expect(BoomUtils_1.parseMathExpression("0.2-2.3", 0)).toBe(-2); + }); + it("Multiplication", function () { + expect(BoomUtils_1.parseMathExpression("3*5", 0)).toBe(15); + expect(BoomUtils_1.parseMathExpression("0.2*2", 0)).toBe(0); + expect(BoomUtils_1.parseMathExpression("0.3*2", 0)).toBe(1); + }); + it("Division", function () { + expect(BoomUtils_1.parseMathExpression("9/5", 0)).toBe(2); + expect(BoomUtils_1.parseMathExpression("0.2/2", 0)).toBe(0); + expect(BoomUtils_1.parseMathExpression("2.3/2", 0)).toBe(1); + }); + it("Min", function () { + expect(BoomUtils_1.parseMathExpression("9min5", 0)).toBe(5); + expect(BoomUtils_1.parseMathExpression("5min9", 0)).toBe(5); + expect(BoomUtils_1.parseMathExpression("9min0.4", 0)).toBe(0); + expect(BoomUtils_1.parseMathExpression("5min0.9", 0)).toBe(1); + }); + }); + describe("Get Actial name without tokens", function () { + it("Row and colname", function () { + expect(BoomUtils_1.getActualNameWithoutTokens("hello")).toBe("hello"); + expect(BoomUtils_1.getActualNameWithoutTokens("hello how are you!")).toBe("hello how are you!"); + expect(BoomUtils_1.getActualNameWithoutTokens("hello _fa-circle_ how are you")).toBe("hello how are you"); + }); + }); + describe("Threshold Validator", function () { + it("BG Colors", function () { + expect(BoomUtils_1.getItemBasedOnThreshold([10, 20], ["green", "orange", "red"], 5, "black")).toBe("green"); + expect(BoomUtils_1.getItemBasedOnThreshold([10, 20], ["green", "orange", "red"], 10, "black")).toBe("orange"); + expect(BoomUtils_1.getItemBasedOnThreshold([10, 20], ["green", "orange", "red"], 15, "black")).toBe("orange"); + expect(BoomUtils_1.getItemBasedOnThreshold([10, 20], ["green", "orange", "red", "blue"], 15, "black")).toBe("orange"); + expect(BoomUtils_1.getItemBasedOnThreshold([10, 20], ["green", "orange", "red"], 20, "black")).toBe("red"); + expect(BoomUtils_1.getItemBasedOnThreshold([10, 20], ["green", "orange", "red"], 25, "black")).toBe("red"); + expect(BoomUtils_1.getItemBasedOnThreshold([10, 20], ["green", "orange", "red"], 20, "black")).toBe("red"); + expect(BoomUtils_1.getItemBasedOnThreshold([10, 20], ["green", "orange"], 25, "black")).toBe("black"); + }); + }); + describe("Mertic Name from prometheus / influxdb Alias", function () { + it("Prometheus Format", function () { + expect(BoomUtils_1.getMetricNameFromTaggedAlias("container_cpu_load_average_10s")).toBe("container_cpu_load_average_10s"); + expect(BoomUtils_1.getMetricNameFromTaggedAlias("container_cpu_load_average_10s ")).toBe("container_cpu_load_average_10s"); + expect(BoomUtils_1.getMetricNameFromTaggedAlias("container_cpu_load_average_10s {}")).toBe("container_cpu_load_average_10s"); + expect(BoomUtils_1.getMetricNameFromTaggedAlias(" container_cpu_load_average_10s {}")).toBe("container_cpu_load_average_10s"); + expect(BoomUtils_1.getMetricNameFromTaggedAlias("container_cpu_load_average_10s{agentpool=\"agentpool1\"}")).toBe("container_cpu_load_average_10s"); + expect(BoomUtils_1.getMetricNameFromTaggedAlias("container_cpu_load_average_10s {agentpool=\"agentpool1\"}")).toBe("container_cpu_load_average_10s"); + expect(BoomUtils_1.getMetricNameFromTaggedAlias(" container_cpu_load_average_10s { agentpool = \"agentpool1\" } ")).toBe("container_cpu_load_average_10s"); + expect(BoomUtils_1.getMetricNameFromTaggedAlias(" container_cpu_load_average_10s { image = \"abc:cba12:hello\" } ")).toBe("container_cpu_load_average_10s"); + expect(BoomUtils_1.getMetricNameFromTaggedAlias("container_memory_usage_bytes{beta_kubernetes_io_arch=\"amd64\",beta_kubernetes_io_instance_type=\"Standard_D2_v2\"}")).toBe("container_memory_usage_bytes"); + }); + it("InfluxDB Format", function () { + expect(BoomUtils_1.getMetricNameFromTaggedAlias("CPU.CPU TIme")).toBe("CPU.CPU TIme"); + expect(BoomUtils_1.getMetricNameFromTaggedAlias("CPU.CPU TIme ")).toBe("CPU.CPU TIme"); + expect(BoomUtils_1.getMetricNameFromTaggedAlias("CPU.CPU TIme {} ")).toBe("CPU.CPU TIme"); + expect(BoomUtils_1.getMetricNameFromTaggedAlias("CPU.CPU TIme {environment: 279, instance: _Total}")).toBe("CPU.CPU TIme"); + expect(BoomUtils_1.getMetricNameFromTaggedAlias(" CPU.CPU TIme { environment: 279, instance: _Total}")).toBe("CPU.CPU TIme"); + expect(BoomUtils_1.getMetricNameFromTaggedAlias(" CPU.CPU TIme { environment: 279, equation: `_Tota=l`}")).toBe("CPU.CPU TIme"); + }); + }); + describe("Value needs to hidden", function () { + it("Default Values", function () { + expect(BoomUtils_1.doesValueNeedsToHide(10, undefined)).toBe(false); + expect(BoomUtils_1.doesValueNeedsToHide(0, { value_below: "5" })).toBe(true); + expect(BoomUtils_1.doesValueNeedsToHide(-2, { value_below: "-1" })).toBe(true); + expect(BoomUtils_1.doesValueNeedsToHide(2, { value_below: "10" })).toBe(true); + expect(BoomUtils_1.doesValueNeedsToHide(10, { value_below: "5" })).toBe(false); + expect(BoomUtils_1.doesValueNeedsToHide(2, { value_below: "-1" })).toBe(false); + expect(BoomUtils_1.doesValueNeedsToHide(15, { value_above: "10" })).toBe(true); + expect(BoomUtils_1.doesValueNeedsToHide(15, { value_above: "0" })).toBe(true); + expect(BoomUtils_1.doesValueNeedsToHide(10, { value_above: "15" })).toBe(false); + expect(BoomUtils_1.doesValueNeedsToHide(0, { value_above: "15" })).toBe(false); + expect(BoomUtils_1.doesValueNeedsToHide(0, { value_below: "5", value_above: "-5" })).toBe(true); + expect(BoomUtils_1.doesValueNeedsToHide(10, { value_below: "15", value_above: "30" })).toBe(true); + expect(BoomUtils_1.doesValueNeedsToHide(10, { value_below: "5", value_above: "5" })).toBe(true); + expect(BoomUtils_1.doesValueNeedsToHide(10, { value_below: "15", value_above: "5" })).toBe(true); + expect(BoomUtils_1.doesValueNeedsToHide(10, { value_below: "015", value_above: "05" })).toBe(true); + expect(BoomUtils_1.doesValueNeedsToHide(0, { value_below: "5", value_above: "2" })).toBe(true); + expect(BoomUtils_1.doesValueNeedsToHide(0, { value_below: "2", value_above: "5" })).toBe(true); + expect(BoomUtils_1.doesValueNeedsToHide(10, { value_below: " 015 ", value_above: " 05 " })).toBe(true); + expect(BoomUtils_1.doesValueNeedsToHide(10, { value_below: " 5 ", value_above: "-5 " })).toBe(true); + expect(BoomUtils_1.doesValueNeedsToHide(10, { value_below: "15", value_above: "5 " })).toBe(true); + expect(BoomUtils_1.doesValueNeedsToHide(10, { value_below: "5", value_above: "30" })).toBe(false); + expect(BoomUtils_1.doesValueNeedsToHide(10, { value_below: " 5 ", value_above: " 30 " })).toBe(false); + expect(BoomUtils_1.doesValueNeedsToHide(0, { value_below: "-2", value_above: "5" })).toBe(false); + }); + }); + } + }; +}); +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQm9vbVNlcmllcy5zcGVjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Rlc3RzL0Jvb21TZXJpZXMuc3BlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztZQUVNLGNBQWMsR0FBRztnQkFDbkIsS0FBSyxFQUFFO29CQUNILEtBQUssRUFBRSxpQkFBaUI7b0JBQ3hCLE9BQU8sRUFBRSxHQUFHO29CQUNaLFNBQVMsRUFBRSxDQUFDO29CQUNaLE9BQU8sRUFBRSxJQUFJO29CQUNiLE1BQU0sRUFBRSxDQUFDO29CQUNULE9BQU8sRUFBRSxDQUFDO29CQUNWLFFBQVEsRUFBRSxDQUFDO29CQUNYLEtBQUssRUFBRSxFQUFFO29CQUNULEtBQUssRUFBRSxDQUFDO29CQUNSLE9BQU8sRUFBRSxFQUFFO29CQUNYLFVBQVUsRUFBRSxLQUFLO29CQUNqQixPQUFPLEVBQUUsSUFBSTtpQkFDaEI7YUFDSixDQUFDO1lBQ0ksY0FBYyxHQUFHO2dCQUNuQixPQUFPLEVBQUUsYUFBYTtnQkFDdEIsY0FBYyxFQUFFLGFBQWE7Z0JBQzdCLFlBQVksRUFBRTtvQkFDVjt3QkFDSSxHQUFHO3dCQUNILGFBQWE7cUJBQ2hCO29CQUNEO3dCQUNJLEVBQUU7d0JBQ0YsYUFBYTtxQkFDaEI7b0JBQ0Q7d0JBQ0ksRUFBRTt3QkFDRixhQUFhO3FCQUNoQjtvQkFDRDt3QkFDSSxFQUFFO3dCQUNGLGFBQWE7cUJBQ2hCO29CQUNEO3dCQUNJLElBQUk7d0JBQ0osYUFBYTtxQkFDaEI7b0JBQ0Q7d0JBQ0ksSUFBSTt3QkFDSixhQUFhO3FCQUNoQjtvQkFDRDt3QkFDSSxJQUFJO3dCQUNKLGFBQWE7cUJBQ2hCO29CQUNEO3dCQUNJLElBQUk7d0JBQ0osYUFBYTtxQkFDaEI7aUJBQ0o7Z0JBQ0QsSUFBSSxFQUFFLGFBQWE7Z0JBQ25CLE9BQU8sRUFBRSxhQUFhO2dCQUN0QixPQUFPLEVBQUU7b0JBQ0wsS0FBSyxFQUFFLE1BQU07b0JBQ2IsT0FBTyxF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RSxXQUFXLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUMzRixNQUFNLENBQUMsZ0NBQW9CLENBQUMsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDeEYsTUFBTSxDQUFDLGdDQUFvQixDQUFDLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ3RGLE1BQU0sQ0FBQyxnQ0FBb0IsQ0FBQyxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUN0RixNQUFNLENBQUMsZ0NBQW9CLENBQUMsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDMUYsTUFBTSxDQUFDLGdDQUFvQixDQUFDLENBQUMsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3pGLENBQUMsQ0FBQyxDQUFDO1lBQ1AsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBub3JtYWxpemVDb2xvciwgcGFyc2VNYXRoRXhwcmVzc2lvbiwgZ2V0Q29sb3IsIGdldEFjdHVhbE5hbWVXaXRob3V0VG9rZW5zLCBnZXRJdGVtQmFzZWRPblRocmVzaG9sZCwgZ2V0TWV0cmljTmFtZUZyb21UYWdnZWRBbGlhcywgZ2V0U2VyaWVzVmFsdWUsIGdldEN1cnJlbnRUaW1lU3RhbXAsIHJlcGxhY2VEZWxpbWl0ZWRDb2x1bW5zLCBnZXRSb3dOYW1lLCBnZXRDb2xOYW1lLCBkb2VzVmFsdWVOZWVkc1RvSGlkZSB9IGZyb20gXCIuLy4uL2FwcC9ib29tL0Jvb21VdGlsc1wiO1xuXG5jb25zdCBkdW1teV9zZXJpZXNfMSA9IHtcbiAgICBzdGF0czoge1xuICAgICAgICBcImF2Z1wiOiA5LjA3Nzc3Nzc3Nzc3Nzc3OCxcbiAgICAgICAgXCJjb3VudFwiOiAzNjAsXG4gICAgICAgIFwiY3VycmVudFwiOiA2LFxuICAgICAgICBcImRlbHRhXCI6IDEzOTYsXG4gICAgICAgIFwiZGlmZlwiOiA0LFxuICAgICAgICBcImZpcnN0XCI6IDIsXG4gICAgICAgIFwibG9nbWluXCI6IDEsXG4gICAgICAgIFwibWF4XCI6IDI0LFxuICAgICAgICBcIm1pblwiOiAwLFxuICAgICAgICBcInJhbmdlXCI6IDI0LFxuICAgICAgICBcInRpbWVTdGVwXCI6IDYwMDAwLFxuICAgICAgICBcInRvdGFsXCI6IDMyNjgsXG4gICAgfVxufTtcbmNvbnN0IGR1bW15X3Nlcmllc18yID0ge1xuICAgIFwiYWxpYXNcIjogXCJDT00gIyBjb3VudFwiLFxuICAgIFwiYWxpYXNFc2NhcGVkXCI6IFwiQ09NICMgY291bnRcIixcbiAgICBcImRhdGFwb2ludHNcIjogW1xuICAgICAgICBbXG4gICAgICAgICAgICAxMDgsXG4gICAgICAgICAgICAxNTc1MTk4ODQwMDAwXG4gICAgICAgIF0sXG4gICAgICAgIFtcbiAgICAgICAgICAgIDg2LFxuICAgICAgICAgICAgMTU3NTE5ODkwMDAwMFxuICAgICAgICBdLFxuICAgICAgICBbXG4gICAgICAgICAgICA5MyxcbiAgICAgICAgICAgIDE1NzUxOTg5NjAwMDBcbiAgICAgICAgXSxcbiAgICAgICAgW1xuICAgICAgICAgICAgNDgsXG4gICAgICAgICAgICAxNTc1MTk5MDIwMDAwXG4gICAgICAgIF0sXG4gICAgICAgIFtcbiAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAxNTc1MTk5MDgwMDAwXG4gICAgICAgIF0sXG4gICAgICAgIFtcbiAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAxNTc1MTk5MTQwMDAwXG4gICAgICAgIF0sXG4gICAgICAgIFtcbiAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAxNTc1MTk5MjAwMDAwXG4gICAgICAgIF0sXG4gICAgICAgIFtcbiAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAxNTc1MTk5MjYwMDAwXG4gICAgICAgIF1cbiAgICBdLFxuICAgIFwiaWRcIjogXCJDT00gIyBjb3VudFwiLFxuICAgIFwibGFiZWxcIjogXCJDT00gIyBjb3VudFwiLFxuICAgIFwic3RhdHNcIjoge1xuICAgICAgICBcImF2Z1wiOiA0MS44NzUsXG4gICAgICAgIFwiY291bnRcIjogOCxcbiAgICAgICAgXCJjdXJyZW50XCI6IDAsXG4gICAgICAgIFwiZGVsdGFcIjogOTMsXG4gICAgICAgIFwiZGlmZlwiOiAtMTA4LFxuICAgICAgICBcImZpcnN0XCI6IDEwOCxcbiAgICAgICAgXCJsb2dtaW5cIjogNDgsXG4gICAgICAgIFwibWF4XCI6IDEwOCxcbiAgICAgICAgXCJtaW5cIjogMCxcbiAgICAgICAgXCJyYW5nZVwiOiAxMDgsXG4gICAgICAgIFwidGltZVN0ZXBcIjogNjAwMDAsXG4gICAgICAgIFwidG90YWxcIjogMzM1LFxuICAgIH1cbn07XG5kZXNjcmliZShcIkJvb20gU2VyaWVzXCIsICgpID0+IHtcbiAgICBpdChcImdldFNlcmllc1ZhbHVlXCIsICgpID0+IHtcbiAgICAgICAgZXhwZWN0KGdldFNlcmllc1ZhbHVlKHt9LCBcInRvdGFsXCIpKS50b0JlKE5hTik7XG4gICAgICAgIGV4cGVjdChnZXRTZXJpZXNWYWx1ZSh7fSwgXCJmb29cIikpLnRvQmUoTmFOKTtcbiAgICAgICAgZXhwZWN0KGdldFNlcmllc1ZhbHVlKGR1bW15X3Nlcmllc18xLCBcImZvb1wiKSkudG9CZShudWxsKTtcbiAgICAgICAgZXhwZWN0KGdldFNlcmllc1ZhbHVlKGR1bW15X3Nlcmllc18xLCBcInRvdGFsXCIpKS50b0JlKDMyNjgpO1xuICAgICAgICBleHBlY3QoZ2V0U2VyaWVzVmFsdWUoZHVtbXlfc2VyaWVzXzEsIFwiVE9UQUxcIikpLnRvQmUoMzI2OCk7XG4gICAgICAgIGV4cGVjdChnZXRTZXJpZXNWYWx1ZShkdW1teV9zZXJpZXNfMSwgXCJsYXN0X3RpbWVcIikpLnRvQmUobnVsbCk7XG4gICAgICAgIGV4cGVjdChnZXRTZXJpZXNWYWx1ZShkdW1teV9zZXJpZXNfMSwgXCJMQVNUX1RJTUVcIikpLnRvQmUobnVsbCk7XG4gICAgICAgIGV4cGVjdChnZXRTZXJpZXNWYWx1ZShkdW1teV9zZXJpZXNfMiwgXCJ0b3RhbFwiKSkudG9CZShkdW1teV9zZXJpZXNfMi5zdGF0cy50b3RhbCk7XG4gICAgICAgIGV4cGVjdChnZXRTZXJpZXNWYWx1ZShkdW1teV9zZXJpZXNfMiwgXCJsYXN0X3RpbWVfbm9ubnVsbFwiKSkudG9CZSgxNTc1MTk5MDIwMDAwKTtcbiAgICAgICAgZXhwZWN0KGdldFNlcmllc1ZhbHVlKGR1bW15X3Nlcmllc18yLCBcImxhc3RfdGltZVwiKSkudG9CZSgxNTc1MTk5MjYwMDAwKTtcbiAgICB9KTtcbiAgICBpdChcImdldEN1cnJlbnRUaW1lU3RhbXBcIiwgKCkgPT4ge1xuICAgICAgICBleHBlY3QoZ2V0Q3VycmVudFRpbWVTdGFtcChkdW1teV9zZXJpZXNfMi5kYXRhcG9pbnRzKSkudG9TdHJpY3RFcXVhbChuZXcgRGF0ZSgxNTc1MTk5MjYwMDAwKSk7XG4gICAgfSk7XG4gICAgaXQoXCJyZXBsYWNlRGVsaW1pdGVkQ29sdW1uc1wiLCAoKSA9PiB7XG4gICAgICAgIGV4cGVjdChyZXBsYWNlRGVsaW1pdGVkQ29sdW1ucyhcIkhlbGxvIF8wXyBpcyBfMV9cIiwgXCJmb28uYmFyLmJhelwiLCBcIi5cIiwgXCJfXCIpKS50b0JlKFwiSGVsbG8gZm9vIGlzIGJhclwiKTtcbiAgICAgICAgZXhwZWN0KHJlcGxhY2VEZWxpbWl0ZWRDb2x1bW5zKFwiSGVsbG8gXzBfXzFfXCIsIFwiZm9vLmJhci5iYXpcIiwgXCIuXCIsIFwiX1wiKSkudG9CZShcIkhlbGxvIGZvb2JhclwiKTtcbiAgICAgICAgZXhwZWN0KHJlcGxhY2VEZWxpbWl0ZWRDb2x1bW5zKFwiSGVsbG8gXzBfXzFfXzFfXCIsIFwiZm9vLmJhci5iYXpcIiwgXCIuXCIsIFwiX1wiKSkudG9CZShcIkhlbGxvIGZvb2JhcmJhclwiKTtcbiAgICAgICAgZXhwZWN0KHJlcGxhY2VEZWxpbWl0ZWRDb2x1bW5zKFwiSGVsbG8gXzBfXzFfXzNfXCIsIFwiZm9vLmJhci5iYXpcIiwgXCIuXCIsIFwiX1wiKSkudG9CZShcIkhlbGxvIGZvb2Jhcl8zX1wiKTtcbiAgICAgICAgZXhwZWN0KHJlcGxhY2VEZWxpbWl0ZWRDb2x1bW5zKFwiSGVsbG8gXzBfXzFfXzFfXCIsIFwiZm9vIGJhciBiYXpcIiwgXCIgXCIsIFwiX1wiKSkudG9CZShcIkhlbGxvIGZvb2JhcmJhclwiKTtcbiAgICAgICAgZXhwZWN0KHJlcGxhY2VEZWxpbWl0ZWRDb2x1bW5zKFwiSGVsbG8gIzAjIzEjIzEjXCIsIFwiZm9vIGJhciBiYXpcIiwgXCIgXCIsIFwiI1wiKSkudG9CZShcIkhlbGxvIGZvb2JhcmJhclwiKTtcbiAgICB9KTtcbiAgICBpdChcImdldFJvd05hbWVcIiwgKCkgPT4ge1xuICAgICAgICBleHBlY3QoZ2V0Um93TmFtZShcIkhlbGxvIF8wXyBpcyBfMV9cIiwgXCIuXCIsIFwiX1wiLCBcImZvby5iYXIuYmF6XCIsIFwiXCIsIFtdKSkudG9CZShcIkhlbGxvIGZvbyBpcyBiYXJcIik7XG4gICAgICAgIGV4cGVjdChnZXRSb3dOYW1lKFwiSGVsbG8gXzBfIGlzIF8xXyBfc2VyaWVzXyBfc2VyaWVzX1wiLCBcIi5cIiwgXCJfXCIsIFwiZm9vLmJhci5iYXpcIiwgXCJcIiwgW10pKS50b0JlKFwiSGVsbG8gZm9vIGlzIGJhciBmb28uYmFyLmJheiBmb28uYmFyLmJhelwiKTtcbiAgICB9KTtcbiAgICBpdChcImdldENvbE5hbWVcIiwgKCkgPT4ge1xuICAgICAgICBleHBlY3QoZ2V0Q29sTmFtZShcIkhlbGxvIF8wXyBpcyBfMV9cIiwgXCIuXCIsIFwiX1wiLCBcImZvby5iYXIuYmF6XCIsIFwicm93TmFtZVwiLCBcIlwiLCBbXSkpLnRvQmUoXCJIZWxsbyBmb28gaXMgYmFyXCIpO1xuICAgICAgICBleHBlY3QoZ2V0Q29sTmFtZShcImZvby5iYXJcIiwgXCIuXCIsIFwiX1wiLCBcImZvby5iYXJcIiwgXCJmb28uYmFyXCIsIFwiXCIsIFtdKSkudG9CZShcImZvby5iYXJcIik7XG4gICAgfSk7XG59KTtcbmRlc2NyaWJlKFwiTm9ybWFsaXplIENvbG9yXCIsICgpID0+IHtcbiAgICBpdChcIk5vcm1hbGl6ZSBOYW1lZCBDb2xvcnNcIiwgKCkgPT4ge1xuICAgICAgICBleHBlY3Qobm9ybWFsaXplQ29sb3IoXCJHcmVlblwiKSkudG9CZShcInJnYmEoNTAsIDE3MiwgNDUsIDAuOTcpXCIpO1xuICAgICAgICBleHBlY3Qobm9ybWFsaXplQ29sb3IoXCJPcmFuZ2VcIikpLnRvQmUoXCJyZ2JhKDIzNywgMTI5LCA0MCwgMC44OSlcIik7XG4gICAgICAgIGV4cGVjdChub3JtYWxpemVDb2xvcihcIlJlZFwiKSkudG9CZShcInJnYmEoMjQ1LCA1NCwgNTQsIDAuOSlcIik7XG4gICAgICAgIGV4cGVjdChub3JtYWxpemVDb2xvcihcIlB1cnBsZVwiKSkudG9CZShcIlB1cnBsZVwiKTtcbiAgICB9KTtcbn0pO1xuZGVzY3JpYmUoXCJHZXQgQ29sb3JcIiwgKCkgPT4ge1xuICAgIGl0KFwiQ29sb3IgU3RyaW5nc1wiLCAoKSA9PiB7XG4gICAgICAgIGV4cGVjdChnZXRDb2xvcihcIkdyZWVuXCIsIDApKS50b0JlKGAgc3R5bGU9XCJjb2xvcjpyZ2JhKDUwLCAxNzIsIDQ1LCAwLjk3KVwiIGApO1xuICAgICAgICBleHBlY3QoZ2V0Q29sb3IoXCJPcmFuZ2VcIiwgMCkpLnRvQmUoYCBzdHlsZT1cImNvbG9yOnJnYmEoMjM3LCAxMjksIDQwLCAwLjg5KVwiIGApO1xuICAgICAgICBleHBlY3QoZ2V0Q29sb3IoXCJSZWRcIiwgMCkpLnRvQmUoYCBzdHlsZT1cImNvbG9yOnJnYmEoMjQ1LCA1NCwgNTQsIDAuOSlcIiBgKTtcbiAgICAgICAgZXhwZWN0KGdldENvbG9yKFwiUHVycGxlXCIsIDApKS50b0JlKGAgc3R5bGU9XCJjb2xvcjpQdXJwbGVcIiBgKTtcbiAgICB9KTtcbn0pO1xuZGVzY3JpYmUoXCJQYXJzZSBNYXRoIFRva2Vuc1wiLCAoKSA9PiB7XG4gICAgaXQoXCJTdW1cIiwgKCkgPT4ge1xuICAgICAgICBleHBlY3QocGFyc2VNYXRoRXhwcmVzc2lvbihcIjE1KzVcIiwgMCkpLnRvQmUoMjApO1xuICAgICAgICBleHBlY3QocGFyc2VNYXRoRXhwcmVzc2lvbihcIjAuMisyLjNcIiwgMCkpLnRvQmUoMyk7XG4gICAgfSk7XG4gICAgaXQoXCJTdWJzdHJhY3Rpb25cIiwgKCkgPT4ge1xuICAgICAgICBleHBlY3QocGFyc2VNYXRoRXhwcmVzc2lvbihcIjE1LTVcIiwgMCkpLnRvQmUoMTApO1xuICAgICAgICBleHBlY3QocGFyc2VNYXRoRXhwcmVzc2lvbihcIjAuMi0yLjNcIiwgMCkpLnRvQmUoLTIpO1xuICAgIH0pO1xuICAgIGl0KFwiTXVsdGlwbGljYXRpb25cIiwgKCkgPT4ge1xuICAgICAgICBleHBlY3QocGFyc2VNYXRoRXhwcmVzc2lvbihcIjMqNVwiLCAwKSkudG9CZSgxNSk7XG4gICAgICAgIGV4cGVjdChwYXJzZU1hdGhFeHByZXNzaW9uKFwiMC4yKjJcIiwgMCkpLnRvQmUoMCk7XG4gICAgICAgIGV4cGVjdChwYXJzZU1hdGhFeHByZXNzaW9uKFwiMC4zKjJcIiwgMCkpLnRvQmUoMSk7XG4gICAgfSk7XG4gICAgaXQoXCJEaXZpc2lvblwiLCAoKSA9PiB7XG4gICAgICAgIGV4cGVjdChwYXJzZU1hdGhFeHByZXNzaW9uKFwiOS81XCIsIDApKS50b0JlKDIpO1xuICAgICAgICBleHBlY3QocGFyc2VNYXRoRXhwcmVzc2lvbihcIjAuMi8yXCIsIDApKS50b0JlKDApO1xuICAgICAgICBleHBlY3QocGFyc2VNYXRoRXhwcmVzc2lvbihcIjIuMy8yXCIsIDApKS50b0JlKDEpO1xuICAgIH0pO1xuICAgIGl0KFwiTWluXCIsICgpID0+IHtcbiAgICAgICAgZXhwZWN0KHBhcnNlTWF0aEV4cHJlc3Npb24oXCI5bWluNVwiLCAwKSkudG9CZSg1KTtcbiAgICAgICAgZXhwZWN0KHBhcnNlTWF0aEV4cHJlc3Npb24oXCI1bWluOVwiLCAwKSkudG9CZSg1KTtcbiAgICAgICAgZXhwZWN0KHBhcnNlTWF0aEV4cHJlc3Npb24oXCI5bWluMC40XCIsIDApKS50b0JlKDApO1xuICAgICAgICBleHBlY3QocGFyc2VNYXRoRXhwcmVzc2lvbihcIjVtaW4wLjlcIiwgMCkpLnRvQmUoMSk7XG4gICAgfSk7XG59KTtcbmRlc2NyaWJlKFwiR2V0IEFjdGlhbCBuYW1lIHdpdGhvdXQgdG9rZW5zXCIsICgpID0+IHtcbiAgICBpdChcIlJvdyBhbmQgY29sbmFtZVwiLCAoKSA9PiB7XG4gICAgICAgIGV4cGVjdChnZXRBY3R1YWxOYW1lV2l0aG91dFRva2VucyhcImhlbGxvXCIpKS50b0JlKFwiaGVsbG9cIik7XG4gICAgICAgIGV4cGVjdChnZXRBY3R1YWxOYW1lV2l0aG91dFRva2VucyhcImhlbGxvIGhvdyBhcmUgeW91IVwiKSkudG9CZShcImhlbGxvIGhvdyBhcmUgeW91IVwiKTtcbiAgICAgICAgZXhwZWN0KGdldEFjdHVhbE5hbWVXaXRob3V0VG9rZW5zKFwiaGVsbG8gX2ZhLWNpcmNsZV8gaG93IGFyZSB5b3VcIikpLnRvQmUoXCJoZWxsbyAgaG93IGFyZSB5b3VcIik7XG4gICAgfSk7XG59KTtcbmRlc2NyaWJlKFwiVGhyZXNob2xkIFZhbGlkYXRvclwiLCAoKSA9PiB7XG4gICAgaXQoXCJCRyBDb2xvcnNcIiwgKCkgPT4ge1xuICAgICAgICBleHBlY3QoZ2V0SXRlbUJhc2VkT25UaHJlc2hvbGQoWzEwLCAyMF0sIFtcImdyZWVuXCIsIFwib3JhbmdlXCIsIFwicmVkXCJdLCA1LCBcImJsYWNrXCIpKS50b0JlKFwiZ3JlZW5cIik7XG4gICAgICAgIGV4cGVjdChnZXRJdGVtQmFzZWRPblRocmVzaG9sZChbMTAsIDIwXSwgW1wiZ3JlZW5cIiwgXCJvcmFuZ2VcIiwgXCJyZWRcIl0sIDEwLCBcImJsYWNrXCIpKS50b0JlKFwib3JhbmdlXCIpO1xuICAgICAgICBleHBlY3QoZ2V0SXRlbUJhc2VkT25UaHJlc2hvbGQoWzEwLCAyMF0sIFtcImdyZWVuXCIsIFwib3JhbmdlXCIsIFwicmVkXCJdLCAxNSwgXCJibGFja1wiKSkudG9CZShcIm9yYW5nZVwiKTtcbiAgICAgICAgZXhwZWN0KGdldEl0ZW1CYXNlZE9uVGhyZXNob2xkKFsxMCwgMjBdLCBbXCJncmVlblwiLCBcIm9yYW5nZVwiLCBcInJlZFwiLCBcImJsdWVcIl0sIDE1LCBcImJsYWNrXCIpKS50b0JlKFwib3JhbmdlXCIpO1xuICAgICAgICBleHBlY3QoZ2V0SXRlbUJhc2VkT25UaHJlc2hvbGQoWzEwLCAyMF0sIFtcImdyZWVuXCIsIFwib3JhbmdlXCIsIFwicmVkXCJdLCAyMCwgXCJibGFja1wiKSkudG9CZShcInJlZFwiKTtcbiAgICAgICAgZXhwZWN0KGdldEl0ZW1CYXNlZE9uVGhyZXNob2xkKFsxMCwgMjBdLCBbXCJncmVlblwiLCBcIm9yYW5nZVwiLCBcInJlZFwiXSwgMjUsIFwiYmxhY2tcIikpLnRvQmUoXCJyZWRcIik7XG4gICAgICAgIGV4cGVjdChnZXRJdGVtQmFzZWRPblRocmVzaG9sZChbMTAsIDIwXSwgW1wiZ3JlZW5cIiwgXCJvcmFuZ2VcIiwgXCJyZWRcIl0sIDIwLCBcImJsYWNrXCIpKS50b0JlKFwicmVkXCIpO1xuICAgICAgICBleHBlY3QoZ2V0SXRlbUJhc2VkT25UaHJlc2hvbGQoWzEwLCAyMF0sIFtcImdyZWVuXCIsIFwib3JhbmdlXCJdLCAyNSwgXCJibGFja1wiKSkudG9CZShcImJsYWNrXCIpO1xuICAgIH0pO1xufSk7XG5kZXNjcmliZShcIk1lcnRpYyBOYW1lIGZyb20gcHJvbWV0aGV1cyAvIGluZmx1eGRiIEFsaWFzXCIsICgpID0+IHtcbiAgICBpdChcIlByb21ldGhldXMgRm9ybWF0XCIsICgpID0+IHtcbiAgICAgICAgZXhwZWN0KGdldE1ldHJpY05hbWVGcm9tVGFnZ2VkQWxpYXMoXCJjb250YWluZXJfY3B1X2xvYWRfYXZlcmFnZV8xMHNcIikpLnRvQmUoXCJjb250YWluZXJfY3B1X2xvYWRfYXZlcmFnZV8xMHNcIik7XG4gICAgICAgIGV4cGVjdChnZXRNZXRyaWNOYW1lRnJvbVRhZ2dlZEFsaWFzKFwiY29udGFpbmVyX2NwdV9sb2FkX2F2ZXJhZ2VfMTBzIFwiKSkudG9CZShcImNvbnRhaW5lcl9jcHVfbG9hZF9hdmVyYWdlXzEwc1wiKTtcbiAgICAgICAgZXhwZWN0KGdldE1ldHJpY05hbWVGcm9tVGFnZ2VkQWxpYXMoXCJjb250YWluZXJfY3B1X2xvYWRfYXZlcmFnZV8xMHMge31cIikpLnRvQmUoXCJjb250YWluZXJfY3B1X2xvYWRfYXZlcmFnZV8xMHNcIik7XG4gICAgICAgIGV4cGVjdChnZXRNZXRyaWNOYW1lRnJvbVRhZ2dlZEFsaWFzKFwiIGNvbnRhaW5lcl9jcHVfbG9hZF9hdmVyYWdlXzEwcyB7fVwiKSkudG9CZShcImNvbnRhaW5lcl9jcHVfbG9hZF9hdmVyYWdlXzEwc1wiKTtcbiAgICAgICAgZXhwZWN0KGdldE1ldHJpY05hbWVGcm9tVGFnZ2VkQWxpYXMoYGNvbnRhaW5lcl9jcHVfbG9hZF9hdmVyYWdlXzEwc3thZ2VudHBvb2w9XCJhZ2VudHBvb2wxXCJ9YCkpLnRvQmUoXCJjb250YWluZXJfY3B1X2xvYWRfYXZlcmFnZV8xMHNcIik7XG4gICAgICAgIGV4cGVjdChnZXRNZXRyaWNOYW1lRnJvbVRhZ2dlZEFsaWFzKGBjb250YWluZXJfY3B1X2xvYWRfYXZlcmFnZV8xMHMge2FnZW50cG9vbD1cImFnZW50cG9vbDFcIn1gKSkudG9CZShcImNvbnRhaW5lcl9jcHVfbG9hZF9hdmVyYWdlXzEwc1wiKTtcbiAgICAgICAgZXhwZWN0KGdldE1ldHJpY05hbWVGcm9tVGFnZ2VkQWxpYXMoYCBjb250YWluZXJfY3B1X2xvYWRfYXZlcmFnZV8xMHMgeyBhZ2VudHBvb2wgPSBcImFnZW50cG9vbDFcIiB9IGApKS50b0JlKFwiY29udGFpbmVyX2NwdV9sb2FkX2F2ZXJhZ2VfMTBzXCIpO1xuICAgICAgICBleHBlY3QoZ2V0TWV0cmljTmFtZUZyb21UYWdnZWRBbGlhcyhgIGNvbnRhaW5lcl9jcHVfbG9hZF9hdmVyYWdlXzEwcyB7IGltYWdlID0gXCJhYmM6Y2JhMTI6aGVsbG9cIiB9IGApKS50b0JlKFwiY29udGFpbmVyX2NwdV9sb2FkX2F2ZXJhZ2VfMTBzXCIpO1xuICAgICAgICBleHBlY3QoZ2V0TWV0cmljTmFtZUZyb21UYWdnZWRBbGlhcyhgY29udGFpbmVyX21lbW9yeV91c2FnZV9ieXRlc3tiZXRhX2t1YmVybmV0ZXNfaW9fYXJjaD1cImFtZDY0XCIsYmV0YV9rdWJlcm5ldGVzX2lvX2luc3RhbmNlX3R5cGU9XCJTdGFuZGFyZF9EMl92MlwifWApKS50b0JlKFwiY29udGFpbmVyX21lbW9yeV91c2FnZV9ieXRlc1wiKTtcbiAgICB9KTtcbiAgICBpdChcIkluZmx1eERCIEZvcm1hdFwiLCAoKSA9PiB7XG4gICAgICAgIGV4cGVjdChnZXRNZXRyaWNOYW1lRnJvbVRhZ2dlZEFsaWFzKFwiQ1BVLkNQVSBUSW1lXCIpKS50b0JlKFwiQ1BVLkNQVSBUSW1lXCIpO1xuICAgICAgICBleHBlY3QoZ2V0TWV0cmljTmFtZUZyb21UYWdnZWRBbGlhcyhcIkNQVS5DUFUgVEltZSBcIikpLnRvQmUoXCJDUFUuQ1BVIFRJbWVcIik7XG4gICAgICAgIGV4cGVjdChnZXRNZXRyaWNOYW1lRnJvbVRhZ2dlZEFsaWFzKFwiQ1BVLkNQVSBUSW1lIHt9IFwiKSkudG9CZShcIkNQVS5DUFUgVEltZVwiKTtcbiAgICAgICAgZXhwZWN0KGdldE1ldHJpY05hbWVGcm9tVGFnZ2VkQWxpYXMoXCJDUFUuQ1BVIFRJbWUge2Vudmlyb25tZW50OiAyNzksIGluc3RhbmNlOiBfVG90YWx9XCIpKS50b0JlKFwiQ1BVLkNQVSBUSW1lXCIpO1xuICAgICAgICBleHBlY3QoZ2V0TWV0cmljTmFtZUZyb21UYWdnZWRBbGlhcyhcIiBDUFUuQ1BVIFRJbWUgeyBlbnZpcm9ubWVudDogMjc5LCBpbnN0YW5jZTogX1RvdGFsfVwiKSkudG9CZShcIkNQVS5DUFUgVEltZVwiKTtcbiAgICAgICAgZXhwZWN0KGdldE1ldHJpY05hbWVGcm9tVGFnZ2VkQWxpYXMoXCIgQ1BVLkNQVSBUSW1lIHsgZW52aXJvbm1lbnQ6IDI3OSwgZXF1YXRpb246IGBfVG90YT1sYH1cIikpLnRvQmUoXCJDUFUuQ1BVIFRJbWVcIik7XG4gICAgfSk7XG5cbn0pO1xuZGVzY3JpYmUoXCJWYWx1ZSBuZWVkcyB0byBoaWRkZW5cIiwgKCkgPT4ge1xuICAgIGl0KFwiRGVmYXVsdCBWYWx1ZXNcIiwgKCkgPT4ge1xuICAgICAgICBleHBlY3QoZG9lc1ZhbHVlTmVlZHNUb0hpZGUoMTAsIHVuZGVmaW5lZCkpLnRvQmUoZmFsc2UpO1xuICAgICAgICBleHBlY3QoZG9lc1ZhbHVlTmVlZHNUb0hpZGUoMCwgeyB2YWx1ZV9iZWxvdzogXCI1XCIgfSkpLnRvQmUodHJ1ZSk7XG4gICAgICAgIGV4cGVjdChkb2VzVmFsdWVOZWVkc1RvSGlkZSgtMiwgeyB2YWx1ZV9iZWxvdzogXCItMVwiIH0pKS50b0JlKHRydWUpO1xuICAgICAgICBleHBlY3QoZG9lc1ZhbHVlTmVlZHNUb0hpZGUoMiwgeyB2YWx1ZV9iZWxvdzogXCIxMFwiIH0pKS50b0JlKHRydWUpO1xuICAgICAgICBleHBlY3QoZG9lc1ZhbHVlTmVlZHNUb0hpZGUoMTAsIHsgdmFsdWVfYmVsb3c6IFwiNVwiIH0pKS50b0JlKGZhbHNlKTtcbiAgICAgICAgZXhwZWN0KGRvZXNWYWx1ZU5lZWRzVG9IaWRlKDIsIHsgdmFsdWVfYmVsb3c6IFwiLTFcIiB9KSkudG9CZShmYWxzZSk7XG4gICAgICAgIGV4cGVjdChkb2VzVmFsdWVOZWVkc1RvSGlkZSgxNSwgeyB2YWx1ZV9hYm92ZTogXCIxMFwiIH0pKS50b0JlKHRydWUpO1xuICAgICAgICBleHBlY3QoZG9lc1ZhbHVlTmVlZHNUb0hpZGUoMTUsIHsgdmFsdWVfYWJvdmU6IFwiMFwiIH0pKS50b0JlKHRydWUpO1xuICAgICAgICBleHBlY3QoZG9lc1ZhbHVlTmVlZHNUb0hpZGUoMTAsIHsgdmFsdWVfYWJvdmU6IFwiMTVcIiB9KSkudG9CZShmYWxzZSk7XG4gICAgICAgIGV4cGVjdChkb2VzVmFsdWVOZWVkc1RvSGlkZSgwLCB7IHZhbHVlX2Fib3ZlOiBcIjE1XCIgfSkpLnRvQmUoZmFsc2UpO1xuICAgICAgICBleHBlY3QoZG9lc1ZhbHVlTmVlZHNUb0hpZGUoMCwgeyB2YWx1ZV9iZWxvdzogXCI1XCIsIHZhbHVlX2Fib3ZlOiBcIi01XCIgfSkpLnRvQmUodHJ1ZSk7XG4gICAgICAgIGV4cGVjdChkb2VzVmFsdWVOZWVkc1RvSGlkZSgxMCwgeyB2YWx1ZV9iZWxvdzogXCIxNVwiLCB2YWx1ZV9hYm92ZTogXCIzMFwiIH0pKS50b0JlKHRydWUpO1xuICAgICAgICBleHBlY3QoZG9lc1ZhbHVlTmVlZHNUb0hpZGUoMTAsIHsgdmFsdWVfYmVsb3c6IFwiNVwiLCB2YWx1ZV9hYm92ZTogXCI1XCIgfSkpLnRvQmUodHJ1ZSk7XG4gICAgICAgIGV4cGVjdChkb2VzVmFsdWVOZWVkc1RvSGlkZSgxMCwgeyB2YWx1ZV9iZWxvdzogXCIxNVwiLCB2YWx1ZV9hYm92ZTogXCI1XCIgfSkpLnRvQmUodHJ1ZSk7XG4gICAgICAgIGV4cGVjdChkb2VzVmFsdWVOZWVkc1RvSGlkZSgxMCwgeyB2YWx1ZV9iZWxvdzogXCIwMTVcIiwgdmFsdWVfYWJvdmU6IFwiMDVcIiB9KSkudG9CZSh0cnVlKTtcbiAgICAgICAgZXhwZWN0KGRvZXNWYWx1ZU5lZWRzVG9IaWRlKDAsIHsgdmFsdWVfYmVsb3c6IFwiNVwiLCB2YWx1ZV9hYm92ZTogXCIyXCIgfSkpLnRvQmUodHJ1ZSk7XG4gICAgICAgIGV4cGVjdChkb2VzVmFsdWVOZWVkc1RvSGlkZSgwLCB7IHZhbHVlX2JlbG93OiBcIjJcIiwgdmFsdWVfYWJvdmU6IFwiNVwiIH0pKS50b0JlKHRydWUpO1xuICAgICAgICBleHBlY3QoZG9lc1ZhbHVlTmVlZHNUb0hpZGUoMTAsIHsgdmFsdWVfYmVsb3c6IFwiIDAxNSBcIiwgdmFsdWVfYWJvdmU6IFwiIDA1IFwiIH0pKS50b0JlKHRydWUpO1xuICAgICAgICBleHBlY3QoZG9lc1ZhbHVlTmVlZHNUb0hpZGUoMTAsIHsgdmFsdWVfYmVsb3c6IFwiIDUgXCIsIHZhbHVlX2Fib3ZlOiBcIi01IFwiIH0pKS50b0JlKHRydWUpO1xuICAgICAgICBleHBlY3QoZG9lc1ZhbHVlTmVlZHNUb0hpZGUoMTAsIHsgdmFsdWVfYmVsb3c6IFwiMTVcIiwgdmFsdWVfYWJvdmU6IFwiNSBcIiB9KSkudG9CZSh0cnVlKTtcbiAgICAgICAgZXhwZWN0KGRvZXNWYWx1ZU5lZWRzVG9IaWRlKDEwLCB7IHZhbHVlX2JlbG93OiBcIjVcIiwgdmFsdWVfYWJvdmU6IFwiMzBcIiB9KSkudG9CZShmYWxzZSk7XG4gICAgICAgIGV4cGVjdChkb2VzVmFsdWVOZWVkc1RvSGlkZSgxMCwgeyB2YWx1ZV9iZWxvdzogXCIgNSBcIiwgdmFsdWVfYWJvdmU6IFwiIDMwIFwiIH0pKS50b0JlKGZhbHNlKTtcbiAgICAgICAgZXhwZWN0KGRvZXNWYWx1ZU5lZWRzVG9IaWRlKDAsIHsgdmFsdWVfYmVsb3c6IFwiLTJcIiwgdmFsdWVfYWJvdmU6IFwiNVwiIH0pKS50b0JlKGZhbHNlKTtcbiAgICB9KTtcbn0pO1xuIl19 \ No newline at end of file