1/**
2 * Controller for sensors-overview
3 *
4 * @module app/serverHealth
5 * @exports sensorsOverviewController
6 * @name sensorsOverviewController
7 * @version 0.1.0
8 */
9
10window.angular && (function (angular) {
11    'use strict';
12    angular
13        .module('app.overview')
14        .controller('sensorsOverviewController', [
15            '$rootScope',
16            '$scope',
17            '$log',
18            '$window',
19            'APIUtils',
20            'dataService',
21            'Constants',
22            function($rootScope, $scope, $log, $window, APIUtils, dataService, Constants){
23                $scope.dataService = dataService;
24
25                $scope.dropdown_selected = false;
26
27                $scope.$log = $log;
28                $scope.customSearch = "";
29                $scope.searchTerms = [];
30                $scope.messages = Constants.MESSAGES.SENSOR;
31                $scope.selectedSeverity = {
32                    all: true,
33                    normal: false,
34                    warning: false,
35                    critical: false
36                };
37                $scope.export_name = "sensors.json";
38                $scope.loading = false;
39                $scope.jsonData = function(data){
40                    var dt = {};
41                    data.data.forEach(function(item){
42                        dt[item.original_data.key] = item.original_data.value;
43                    });
44                    return JSON.stringify(dt);
45                };
46
47                $scope.clear = function(){
48                    $scope.customSearch = "";
49                    $scope.searchTerms = [];
50                }
51
52                $scope.doSearchOnEnter = function (event) {
53                    var search = $scope.customSearch.replace(/^\s+/g,'').replace(/\s+$/g,'');
54                    if (event.keyCode === 13 &&
55                        search.length >= 2) {
56                        $scope.searchTerms = $scope.customSearch.split(" ");
57                    }else{
58                        if(search.length == 0){
59                            $scope.searchTerms = [];
60                        }
61                    }
62                };
63
64                $scope.doSearchOnClick = function() {
65                    var search = $scope.customSearch.replace(/^\s+/g,'').replace(/\s+$/g,'');
66                    if (search.length >= 2) {
67                        $scope.searchTerms = $scope.customSearch.split(" ");
68                    }else{
69                        if(search.length == 0){
70                            $scope.searchTerms = [];
71                        }
72                    }
73                }
74
75                $scope.toggleSeverityAll = function(){
76                    $scope.selectedSeverity.all = !$scope.selectedSeverity.all;
77
78                    if($scope.selectedSeverity.all){
79                        $scope.selectedSeverity.warning = false;
80                        $scope.selectedSeverity.critical = false;
81                    }
82                }
83
84                $scope.toggleSeverity = function(severity){
85                    $scope.selectedSeverity[severity] = !$scope.selectedSeverity[severity];
86
87                   if(['warning', 'critical'].indexOf(severity) > -1){
88                       if($scope.selectedSeverity[severity] == false &&
89                          (!$scope.selectedSeverity.warning &&
90                           !$scope.selectedSeverity.critical
91                          )){
92                           $scope.selectedSeverity.all = true;
93                           return;
94                       }
95                   }
96
97                    if($scope.selectedSeverity.warning &&
98                       $scope.selectedSeverity.critical){
99                        $scope.selectedSeverity.all = true;
100                        $scope.selectedSeverity.warning = false;
101                        $scope.selectedSeverity.critical = false;
102                    }else{
103                        $scope.selectedSeverity.all = false;
104                    }
105                }
106
107                $scope.filterBySeverity = function(sensor){
108                    if($scope.selectedSeverity.all) return true;
109
110                    return( (sensor.severity_flags.normal && $scope.selectedSeverity.normal) ||
111                            (sensor.severity_flags.warning && $scope.selectedSeverity.warning) ||
112                            (sensor.severity_flags.critical && $scope.selectedSeverity.critical)
113                    );
114                }
115                $scope.filterBySearchTerms = function(sensor){
116
117                    if(!$scope.searchTerms.length) return true;
118
119                    for(var i = 0, length = $scope.searchTerms.length; i < length; i++){
120                        if(sensor.search_text.indexOf($scope.searchTerms[i].toLowerCase()) == -1) return false;
121                    }
122                    return true;
123                }
124
125                $scope.loadSensorData = function(){
126                    $scope.loading = true;
127                    APIUtils.getAllSensorStatus(function(data, originalData){
128                        $scope.data = data;
129                        $scope.originalData = originalData;
130                        dataService.sensorData = data;
131                        $scope.export_data = JSON.stringify(originalData);
132                        $scope.loading = false;
133                    });
134                };
135
136                $scope.loadSensorData();
137
138                var refreshDataListener = $rootScope.$on('refresh-data', function(event, args) {
139                    $scope.loadSensorData();
140                });
141
142                $scope.$on('$destroy', function() {
143                    refreshDataListener();
144                });
145            }
146        ]
147    );
148
149})(angular);
150