37
37
//! - New fairings like the EVChargeFairing could be implmented in the future to
38
38
//! add add other IoT devices or additional functionality.
39
39
//!
40
+ use chrono:: TimeZone ;
40
41
use form:: ParseableDateTime ;
41
42
use governor:: Quota ;
42
43
use print_table:: { get_avg_max_rows_for_token, get_paginated_rows_for_token, NoRowsError } ;
@@ -147,18 +148,19 @@ async fn post_token(
147
148
}
148
149
149
150
/// Route GET /log/:token/html will return the data in HTML format
150
- #[ get( "/log/<_>/html?<page>&<count>" , rank = 1 ) ]
151
+ #[ get( "/log/<_>/html?<page>&<count>&<tz> " , rank = 1 ) ]
151
152
async fn list_table_html (
152
153
page : Option < i32 > ,
153
154
count : Option < i32 > ,
154
155
token : & ValidDbToken ,
156
+ tz : form:: Tz ,
155
157
mut db : Connection < Logs > ,
156
158
_ratelimit : RocketGovernor < ' _ , RateLimitGuard > ,
157
159
) -> ( ContentType , String ) {
158
160
let page = page. unwrap_or ( 0 ) ;
159
161
let count = count. unwrap_or ( 10 ) ;
160
162
161
- let ( rows, has_next) = get_paginated_rows_for_token ( & mut db, & token, page, count) . await ;
163
+ let ( rows, has_next) = get_paginated_rows_for_token ( & mut db, & token, page, count, & tz . 0 ) . await ;
162
164
163
165
let mut result = String :: new ( ) ;
164
166
result. push_str ( "<!DOCTYPE html><html><head><meta charset=\" utf-8\" /><title>Consumption info</title></head><body><table>" ) ;
@@ -169,6 +171,7 @@ async fn list_table_html(
169
171
result. push_str ( & row. to_html ( ) ) ;
170
172
}
171
173
result. push_str ( "\n </table>\n " ) ;
174
+
172
175
if has_next {
173
176
result. push_str ( & format ! (
174
177
"<a href=\" /log/{}/html?page={}&count={}\" >Next</a>" ,
@@ -177,24 +180,29 @@ async fn list_table_html(
177
180
count
178
181
) ) ;
179
182
}
183
+
184
+ // Add svg embedded
185
+ result. push_str ( format ! ( "<hr /><img src=\" /log/{}/svg?tz={}\" alt=\" Energy consumption\" />\n " , token. full_token( ) , tz. 0 ) . as_str ( ) ) ;
186
+
180
187
result. push_str ( "</body></html>\n " ) ;
181
188
182
189
( ContentType :: HTML , result)
183
190
}
184
191
185
192
/// Route GET /log/:token/json will return the data in JSON format
186
- #[ get( "/log/<_>/json?<page>&<count>" , rank = 1 ) ]
193
+ #[ get( "/log/<_>/json?<page>&<count>&<tz> " , rank = 1 ) ]
187
194
async fn list_table_json (
188
195
page : Option < i32 > ,
189
196
count : Option < i32 > ,
190
197
token : & ValidDbToken ,
198
+ tz : form:: Tz ,
191
199
mut db : Connection < Logs > ,
192
200
_ratelimit : RocketGovernor < ' _ , RateLimitGuard > ,
193
201
) -> rocket:: response:: content:: RawJson < String > {
194
202
let page = page. unwrap_or ( 0 ) ;
195
203
let count = count. unwrap_or ( 10 ) ;
196
204
197
- let ( rows, has_next) = get_paginated_rows_for_token ( & mut db, & token, page, count) . await ;
205
+ let ( rows, has_next) = get_paginated_rows_for_token ( & mut db, & token, page, count, & tz . 0 ) . await ;
198
206
199
207
let next_url = if has_next {
200
208
format ! (
@@ -217,12 +225,13 @@ async fn list_table_json(
217
225
218
226
219
227
/// Route GET /log/:token/html will return the data in HTML format
220
- #[ get( "/log/<_>/svg?<start>&<end>&<interval>" , rank = 1 ) ]
228
+ #[ get( "/log/<_>/svg?<start>&<end>&<interval>&<tz> " , rank = 1 ) ]
221
229
async fn list_table_svg (
222
230
start : Option < ParseableDateTime > ,
223
231
end : Option < ParseableDateTime > ,
224
232
interval : Option < i32 > ,
225
233
token : & ValidDbToken ,
234
+ tz : form:: Tz ,
226
235
mut db : Connection < Logs > ,
227
236
_ratelimit : RocketGovernor < ' _ , RateLimitGuard > ,
228
237
) -> ( ContentType , String ) {
@@ -235,7 +244,7 @@ async fn list_table_svg(
235
244
236
245
let ( avg, max) = get_avg_max_rows_for_token ( & mut db, & token, & start, & end, interval) . await ;
237
246
238
- match print_table:: to_svg_plot ( avg, max) {
247
+ match print_table:: to_svg_plot ( avg, max, & tz . 0 ) {
239
248
Ok ( svg) => ( ContentType :: SVG , svg) ,
240
249
Err ( e) if e. downcast_ref :: < NoRowsError > ( ) . is_some ( ) => {
241
250
( ContentType :: Plain , "No data found for the given request" . to_string ( ) )
0 commit comments