blob: 8c76123c0fd3ca40e8fde49a07d1786c2077f6de [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');
App.Widget = DS.Model.extend({
widgetName: DS.attr('string'),
/**
* types:
* - GAUGE (shown as a percentage dial)
* - HEATMAP
* - GRAPH (Line graph and stack graph)
* - NUMBER (e.g., “1 ms” for RPC latency)
* - LINKS
* - TEMPLATE
*/
widgetType: DS.attr('string'),
layout: DS.belongsTo('App.WidgetLayout'),
description: DS.attr('string'),
serviceName: DS.attr('string'),
timeCreated: DS.attr('number'),
sectionName: DS.attr('string'),
author: DS.attr('string'),
scope: DS.attr('string'),
properties: DS.attr('object'),
expression: DS.attr('array'),
metrics: DS.attr('array'),
values: DS.attr('array'),
tag: DS.attr('string'),
isVisible: DS.attr('boolean', {defaultValue: true}),
/**
* @type {number}
* @default 0
*/
defaultOrder: 0, // This field is not derived from API but needs to be filled in the mapper on the client side
/**
* @type Em.View
* @class
*/
viewClass: function () {
switch (this.get('widgetType')) {
case 'GRAPH':
return App.GraphWidgetView;
case 'TEMPLATE':
return App.TemplateWidgetView;
case 'NUMBER':
return App.NumberWidgetView;
case 'GAUGE':
return App.GaugeWidgetView;
case 'HEATMAP':
return App.HeatmapWidgetView;
default:
return Em.View;
}
}.property('widgetType')
});
App.Widget.FIXTURES = [];
App.WidgetType = DS.Model.extend({
name: DS.attr('string'),
displayName: DS.attr('string'),
iconPath: DS.attr('string'),
description: DS.attr('string'),
properties: DS.attr('array')
});
App.WidgetType.FIXTURES = [
{
id: 'GAUGE',
name: 'GAUGE',
icon_path: '/img/widget-gauge.png',
display_name: 'Gauge',
description: Em.I18n.t('widget.type.gauge.description'),
properties: [
{
name : 'threshold',
isRequired: false,
smallValue: '0.7',
bigValue: '0.9'
}
]
},
{
id: 'NUMBER',
name: 'NUMBER',
icon_path: '/img/widget-number.png',
display_name: 'Number',
description: Em.I18n.t('widget.type.number.description'),
properties: [
{
name : 'threshold',
isRequired: false,
smallValue: '10',
bigValue: '20',
MAX_VALUE: Infinity
},
{
name : 'display_unit',
isRequired: false,
value: '',
placeholder: 'Optional: MB, ms, etc.'
}
]
},
{
id: 'GRAPH',
name: 'GRAPH',
display_name: 'Graph',
icon_path: '/img/widget-graph.png',
description: Em.I18n.t('widget.type.graph.description'),
properties: [
{
name : 'graph_type',
isRequired: true,
value: 'LINE'
},
{
name : 'display_unit',
isRequired: false,
value: '',
placeholder: 'Optional: MB, ms, etc.'
}
]
},
{
id: 'TEMPLATE',
name: 'TEMPLATE',
icon_path: '/img/widget-template.png',
display_name: 'Template',
description: Em.I18n.t('widget.type.template.description'),
properties: []
}
];