blob: 6b5dc828e86e8437ee9b04891a40eb18c136a1be [file] [log] [blame]
/**
* 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 <code>displayType</code>
* @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 <code>smallValue</code> is valid float number
* @return {boolean}
*/
isSmallValueValid: function () {
return this.validate(this.get('smallValue'));
}.property('smallValue', 'bigValue'),
/**
* Check if <code>bigValue</code> 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')
}
];