root / hci / trunk / eneraptor-web-app / grails-app / controllers / com / eneraptor / hci / StatisticsController.groovy @ 43
History | View | Annotate | Download (5.82 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 | 43 | alexbesir | String query
|
101 | 42 | alexbesir | |
102 | List data = new ArrayList() |
||
103 | def results
|
||
104 | def db_sql = new Sql(dataSource) |
||
105 | |||
106 | if(graphToShow.timeFrameType == "day") { |
||
107 | 43 | alexbesir | 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 (device_id = '" + graphToShow['deviceId'] + "' and 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", { |
108 | 42 | alexbesir | data << [it.dt.getTime(), it.vl] |
109 | } |
||
110 | } else if (graphToShow.timeFrameType == "month") { |
||
111 | 43 | alexbesir | 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 (device_id = '" + graphToShow['deviceId'] + "' and 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", { |
112 | 42 | alexbesir | data << [it.dt.getTime(), it.vl] |
113 | } |
||
114 | } else if (graphToShow.timeFrameType == "year") { |
||
115 | 43 | alexbesir | 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 (device_id = '" + graphToShow['deviceId'] + "' and 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", { |
116 | 42 | alexbesir | data << [it.dt.getTime(), it.vl] |
117 | } |
||
118 | 43 | alexbesir | } else if (graphToShow.timeFrameType == "custom") { |
119 | def innerTimeFrame = (long)((graphToShow.timeFrameEnd.getTime() - graphToShow.timeFrameStart.getTime()) / graphToShow.innerSections) |
||
120 | query = ""
|
||
121 | for(int i = 0; i < graphToShow.innerSections;i++) { |
||
122 | def currDateMillis = graphToShow.timeFrameStart.getTime() + (i*innerTimeFrame) + innerTimeFrame/2 |
||
123 | def currDate = new Date((long)currDateMillis) |
||
124 | def currDateStartMillis = graphToShow.timeFrameStart.getTime() + (i*innerTimeFrame)
|
||
125 | def currDateStart = new Date((long)currDateStartMillis) |
||
126 | def currDateStopMillis = graphToShow.timeFrameStart.getTime() + ((i+1)*innerTimeFrame) |
||
127 | def currDateStop = new Date((long)currDateStopMillis) |
||
128 | query += "(select timestamp without time zone '" + currDate.toTimestamp() + "' dt, " + graphToShow['type'] + "(to_number(ld.reported_data,'9999999999D99999')) vl from logged_data as ld where (device_id = '" + graphToShow['deviceId'] + "' and ld.date_recieved >= '" + currDateStart.toTimestamp() + "' and ld.date_recieved <= '" + currDateStop.toTimestamp() + "')) " |
||
129 | if (i < (graphToShow.innerSections-1) ) query += "union " |
||
130 | } |
||
131 | query += "order by dt asc"
|
||
132 | db_sql.eachRow(query) { |
||
133 | data << [it.dt.getTime(), it.vl] |
||
134 | } |
||
135 | 42 | alexbesir | } |
136 | |||
137 | [data:data]
|
||
138 | |||
139 | } |
||
140 | 3 | alexbesir | |
141 | } |