]>
git.proxmox.com Git - pmg-gui.git/blob - js/MailTracker.js
1 Ext
.define('pmg-mail-tracker', {
2 extend
: 'Ext.data.Model',
4 'id' , 'from', 'to', 'dstatus', 'rstatus', 'qid', 'msgid', 'client',
5 { type
: 'number', name
: 'size' },
6 { type
: 'date', dateFormat
: 'timestamp', name
: 'time' }
15 Ext
.define('PMG.MailTrackerFilter', {
16 extend
: 'Ext.container.Container',
17 xtype
: 'pmgMailTrackerFilter',
25 xclass
: 'Ext.app.ViewController',
27 onFilterChange: function() {
28 var view
= this.getView();
29 view
.fireEvent('filterChanged');
32 onSpecialKey: function(field
, e
) {
33 if (e
.getKey() == e
.ENTER
) {
34 this.onFilterChange();
39 getFilterParams: function() {
43 var names
= ['from', 'target', 'xfilter', 'starttime', 'endtime', 'ndr', 'greylist'];
44 Ext
.Array
.each(names
, function(name
) {
45 var value
= me
.lookupReference(name
).getSubmitValue();
46 if (value
) { param
[name
] = value
; }
63 fieldLabel
: gettext('Sender'),
65 listeners
: { specialkey
: 'onSpecialKey' },
69 fieldLabel
: gettext('Receiver'),
71 listeners
: { specialkey
: 'onSpecialKey' },
75 fieldLabel
: gettext('Filter'),
77 listeners
: { specialkey
: 'onSpecialKey' },
92 fieldLabel
: gettext('Start'),
93 reference
: 'starttime',
94 listeners
: { change
: 'onFilterChange' },
97 return new Date(now
.getTime() - 3600000);
99 xtype
: 'promxoxDateTimeField'
102 fieldLabel
: gettext('End'),
103 reference
: 'endtime',
104 listeners
: { change
: 'onFilterChange' },
105 xtype
: 'promxoxDateTimeField'
112 boxLabel
: gettext('Include NDRs'),
113 xtype
: 'proxmoxcheckbox',
114 listeners
: { change
: 'onFilterChange' },
119 boxLabel
: gettext('Include Greylist'),
120 xtype
: 'proxmoxcheckbox',
121 listeners
: { change
: 'onFilterChange' },
122 margin
: { left
: 20 },
123 reference
: 'greylist',
133 Ext
.define('PMG.MaiLogWindow', {
134 extend
: 'Ext.window.Window',
135 xtype
: 'pmgMaiLogWindow',
137 title
: gettext('Syslog'),
140 starttime
: undefined,
154 Proxmox
.Utils
.API2Request({
156 params
: { starttime
: me
.starttime
, endtime
: me
.endtime
},
157 url
: '/nodes/' + Proxmox
.NodeName
+ '/tracker/' + me
.logid
,
159 failure: function(response
, opts
) {
160 me
.update(gettext('Error') + " " + response
.htmlStatus
);
162 success: function(response
, opts
) {
163 var data
= response
.result
.data
;
165 var logs
= "<pre style='margin: 0;'>";
166 Ext
.Array
.each(data
.logs
, function(line
) {
167 logs
+= Ext
.htmlEncode(line
) + "\n";
175 initComponent : function() {
179 throw "no logid specified";
183 throw "no starttime specified";
186 throw "no endtime specified";
191 me
.setHtml('Loading...');
196 Ext
.define('PMG.MailTracker', {
197 extend
: 'Ext.grid.GridPanel',
198 xtype
: 'pmgMailTracker',
200 title
: gettext('Tracking Center'),
204 emptyText
: gettext('No data in database.'),
206 deferEmptyText
: false
211 model
: 'pmg-mail-tracker'
216 xclass
: 'Ext.app.ViewController',
218 onSearch: function() {
219 var view
= this.getView();
220 var filter
= this.lookupReference('filter');
221 var status
= this.lookupReference('status');
222 var params
= filter
.getFilterParams();
223 status
.update(''); // clear status before load
224 view
.store
.proxy
.setExtraParams(params
);
225 view
.store
.proxy
.setUrl('/api2/json/nodes/' + Proxmox
.NodeName
+ '/tracker');
226 view
.store
.load(function(records
, operation
, success
) {
227 var response
= operation
.getResponse();
229 // fixme: howto avoid duplicate Ext.decode ?
230 var result
= Ext
.decode(response
.responseText
);
231 if (result
.changes
) {
232 status
.update(result
.changes
);
238 showDetails: function() {
239 var view
= this.getView();
240 var sm
= view
.getSelectionModel();
241 var rec
= sm
.getSelection()[0];
246 var params
= view
.store
.proxy
.getExtraParams();
248 var win
= Ext
.create('PMG.MaiLogWindow', {
249 starttime
: params
.starttime
,
250 endtime
: params
.endtime
,
259 xtype
: 'pmgMailTrackerFilter',
261 listeners
: { filterChanged
: 'onSearch' },
268 { text
: 'Search', handler
: 'onSearch' },
269 { xtype
: 'component', html
: '', reference
: 'status' }
277 header
: gettext('Time'),
283 header
: gettext('From'),
288 header
: gettext('To'),
293 header
: gettext('Status'),
295 renderer: function(v
, metaData
, rec
) {
296 var rstatus
= rec
.data
.rstatus
;
297 if (v
!== undefined && v
!== '') {
298 vtext
= PMG
.Utils
.mail_status_map
[v
] || v
;
299 if (rstatus
!== undefined && rstatus
!== '') {
300 rtext
= PMG
.Utils
.mail_status_map
[rstatus
] || rstatus
;
301 return vtext
+ '/' + rtext
;
303 if (rec
.data
.qid
!== undefined) {
304 return 'queued/' + vtext
;
313 header
: gettext('Size'),
324 header
: gettext('Client'),
332 itemdblclick
: 'showDetails',
335 initComponent: function() {
340 Proxmox
.Utils
.monStoreErrors(me
.getView(), me
.store
);