]>
git.proxmox.com Git - proxmox-widget-toolkit.git/blob - panel/RRDChart.js
1 Ext
.define('Proxmox.widget.RRDChart', {
2 extend
: 'Ext.chart.CartesianChart',
3 alias
: 'widget.proxmoxRRDChart',
5 unit
: undefined, // bytes, bytespersecond, percent
8 xclass
: 'Ext.app.ViewController',
10 convertToUnits: function(value
) {
11 var units
= ['', 'k','M','G','T', 'P'];
14 if (value
< 0.1) format
+= '#';
15 while(value
>= 1000 && si
< (units
.length
-1)){
20 // javascript floating point weirdness
21 value
= Ext
.Number
.correctFloat(value
);
23 // limit decimal points
24 value
= Ext
.util
.Format
.number(value
, format
);
26 return value
.toString() + " " + units
[si
];
29 leftAxisRenderer: function(axis
, label
, layoutContext
) {
31 return me
.convertToUnits(label
);
34 onSeriesTooltipRender: function(tooltip
, record
, item
) {
35 var me
= this.getView();
39 if (me
.unit
=== 'percent') {
41 } else if (me
.unit
=== 'bytes') {
43 } else if (me
.unit
=== 'bytespersecond') {
47 var prefix
= item
.field
;
48 if (me
.fieldTitles
&& me
.fieldTitles
[me
.fields
.indexOf(item
.field
)]) {
49 prefix
= me
.fieldTitles
[me
.fields
.indexOf(item
.field
)];
51 tooltip
.setHtml(prefix
+ ': ' + this.convertToUnits(record
.get(item
.field
)) + suffix
+
52 '<br>' + new Date(record
.get('time')));
55 onAfterAnimation: function(chart
, eopts
) {
56 // if the undobuton is disabled,
59 var ourUndoZoomButton
= chart
.tools
[0];
60 var undoButton
= chart
.interactions
[0].getUndoButton();
61 ourUndoZoomButton
.setDisabled(undoButton
.isDisabled());
75 renderer
: 'leftAxisRenderer',
76 //renderer: function(axis, label) { return label; },
88 animationend
: 'onAfterAnimation'
92 initComponent: function() {
97 throw "cannot work without store";
101 throw "cannot work without fields";
106 // add correct label for left axis
108 if (me
.unit
=== 'percent') {
110 } else if (me
.unit
=== 'bytes') {
112 } else if (me
.unit
=== 'bytespersecond') {
113 axisTitle
= "Bytes/s";
114 } else if (me
.fieldTitles
&& me
.fieldTitles
.length
=== 1) {
115 axisTitle
= me
.fieldTitles
[0];
116 } else if (me
.fields
.length
=== 1) {
117 axisTitle
= me
.fields
[0];
120 me
.axes
[0].setTitle(axisTitle
);
126 tooltip
: gettext('Undo Zoom'),
128 var undoButton
= me
.interactions
[0].getUndoButton();
129 if (undoButton
.handler
) {
130 undoButton
.handler();
135 tooltip
: gettext('Toggle Legend'),
138 me
.legend
.setVisible(!me
.legend
.isVisible());
144 // add a series for each field we get
145 me
.fields
.forEach(function(item
, index
){
147 if (me
.fieldTitles
&& me
.fieldTitles
[index
]) {
148 title
= me
.fieldTitles
[index
];
150 me
.addSeries(Ext
.apply(
175 renderer
: 'onSeriesTooltipRender'
182 // enable animation after the store is loaded
183 me
.store
.onAfter('load', function() {
184 me
.setAnimation(true);
185 }, this, {single
: true});