From 401ee249a4c7b0de5eeaf32d1cbee4fd0d82a7a8 Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Sat, 8 Oct 2016 18:53:12 +1300 Subject: Implement statistics report view --- web/app/Application.js | 3 +- web/app/model/Statistics.js | 47 ++++++++++++++++++++ web/app/store/Statistics.js | 26 ++++++++++++ web/app/view/SettingsMenu.js | 5 +++ web/app/view/SettingsMenuController.js | 12 ++++++ web/app/view/Statistics.js | 78 ++++++++++++++++++++++++++++++++++ web/app/view/StatisticsController.js | 29 +++++++++++++ web/l10n/en.json | 9 +++- 8 files changed, 207 insertions(+), 2 deletions(-) create mode 100644 web/app/model/Statistics.js create mode 100644 web/app/store/Statistics.js create mode 100644 web/app/view/Statistics.js create mode 100644 web/app/view/StatisticsController.js (limited to 'web') diff --git a/web/app/Application.js b/web/app/Application.js index c2e0e777..be75a609 100644 --- a/web/app/Application.js +++ b/web/app/Application.js @@ -68,7 +68,8 @@ Ext.define('Traccar.Application', { 'ReportTrips', 'ReportSummary', 'ReportTypes', - 'ReportEventTypes' + 'ReportEventTypes', + 'Statistics' ], controllers: [ diff --git a/web/app/model/Statistics.js b/web/app/model/Statistics.js new file mode 100644 index 00000000..9f66a201 --- /dev/null +++ b/web/app/model/Statistics.js @@ -0,0 +1,47 @@ +/* + * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * + * 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 3 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, see . + */ + +Ext.define('Traccar.model.Statistics', { + extend: 'Ext.data.Model', + identifier: 'negative', + + fields: [{ + name: 'id', + type: 'int' + }, { + name: 'captureTime', + type: 'date', + dateFormat: 'c' + }, { + name: 'activeUsers', + type: 'int' + }, { + name: 'activeDevices', + type: 'int' + }, { + name: 'requests', + type: 'int' + }, { + name: 'messagesReceived', + type: 'int' + }, { + name: 'messagesStored', + type: 'int' + }, { + name: 'attributes' + }] +}); diff --git a/web/app/store/Statistics.js b/web/app/store/Statistics.js new file mode 100644 index 00000000..e1b5e8ea --- /dev/null +++ b/web/app/store/Statistics.js @@ -0,0 +1,26 @@ +/* + * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * + * 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 3 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, see . + */ + +Ext.define('Traccar.store.Statistics', { + extend: 'Ext.data.Store', + model: 'Traccar.model.Statistics', + + proxy: { + type: 'rest', + url: 'api/statistics' + } +}); diff --git a/web/app/view/SettingsMenu.js b/web/app/view/SettingsMenu.js index e1f6bf21..c494572f 100644 --- a/web/app/view/SettingsMenu.js +++ b/web/app/view/SettingsMenu.js @@ -61,6 +61,11 @@ Ext.define('Traccar.view.SettingsMenu', { text: Strings.sharedAttributeAliases, handler: 'onAttributeAliasesClick', reference: 'settingsAttributeAliasesButton' + }, { + hidden: true, + text: Strings.statisticsTitle, + handler: 'onStatisticsClick', + reference: 'settingsStatisticsButton' }, { text: Strings.loginLogout, handler: 'onLogoutClick' diff --git a/web/app/view/SettingsMenuController.js b/web/app/view/SettingsMenuController.js index eee0097b..9d547c55 100644 --- a/web/app/view/SettingsMenuController.js +++ b/web/app/view/SettingsMenuController.js @@ -28,6 +28,7 @@ Ext.define('Traccar.view.SettingsMenuController', { 'Traccar.view.Geofences', 'Traccar.view.Notifications', 'Traccar.view.AttributeAliases', + 'Traccar.view.Statistics', 'Traccar.view.BaseWindow' ], @@ -38,6 +39,7 @@ Ext.define('Traccar.view.SettingsMenuController', { if (admin) { this.lookupReference('settingsServerButton').setHidden(false); this.lookupReference('settingsUsersButton').setHidden(false); + this.lookupReference('settingsStatisticsButton').setHidden(false); } if (admin || !readonly) { this.lookupReference('settingsGroupsButton').setHidden(false); @@ -110,6 +112,16 @@ Ext.define('Traccar.view.SettingsMenuController', { }).show(); }, + onStatisticsClick: function () { + Ext.create('Traccar.view.BaseWindow', { + title: Strings.statisticsTitle, + modal: false, + items: { + xtype: 'statisticsView' + } + }).show(); + }, + onLogoutClick: function () { Ext.create('Traccar.view.LoginController').logout(); } diff --git a/web/app/view/Statistics.js b/web/app/view/Statistics.js new file mode 100644 index 00000000..78195949 --- /dev/null +++ b/web/app/view/Statistics.js @@ -0,0 +1,78 @@ +/* + * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +Ext.define('Traccar.view.Statistics', { + extend: 'Ext.grid.Panel', + xtype: 'statisticsView', + + requires: [ + 'Traccar.view.StatisticsController' + ], + + controller: 'statistics', + store: 'Statistics', + + tbar: [{ + xtype: 'tbtext', + html: Strings.reportFrom + }, { + xtype: 'datefield', + reference: 'fromDateField', + startDay: Traccar.Style.weekStartDay, + format: Traccar.Style.dateFormat, + value: new Date(new Date().getTime() - 24 * 60 * 60 * 1000) + }, '-', { + xtype: 'tbtext', + html: Strings.reportTo + }, { + xtype: 'datefield', + reference: 'toDateField', + startDay: Traccar.Style.weekStartDay, + format: Traccar.Style.dateFormat, + value: new Date() + }, '-', { + text: Strings.reportShow, + handler: 'onShowClick' + }], + + columns: [{ + text: Strings.statisticsCaptureTime, + dataIndex: 'captureTime', + flex: 1, + xtype: 'datecolumn', + renderer: Traccar.AttributeFormatter.defaultFormatter() + }, { + text: Strings.statisticsActiveUsers, + dataIndex: 'activeUsers', + flex: 1 + }, { + text: Strings.statisticsActiveDevices, + dataIndex: 'activeDevices', + flex: 1 + }, { + text: Strings.statisticsRequests, + dataIndex: 'requests', + flex: 1 + }, { + text: Strings.statisticsMessagesReceived, + dataIndex: 'messagesReceived', + flex: 1 + }, { + text: Strings.statisticsMessagesStored, + dataIndex: 'messagesStored', + flex: 1 + }] +}); diff --git a/web/app/view/StatisticsController.js b/web/app/view/StatisticsController.js new file mode 100644 index 00000000..339d8e95 --- /dev/null +++ b/web/app/view/StatisticsController.js @@ -0,0 +1,29 @@ +/* + * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +Ext.define('Traccar.view.StatisticsController', { + extend: 'Ext.app.ViewController', + alias: 'controller.statistics', + + onShowClick: function () { + Ext.getStore('Statistics').load({ + params: { + from: this.lookupReference('fromDateField').getValue().toISOString(), + to: this.lookupReference('toDateField').getValue().toISOString() + } + }); + } +}); diff --git a/web/l10n/en.json b/web/l10n/en.json index 45b3138a..30e15c71 100644 --- a/web/l10n/en.json +++ b/web/l10n/en.json @@ -170,5 +170,12 @@ "reportStartAddress": "Start Address", "reportEndTime": "End Time", "reportEndAddress": "End Address", - "reportSpentFuel": "Spent Fuel" + "reportSpentFuel": "Spent Fuel", + "statisticsTitle": "Statistics", + "statisticsCaptureTime": "Capture Time", + "statisticsActiveUsers": "Active Users", + "statisticsActiveDevices": "Active Devices", + "statisticsRequests": "Requests", + "statisticsMessagesReceived": "Messages Received", + "statisticsMessagesStored": "Messages Stored" } \ No newline at end of file -- cgit v1.2.3