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 42 alexbesir
2 3 alexbesir
package com.eneraptor.hci
3
4 42 alexbesir
import groovy.sql.Sql
5
6 3 alexbesir
class StatisticsController {
7 42 alexbesir
8
        def dataSource
9
10 3 alexbesir
    def main = { }
11 42 alexbesir
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 3 alexbesir
123
}