/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ var App = require('app'); var validator = require('utils/validator'); App.WidgetProperty = Ember.Object.extend({ /** * label to be shown for property * @type {String} */ label: '', /** * PORT|METRIC|AGGREGATE * @type {String} */ type: '', /** * config property value * @type {*} */ value: null, /** * input displayType * one of 'textFields', 'textArea', 'select' or 'threshold' * @type {String} */ displayType: '', /** * space separated list of css class names to use * @type {String} */ classNames: '', /** * view class according to displayType * @type {Em.View} */ viewClass: function () { var displayType = this.get('displayType'); switch (displayType) { case 'textField': return App.WidgetPropertyTextFieldView; case 'threshold': return App.WidgetPropertyThresholdView; case 'select': return App.WidgetPropertySelectView; default: } }.property('displayType'), /** * Define whether property is valid * Computed property should be defined in child class * @type {Boolean} */ isValid: true, /** * Define whether property is required by user * @type {Boolean} */ isRequired: true }); App.WidgetPropertyTypes = [ { name: 'display_unit', label: 'Unit', displayType: 'textField', classNames: 'widget-property-unit', isValid: function () { return this.get('isRequired') ? Boolean(this.get('value')) : true; }.property('value'), valueMap: { "value": "display_unit" } }, { name: 'graph_type', label: 'Graph Type', displayType: 'select', options: [ { label: "LINE", value: "LINE" }, { label: "STACK", value: "STACK" } ], valueMap: { "value": "graph_type" } }, { name: 'time_range', label: 'Time Range', displayType: 'select', options: [ { label: "Last 1 hour", value: "1" }, { label: "Last 2 hours", value: "2" }, { label: "Last 4 hour", value: "4" }, { label: "Last 12 hour", value: "12" }, { label: "Last 24 hour", value: "24" }, { label: "Last 1 week", value: "168" }, { label: "Last 1 month", value: "720" }, { label: "Last 1 year", value: "8760" } ], valueMap: { "value": "time_range" } }, { name: 'threshold', label: 'Thresholds', MIN_VALUE: 0, MAX_VALUE: 1, valueMap: { "smallValue": "warning_threshold", "bigValue": "error_threshold" }, /** * threshold-value * @type {string} */ smallValue: '', bigValue: '', badgeOK: 'OK', badgeWarning: 'WARNING', badgeCritical: 'CRITICAL', displayType: 'threshold', classNames: 'widget-property-threshold', /** * Check if smallValue is valid float number * @return {boolean} */ isSmallValueValid: function () { return this.validate(this.get('smallValue')); }.property('smallValue', 'bigValue'), /** * Check if bigValue is valid float number * @return {boolean} */ isBigValueValid: function () { return this.validate(this.get('bigValue')); }.property('bigValue', 'smallValue'), /** * validate * @param {string} value * @returns {boolean} */ validate: function (value) { value = Number(('' + value).trim()); if (!value && !isNaN(value)) { return true; } return validator.isValidFloat(value) && value > this.get('MIN_VALUE') && value <= this.get('MAX_VALUE'); }, isValid: Em.computed.and('isSmallValueValid', 'isBigValueValid') } ];