Skip to content
Snippets Groups Projects
WiSPUserLogs.js 10.4 KiB
Newer Older
/*
WiSP User Logs
Copyright (C) 2007-2009, AllWorldIT

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
function showWiSPUserLogsWindow(id) {
Robert Anderson's avatar
Robert Anderson committed
	// Calculate dates we going to need
	var today = new Date();
	var firstOfMonth = today.getFirstDateOfMonth();
	var firstOfNext = today.getLastDateOfMonth().add(Date.DAY, 1);

	var wispUserLogsWindow = new Ext.ux.GenericGridWindow(
		// Window config
		{
			title: 'Logs',
			layout:'border',
			height: 480,
			width: 700,
			minHeight: 480,
			minWidth: 700,
			closable: true,
			plain: true,
			uxItems: [
				{
					xtype: 'form',
					id: 'search-form',
					title: 'Search',
					region: 'west',
					border: true,
					frame: true,
					defaultType: 'datefield',
					height: 180,
					width: 320,
					labelWidth: 100,
					items: [
						{
							id: 'after',
							name: 'after',
							width: 180,
							fieldLabel: 'From',
							vtype: 'daterange',
							format: 'Y-m-d',
							value: firstOfMonth,
							endDateField: 'before'
						},
						{
							id: 'before',
							name: 'before',
							width: 180,
							fieldLabel: 'To',
							vtype: 'daterange',
							format: 'Y-m-d',
							value: firstOfNext,
							startDateField: 'after'
						}
					],
					buttons: [
						{
							text: 'Search',
							id: 'formbtn',
							handler: function() {
								// Pull in window, grid & form	
								var mainWindow = this.ownerCt.ownerCt;
								var grid = mainWindow.getComponent('gridpanel');
								var form = mainWindow.getComponent('search-form');

								// Grab store
								var store = grid.getStore();

								// Grab timestamp filter
								var gridFilters = grid.filters;
								var timestampFilter = gridFilters.getFilter('EventTimestamp');

								// Grab	form fields
								var afterField = form.getForm().findField('after');
								var beforeField = form.getForm().findField('before');

								// Set filter values from form
								timestampFilter.setValue({
									after: afterField.getValue(),
									before: beforeField.getValue()
								});

								// Trigger store reload
								store.reload();
							}
						}
					],
					buttonAlign: 'center'
				},
				{
					xtype: 'form',
					id: 'summary-form',
					region: 'center',
					split: true,
					border: true,
					autoScroll: true,
					defaultType: 'textarea',
					height: 180,
					width: 400,
					labelWidth: 80,
					items: [
						{
							id: 'summaryTotal',
							name: 'summaryTotal',
							readOnly: true,
							height: 139,
							width: 275,
							fieldLabel: 'Summary',
							fieldClass: 'font-family: monospace; font-size: 10px;',
							value: ''
						}
					]					
				}
			]
		},
		// Grid config
		{
			region: 'south',
			width: 700,
			border: true,
			// Column model
			colModel: new Ext.grid.ColumnModel([
				{
					header: "ID",
					hidden: true,
					dataIndex: 'ID'
				},
				{
					header: "Timestamp",
					sortable: true,
					dataIndex: 'EventTimestamp'
				},
				{
					header: "Status",
					sortable: true,
					hidden: true,
					dataIndex: 'AcctStatusType'
				},
				{
					header: "Service Type",
					sortable: true,
					dataIndex: 'ServiceType'
				},
				{
					header: "Framed Protocol",
					sortable: true,
					dataIndex: 'FramedProtocol'
				},
				{
					header: "NAS Port Type",
					hidden: true,
					dataIndex: 'NASPortType'
				},
				{
					header: "Calling Station",
					sortable: true,
					dataIndex: 'CallingStationID'
				},
				{
					header: "Called Station",
					hidden: true,
					dataIndex: 'CalledStationID'
				},
				{
					header: "Session ID",
					hidden: true,
					dataIndex: 'AcctSessionID'
				},
				{
					header: "IP Address",
					hidden: true,
					dataIndex: 'FramedIPAddress'
				},
				{
					header: "Input Mbyte",
					dataIndex: 'AcctInputMbyte'
				},
				{
					header: "Output Mbyte",
					dataIndex: 'AcctOutputMbyte'
				},
Robert Anderson's avatar
Robert Anderson committed
				{
					header: "Session Uptime",
					dataIndex: 'AcctSessionTime'
				},
Robert Anderson's avatar
Robert Anderson committed
				{
					header: "Term. Reason",
					dataIndex: 'ConnectTermReason'
				}
			])
		},
		// Store config
		{
			baseParams: {
				ID: id,
				SOAPUsername: globalConfig.soap.username,
				SOAPPassword: globalConfig.soap.password,
				SOAPAuthType: globalConfig.soap.authtype,
				SOAPModule: 'WiSPUserLogs',
				SOAPFunction: 'getWiSPUserLogs',
				SOAPParams: 'ID,__search'
			}
		},
		// Filter config
		{
			filters: [
				{type: 'numeric', dataIndex: 'ID'},
				{
					type: 'date',  
					format: 'Y-m-d H:i:s',
					dataIndex: 'EventTimestamp', 
					value: {
						after: firstOfMonth,
						before: firstOfNext
					}
				},
				{type: 'numeric',  dataIndex: 'AcctStatusType'},
				{type: 'numeric',  dataIndex: 'ServiceType'},
				{type: 'numeric',  dataIndex: 'FramedProtocol'},
				{type: 'numeric',  dataIndex: 'NASPortType'},
				{type: 'string',  dataIndex: 'NASPortID'},
				{type: 'string',  dataIndex: 'CallingStationID'},
				{type: 'string',  dataIndex: 'CalledStationID'},
				{type: 'string',  dataIndex: 'AcctSessionID'},
				{type: 'string',  dataIndex: 'FramedIPAddress'},
				{type: 'numeric',  dataIndex: 'AcctInputMbyte'},
				{type: 'numeric',  dataIndex: 'AcctOutputMbyte'},
Robert Anderson's avatar
Robert Anderson committed
				{type: 'numeric',  dataIndex: 'AcctSessionTime'},
Robert Anderson's avatar
Robert Anderson committed
				{type: 'string',  dataIndex: 'ConnectTermReason'}
			]
		}
	);
	// Grab store
	var store = wispUserLogsWindow.getComponent('gridpanel').getStore();

	store.on('load',function() {
		var inputTotal = store.sum('AcctInputMbyte');
		var outputTotal = store.sum('AcctOutputMbyte');
Robert Anderson's avatar
Robert Anderson committed
		var uptimeTotal = store.sum('AcctSessionTime');

		var searchForm = wispUserLogsWindow.getComponent('search-form');
		var afterField = (searchForm.getForm().findField('after')).getValue();
		var beforeField = (searchForm.getForm().findField('before')).getValue();

		// Mask parent window
		wispUserLogsWindow.getEl().mask();

		uxAjaxRequest(
			wispUserLogsWindow,
			{
				params: {
					From: afterField,
					To: beforeField,
					ID: id,
					SOAPUsername: globalConfig.soap.username,
					SOAPPassword: globalConfig.soap.password,
					SOAPAuthType: globalConfig.soap.authtype,
					SOAPModule: 'WiSPUserLogs',
					SOAPFunction: 'getWiSPUserLogsSummary',
					SOAPParams: '0:ID,0:From,0:To'
				},

				customSuccess: function (result) {
					response = Ext.decode(result.responseText);
Robert Anderson's avatar
Robert Anderson committed
					// Traffic variables
					var trafficCap = response.data.trafficCap; // value of -1: prepaid
					
					var trafficCurrentTopupUsed = response.data.trafficCurrentTopupUsed; // value of -1: no current topup
					var trafficCurrentTopupCap = response.data.trafficCurrentTopupCap; // value of -1: no current topup
					var trafficTopupRemaining = response.data.trafficTopupRemaining;

					// Uptime variables
					var uptimeCap = response.data.uptimeCap; // value of -1: prepaid

					var uptimeCurrentTopupUsed = response.data.uptimeCurrentTopupUsed; // value of -1: no current topup
					var uptimeCurrentTopupCap = response.data.uptimeCurrentTopupCap; // value of -1: no current topup
					var uptimeTopupRemaining = response.data.uptimeTopupRemaining;

					// Total up traffic
					var trafficTotalAllowed;
					var validTrafficTopups;
					if (trafficCurrentTopupCap > 0) {
						validTrafficTopups = trafficCurrentTopupCap;
						validTrafficTopups += trafficTopupRemaining;
					} else {
						validTrafficTopups = trafficTopupRemaining;
					}

					if (trafficCap < 0) {
						trafficTotalAllowed = validTrafficTopups;
					} else {
						trafficTotalAllowed = trafficCap + validTrafficTopups;
					}
Robert Anderson's avatar
Robert Anderson committed
					// Traffic usage
					var trafficUsage = inputTotal + outputTotal;
Robert Anderson's avatar
Robert Anderson committed
					// Total up uptime
					var uptimeTotalAllowed;
					var validUptimeTopups;
					if (uptimeCurrentTopupCap > 0) {
						validUptimeTopups = uptimeCurrentTopupCap;
						validUptimeTopups += uptimeTopupRemaining;
					} else {
						validUptimeTopups = uptimeTopupRemaining;
					}

					if (uptimeCap < 0) {
						uptimeTotalAllowed = validUptimeTopups;
					} else {
						uptimeTotalAllowed = uptimeCap + validUptimeTopups;
					}

					// Get summary field
					var form = wispUserLogsWindow.getComponent('summary-form');
					var summaryTotal = form.getForm().findField('summaryTotal');

					// Format string before printing
					var trafficString = '';
					// Prepaid traffic
					if (trafficCap == -1) {
						trafficCap = 'Prepaid';
						trafficString += sprintf('               Traffic\nCap: %s MB Topup: %d MB\n'+
								'Usage: %d/%d MB\n=====================================\n',
								trafficCap,validTrafficTopups,trafficUsage,trafficTotalAllowed);
					// Uncapped traffic
					} else if (trafficCap == 0) {
						trafficString += sprintf('               Traffic\nCap: Uncapped Used: %d\n=====================================n',
								trafficUsage);
					// Capped traffic
					} else {
						trafficString += sprintf('               Traffic\nCap: %d MB Topup: %d MB\n'+
								'Usage: %d/%d MB\n=====================================\n',
								trafficCap,validTrafficTopups,trafficUsage,trafficTotalAllowed);
					}

					// Format string before printing
					var uptimeString = '';
					// Prepaid uptime
					if (uptimeCap == -1) {
						uptimeCap = 'Prepaid';
						uptimeString += sprintf('               Uptime\nCap: %s MB Topup: %d MB\n'+
								'Usage: %d/%d MB',
								uptimeCap,validUptimeTopups,uptimeTotal,uptimeTotalAllowed);
					// Uncapped uptime
					} else if (uptimeCap == 0) {
						uptimeString += sprintf('               Uptime\nCap: Uncapped Used: %d',
								uptimeTotal);
					// Capped uptime
					} else {
						uptimeString += sprintf('               Uptime\nCap: %d MB Topup: %d MB\n'+
								'Usage: %d/%d MB',
								uptimeCap,validUptimeTopups,uptimeTotal,uptimeTotalAllowed);
					}

					summaryTotal.setValue(trafficString+uptimeString);
				},
				failure: function (result) {
					Ext.MessageBox.alert('Failed', 'Couldn\'t fetch data: '+result.date);
				},
			}
Robert Anderson's avatar
Robert Anderson committed
		);
	});
	wispUserLogsWindow.show();				

// vim: ts=4