#3882 - reports#report_statistics (Date::Error) "invalid date"
A Date::Error occurred in reports#report_statistics:
invalid date
app/lib/date_utils.rb:18:in `date_range_setup'
-------------------------------
Request:
-------------------------------
* URL : https://bikelink.org/reports/report_statistics.csv?access_hub_ids=&bike_hangar_ids=&cluster_ids=&end_date=2024-09-308g7_space_ids=&kiosk_ids=&location_ids=914.996.983.984.977.919.918.915.876.982.981.978.1000.913.917.916.920.995&owner_ids=&show_decommissioned=&start_date=2024-09-01&ui_node_ids=
* HTTP Method: GET
* IP address : 94.143.232.198
* Parameters : {"access_hub_ids"=>"", "bike_hangar_ids"=>"", "cluster_ids"=>"", "end_date"=>"2024-09-308g7_space_ids=", "kiosk_ids"=>"", "location_ids"=>"914.996.983.984.977.919.918.915.876.982.981.978.1000.913.917.916.920.995", "owner_ids"=>"", "show_decommissioned"=>"", "start_date"=>"2024-09-01", "ui_node_ids"=>"", "controller"=>"reports", "action"=>"report_statistics", "format"=>"csv"}
* Timestamp : 2024-10-24 15:04:41 UTC
* Server : www-11.internal.bikelink.org
* Rails root : /var/www/bikelink
* Process: 470657
-------------------------------
Session:
-------------------------------
* session id: [FILTERED]
* data: {"session_id"=>"e9030afd4b4d3bac25f1496108e331f0",
"warden.user.person.key"=>[[51280], "ukumXhQgJMZDFyJ6Fesv"],
"_csrf_token"=>"/F6x6dmhQUUNP+NDBWSrZJYTrXFNkCiNwO105WJj3Js="}
-------------------------------
Environment:
-------------------------------
* GATEWAY_INTERFACE : CGI/1.2
* HTTP_ACCEPT : text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
* HTTP_ACCEPT_ENCODING : gzip, deflate, br, zstd
* HTTP_ACCEPT_LANGUAGE : en,cs-CZ;q=0.9,cs;q=0.8
* HTTP_CONNECTION : close
* HTTP_COOKIE : _ga=GA1.1.1029025914.1688981087; __utmz=136922275.1728472511.340.17.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=(not%20provided); __utmc=136922275; __utma=136922275.1643144550.1636978062.1729759196.1729782234.362; __utmt=1; _bikelink_session=Mc%2BVdvPrDKuP3%2Bshfbg1%2BP9HTx6OoSUaAuvOUjxdnJYaLtNK%2BCKYg2FpwQZxHIO5XyLwXGal%2BDtkYVnM3V3gdo5cyTTUaXmgyKgTLn03MjvGUpDSiafHPx1SO9HkUKrKQ2uwxRs%2FPQqL96dwx%2FDDlFa28PJrwxeBQoJjI2UrhRMP%2FIwKGRYgYsOKOc6%2BaMH%2FuPaUfnt%2BaukvBbxTF%2Fy27gTa5K1I%2FVRn47eC5Ki%2BWx%2FJrenRkfX515qzaEZmXuALyEKaocbDUH%2BzunWchc7SHAqC2zSd7JogQqjgNGGiXJDHn5Fsj9CHifevNugK3KkaPmkVNFx9lnoplt19T3AvXwBBTTBp1cXTvYgzZAj5eVZzH5MfZ0XYj3vPgTBHrlP67daCDkg%3D--6LSXGDs2g2EShLi9--jPOyH2wVDT4iuxhooTdXkA%3D%3D; __utmb=136922275.3.10.1729782234; _ga_5XJXN3VELE=GS1.1.1729779000.351.1.1729782256.0.0.0
* HTTP_HOST : bikelink.org
* HTTP_PRIORITY : u=0, i
* HTTP_SEC_CH_UA : "Chromium";v="130", "Google Chrome";v="130", "Not?A_Brand";v="99"
* HTTP_SEC_CH_UA_MOBILE : ?0
* HTTP_SEC_CH_UA_PLATFORM : "macOS"
* HTTP_SEC_FETCH_DEST : document
* HTTP_SEC_FETCH_MODE : navigate
* HTTP_SEC_FETCH_SITE : none
* HTTP_SEC_FETCH_USER : ?1
* HTTP_UPGRADE_INSECURE_REQUESTS : 1
* HTTP_USER_AGENT : Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36
* HTTP_VERSION : HTTP/1.0
* HTTP_X_AMZN_TRACE_ID : Root=1-671a6209-36dac5bd2d062971590e66db
* HTTP_X_FORWARDED_FOR : 94.143.232.198, 94.143.232.198
* HTTP_X_FORWARDED_PORT : 443
* HTTP_X_FORWARDED_PROTO : https
* ORIGINAL_FULLPATH : /reports/report_statistics.csv?access_hub_ids=&bike_hangar_ids=&cluster_ids=&end_date=2024-09-308g7_space_ids=&kiosk_ids=&location_ids=914.996.983.984.977.919.918.915.876.982.981.978.1000.913.917.916.920.995&owner_ids=&show_decommissioned=&start_date=2024-09-01&ui_node_ids=
* ORIGINAL_SCRIPT_NAME :
* PATH_INFO : /reports/report_statistics.csv
* QUERY_STRING : access_hub_ids=&bike_hangar_ids=&cluster_ids=&end_date=2024-09-308g7_space_ids=&kiosk_ids=&location_ids=914.996.983.984.977.919.918.915.876.982.981.978.1000.913.917.916.920.995&owner_ids=&show_decommissioned=&start_date=2024-09-01&ui_node_ids=
* REMOTE_ADDR : 127.0.0.1
* REQUEST_METHOD : GET
* REQUEST_PATH : /reports/report_statistics.csv
* REQUEST_URI : /reports/report_statistics.csv?access_hub_ids=&bike_hangar_ids=&cluster_ids=&end_date=2024-09-308g7_space_ids=&kiosk_ids=&location_ids=914.996.983.984.977.919.918.915.876.982.981.978.1000.913.917.916.920.995&owner_ids=&show_decommissioned=&start_date=2024-09-01&ui_node_ids=
* ROUTES_13660_SCRIPT_NAME :
* SCRIPT_NAME :
* SERVER_NAME : bikelink.org
* SERVER_PORT : 443
* SERVER_PROTOCOL : HTTP/1.0
* SERVER_SOFTWARE : puma 6.4.0 The Eagle of Durango
* action_controller.instance : #<ReportsController:0x00007dc9242c5248>
* action_dispatch.authenticated_encrypted_cookie_salt : [FILTERED]
* action_dispatch.backtrace_cleaner : #<Rails::BacktraceCleaner:0x00006410096c47b0>
* action_dispatch.content_security_policy :
* action_dispatch.content_security_policy_nonce_directives:
* action_dispatch.content_security_policy_nonce_generator :
* action_dispatch.content_security_policy_report_only : false
* action_dispatch.cookies : #<ActionDispatch::Cookies::CookieJar:0x00007dc92434e1d8>
* action_dispatch.cookies_digest :
* action_dispatch.cookies_rotations : #<ActiveSupport::Messages::RotationConfiguration:0x0000641004d12d38>
* action_dispatch.cookies_same_site_protection : #<Proc:0x000064100f4c2fd8 /var/www/bikelink/vendor/bundle/ruby/3.0.0/gems/railties-6.1.7.6/lib/rails/application.rb:636>
* action_dispatch.cookies_serializer : json
* action_dispatch.encrypted_cookie_cipher : [FILTERED]
* action_dispatch.encrypted_cookie_salt : [FILTERED]
* action_dispatch.encrypted_signed_cookie_salt : [FILTERED]
* action_dispatch.http_auth_salt : [FILTERED]
* action_dispatch.key_generator : #<ActiveSupport::CachingKeyGenerator:0x000064100fbd0208>
* action_dispatch.logger : #<ActiveSupport::Logger:0x00006410094b0438>
* action_dispatch.parameter_filter : [:confirm_password, :credit_card_number, :password, :passw, :secret, :token, :_key, :crypt, :salt, :certificate, :otp, :ssn]
* action_dispatch.permissions_policy :
* action_dispatch.redirect_filter : []
* action_dispatch.remote_ip : 94.143.232.198
* action_dispatch.request.content_type :
* action_dispatch.request.formats : [#<Mime::Type:0x00006410057ad0e0 @synonyms=[], @symbol=:csv, @string="text/csv", @hash=1529138411669535543>]
* action_dispatch.request.parameters : {"access_hub_ids"=>"", "bike_hangar_ids"=>"", "cluster_ids"=>"", "end_date"=>"2024-09-308g7_space_ids=", "kiosk_ids"=>"", "location_ids"=>"914.996.983.984.977.919.918.915.876.982.981.978.1000.913.917.916.920.995", "owner_ids"=>"", "show_decommissioned"=>"", "start_date"=>"2024-09-01", "ui_node_ids"=...
* action_dispatch.request.path_parameters : {:controller=>"reports", :action=>"report_statistics", :format=>"csv"}
* action_dispatch.request.query_parameters : {"access_hub_ids"=>"", "bike_hangar_ids"=>"", "cluster_ids"=>"", "end_date"=>"2024-09-308g7_space_ids=", "kiosk_ids"=>"", "location_ids"=>"914.996.983.984.977.919.918.915.876.982.981.978.1000.913.917.916.920.995", "owner_ids"=>"", "show_decommissioned"=>"", "start_date"=>"2024-09-01", "ui_node_ids"=...
* action_dispatch.request.request_parameters : {}
* action_dispatch.request.unsigned_session_cookie : {"session_id"=>"e9030afd4b4d3bac25f1496108e331f0", "warden.user.person.key"=>[[51280], "ukumXhQgJMZDFyJ6Fesv"], "_csrf_token"=>"[FILTERED]"}
* action_dispatch.request_id : b54175f8-daed-4630-b2c7-a9593eb32151
* action_dispatch.routes : #<ActionDispatch::Routing::RouteSet:0x00006410091d1b90>
* action_dispatch.secret_key_base : [FILTERED]
* action_dispatch.show_detailed_exceptions : false
* action_dispatch.show_exceptions : true
* action_dispatch.signed_cookie_digest :
* action_dispatch.signed_cookie_salt : [FILTERED]
* action_dispatch.use_authenticated_cookie_encryption : [FILTERED]
* action_dispatch.use_cookies_with_metadata : true
* newrelic.transaction_started : true
* puma.config : #<Puma::Configuration:0x0000641003e596c0>
* puma.request_body_wait : 0.006106376647949219
* puma.socket : #<UNIXSocket:0x00007dc9242ed6d0>
* rack.after_reply : []
* rack.errors : #<IO:0x00006410034e9810>
* rack.hijack : #<Puma::Client:0x00007dc9242ed680>
* rack.hijack? : true
* rack.input : #<Puma::NullIO:0x000064100427b050>
* rack.multiprocess : true
* rack.multithread : true
* rack.request.cookie_hash : {"_ga"=>"GA1.1.1029025914.1688981087", "__utmz"=>"136922275.1728472511.340.17.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=(not provided)", "__utmc"=>"136922275", "__utma"=>"136922275.1643144550.1636978062.1729759196.1729782234.362", "__utmt"=>"1", "_bikelink_session"=>"Mc+VdvPrDKuP3+shfbg1+...
* rack.request.cookie_string : _ga=GA1.1.1029025914.1688981087; __utmz=136922275.1728472511.340.17.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=(not%20provided); __utmc=136922275; __utma=136922275.1643144550.1636978062.1729759196.1729782234.362; __utmt=1; _bikelink_session=Mc%2BVdvPrDKuP3%2Bshfbg1%2BP9HTx6OoSUaAuvOUjxdnJYaLtNK%2BCKYg2FpwQZxHIO5XyLwXGal%2BDtkYVnM3V3gdo5cyTTUaXmgyKgTLn03MjvGUpDSiafHPx1SO9HkUKrKQ2uwxRs%2FPQqL96dwx%2FDDlFa28PJrwxeBQoJjI2UrhRMP%2FIwKGRYgYsOKOc6%2BaMH%2FuPaUfnt%2BaukvBbxTF%2Fy27gTa5K1I%2FVRn47eC5Ki%2BWx%2FJrenRkfX515qzaEZmXuALyEKaocbDUH%2BzunWchc7SHAqC2zSd7JogQqjgNGGiXJDHn5Fsj9CHifevNugK3KkaPmkVNFx9lnoplt19T3AvXwBBTTBp1cXTvYgzZAj5eVZzH5MfZ0XYj3vPgTBHrlP67daCDkg%3D--6LSXGDs2g2EShLi9--jPOyH2wVDT4iuxhooTdXkA%3D%3D; __utmb=136922275.3.10.1729782234; _ga_5XJXN3VELE=GS1.1.1729779000.351.1.1729782256.0.0.0
* rack.request.query_hash : {"access_hub_ids"=>"", "bike_hangar_ids"=>"", "cluster_ids"=>"", "end_date"=>"2024-09-308g7_space_ids=", "kiosk_ids"=>"", "location_ids"=>"914.996.983.984.977.919.918.915.876.982.981.978.1000.913.917.916.920.995", "owner_ids"=>"", "show_decommissioned"=>"", "start_date"=>"2024-09-01", "ui_node_ids"=...
* rack.request.query_string : access_hub_ids=&bike_hangar_ids=&cluster_ids=&end_date=2024-09-308g7_space_ids=&kiosk_ids=&location_ids=914.996.983.984.977.919.918.915.876.982.981.978.1000.913.917.916.920.995&owner_ids=&show_decommissioned=&start_date=2024-09-01&ui_node_ids=
* rack.run_once : false
* rack.session : #<ActionDispatch::Request::Session:0x00007dc9242ce320>
* rack.session.options : #<ActionDispatch::Request::Session::Options:0x00007dc9242ce2d0>
* rack.tempfiles : []
* rack.url_scheme : https
* rack.version : [1, 6]
* warden : Warden::Proxy:5465320 @config={:default_scope=>:person, :scope_defaults=>{}, :default_strategies=>{:person=>[:two_factor_authenticatable, :two_factor_authenticatable, :rememberable]}, :intercept_401=>false, :failure_app=>#<Devise::Delegator:0x000064100b5a9838>}
-------------------------------
Backtrace:
-------------------------------
app/lib/date_utils.rb:18:in `date_range_setup'
app/lib/date_utils.rb:47:in `date_range_setup'
app/lib/report_queries/parameters.rb:272:in `recalculate_dates'
app/lib/report_queries/parameters.rb:122:in `parse_parameters'
app/lib/report_queries/parameters.rb:60:in `initialize'
app/controllers/reports_controller.rb:265:in `new'
app/controllers/reports_controller.rb:265:in `report_statistics'
app/controllers/application_controller.rb:45:in `process_action'
I think we should show some error message to the user (like "date XYZ is not valid") instead of crashing. See the ReportsController#initialize_report_parameters method - that could be good place to handle it.
