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