#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.

Znovu načítať