From e47839bb9264d36f61189f6dc5be9656f92604cc Mon Sep 17 00:00:00 2001 From: Pliable Pixels Date: Sat, 13 Oct 2018 17:41:00 -0400 Subject: speed up event fetching --- www/js/DataModel.js | 38 +++++++++++++++++++------------------- www/js/EventCtrl.js | 49 ++++++++++++++++++++++++++++++------------------- www/js/TimelineCtrl.js | 25 ++++++++++++++++--------- 3 files changed, 65 insertions(+), 47 deletions(-) (limited to 'www') diff --git a/www/js/DataModel.js b/www/js/DataModel.js index a87f7765..3b465400 100644 --- a/www/js/DataModel.js +++ b/www/js/DataModel.js @@ -28,7 +28,7 @@ angular.module('zmApp.controllers') var monitors = []; var multiservers = []; - var oldevents = []; + var migrationComplete = false; var tz = ""; @@ -2519,6 +2519,11 @@ angular.module('zmApp.controllers') getEventsPages: function (monitorId, startTime, endTime) { //console.log("********** INSIDE EVENTS PAGES "); + + var d = $q.defer(); + + + var apiurl = loginData.apiurl; var myurl = apiurl + "/events/index"; @@ -2544,7 +2549,7 @@ angular.module('zmApp.controllers') }); //var myurl = (monitorId == 0) ? apiurl + "/events.json?page=1" : apiurl + "/events/index/MonitorId:" + monitorId + ".json?page=1"; - var d = $q.defer(); + $http.get(myurl) .then(function (data) { data = data.data; @@ -2575,9 +2580,13 @@ angular.module('zmApp.controllers') //----------------------------------------------------------------------------- // new reminder - // https://zm/api/events.json?&sort=StartTime&direction=desc + // + //https:///zm/api/events.json?&sort=StartTime&direction=desc&page=1 getEvents: function (monitorId, pageId, loadingStr, startTime, endTime) { + + + if (!pageId) pageId = 1; //console.log("ZMData getEvents called with ID=" + monitorId + "and Page=" + pageId); if (!loadingStr) { @@ -2609,14 +2618,11 @@ angular.module('zmApp.controllers') myurl = myurl + "/EndTime <=:" + endTime; myurl = myurl + "/AlarmFrames >=:" + (loginData.enableAlarmCount ? loginData.minAlarmCount : 0); - myurl = myurl + ".json"; - if (pageId) { - myurl = myurl + "?page=" + pageId; - } else { - //console.log("**** PAGE WAS " + pageId); - } + myurl = myurl + ".json?&sort=StartTime&direction=desc&page="+pageId; + + debug ("getEvents:"+myurl); // Simulated data // myurl = "https://api.myjson.com/bins/4jx44.json"; @@ -2628,12 +2634,9 @@ angular.module('zmApp.controllers') data = data.data; if (loadingStr != 'none') $ionicLoading.hide(); //myevents = data.events; - myevents = data.events.reverse(); - if (monitorId == 0) { - oldevents = myevents; - } - //console.log (JSON.stringify(data)); - // console.log("DataModel Returning " + myevents.length + "events for page" + pageId); + myevents = data; + + d.resolve(myevents); return d.promise; @@ -2650,10 +2653,7 @@ angular.module('zmApp.controllers') d.reject(myevents); - // FIXME: Check what pagination does to this logic - if (monitorId == 0) { - oldevents = []; - } + return d.promise; }); return d.promise; diff --git a/www/js/EventCtrl.js b/www/js/EventCtrl.js index 82f04bd2..32367682 100644 --- a/www/js/EventCtrl.js +++ b/www/js/EventCtrl.js @@ -45,7 +45,8 @@ angular.module('zmApp.controllers') var oldEvent; var scrollbynumber; var eventImageDigits = 5; // failsafe - var eventsPage; + var currEventsPage = 1; + var maxEventsPage = 1; var moreEvents; var pageLoaded; var enableLoadMore; @@ -236,7 +237,7 @@ angular.module('zmApp.controllers') }); $scope.showSearch = false; - eventsPage = 1; + moreEvents = true; $scope.viewTitle = { title: "" @@ -342,6 +343,8 @@ angular.module('zmApp.controllers') $scope.monitors = NVRDataModel.applyMontageMonitorPrefs(tempMon, 2)[0]; } else*/ $scope.monitors = message; + currEventsPage = 1; + maxEventsPage = 1; if ($scope.monitors.length == 0) { var pTitle = $translate.instant('kNoMonitors'); @@ -374,14 +377,8 @@ angular.module('zmApp.controllers') nolangTo = moment($rootScope.toString).locale('en').format("YYYY-MM-DD HH:mm:ss"); //NVRDataModel.debug ("GETTING EVENTS USING "+$scope.id+" "+nolangFrom+" "+ nolangTo); - NVRDataModel.getEventsPages($scope.id, nolangFrom, nolangTo) - .then(function (data) { - // console.log ("WE GOT PAGES="+JSON.stringify(data)); - eventsPage = data.pageCount || 1; - NVRDataModel.debug("EventCtrl: found " + eventsPage + " pages of events"); - pageLoaded = true; - $scope.viewTitle.title = data.count; + NVRDataModel.debug("EventCtrl: grabbing events for: id=" + $scope.id + " Date/Time:" + $rootScope.fromString + "-" + $rootScope.toString); nolangFrom = ""; @@ -391,11 +388,20 @@ angular.module('zmApp.controllers') if ($rootScope.toString) nolangTo = moment($rootScope.toString).locale('en').format("YYYY-MM-DD HH:mm:ss"); - NVRDataModel.getEvents($scope.id, eventsPage, "", nolangFrom, nolangTo) + NVRDataModel.getEvents($scope.id, currEventsPage, "", nolangFrom, nolangTo) .then(function (data) { + pageLoaded = true; + //$scope.viewTitle.title = data.pagination.count; + + console.log (JSON.stringify(data.pagination)); + if (data.pagination && data.pagination.pageCount) + maxEventsPage = data.pagination.pageCount; + + NVRDataModel.debug ("We have a total of "+maxEventsPage+" and are at page="+currEventsPage); + // console.log ("WE GOT EVENTS="+JSON.stringify(data)); - var myevents = data; + var myevents = data.events; NVRDataModel.debug("EventCtrl: success, got " + myevents.length + " events"); var loginData = NVRDataModel.getLogin(); @@ -493,7 +499,6 @@ angular.module('zmApp.controllers') } }); - }); } //------------------------------------------------------- @@ -2733,14 +2738,17 @@ angular.module('zmApp.controllers') // the events API does not return an error for anything // except greater page limits than reported - // console.log("***** LOADING MORE INFINITE SCROLL ****"); - eventsPage--; - if ((eventsPage <= 0) && (pageLoaded)) { + console.log("***** LOADING MORE INFINITE SCROLL ****"); + + if ((currEventsPage >= maxEventsPage) && (pageLoaded)) { moreEvents = false; - //console.log("*** At Page " + eventsPage + ", not proceeding"); + NVRDataModel.debug ("No more - We have a total of "+maxEventsPage+" and are at page="+currEventsPage); + + console.log("*** At Page " + currEventsPage + " of "+maxEventsPage+", not proceeding"); return; } + currEventsPage++; if (!enableLoadMore) { moreEvents = false; // Don't ion-scroll till enableLoadMore is true; $scope.$broadcast('scroll.infiniteScrollComplete'); @@ -2751,7 +2759,7 @@ angular.module('zmApp.controllers') var loadingStr = ""; if ($scope.search.text != "") { - var toastStr = $translate.instant('kToastSearchingPage') + eventsPage; + var toastStr = $translate.instant('kToastSearchingPage') + currEventsPage; $ionicLoading.show({ maxwidth: 100, scope: $scope, @@ -2768,11 +2776,12 @@ angular.module('zmApp.controllers') if ($rootScope.toString) nolangTo = moment($rootScope.toString).locale('en').format("YYYY-MM-DD HH:mm:ss"); - NVRDataModel.getEvents($scope.id, eventsPage, loadingStr, nolangFrom, nolangTo) + NVRDataModel.getEvents($scope.id, currEventsPage, loadingStr, nolangFrom, nolangTo) .then(function (data) { var loginData = NVRDataModel.getLogin(); // console.log("Got new page of events with Page=" + eventsPage); - var myevents = data; + var myevents = data.events; + for (var i = 0; i < myevents.length; i++) { @@ -3064,6 +3073,8 @@ angular.module('zmApp.controllers') // console.log("***Pull to Refresh"); NVRDataModel.debug("Reloading monitors"); + maxEventsPage = 1; + currEventsPage = 1; var refresh = NVRDataModel.getMonitors(1); refresh.then(function (data) { $scope.monitors = data; diff --git a/www/js/TimelineCtrl.js b/www/js/TimelineCtrl.js index b612468a..a5c7f818 100644 --- a/www/js/TimelineCtrl.js +++ b/www/js/TimelineCtrl.js @@ -1103,9 +1103,9 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla //console.log ("**NOLANG" + fromDateNoLang + " " + toDateNoLang); NVRDataModel.getEventsPages(0, fromDateNoLang, toDateNoLang) - .then(function (data) { - var pages = data.pageCount || 1; - var itemsPerPage = parseInt(data.limit); + .then(function (epData) { + var pages = 1; + var itemsPerPage = parseInt(epData.limit); var iterCount; // So iterCount is the # of HTTP calls I need to make @@ -1117,17 +1117,18 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla // for dynamic binding which was easier, but due to performance reasons // I am waiting for the full data to load before I draw var promises = []; - while ((pages > 0) && (iterCount > 0)) { + while ((pages <= epData.pageCount) && (iterCount > 0)) { var promise = NVRDataModel.getEvents(0, pages, "none", fromDateNoLang, toDateNoLang); promises.push(promise); - pages--; + + pages++; iterCount--; } $q.all(promises) .then(function (data) { - NVRDataModel.debug("TimelineCtrl/drawgraph: all pages of graph data received"); + NVRDataModel.debug("TimelineCtrl/drawgraph: all pages of graph data received " ); graphIndex = 0; NVRDataModel.log("Creating " + $scope.monitors.length + " groups for the graph"); // create groups @@ -1143,8 +1144,10 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla } for (var j = 0; j < data.length; j++) { - var myevents = data[j]; + var myevents = data[j].events; + // console.log ("****************DATA ="+JSON.stringify(data[j])); + // console.log ("**********************************"); if (graphIndex > count) { NVRDataModel.log("Exiting page count graph - reached limit of " + count); break; @@ -1203,10 +1206,12 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla } //console.log ("ADDED "+tzs+" " +tze); + + if (!graphData.get(myevents[i].Event.Id)) { graphData.add({ //id: graphIndex, id: myevents[i].Event.Id, - content: "" + "( " + myevents[i].Event.AlarmFrames + ") " + "(" + myevents[j].Event.Id + ") " + myevents[i].Event.Notes + "", + content: "" + "( " + myevents[i].Event.AlarmFrames + ") " + "(" + myevents[i].Event.Id + ") " + myevents[i].Event.Notes + "", start: tzs, //start: myevents[i].Event.StartTime, @@ -1224,7 +1229,9 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla myevent: myevents[i] }); + //console.log ("IED="+myevents[i].Event.Id); graphIndex++; + } } else { //console.log ("SKIPPED GRAPH ID " + graphIndex); } @@ -1375,7 +1382,7 @@ angular.module('zmApp.controllers').controller('zmApp.TimelineCtrl', ['$ionicPla var _item; for (var x = 0; x < visible.length; x++) { _item = timeline.itemSet.items[x]; - if (_item.data.group == prop.group) { + if (_item && _item.data && _item.data.group == prop.group) { if (Math.abs(_item.left - prop.x) < minDist) { closestItem = _item; minDist = Math.abs(_item.left - prop.x); -- cgit v1.2.3