]>
Commit | Line | Data |
---|---|---|
e5a857f7 DM |
1 | Ext.define('PVE.node.Summary', { |
2 | extend: 'Ext.panel.Panel', | |
3 | alias: 'widget.pveNodeSummary', | |
4 | ||
355ac51e | 5 | scrollable: true, |
7ec884ca | 6 | bodyPadding: '10 0 0 0', |
355ac51e | 7 | |
e5a857f7 DM |
8 | showVersions: function() { |
9 | var me = this; | |
10 | ||
11 | // Note: we use simply text/html here, because ExtJS grid has problems | |
12 | // with cut&paste | |
13 | ||
14 | var nodename = me.pveSelNode.data.node; | |
15 | ||
16 | var view = Ext.createWidget('component', { | |
17 | autoScroll: true, | |
18 | style: { | |
19 | 'background-color': 'white', | |
20 | 'white-space': 'pre', | |
21 | 'font-family': 'monospace', | |
22 | padding: '5px' | |
23 | } | |
24 | }); | |
25 | ||
26 | var win = Ext.create('Ext.window.Window', { | |
27 | title: gettext('Package versions'), | |
28 | width: 600, | |
29 | height: 400, | |
30 | layout: 'fit', | |
31 | modal: true, | |
32 | items: [ view ] | |
33 | }); | |
34 | ||
35 | PVE.Utils.API2Request({ | |
36 | waitMsgTarget: me, | |
37 | url: "/nodes/" + nodename + "/apt/versions", | |
38 | method: 'GET', | |
39 | failure: function(response, opts) { | |
40 | win.close(); | |
41 | Ext.Msg.alert(gettext('Error'), response.htmlStatus); | |
42 | }, | |
43 | success: function(response, opts) { | |
44 | win.show(); | |
45 | var text = ''; | |
46 | ||
47 | Ext.Array.each(response.result.data, function(rec) { | |
48 | var version = "not correctly installed"; | |
49 | var pkg = rec.Package; | |
50 | if (rec.OldVersion && rec.CurrentState === 'Installed') { | |
51 | version = rec.OldVersion; | |
52 | } | |
53 | if (rec.RunningKernel) { | |
54 | text += pkg + ': ' + version + ' (running kernel: ' + | |
55 | rec.RunningKernel + ')\n'; | |
56 | } else if (rec.ManagerVersion) { | |
57 | text += pkg + ': ' + version + ' (running version: ' + | |
58 | rec.ManagerVersion + ')\n'; | |
59 | } else { | |
60 | text += pkg + ': ' + version + '\n'; | |
61 | } | |
62 | }); | |
63 | ||
64 | view.update(Ext.htmlEncode(text)); | |
65 | } | |
66 | }); | |
67 | }, | |
68 | ||
69 | initComponent: function() { | |
70 | var me = this; | |
71 | ||
72 | var nodename = me.pveSelNode.data.node; | |
73 | if (!nodename) { | |
74 | throw "no node name specified"; | |
75 | } | |
76 | ||
77 | if (!me.statusStore) { | |
78 | throw "no status storage specified"; | |
79 | } | |
80 | ||
81 | var rstore = me.statusStore; | |
82 | ||
e5a857f7 DM |
83 | var version_btn = new Ext.Button({ |
84 | text: gettext('Package versions'), | |
85 | handler: function(){ | |
000c4018 | 86 | PVE.Utils.checked_command(function() { me.showVersions(); }); |
e5a857f7 DM |
87 | } |
88 | }); | |
89 | ||
5536d678 DC |
90 | var rrdstore = Ext.create('Proxmox.data.RRDStore', { |
91 | rrdurl: "/api2/json/nodes/" + nodename + "/rrddata", | |
92 | model: 'pve-rrd-node' | |
13af4d51 DC |
93 | }); |
94 | ||
e5a857f7 | 95 | Ext.apply(me, { |
e5a857f7 | 96 | tbar: [version_btn, '->', { xtype: 'pveRRDTypeSelector' } ], |
13af4d51 DC |
97 | plugins: { |
98 | ptype: 'lazyitems', | |
99 | items: [ | |
13af4d51 | 100 | { |
d49b640b DC |
101 | xtype: 'container', |
102 | layout: 'column', | |
103 | defaults: { | |
7ec884ca | 104 | padding: '0 0 10 10' |
d49b640b DC |
105 | }, |
106 | items: [ | |
cb892fb3 DC |
107 | { |
108 | xtype: 'pveNodeStatus', | |
109 | rstore: rstore, | |
7ec884ca | 110 | width: 770, |
cb892fb3 DC |
111 | pveSelNode: me.pveSelNode |
112 | }, | |
d49b640b | 113 | { |
5536d678 | 114 | xtype: 'proxmoxRRDChart', |
d49b640b DC |
115 | title: gettext('CPU usage'), |
116 | fields: ['cpu','iowait'], | |
117 | fieldTitles: [gettext('CPU usage'), gettext('IO delay')], | |
118 | store: rrdstore | |
119 | }, | |
120 | { | |
5536d678 | 121 | xtype: 'proxmoxRRDChart', |
d49b640b DC |
122 | title: gettext('Server load'), |
123 | fields: ['loadavg'], | |
124 | fieldTitles: [gettext('Load average')], | |
125 | store: rrdstore | |
126 | }, | |
127 | { | |
5536d678 | 128 | xtype: 'proxmoxRRDChart', |
d49b640b DC |
129 | title: gettext('Memory usage'), |
130 | fields: ['memtotal','memused'], | |
131 | fieldTitles: [gettext('Total'), gettext('RAM usage')], | |
132 | store: rrdstore | |
133 | }, | |
134 | { | |
5536d678 | 135 | xtype: 'proxmoxRRDChart', |
d49b640b DC |
136 | title: gettext('Network traffic'), |
137 | fields: ['netin','netout'], | |
138 | store: rrdstore | |
139 | } | |
140 | ] | |
22f2f9d6 DC |
141 | } |
142 | ] | |
13af4d51 | 143 | }, |
e5a857f7 | 144 | listeners: { |
13af4d51 | 145 | activate: function() { rstore.startUpdate(); rrdstore.startUpdate(); }, |
22f2f9d6 | 146 | destroy: function() { rstore.stopUpdate(); rrdstore.stopUpdate(); } |
e5a857f7 DM |
147 | } |
148 | }); | |
149 | ||
150 | me.callParent(); | |
151 | } | |
152 | }); |