Statistics
| Revision:

root / hci / trunk / eneraptor-web-app / grails-app / controllers / com / eneraptor / hci / StatisticsController.groovy @ 42

History | View | Annotate | Download (4.42 KB)

1

    
2
package com.eneraptor.hci
3

    
4
import groovy.sql.Sql
5

    
6
class StatisticsController {
7

    
8
        def dataSource
9
        
10
    def main = { }
11
        
12
        def graphs = {
13
        
14
                List savedGraphs = new ArrayList()
15
                
16
                savedGraphs = EneGraph.list()
17
                        
18
                [savedGraphs: savedGraphs]
19
                        
20
        }
21
        
22
        def reports = { }
23
        
24
        def newGraph = {
25
                
26
                List graphTypes = ["min","max","avg","sum"]
27
                List graphTypesFriendly = ["Minimum value","Maximum value","Average value","Cumulative"]
28
                
29
                List devices = new ArrayList()
30
                List devicesFriendly = new ArrayList()
31
                
32
                DeviceInfo.list().each {
33
                        devices << it.deviceId
34
                        devicesFriendly << it.friendlyName
35
                }
36
                
37
                [graphTypes:graphTypes,graphTypesFriendly:graphTypesFriendly, devices:devices, devicesFriendly:devicesFriendly]
38
                
39
        }
40
        
41
        def newGraphDo = {
42
                
43
                String errors = ""
44
                Date chosenTimeFrameStart = null
45
                Date chosenTimeFrameEnd = null
46
                
47
                if(params['timeFrameType'] == "day") {
48
                        chosenTimeFrameStart = params['dayMainTimeFrameStart']
49
                        chosenTimeFrameEnd = params['dayMainTimeFrameEnd']
50
                } else if(params['timeFrameType'] == "month") {
51
                        chosenTimeFrameStart = params['monthMainTimeFrameStart']
52
                        chosenTimeFrameEnd = params['monthMainTimeFrameEnd']
53
                } else if(params['timeFrameType'] == "year") {
54
                        chosenTimeFrameStart = params['yearMainTimeFrameStart']
55
                        chosenTimeFrameEnd = params['yearMainTimeFrameEnd']
56
                } else if(params['timeFrameType'] == "custom") {
57
                        chosenTimeFrameStart = params['customMainTimeFrameStart']
58
                        chosenTimeFrameEnd = params['customMainTimeFrameEnd']
59
                } else {
60
                        errors += "<p>Time frame type invalid!</p>"
61
                }
62
                
63
                def newEneGraph = new EneGraph(
64
                        name: params['graphName'],
65
                        type: params['graphType'],
66
                        timeFrameType: params['timeFrameType'],
67
                        timeFrameStart: chosenTimeFrameStart,
68
                        timeFrameEnd: chosenTimeFrameEnd,
69
                        innerSections: params['customMainTimeFrameInnerSections'],
70
                        advHoursTimeFrameStart: params['advHoursStart'],
71
                        advHoursTimeFrameEnd: params['advHoursEnd'],
72
                        advDayTimeFrameStart: params['advDayStart'],
73
                        advDayTimeFrameEnd: params['advDayEnd'],
74
                        advMonthTimeFrameStart: params['advMonthStart'],
75
                        advMonthTimeFrameEnd: params['advMonthEnd'],
76
                        deviceId: params['deviceId']
77
                )
78
                
79
                if(!newEneGraph.validate()) {
80
                        errors += "<p>Graph could not be created - there were some input errors. Please check if all input values are valid.</p>"
81
                        flash['errors'] = errors
82
                        redirect(action:'newGraph')
83
                } else {
84
                        if(newEneGraph.save()){
85
                                flash['confirms'] = "<p>Graph created succesfully!</p>"
86
                                redirect(action:'newGraph')
87
                        } else {
88
                                flash['errors'] = "<p>There was an error while saving graph.</p>"
89
                                redirect(action:'newGraph')
90
                        }
91
                }
92
                
93
                return true
94
                
95
        }
96
        
97
        def showGraph = {
98
                
99
                def graphToShow = EneGraph.get(params['graphId'])
100
                
101
                List data = new ArrayList()
102
                def results
103
                def db_sql = new Sql(dataSource)
104
                
105
                if(graphToShow.timeFrameType == "day") {
106
                        db_sql.eachRow "select date_trunc('day',ld.date_recieved) dt, " + graphToShow['type'] + "(to_number(ld.reported_data,'9999999999D99999')) vl from logged_data as ld where (date_trunc('day',ld.date_recieved) >= '" + graphToShow.timeFrameStart + "' and date_trunc('day',ld.date_recieved) <= '" + graphToShow.timeFrameEnd + "') group by date_trunc('day',ld.date_recieved) order by date_trunc('day',ld.date_recieved) asc", {
107
                                data << [it.dt.getTime(), it.vl]
108
                        }
109
                } else if (graphToShow.timeFrameType == "month") {
110
                        db_sql.eachRow "select date_trunc('month',ld.date_recieved) dt, " + graphToShow['type'] + "(to_number(ld.reported_data,'9999999999D99999')) vl from logged_data as ld where (date_trunc('month',ld.date_recieved) >= '" + graphToShow.timeFrameStart + "' and date_trunc('month',ld.date_recieved) <= '" + graphToShow.timeFrameEnd + "') group by date_trunc('month',ld.date_recieved) order by date_trunc('month',ld.date_recieved) asc", {
111
                                data << [it.dt.getTime(), it.vl]
112
                        }
113
                } else if (graphToShow.timeFrameType == "year") {
114
                        db_sql.eachRow "select date_trunc('year',ld.date_recieved) dt, " + graphToShow['type'] + "(to_number(ld.reported_data,'9999999999D99999')) vl from logged_data as ld where (date_trunc('year',ld.date_recieved) >= '" + graphToShow.timeFrameStart + "' and date_trunc('year',ld.date_recieved) <= '" + graphToShow.timeFrameEnd + "') group by date_trunc('year',ld.date_recieved) order by date_trunc('year',ld.date_recieved) asc", {
115
                                data << [it.dt.getTime(), it.vl]
116
                        }
117
                }
118
                
119
                [data:data]
120
                
121
        }
122
        
123
}