]>
git.proxmox.com Git - proxmox-widget-toolkit.git/blob - panel/RRDChart.js
718b32b9b23502dc56611f48a424ee4b6a03049a
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 let v
= this.convertToUnits(record
.get(item
.field
));
52 let t
= new Date(record
.get('time'));
53 tooltip
.setHtml(`${prefix}: ${v}${suffix}<br>${t}`);
56 onAfterAnimation: function(chart
, eopts
) {
57 // if the undo button is disabled, disable our tool
58 var ourUndoZoomButton
= chart
.header
.tools
[0];
59 var undoButton
= chart
.interactions
[0].getUndoButton();
60 ourUndoZoomButton
.setDisabled(undoButton
.isDisabled());
80 renderer
: 'leftAxisRenderer',
91 animationend
: 'onAfterAnimation',
94 initComponent: function() {
99 throw "cannot work without store";
103 throw "cannot work without fields";
108 // add correct label for left axis
110 if (me
.unit
=== 'percent') {
112 } else if (me
.unit
=== 'bytes') {
114 } else if (me
.unit
=== 'bytespersecond') {
115 axisTitle
= "Bytes/s";
116 } else if (me
.fieldTitles
&& me
.fieldTitles
.length
=== 1) {
117 axisTitle
= me
.fieldTitles
[0];
118 } else if (me
.fields
.length
=== 1) {
119 axisTitle
= me
.fields
[0];
122 me
.axes
[0].setTitle(axisTitle
);
126 if (me
.header
&& me
.legend
) {
127 me
.header
.padding
= '4 9 4';
128 me
.header
.add(me
.legend
);
135 tooltip
: gettext('Undo Zoom'),
136 handler: function() {
137 var undoButton
= me
.interactions
[0].getUndoButton();
138 if (undoButton
.handler
) {
139 undoButton
.handler();
145 // add a series for each field we get
146 me
.fields
.forEach(function(item
, index
) {
148 if (me
.fieldTitles
&& me
.fieldTitles
[index
]) {
149 title
= me
.fieldTitles
[index
];
151 me
.addSeries(Ext
.apply(
176 renderer
: 'onSeriesTooltipRender',
183 // enable animation after the store is loaded
184 me
.store
.onAfter('load', function() {
185 me
.setAnimation(true);
186 }, this, { single
: true });