diff --git a/dist/css/status_panel.css b/dist/css/status_panel.css index 03e65975..493db07a 100644 --- a/dist/css/status_panel.css +++ b/dist/css/status_panel.css @@ -1,40 +1,81 @@ .status-panel { - display: table; position: relative; width: 100%; + height: 100%; text-align: center; } - .status-panel .status-panel-annotation_row { - display: table-row; - height: 25%; - text-align: left; - font-size: 0.85rem; } - .status-panel .status_name_row { - display: table-row; - height: 10%; } - .status-panel .status_alerts_row { - display: table-row; } .status-panel h1 { font-size: 1.5rem; } + .status-panel .st-card-front { + position: absolute; + width: 100%; + height: 100%; + display: flex; + flex-direction: column; + justify-content: center; + align-content: center; } + .status-panel .st-card-back .top_section .status-panel-annotation_row { + text-align: left; + font-size: 0.85rem; + padding-bottom: 10px; } + .status-panel .st-card-back .top_section .status-panel-annotation_row .row-overflow { + max-width: 150px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; } + .status-panel .st-card-back .bottom_section { + display: flex; + flex-direction: column; + justify-content: center; + align-content: center; } + .status-panel .st-card-back .bottom_section .status_alerts_row { + min-height: 1px; } + .status-panel .st-card-front, + .status-panel .st-card-back { + backface-visibility: hidden; + transition: transform 0.5s; } -.row-overflow { - max-width: 150px; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; } +.st-card-front .ok-text, .st-card-front .warning-text, .st-card-front .fail-text, .st-card-front .no-data-text, .st-card-front .disabled-text { + display: none; + font-size: 2.0rem; } -.error-state { - background-color: red; } +.ok-state { + background-color: green; } + .ok-state .ok-text { + display: block; } .warn-state { background-color: orange; } + .warn-state .warning-text { + display: block; } -.ok-state { - background-color: green; } +.error-state { + background-color: red; } + .error-state .fail-text { + display: block; } .no-data-state { background-color: gray; } + .no-data-state .no-data-text { + display: block; } .disabled-state { background-color: gray; } + .disabled-state .disabled-text { + display: block; } + +.st-card.effect-hover .st-card-back { + -webkit-transform: rotateY(-180deg); + transform: rotateY(-180deg); } + +.st-card.effect-hover:hover:not(.no-data-state) .st-card-front, .st-card.effect-hover.flipped:not(.no-data-state) .st-card-front { + -webkit-transform: rotateY(-180deg); + transform: rotateY(-180deg); } + +.st-card.effect-hover:hover:not(.no-data-state) .st-card-back, .st-card.effect-hover.flipped:not(.no-data-state) .st-card-back { + -webkit-transform: rotateY(0); + transform: rotateY(0); } + +.st-card:not(.effect-hover):not(.no-data-state) .st-card-front { + display: none; } /*# sourceMappingURL=status_panel.css.map */ diff --git a/dist/css/status_panel.css.map b/dist/css/status_panel.css.map index a903fea3..eda53cc5 100644 --- a/dist/css/status_panel.css.map +++ b/dist/css/status_panel.css.map @@ -1,6 +1,6 @@ { "version": 3, -"mappings": "AAAA,aAAc;EACb,OAAO,EAAE,KAAK;EACd,QAAQ,EAAE,QAAQ;EAClB,KAAK,EAAE,IAAI;EACX,UAAU,EAAE,MAAM;EAElB,0CAA6B;IAC5B,OAAO,EAAE,SAAS;IAClB,MAAM,EAAE,GAAG;IACX,UAAU,EAAE,IAAI;IAChB,SAAS,EAAE,OAAO;EAGnB,8BAAiB;IAChB,OAAO,EAAE,SAAS;IAClB,MAAM,EAAE,GAAG;EAGZ,gCAAmB;IAClB,OAAO,EAAE,SAAS;EAGnB,gBAAG;IACF,SAAS,EAAE,MAAM;;AAInB,aAAc;EACb,SAAS,EAAE,KAAK;EAChB,QAAQ,EAAE,MAAM;EAChB,aAAa,EAAE,QAAQ;EACvB,WAAW,EAAE,MAAM;;AAGpB,YAAa;EACZ,gBAAgB,EAAE,GAAG;;AAGtB,WAAY;EACX,gBAAgB,EAAE,MAAM;;AAGzB,SAAU;EACT,gBAAgB,EAAE,KAAK;;AAGxB,cAAe;EACd,gBAAgB,EAAE,IAAI;;AAGvB,eAAgB;EACf,gBAAgB,EAAE,IAAI", +"mappings": "AAAA,aAAc;EACb,QAAQ,EAAE,QAAQ;EAClB,KAAK,EAAE,IAAI;EACX,MAAM,EAAE,IAAI;EACZ,UAAU,EAAE,MAAM;EAElB,gBAAG;IACF,SAAS,EAAE,MAAM;EAGlB,4BAAe;IACd,QAAQ,EAAE,QAAQ;IAClB,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,IAAI;IAEZ,OAAO,EAAE,IAAI;IACb,cAAc,EAAE,MAAM;IACtB,eAAe,EAAE,MAAM;IACvB,aAAa,EAAE,MAAM;EAKpB,qEAA6B;IAC5B,UAAU,EAAE,IAAI;IAChB,SAAS,EAAE,OAAO;IAClB,cAAc,EAAE,IAAI;IAEpB,mFAAc;MACb,SAAS,EAAE,KAAK;MAChB,QAAQ,EAAE,MAAM;MAChB,aAAa,EAAE,QAAQ;MACvB,WAAW,EAAE,MAAM;EAKtB,2CAAgB;IACf,OAAO,EAAE,IAAI;IACb,cAAc,EAAE,MAAM;IACtB,eAAe,EAAE,MAAM;IACvB,aAAa,EAAE,MAAM;IAKrB,8DAAmB;MAClB,UAAU,EAAE,GAAG;EAKlB;6BACc;IACZ,mBAAmB,EAAE,MAAM;IAC3B,UAAU,EAAE,cAAc;;AAK5B,6IAAmE;EAClE,OAAO,EAAE,IAAI;EACb,SAAS,EAAE,MAAM;;AAInB,SAAU;EACT,gBAAgB,EAAE,KAAK;EAEvB,kBAAS;IACR,OAAO,EAAE,KAAK;;AAIhB,WAAY;EACX,gBAAgB,EAAE,MAAM;EACxB,yBAAc;IACb,OAAO,EAAE,KAAK;;AAIhB,YAAa;EACZ,gBAAgB,EAAE,GAAG;EACrB,uBAAW;IACV,OAAO,EAAE,KAAK;;AAIhB,cAAe;EACd,gBAAgB,EAAE,IAAI;EAEtB,4BAAc;IACb,OAAO,EAAE,KAAK;;AAIhB,eAAgB;EACf,gBAAgB,EAAE,IAAI;EACtB,8BAAe;IACd,OAAO,EAAE,KAAK;;AAIhB,mCAAoC;EACnC,iBAAiB,EAAE,gBAAgB;EACnC,SAAS,EAAE,gBAAgB;;AAG5B,gIAAiI;EAChI,iBAAiB,EAAE,gBAAgB;EACnC,SAAS,EAAE,gBAAgB;;AAG5B,8HAA+H;EAC9H,iBAAiB,EAAE,UAAU;EAC7B,SAAS,EAAE,UAAU;;AAGtB,8DAA+D;EAC9D,OAAO,EAAE,IAAI", "sources": ["../../src/css/status_panel.scss"], "names": [], "file": "status_panel.css" diff --git a/dist/editor.html b/dist/editor.html index 53d6faba..b62a17c2 100644 --- a/dist/editor.html +++ b/dist/editor.html @@ -24,6 +24,16 @@
{{ measurement.alias }}
+
+ Flip interval + +
+ diff --git a/dist/module.html b/dist/module.html index 881b87c8..7e0d59ca 100644 --- a/dist/module.html +++ b/dist/module.html @@ -3,49 +3,65 @@ Error: There are multiple measurements with the same alias. Please give each measurement a unique name. -
-
-
- {{ annoation.alias }} - {{ annotation.alias }} - - {{ annotation.display_value | numberOrText}} +
+
OK
+
Warning
+
Critical
+
No data
+
Disabled
+
+
+ +
+
+
+
+ {{ annoation.alias }} + {{ annotation.alias }} + - {{ annotation.display_value | numberOrText}} +
+
-
-
-

- - {{ ctrl.panel.displayName | interpolateTemplateVars:this }} - - - {{ ctrl.panel.displayName | interpolateTemplateVars:this }} - -

-
+
+
+

+ + {{ ctrl.panel.displayName | interpolateTemplateVars:this }} + + + {{ ctrl.panel.displayName | interpolateTemplateVars:this }} + +

-
-
- {{ display.alias }} - {{ display.alias }} - - {{ display.display_value | numberOrText }} -
+
-
- {{ crit.alias }} - {{ crit.alias }} - - {{ crit.display_value | numberOrText }} -
+
+
+ {{ display.alias }} + {{ display.alias }} + - {{ display.display_value | numberOrText }} +
-
- {{ warn.alias }} - {{ warn.alias }} - - {{ warn.display_value | numberOrText }} -
+
+ {{ crit.alias }} + {{ crit.alias }} + - {{ crit.display_value | numberOrText }} +
+ +
+ {{ warn.alias }} + {{ warn.alias }} + - {{ warn.display_value | numberOrText }} +
-
- {{ disabled.alias }} - {{ disabled.alias }} +
+ {{ disabled.alias }} + {{ disabled.alias }} +
+
+
diff --git a/dist/status_ctrl.js b/dist/status_ctrl.js index 2aa5505a..1e4c0d81 100644 --- a/dist/status_ctrl.js +++ b/dist/status_ctrl.js @@ -80,6 +80,8 @@ System.register(["app/plugins/sdk", "app/plugins/panel/graph/legend", "app/plugi _this.aggregations = ['Last', 'First', 'Max', 'Min', 'Sum', 'Avg']; _this.displayTypes = ['Regular', 'Annotation']; + _this.panel.flipTime = _this.panel.flipTime || 5; + /** Bind events to functions **/ _this.events.on('render', _this.onRender.bind(_this)); _this.events.on('refresh', _this.postRefresh.bind(_this)); @@ -146,7 +148,8 @@ System.register(["app/plugins/sdk", "app/plugins/panel/graph/legend", "app/plugi }, { key: "setElementHeight", value: function setElementHeight() { - this.$panelContainer.find('.status-panel').css('height', this.$panelContoller.height + 'px'); + this.$panelContainer.find('.status-panel').css('min-height', this.$panelContoller.height + 'px'); + this.minHeight = this.$panelContoller.height - 10; } }, { key: "setTextMaxWidth", @@ -172,6 +175,12 @@ System.register(["app/plugins/sdk", "app/plugins/panel/graph/legend", "app/plugi this.panel.displayName = ""; } + if (this.panel.flipCard) { + this.$panelContainer.addClass("effect-hover"); + } else { + this.$panelContainer.removeClass("effect-hover"); + } + var targets = this.panel.targets; this.crit = []; @@ -242,6 +251,7 @@ System.register(["app/plugins/sdk", "app/plugins/panel/graph/legend", "app/plugi this.display = []; } + this.autoFlip(); this.handleCssDisplay(); this.parseUri(); } @@ -368,10 +378,28 @@ System.register(["app/plugins/sdk", "app/plugins/panel/graph/legend", "app/plugi this.crit = []; this.warn = []; } + }, { + key: "$onDestroy", + value: function $onDestroy() { + if (this.timeoutId) clearInterval(this.timeoutId); + } + }, { + key: "autoFlip", + value: function autoFlip() { + var _this6 = this; + + if (this.timeoutId) clearInterval(this.timeoutId); + if (this.panel.flipCard && (this.crit.length > 0 || this.warn.length > 0 || this.disabled.length > 0)) { + this.timeoutId = setInterval(function () { + _this6.$panelContainer.toggleClass("flipped"); + }, this.panel.flipTime * 1000); + } + } }, { key: "link", value: function link(scope, elem, attrs, ctrl) { this.$panelContainer = elem.find('.panel-container'); + this.$panelContainer.addClass("st-card"); this.$panelContoller = ctrl; } }], [{ diff --git a/dist/status_ctrl.js.map b/dist/status_ctrl.js.map index 030b47a1..925f718d 100644 --- a/dist/status_ctrl.js.map +++ b/dist/status_ctrl.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/status_ctrl.js"],"names":["MetricsPanelCtrl","_","TimeSeries","coreModule","StatusPluginCtrl","$scope","$injector","$log","$filter","annotationsSrv","filter","valueHandlers","aggregations","displayTypes","events","on","onRender","bind","postRefresh","onDataError","onDataReceived","onInitEditMode","addFilters","numberOrTextFilter","input","angular","isNumber","$stateful","panel","fixedSpan","span","measurements","targets","duplicates","measurement","hide","each","m","res","alias","target","length","addEditorTab","$panelContainer","find","css","$panelContoller","height","tail","panelWidth","innerWidth","isNaN","parseInt","slice","maxWidth","setElementHeight","setTextMaxWidth","upgradeOldVersion","clusterName","displayName","replace","RegExp","namePrefix","crit","warn","disabled","display","annotation","series","s","url","displayType","value","aggregation","max","datapoints","point","stats","min","total","avg","display_value","valueHandler","handleThresholdStatus","handleDisabledStatus","handleTextOnly","handleCssDisplay","parseUri","thresholds","parseThresholds","inverted","isCritical","isWarning","isCheckRanges","warnIsNumber","critIsNumber","push","disabledValue","removeClass","addClass","undefined","isGrayOnNoData","links","uri","dashUri","params","dataList","map","seriesHandler","render","scope","elem","attrs","ctrl","metricOptions","seriesData","flotpairs","getFlotPairs","templateUrl"],"mappings":"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","file":"status_ctrl.js","sourcesContent":["import {MetricsPanelCtrl} from \"app/plugins/sdk\";\nimport \"app/plugins/panel/graph/legend\";\nimport \"app/plugins/panel/graph/series_overrides_ctrl\";\nimport _ from \"lodash\";\nimport TimeSeries from \"app/core/time_series2\";\nimport coreModule from \"app/core/core_module\"\n\nimport './css/status_panel.css!';\n\nexport class StatusPluginCtrl extends MetricsPanelCtrl {\n\t/** @ngInject */\n\tconstructor($scope, $injector, $log, $filter, annotationsSrv) {\n\t\tsuper($scope, $injector);\n\n\t\t//this.log = $log.debug;\n\t\tthis.filter = $filter;\n\n\t\tthis.valueHandlers = ['Threshold', 'Disable Criteria', 'Text Only'];\n\t\tthis.aggregations = ['Last', 'First', 'Max', 'Min', 'Sum', 'Avg'];\n\t\tthis.displayTypes = ['Regular', 'Annotation'];\n\n\t\t/** Bind events to functions **/\n\t\tthis.events.on('render', this.onRender.bind(this));\n\t\tthis.events.on('refresh', this.postRefresh.bind(this));\n\t\tthis.events.on('data-error', this.onDataError.bind(this));\n\t\tthis.events.on('data-received', this.onDataReceived.bind(this));\n\t\tthis.events.on('data-snapshot-load', this.onDataReceived.bind(this));\n\t\tthis.events.on('init-edit-mode', this.onInitEditMode.bind(this));\n\n\t\tthis.addFilters()\n\t}\n\n\taddFilters() {\n\t\tcoreModule.filter('numberOrText', () => {\n\t\t\tlet numberOrTextFilter = (input) => {\n\t\t\t\tif(angular.isNumber(input)) {\n\t\t\t\t\treturn this.filter('number')(input);\n\t\t\t\t} else {\n\t\t\t\t\treturn input;\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tnumberOrTextFilter.$stateful = true;\n\t\t\treturn numberOrTextFilter;\n\t\t});\n\t}\n\n\tpostRefresh() {\n\t\tif (this.panel.fixedSpan) {\n\t\t\tthis.panel.span = this.panel.fixedSpan;\n\t\t}\n\n\t\tthis.measurements = this.panel.targets;\n\n\t\t/** Duplicate alias validation **/\n\t\tthis.duplicates = false;\n\n\t\tthis.measurements = _.filter(this.measurements, (measurement) => {\n\t\t\treturn !measurement.hide;\n\t\t});\n\n\t\t_.each(this.measurements, (m) => {\n\t\t\tlet res = _.filter(this.measurements, (measurement) => {\n\t\t\t\treturn (m.alias == measurement.alias || (m.target == measurement.target && m.target)) && !m.hide;\n\t\t\t});\n\n\t\t\tif (res.length > 1) {\n\t\t\t\tthis.duplicates = true;\n\t\t\t}\n\t\t});\n\t}\n\n\tonInitEditMode() {\n\t\tthis.addEditorTab('Options', 'public/plugins/vonage-status-panel/editor.html', 2);\n\t}\n\n\tsetElementHeight() {\n\t\tthis.$panelContainer.find('.status-panel').css('height', this.$panelContoller.height + 'px');\n\t}\n\n\tsetTextMaxWidth() {\n\t\tlet tail = ' …';\n\t\tlet panelWidth = this.$panelContainer.innerWidth();\n\t\tif (isNaN(panelWidth))\n\t\t\tpanelWidth = parseInt(panelWidth.slice(0, -2), 10) / 12;\n\t\tpanelWidth = panelWidth - 20;\n\t\tthis.maxWidth = panelWidth;\n\t}\n\n\tonRender() {\n\t\tthis.setElementHeight();\n\t\tthis.setTextMaxWidth();\n\t\tthis.upgradeOldVersion();\n\n\t\tif (this.panel.clusterName) {\n\t\t\tthis.panel.displayName =\n\t\t\t\tthis.filter('interpolateTemplateVars')(this.panel.clusterName, this.$scope)\n\t\t\t\t\t.replace(new RegExp(this.panel.namePrefix, 'i'), '');\n\t\t} else {\n\t\t\tthis.panel.displayName = \"\";\n\t\t}\n\n\t\tlet targets = this.panel.targets;\n\n\t\tthis.crit = [];\n\t\tthis.warn = [];\n\t\tthis.disabled = [];\n\t\tthis.display = [];\n\t\tthis.annotation = [];\n\n\t\t_.each(this.series, (s) => {\n\t\t\tlet target = _.find(targets, (target) => {\n\t\t\t\treturn target.alias == s.alias || target.target == s.alias;\n\t\t\t});\n\n\t\t\tif (!target) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\ts.alias = target.alias;\n\t\t\ts.url = target.url;\n\t\t\ts.display = true;\n\t\t\ts.displayType = target.displayType;\n\n\t\t\tlet value;\n\t\t\tswitch (target.aggregation) {\n\t\t\t\tcase 'Max':\n\t\t\t\t\tvalue = _.max(s.datapoints, (point) => { return point[0]; })[0];\n\t\t\t\t\tvalue = s.stats.max;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'Min':\n\t\t\t\t\tvalue = _.min(s.datapoints, (point) => { return point[0]; })[0];\n\t\t\t\t\tvalue = s.stats.min;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'Sum':\n\t\t\t\t\tvalue = 0;\n\t\t\t\t\t_.each(s.datapoints, (point) => { value += point[0] });\n\t\t\t\t\tvalue = s.stats.total;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'Avg':\n\t\t\t\t\tvalue = s.stats.avg;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'First':\n\t\t\t\t\tvalue = s.datapoints[0][0];\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tvalue = s.datapoints[s.datapoints.length - 1][0];\n\t\t\t}\n\n\t\t\ts.display_value = value;\n\n\t\t\tif (target.valueHandler == \"Threshold\") {\n\t\t\t\tthis.handleThresholdStatus(s, target);\n\t\t\t}\n\t\t\telse if (target.valueHandler == \"Disable Criteria\") {\n\t\t\t\tthis.handleDisabledStatus(s,target);\n\t\t\t}\n\t\t\telse if (target.valueHandler == \"Text Only\") {\n\t\t\t\tthis.handleTextOnly(s, target);\n\t\t\t}\n\t\t});\n\n\t\tif(this.disabled.length > 0) {\n\t\t\tthis.crit = [];\n\t\t\tthis.warn = [];\n\t\t\tthis.display = [];\n\t\t}\n\n\t\tthis.handleCssDisplay();\n\t\tthis.parseUri();\n\t}\n\n\tupgradeOldVersion() {\n\t\tlet targets = this.panel.targets;\n\n\t\t//Handle legacy code\n\t\t_.each(targets, (target) => {\n\t\t\tif(target.valueHandler == null) {\n\t\t\t\ttarget.valueHandler = target.displayType;\n\t\t\t\tif(target.valueHandler == \"Annotation\") {\n\t\t\t\t\ttarget.valueHandler = \"Text Only\"\n\t\t\t\t}\n\t\t\t\ttarget.displayType = this.displayTypes[0];\n\t\t\t}\n\t\t});\n\t}\n\n\thandleThresholdStatus(series, target) {\n\t\tseries.thresholds = StatusPluginCtrl.parseThresholds(target);\n\t\tseries.inverted = series.thresholds.crit < series.thresholds.warn;\n\t\tseries.display = target.display;\n\n\t\tlet isCritical = false;\n\t\tlet isWarning = false;\n\t\tlet isCheckRanges = series.thresholds.warnIsNumber && series.thresholds.critIsNumber;\n\t\tif (isCheckRanges) {\n\t\t\tif (!series.inverted) {\n\t\t\t\tif (series.display_value >= series.thresholds.crit) {\n\t\t\t\t\tisCritical = true\n\t\t\t\t} else if (series.display_value >= series.thresholds.warn) {\n\t\t\t\t\tisWarning = true\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (series.display_value <= series.thresholds.crit) {\n\t\t\t\t\tisCritical = true\n\t\t\t\t} else if (series.display_value <= series.thresholds.warn) {\n\t\t\t\t\tisWarning = true\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif (series.display_value == series.thresholds.crit) {\n\t\t\t\tisCritical = true\n\t\t\t} else if (series.display_value == series.thresholds.warn) {\n\t\t\t\tisWarning = true\n\t\t\t}\n\t\t}\n\n\t\tif(isCritical) {\n\t\t\tthis.crit.push(series);\n\t\t\tseries.displayType = this.displayTypes[0]\n\t\t} else if(isWarning) {\n\t\t\tthis.warn.push(series);\n\t\t\tseries.displayType = this.displayTypes[0]\n\t\t} else if (series.display) {\n\t\t\tif(series.displayType == \"Annotation\") {\n\t\t\t\tthis.annotation.push(series);\n\t\t\t} else {\n\t\t\t\tthis.display.push(series);\n\t\t\t}\n\t\t}\n\t}\n\n\thandleDisabledStatus(series, target) {\n\t\tseries.displayType = this.displayTypes[0];\n\t\tseries.disabledValue = target.disabledValue;\n\n\t\tif (series.display_value == series.disabledValue) {\n\t\t\tthis.disabled.push(series);\n\t\t}\n\t}\n\n\thandleTextOnly(series, target) {\n\t\tif(series.displayType == \"Annotation\") {\n\t\t\tthis.annotation.push(series);\n\t\t} else {\n\t\t\tthis.display.push(series);\n\t\t}\n\t}\n\n\thandleCssDisplay() {\n\t\tthis.$panelContainer.removeClass('error-state warn-state disabled-state ok-state no-data-state');\n\n\t\tif(this.duplicates) {\n\t\t\tthis.$panelContainer.addClass('error-state');\n\t\t} else if (this.disabled.length > 0) {\n\t\t\tthis.$panelContainer.addClass('disabled-state');\n\t\t} else if (this.crit.length > 0) {\n\t\t\tthis.$panelContainer.addClass('error-state');\n\t\t} else if (this.warn.length > 0) {\n\t\t\tthis.$panelContainer.addClass('warn-state');\n\t\t} else if((this.series == undefined || this.series.length == 0) && this.panel.isGrayOnNoData) {\n\t\t\tthis.$panelContainer.addClass('no-data-state');\n\t\t} else {\n\t\t\tthis.$panelContainer.addClass('ok-state');\n\t\t}\n\t}\n\n\tparseUri() {\n\t\tif (this.panel.links && this.panel.links.length > 0) {\n\t\t\tthis.uri = this.panel.links[0].dashUri + \"?\" + this.panel.links[0].params;\n\t\t} else {\n\t\t\tthis.uri = undefined;\n\t\t}\n\t}\n\n\tstatic parseThresholds(metricOptions) {\n\t\tlet res = {};\n\n\t\tres.warn = metricOptions.warn;\n\t\tres.warnIsNumber = angular.isNumber(res.warn);\n\t\tres.crit = metricOptions.crit;\n\t\tres.critIsNumber = angular.isNumber(res.crit);\n\n\t\treturn res;\n\t}\n\n\tonDataReceived(dataList) {\n\t\tthis.series = dataList.map(StatusPluginCtrl.seriesHandler.bind(this));\n\t\tthis.render();\n\t}\n\n\tonDataError() {\n\t\tthis.crit = [];\n\t\tthis.warn = [];\n\t}\n\n\tstatic seriesHandler(seriesData) {\n\t\tvar series = new TimeSeries({\n\t\t\tdatapoints: seriesData.datapoints,\n\t\t\talias: seriesData.target\n\t\t});\n\n\t\tseries.flotpairs = series.getFlotPairs(\"connected\");\n\n\t\treturn series;\n\t}\n\n\tlink(scope, elem, attrs, ctrl) {\n\t\tthis.$panelContainer = elem.find('.panel-container');\n\t\tthis.$panelContoller = ctrl;\n\t}\n}\n\nStatusPluginCtrl.templateUrl = 'module.html';\n"]} \ No newline at end of file +{"version":3,"sources":["../src/status_ctrl.js"],"names":["MetricsPanelCtrl","_","TimeSeries","coreModule","StatusPluginCtrl","$scope","$injector","$log","$filter","annotationsSrv","filter","valueHandlers","aggregations","displayTypes","panel","flipTime","events","on","onRender","bind","postRefresh","onDataError","onDataReceived","onInitEditMode","addFilters","numberOrTextFilter","input","angular","isNumber","$stateful","fixedSpan","span","measurements","targets","duplicates","measurement","hide","each","m","res","alias","target","length","addEditorTab","$panelContainer","find","css","$panelContoller","height","minHeight","tail","panelWidth","innerWidth","isNaN","parseInt","slice","maxWidth","setElementHeight","setTextMaxWidth","upgradeOldVersion","clusterName","displayName","replace","RegExp","namePrefix","flipCard","addClass","removeClass","crit","warn","disabled","display","annotation","series","s","url","displayType","value","aggregation","max","datapoints","point","stats","min","total","avg","display_value","valueHandler","handleThresholdStatus","handleDisabledStatus","handleTextOnly","autoFlip","handleCssDisplay","parseUri","thresholds","parseThresholds","inverted","isCritical","isWarning","isCheckRanges","warnIsNumber","critIsNumber","push","disabledValue","undefined","isGrayOnNoData","links","uri","dashUri","params","dataList","map","seriesHandler","render","timeoutId","clearInterval","setInterval","toggleClass","scope","elem","attrs","ctrl","metricOptions","seriesData","flotpairs","getFlotPairs","templateUrl"],"mappings":"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","file":"status_ctrl.js","sourcesContent":["import {MetricsPanelCtrl} from \"app/plugins/sdk\";\nimport \"app/plugins/panel/graph/legend\";\nimport \"app/plugins/panel/graph/series_overrides_ctrl\";\nimport _ from \"lodash\";\nimport TimeSeries from \"app/core/time_series2\";\nimport coreModule from \"app/core/core_module\"\n\nimport './css/status_panel.css!';\n\nexport class StatusPluginCtrl extends MetricsPanelCtrl {\n\t/** @ngInject */\n\tconstructor($scope, $injector, $log, $filter, annotationsSrv) {\n\t\tsuper($scope, $injector);\n\n\t\t//this.log = $log.debug;\n\t\tthis.filter = $filter;\n\n\t\tthis.valueHandlers = ['Threshold', 'Disable Criteria', 'Text Only'];\n\t\tthis.aggregations = ['Last', 'First', 'Max', 'Min', 'Sum', 'Avg'];\n\t\tthis.displayTypes = ['Regular', 'Annotation'];\n\n\t\tthis.panel.flipTime = this.panel.flipTime || 5;\n\n\t\t/** Bind events to functions **/\n\t\tthis.events.on('render', this.onRender.bind(this));\n\t\tthis.events.on('refresh', this.postRefresh.bind(this));\n\t\tthis.events.on('data-error', this.onDataError.bind(this));\n\t\tthis.events.on('data-received', this.onDataReceived.bind(this));\n\t\tthis.events.on('data-snapshot-load', this.onDataReceived.bind(this));\n\t\tthis.events.on('init-edit-mode', this.onInitEditMode.bind(this));\n\n\t\tthis.addFilters()\n\t}\n\n\taddFilters() {\n\t\tcoreModule.filter('numberOrText', () => {\n\t\t\tlet numberOrTextFilter = (input) => {\n\t\t\t\tif(angular.isNumber(input)) {\n\t\t\t\t\treturn this.filter('number')(input);\n\t\t\t\t} else {\n\t\t\t\t\treturn input;\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tnumberOrTextFilter.$stateful = true;\n\t\t\treturn numberOrTextFilter;\n\t\t});\n\t}\n\n\tpostRefresh() {\n\t\tif (this.panel.fixedSpan) {\n\t\t\tthis.panel.span = this.panel.fixedSpan;\n\t\t}\n\n\t\tthis.measurements = this.panel.targets;\n\n\t\t/** Duplicate alias validation **/\n\t\tthis.duplicates = false;\n\n\t\tthis.measurements = _.filter(this.measurements, (measurement) => {\n\t\t\treturn !measurement.hide;\n\t\t});\n\n\t\t_.each(this.measurements, (m) => {\n\t\t\tlet res = _.filter(this.measurements, (measurement) => {\n\t\t\t\treturn (m.alias == measurement.alias || (m.target == measurement.target && m.target)) && !m.hide;\n\t\t\t});\n\n\t\t\tif (res.length > 1) {\n\t\t\t\tthis.duplicates = true;\n\t\t\t}\n\t\t});\n\t}\n\n\tonInitEditMode() {\n\t\tthis.addEditorTab('Options', 'public/plugins/vonage-status-panel/editor.html', 2);\n\t}\n\n\tsetElementHeight() {\n\t\tthis.$panelContainer.find('.status-panel').css('min-height', this.$panelContoller.height + 'px');\n\t\tthis.minHeight = this.$panelContoller.height-10;\n\t}\n\n\tsetTextMaxWidth() {\n\t\tlet tail = ' …';\n\t\tlet panelWidth = this.$panelContainer.innerWidth();\n\t\tif (isNaN(panelWidth))\n\t\t\tpanelWidth = parseInt(panelWidth.slice(0, -2), 10) / 12;\n\t\tpanelWidth = panelWidth - 20;\n\t\tthis.maxWidth = panelWidth;\n\t}\n\n\tonRender() {\n\t\tthis.setElementHeight();\n\t\tthis.setTextMaxWidth();\n\t\tthis.upgradeOldVersion();\n\n\t\tif (this.panel.clusterName) {\n\t\t\tthis.panel.displayName =\n\t\t\t\tthis.filter('interpolateTemplateVars')(this.panel.clusterName, this.$scope)\n\t\t\t\t\t.replace(new RegExp(this.panel.namePrefix, 'i'), '');\n\t\t} else {\n\t\t\tthis.panel.displayName = \"\";\n\t\t}\n\n\t\tif(this.panel.flipCard){\n\t\t this.$panelContainer.addClass(\"effect-hover\");\n\t\t} else {\n\t\t this.$panelContainer.removeClass(\"effect-hover\");\n\t\t}\n\n\t\tlet targets = this.panel.targets;\n\n\t\tthis.crit = [];\n\t\tthis.warn = [];\n\t\tthis.disabled = [];\n\t\tthis.display = [];\n\t\tthis.annotation = [];\n\n\t\t_.each(this.series, (s) => {\n\t\t\tlet target = _.find(targets, (target) => {\n\t\t\t\treturn target.alias == s.alias || target.target == s.alias;\n\t\t\t});\n\n\t\t\tif (!target) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\ts.alias = target.alias;\n\t\t\ts.url = target.url;\n\t\t\ts.display = true;\n\t\t\ts.displayType = target.displayType;\n\n\t\t\tlet value;\n\t\t\tswitch (target.aggregation) {\n\t\t\t\tcase 'Max':\n\t\t\t\t\tvalue = _.max(s.datapoints, (point) => { return point[0]; })[0];\n\t\t\t\t\tvalue = s.stats.max;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'Min':\n\t\t\t\t\tvalue = _.min(s.datapoints, (point) => { return point[0]; })[0];\n\t\t\t\t\tvalue = s.stats.min;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'Sum':\n\t\t\t\t\tvalue = 0;\n\t\t\t\t\t_.each(s.datapoints, (point) => { value += point[0] });\n\t\t\t\t\tvalue = s.stats.total;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'Avg':\n\t\t\t\t\tvalue = s.stats.avg;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'First':\n\t\t\t\t\tvalue = s.datapoints[0][0];\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tvalue = s.datapoints[s.datapoints.length - 1][0];\n\t\t\t}\n\n\t\t\ts.display_value = value;\n\n\t\t\tif (target.valueHandler == \"Threshold\") {\n\t\t\t\tthis.handleThresholdStatus(s, target);\n\t\t\t}\n\t\t\telse if (target.valueHandler == \"Disable Criteria\") {\n\t\t\t\tthis.handleDisabledStatus(s,target);\n\t\t\t}\n\t\t\telse if (target.valueHandler == \"Text Only\") {\n\t\t\t\tthis.handleTextOnly(s, target);\n\t\t\t}\n\t\t});\n\n\t\tif(this.disabled.length > 0) {\n\t\t\tthis.crit = [];\n\t\t\tthis.warn = [];\n\t\t\tthis.display = [];\n\t\t}\n\n\t\tthis.autoFlip();\n\t\tthis.handleCssDisplay();\n\t\tthis.parseUri();\n\t}\n\n\tupgradeOldVersion() {\n\t\tlet targets = this.panel.targets;\n\n\t\t//Handle legacy code\n\t\t_.each(targets, (target) => {\n\t\t\tif(target.valueHandler == null) {\n\t\t\t\ttarget.valueHandler = target.displayType;\n\t\t\t\tif(target.valueHandler == \"Annotation\") {\n\t\t\t\t\ttarget.valueHandler = \"Text Only\"\n\t\t\t\t}\n\t\t\t\ttarget.displayType = this.displayTypes[0];\n\t\t\t}\n\t\t});\n\t}\n\n\thandleThresholdStatus(series, target) {\n\t\tseries.thresholds = StatusPluginCtrl.parseThresholds(target);\n\t\tseries.inverted = series.thresholds.crit < series.thresholds.warn;\n\t\tseries.display = target.display;\n\n\t\tlet isCritical = false;\n\t\tlet isWarning = false;\n\t\tlet isCheckRanges = series.thresholds.warnIsNumber && series.thresholds.critIsNumber;\n\t\tif (isCheckRanges) {\n\t\t\tif (!series.inverted) {\n\t\t\t\tif (series.display_value >= series.thresholds.crit) {\n\t\t\t\t\tisCritical = true\n\t\t\t\t} else if (series.display_value >= series.thresholds.warn) {\n\t\t\t\t\tisWarning = true\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (series.display_value <= series.thresholds.crit) {\n\t\t\t\t\tisCritical = true\n\t\t\t\t} else if (series.display_value <= series.thresholds.warn) {\n\t\t\t\t\tisWarning = true\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif (series.display_value == series.thresholds.crit) {\n\t\t\t\tisCritical = true\n\t\t\t} else if (series.display_value == series.thresholds.warn) {\n\t\t\t\tisWarning = true\n\t\t\t}\n\t\t}\n\n\t\tif(isCritical) {\n\t\t\tthis.crit.push(series);\n\t\t\tseries.displayType = this.displayTypes[0]\n\t\t} else if(isWarning) {\n\t\t\tthis.warn.push(series);\n\t\t\tseries.displayType = this.displayTypes[0]\n\t\t} else if (series.display) {\n\t\t\tif(series.displayType == \"Annotation\") {\n\t\t\t\tthis.annotation.push(series);\n\t\t\t} else {\n\t\t\t\tthis.display.push(series);\n\t\t\t}\n\t\t}\n\t}\n\n\thandleDisabledStatus(series, target) {\n\t\tseries.displayType = this.displayTypes[0];\n\t\tseries.disabledValue = target.disabledValue;\n\n\t\tif (series.display_value == series.disabledValue) {\n\t\t\tthis.disabled.push(series);\n\t\t}\n\t}\n\n\thandleTextOnly(series, target) {\n\t\tif(series.displayType == \"Annotation\") {\n\t\t\tthis.annotation.push(series);\n\t\t} else {\n\t\t\tthis.display.push(series);\n\t\t}\n\t}\n\n\thandleCssDisplay() {\n\t\tthis.$panelContainer.removeClass('error-state warn-state disabled-state ok-state no-data-state');\n\n\t\tif(this.duplicates) {\n\t\t\tthis.$panelContainer.addClass('error-state');\n\t\t} else if (this.disabled.length > 0) {\n\t\t\tthis.$panelContainer.addClass('disabled-state');\n\t\t} else if (this.crit.length > 0) {\n\t\t\tthis.$panelContainer.addClass('error-state');\n\t\t} else if (this.warn.length > 0) {\n\t\t\tthis.$panelContainer.addClass('warn-state');\n\t\t} else if((this.series == undefined || this.series.length == 0) && this.panel.isGrayOnNoData) {\n\t\t\tthis.$panelContainer.addClass('no-data-state');\n\t\t} else {\n\t\t\tthis.$panelContainer.addClass('ok-state');\n\t\t}\n\t}\n\n\tparseUri() {\n\t\tif (this.panel.links && this.panel.links.length > 0) {\n\t\t\tthis.uri = this.panel.links[0].dashUri + \"?\" + this.panel.links[0].params;\n\t\t} else {\n\t\t\tthis.uri = undefined;\n\t\t}\n\t}\n\n\tstatic parseThresholds(metricOptions) {\n\t\tlet res = {};\n\n\t\tres.warn = metricOptions.warn;\n\t\tres.warnIsNumber = angular.isNumber(res.warn);\n\t\tres.crit = metricOptions.crit;\n\t\tres.critIsNumber = angular.isNumber(res.crit);\n\n\t\treturn res;\n\t}\n\n\tonDataReceived(dataList) {\n\t\tthis.series = dataList.map(StatusPluginCtrl.seriesHandler.bind(this));\n\t\tthis.render();\n\t}\n\n\tonDataError() {\n\t\tthis.crit = [];\n\t\tthis.warn = [];\n\t}\n\n\tstatic seriesHandler(seriesData) {\n\t\tvar series = new TimeSeries({\n\t\t\tdatapoints: seriesData.datapoints,\n\t\t\talias: seriesData.target\n\t\t});\n\n\t\tseries.flotpairs = series.getFlotPairs(\"connected\");\n\n\t\treturn series;\n\t}\n\n\t$onDestroy() {\n\t\tif(this.timeoutId) clearInterval(this.timeoutId);\n\t}\n\n\tautoFlip() {\n\t\tif (this.timeoutId) clearInterval(this.timeoutId);\n\t\tif (this.panel.flipCard && (this.crit.length > 0 || this.warn.length > 0 || this.disabled.length > 0)) {\n\t\t\tthis.timeoutId = setInterval(() => {\n\t\t\t\tthis.$panelContainer.toggleClass(\"flipped\");\n\t\t\t}, this.panel.flipTime * 1000);\n\t\t}\n\t}\n\n\tlink(scope, elem, attrs, ctrl) {\n\t\tthis.$panelContainer = elem.find('.panel-container');\n\t\tthis.$panelContainer.addClass(\"st-card\");\n\t\tthis.$panelContoller = ctrl;\n\t}\n}\n\nStatusPluginCtrl.templateUrl = 'module.html';\n"]} \ No newline at end of file diff --git a/src/css/status_panel.scss b/src/css/status_panel.scss index ae61869b..9e1abb25 100644 --- a/src/css/status_panel.scss +++ b/src/css/status_panel.scss @@ -1,53 +1,121 @@ .status-panel { - display: table; position: relative; width: 100%; + height: 100%; text-align: center; - .status-panel-annotation_row { - display: table-row; - height: 25%; - text-align: left; - font-size: 0.85rem; + h1 { + font-size: 1.5rem; } - .status_name_row { - display: table-row; - height: 10%; + .st-card-front { + position: absolute; + width: 100%; + height: 100%; + + display: flex; + flex-direction: column; + justify-content: center; + align-content: center; } - .status_alerts_row { - display: table-row; + .st-card-back { + .top_section { + .status-panel-annotation_row { + text-align: left; + font-size: 0.85rem; + padding-bottom: 10px; + + .row-overflow { + max-width: 150px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + } + } + + .bottom_section { + display: flex; + flex-direction: column; + justify-content: center; + align-content: center; + + .status_name_row { + } + + .status_alerts_row { + min-height: 1px; + } + } } - h1 { - font-size: 1.5rem; + .st-card-front, + .st-card-back { + backface-visibility: hidden; + transition: transform 0.5s; } } -.row-overflow { - max-width: 150px; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; +.st-card-front { + .ok-text, .warning-text, .fail-text, .no-data-text, .disabled-text { + display: none; + font-size: 2.0rem; + } } -.error-state { - background-color: red; +.ok-state { + background-color: green; + + .ok-text { + display: block; + } } .warn-state { background-color: orange; + .warning-text { + display: block; + } } -.ok-state { - background-color: green; +.error-state { + background-color: red; + .fail-text { + display: block; + } } .no-data-state { background-color: gray; + + .no-data-text { + display: block; + } } .disabled-state { background-color: gray; + .disabled-text { + display: block; + } +} + +.st-card.effect-hover .st-card-back { + -webkit-transform: rotateY(-180deg); + transform: rotateY(-180deg); +} + +.st-card.effect-hover:hover:not(.no-data-state) .st-card-front, .st-card.effect-hover.flipped:not(.no-data-state) .st-card-front { + -webkit-transform: rotateY(-180deg); + transform: rotateY(-180deg); +} + +.st-card.effect-hover:hover:not(.no-data-state) .st-card-back, .st-card.effect-hover.flipped:not(.no-data-state) .st-card-back { + -webkit-transform: rotateY(0); + transform: rotateY(0); +} + +.st-card:not(.effect-hover):not(.no-data-state) .st-card-front { + display: none; } diff --git a/src/editor.html b/src/editor.html index 53d6faba..b62a17c2 100644 --- a/src/editor.html +++ b/src/editor.html @@ -24,6 +24,16 @@
{{ measurement.alias }}
+
+ Flip interval + +
+
diff --git a/src/module.html b/src/module.html index 881b87c8..7e0d59ca 100644 --- a/src/module.html +++ b/src/module.html @@ -3,49 +3,65 @@ Error: There are multiple measurements with the same alias. Please give each measurement a unique name.
-
-
-
- {{ annoation.alias }} - {{ annotation.alias }} - - {{ annotation.display_value | numberOrText}} +
+
OK
+
Warning
+
Critical
+
No data
+
Disabled
+
+
+ +
+
+
+
+ {{ annoation.alias }} + {{ annotation.alias }} + - {{ annotation.display_value | numberOrText}} +
+
-
-
-

- - {{ ctrl.panel.displayName | interpolateTemplateVars:this }} - - - {{ ctrl.panel.displayName | interpolateTemplateVars:this }} - -

-
+
+
+

+ + {{ ctrl.panel.displayName | interpolateTemplateVars:this }} + + + {{ ctrl.panel.displayName | interpolateTemplateVars:this }} + +

-
-
- {{ display.alias }} - {{ display.alias }} - - {{ display.display_value | numberOrText }} -
+
-
- {{ crit.alias }} - {{ crit.alias }} - - {{ crit.display_value | numberOrText }} -
+
+
+ {{ display.alias }} + {{ display.alias }} + - {{ display.display_value | numberOrText }} +
-
- {{ warn.alias }} - {{ warn.alias }} - - {{ warn.display_value | numberOrText }} -
+
+ {{ crit.alias }} + {{ crit.alias }} + - {{ crit.display_value | numberOrText }} +
+ +
+ {{ warn.alias }} + {{ warn.alias }} + - {{ warn.display_value | numberOrText }} +
-
- {{ disabled.alias }} - {{ disabled.alias }} +
+ {{ disabled.alias }} + {{ disabled.alias }} +
+
+
diff --git a/src/status_ctrl.js b/src/status_ctrl.js index e42d0731..9d0b93d0 100644 --- a/src/status_ctrl.js +++ b/src/status_ctrl.js @@ -19,6 +19,8 @@ export class StatusPluginCtrl extends MetricsPanelCtrl { this.aggregations = ['Last', 'First', 'Max', 'Min', 'Sum', 'Avg']; this.displayTypes = ['Regular', 'Annotation']; + this.panel.flipTime = this.panel.flipTime || 5; + /** Bind events to functions **/ this.events.on('render', this.onRender.bind(this)); this.events.on('refresh', this.postRefresh.bind(this)); @@ -75,7 +77,8 @@ export class StatusPluginCtrl extends MetricsPanelCtrl { } setElementHeight() { - this.$panelContainer.find('.status-panel').css('height', this.$panelContoller.height + 'px'); + this.$panelContainer.find('.status-panel').css('min-height', this.$panelContoller.height + 'px'); + this.minHeight = this.$panelContoller.height-10; } setTextMaxWidth() { @@ -100,6 +103,12 @@ export class StatusPluginCtrl extends MetricsPanelCtrl { this.panel.displayName = ""; } + if(this.panel.flipCard){ + this.$panelContainer.addClass("effect-hover"); + } else { + this.$panelContainer.removeClass("effect-hover"); + } + let targets = this.panel.targets; this.crit = []; @@ -166,6 +175,7 @@ export class StatusPluginCtrl extends MetricsPanelCtrl { this.display = []; } + this.autoFlip(); this.handleCssDisplay(); this.parseUri(); } @@ -305,8 +315,22 @@ export class StatusPluginCtrl extends MetricsPanelCtrl { return series; } + $onDestroy() { + if(this.timeoutId) clearInterval(this.timeoutId); + } + + autoFlip() { + if (this.timeoutId) clearInterval(this.timeoutId); + if (this.panel.flipCard && (this.crit.length > 0 || this.warn.length > 0 || this.disabled.length > 0)) { + this.timeoutId = setInterval(() => { + this.$panelContainer.toggleClass("flipped"); + }, this.panel.flipTime * 1000); + } + } + link(scope, elem, attrs, ctrl) { this.$panelContainer = elem.find('.panel-container'); + this.$panelContainer.addClass("st-card"); this.$panelContoller = ctrl; } }