/** * 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'), 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: [] } ];