Uploaded image for project: 'YADE - Yet Another Data Exchange Tool'
  1. YADE - Yet Another Data Exchange Tool
  2. YADE-232

YADE info log messages should be more concise

    XMLWordPrintable

Details

    Description

      Desired Situation

      • Suppress detailed logging of parameters for info log level
      • Suppress Java stack trace for info log level
        • In this use case YADE is not able to create a remote directory. Along with the error message YADE prints the Java stack trace which makes it difficult to find the exact cause of the error. For info level log no Java stake trace should be printed,
          [jenkins@gollum bin]$ ./jade4dmz.sh -settings=jade_jumhost.ini -profile=GOLLUM_TO_WILMA_VAI_HOMER -remote_host=UNKNOWEN
          0 [main] INFO com.sos.DataExchange.Jade4DMZ  - Jade4DMZ --- $Id: Jade4DMZ.java 27842 2014-10-30 12:35:02Z oh $
          48 [main] INFO sos.net.ssh.SOSSSHJob2  - $Id: SOSSSHJob2.java 27529 2014-10-10 08:33:03Z ur $
          main INFO  12:03:17,222   INFO (SOSDataExchangeEngine4DMZMain.java:103) ::Execute SOSDataExchange - Main routine started ... -- 1.7.4321-RC1 (2014-11-18 14:58, revision 28207) Copyright 2003-2014 SOS GmbH Berlin
          main INFO  12:03:17,229   INFO (Jade4DMZ.java:555) ::EstablishSSHConnection SOSSSHJobOptions.url (the url for the connection):
          SOSSSHJobOptions.raise_exception_on_error (Raise an Exception if an error occured): true
          SOSFtpOptionsSuperClass.jump_ssh_auth_file (This parameter specifies the path and name of a us): /home/jenkins/.ssh/id_rsa
          SOSFtpOptionsSuperClass.jump_ssh_auth_method (This parameter specifies the authentication method): publickey
          SOSSSHJobOptions.command (This parameter specifies a command that is to be executed):
          SOSSSHJobOptions.command_delimiter (Command delimiter characters are specified using this par): %%
          SOSSSHJobOptions.command_script (This parameter can be used as an alternative to command,):
          SOSSSHJobOptions.command_script_file (This parameter can be used as an alternative to command,):
          SOSSSHJobOptions.command_script_param (This parameter contains a parameterstring, which will be):
          homer.sos (192.11.0.95)
          SOSSSHJobOptions.protocol (Type of requested Datatransfer The values ftp, sftp): ssh
          SOSSSHJobOptions.ignore_error (Should the value true be specified, then execution errors): false
          SOSSSHJobOptions.ignore_exit_code (This parameter configures one or more exit codes which wi):
          SOSSSHJobOptions.ignore_signal (Should the value true be specified, then on): false
          SOSSSHJobOptions.ignore_stderr (This job checks if any output to stderr has been created): false
          SOSFtpOptionsSuperClass.jump_password (Password for authentication with the jump_host.): *****
          SOSFtpOptionsSuperClass.jump_port (Port on the jump_host by which files should be tra): 22
          SOSSSHJobOptions.proxy_host (The value of this parameter is the host name or the IP ad):
          SOSSSHJobOptions.proxy_password (This parameter specifies the password for the proxy serve): *****
          SOSSSHJobOptions.proxy_port (This parameter specifies the port number of the proxy,): 0
          SOSSSHJobOptions.proxy_user (The value of this parameter specifies the user account fo): user
          SOSSSHJobOptions.simulate_shell (Should the value true be specified for this parameter,): false
          SOSSSHJobOptions.simulate_shell_inactivity_timeout (If no new characters are written to stdout or stderr afte): 0
          SOSSSHJobOptions.simulate_shell_login_timeout (If no new characters are written to stdout or stderr afte): 0
          SOSSSHJobOptions.simulate_shell_prompt_trigger (The expected comman line prompt. Using this prompt the jo):
          SOSFtpOptionsSuperClass.jump_user (User name for authentication with the jump_host.): test
          SOSSSHJobOptions.ignore_hangup_signal (Should the value true be specified, then execution errors): true
          SOSSSHJobOptions.Base_Directory (A Base Directory for all relative FileNames used by SOSOptionFileName): /home/jenkins/sos-berlin.com/jade/jade_client.1.7.4321-RC1/bin
          .CreateFolder (Folder anlegen, wenn noch nicht vorhanden): true
          SOSSSHJobOptions.Date_Format_Mask (General Mask for date fomatting): yyyy-MM-dd
          SOSSSHJobOptions.Time_Format_Mask (General Mask for time formatting): HH:mm:ss
          SOSSSHJobOptions.Scheduler_Hot_Folder (Pathname to the JobScheduler live-folder): null/config/live
          .CreateFolder (Folder anlegen, wenn noch nicht vorhanden): true
          SOSSSHJobOptions.Scheduler_Data (Data Folder of JobScheduler Installation):
          .CreateFolder (Folder anlegen, wenn noch nicht vorhanden): true
          SOSSSHJobOptions.Scheduler_Home (Home Root Folder of JobScheduler):
          .CreateFolder (Folder anlegen, wenn noch nicht vorhanden): true
          SOSSSHJobOptions.local_user (Name of local user): jenkins
          SOSSSHJobOptions.Locale (I18N is for internationalization of Application): en_US
          SOSSSHJobOptions.CheckNotProcessedOptions (If this Option is set to true, all not processed or recognized options are reported as a warning): false
          SOSSSHJobOptions.XmlId (This ist the ...): root
          SOSSSHJobOptions.TestMode (Test Modus schalten ): false
          SOSSSHJobOptions.Debug (Debug-Modus schalten (true/false)): false
          SOSSSHJobOptions.DebugLevel (DebugLevel): 0
          SOSSSHJobOptions.log_filename (Name der Datei mit den Logging-Eintr�gen): stdout
          SOSSSHJobOptions.log4j_Property_FileName (Name of the LOG4J Property File): ./log4j.properties
          SOSSSHJobOptions.ApplicationName (Name of the Application):
          SOSSSHJobOptions.ApplicationDocuUrl (The Url of the Documentation of this Application):
          SOSSSHJobOptions.AllowEmptyParameterList (If true, an empty parameter list leads not into an error): true
          
          main INFO  12:03:18,026   INFO (SOSSSH2TriLeadImpl.java:595) ::Authenticate SOSVfs_D_133: user 'test' logged in.
          main INFO  12:03:20,236   INFO (SOSSSHJob2.java:444) ::CheckStdOut stdout = 19807
          
          main INFO  12:03:21,187   INFO (SOSDataExchangeEngine.java:275) ::Execute $Id: SOSDataExchangeEngine.java 27865 2014-10-31 15:45:55Z oh $ -- 1.7.4321-RC1 (2014-11-18 14:58, revision 28207) Copyright 2003-2014 SOS GmbH Berlin
          main INFO  12:03:21,187   INFO (SOSOptionLogFileName.java:179) ::setLogger setLogger without instance of logger called.
          main INFO  12:03:21,196   INFO (SOSDataExchangeEngine.java:289) ::Execute
          *************************************************************************
          *                                                                       *
          *                JADE - JobScheduler Advanced Data Exchange             *
          *                ---www.sos-berlin.com---------------------             *
          *                                                                       *
          *************************************************************************
          version              = $Id: SOSDataExchangeEngine.java 27865 2014-10-31 15:45:55Z oh $ -- 1.7.4321-RC1 (2014-11-18 14:58, revision 28207) Copyright 2003-2014 SOS GmbH Berlin
          date                 = 2014-12-04 12:03:21
          operation            = copy
          protocol             = sftp
          port                 = 22
          file specification   = ^.*/.txt$
          file path            =
          local host           = gollum.sos
          local directory      = /home/jenkins/jade_test/out/
          target host          = homer.sos
          target directory     = /tmp/jade-4590227f-016e-40b4-a412-de8d4098febe/
          pid                  = 5297
          *************************************************************************
          
          main INFO  12:03:21,518   INFO (SOSDataExchangeEngine.java:783) ::setInfo 2 files found for regexp '^.*\.txt$'.
          main INFO  12:03:21,518   INFO (SOSFileListEntry.java:812) ::run SOSVfs_I_0108: transfer of /home/jenkins/jade_test/out/test_file02.txt started
          main INFO  12:03:21,542   INFO (SOSFileListEntry.java:333) ::doTransfer SOSVfs_I_274: Security hash (MD5) for file test_file02.txt is 8a4b7567d95aa5555f8c9e57dac4456d
          main INFO  12:03:21,542   INFO (SOSFileListEntry.java:812) ::run SOSVfs_I_0108: transfer of /home/jenkins/jade_test/out/test_file01.txt started
          main INFO  12:03:21,545   INFO (SOSFileListEntry.java:333) ::doTransfer SOSVfs_I_274: Security hash (MD5) for file test_file01.txt is 7d87eb659a241092de9c5c005b6f0008
          main INFO  12:03:21,546   INFO (SOSVfsSFtpJCraft.java:519) ::rename (test@homer.sos:22) SOSVfs_I_189: ..server reply [rename] from ['/tmp/jade-4590227f-016e-40b4-a412-de8d4098febe/test_file02.txt~'] to ['/tmp/jade-4590227f-016e-40b4-a412-de8d4098febe/test_file02.txt'] : /tmp/jade-4590227f-016e-40b4-a412-de8d4098febe/test_file02.txt
          main INFO  12:03:21,548   INFO (SOSVfsSFtpJCraft.java:519) ::rename (test@homer.sos:22) SOSVfs_I_189: ..server reply [rename] from ['/tmp/jade-4590227f-016e-40b4-a412-de8d4098febe/test_file01.txt~'] to ['/tmp/jade-4590227f-016e-40b4-a412-de8d4098febe/test_file01.txt'] : /tmp/jade-4590227f-016e-40b4-a412-de8d4098febe/test_file01.txt
          main INFO  12:03:21,549   INFO (SOSFileList.java:594) ::WriteHistory SOSVfs_D_213: Transfer-operation 'copy' started at 20141204120321, ended at 20141204120321. Duration: 0
          main INFO  12:03:21,549   INFO (SOSFileList.java:621) ::WriteHistory SOSVfs_D_214: Operation = copy, TargetFile = /tmp/jade-4590227f-016e-40b4-a412-de8d4098febe/test_file02.txt, SourceFile = /home/jenkins/jade_test/out/test_file02.txt, BytesTransferred = 34800
          main INFO  12:03:21,551   INFO (SOSFileList.java:621) ::WriteHistory SOSVfs_D_214: Operation = copy, TargetFile = /tmp/jade-4590227f-016e-40b4-a412-de8d4098febe/test_file01.txt, SourceFile = /home/jenkins/jade_test/out/test_file01.txt, BytesTransferred = 4350
          main INFO  12:03:21,551   INFO (SOSDataExchangeEngine.java:643) ::printState SOSJADE_I_0101: 2 files transferred
          main INFO  12:03:21,551   INFO (SOSDataExchangeEngine.java:304) ::Execute Elapsed time = 364, per File = 182, total bytes = 2
          main INFO  12:03:21,555   INFO (SOSDataExchangeEngine.java:314) ::Execute
          *************************************************************************
           execution status     = sucess. Without Errors.
           successful transfers = 2
           failed transfers     = 0
           last error           =
          *************************************************************************
          
          main INFO  12:03:21,555   INFO (SOSVfsTransferBaseClass.java:1164) ::logINFO (SOSVfsSFtpJCraft::disconnect) disconnect OK
          main INFO  12:03:21,555   INFO (SOSVfsTransferBaseClass.java:1164) ::logINFO (SOSVfsSFtpJCraft::disconnect) disconnect OK
          main INFO  12:03:31,765   INFO (SOSSSHJob2.java:444) ::CheckStdOut stdout = 19867
           INFO [main] (SOSDataExchangeEngineMain.java:106) - SOSDataExchange - Main routine started ... -- 1.7.4321-RC2 (2014-11-20 11:35, revision 28259) Copyright 2003-2014 SOS GmbH Berlin
           INFO [main] (SOSDataExchangeEngine.java:275) - $Id: SOSDataExchangeEngine.java 27865 2014-10-31 15:45:55Z oh $ -- 1.7.4321-RC2 (2014-11-20 11:35, revision 28259) Copyright 2003-2014 SOS GmbH Berlin
           INFO [main] (SOSOptionLogFileName.java:169) - No File Appender found
           INFO [main] (SOSDataExchangeEngine.java:289) -
          *************************************************************************
          *                                                                       *
          *                JADE - JobScheduler Advanced Data Exchange             *
          *                ---www.sos-berlin.com---------------------             *
          *                                                                       *
          *************************************************************************
          version              = $Id: SOSDataExchangeEngine.java 27865 2014-10-31 15:45:55Z oh $ -- 1.7.4321-RC2 (2014-11-20 11:35, revision 28259) Copyright 2003-2014 SOS GmbH Berlin
          date                 = 2014-12-04 12:00:15
          operation            = copy
          protocol             = sftp
          port                 = 22
          file specification   = ^.*.txt$
          file path            =
          local host           = homer
          local directory      = /home/jenkins/jade_test/out/
          target host          = homer.sos
          target directory     = .
          pid                  = 19895
          *************************************************************************
          
           INFO [main] (SOSDataExchangeEngine.java:984) - SOSJADE_E_0101: data transfer ended with error '..error in makeDirs: com.sos.JSHelper.Exceptions.JobSchedulerException: SOSVfs_E_134: '[mkdir]' failed'
          com.sos.JSHelper.Exceptions.JobSchedulerException: ..error in makeDirs: com.sos.JSHelper.Exceptions.JobSchedulerException: SOSVfs_E_134: '[mkdir]' failed
                  at com.sos.DataExchange.SOSDataExchangeEngine.makeDirs(SOSDataExchangeEngine.java:543)
                  at com.sos.DataExchange.SOSDataExchangeEngine.makeDirs(SOSDataExchangeEngine.java:511)
                  at com.sos.DataExchange.SOSDataExchangeEngine.transfer(SOSDataExchangeEngine.java:853)
                  at com.sos.DataExchange.SOSDataExchangeEngine.Execute(SOSDataExchangeEngine.java:292)
                  at com.sos.DataExchange.SOSDataExchangeEngineMain.Execute(SOSDataExchangeEngineMain.java:110)
                  at com.sos.DataExchange.SOSDataExchangeEngineMain.main(SOSDataExchangeEngineMain.java:63)
           INFO [main] (SOSDataExchangeEngine.java:304) - Elapsed time = 3092, per File = 3092, total bytes = 0
           INFO [main] (SOSDataExchangeEngine.java:314) -
          *************************************************************************
           execution status     = failure. Errors reported.
           successful transfers = 0
           failed transfers     = 0
           last error           = ..error in makeDirs: com.sos.JSHelper.Exceptions.JobSchedulerException: SOSVfs_E_134: '[mkdir]' failed (..error in makeDirs: com.sos.JSHelper.Exceptions.JobSchedulerException: SOSVfs_E_134: '[mkdir]' failed)
          *************************************************************************
          
          ERROR [main] (SOSDataExchangeEngineMain.java:118) - SOSDataExchangeEngineMain::Execute: Error occurred ...: ..error in makeDirs: com.sos.JSHelper.Exceptions.JobSchedulerException: SOSVfs_E_134: '[mkdir]' failed, exit-code 99 raised
          com.sos.JSHelper.Exceptions.JobSchedulerException: ..error in makeDirs: com.sos.JSHelper.Exceptions.JobSchedulerException: SOSVfs_E_134: '[mkdir]' failed
                  at com.sos.DataExchange.SOSDataExchangeEngine.Execute(SOSDataExchangeEngine.java:295)
                  at com.sos.DataExchange.SOSDataExchangeEngineMain.Execute(SOSDataExchangeEngineMain.java:110)
                  at com.sos.DataExchange.SOSDataExchangeEngineMain.main(SOSDataExchangeEngineMain.java:63)
          ERROR [main] (SOSDataExchangeEngineMain.java:125) - SOSDataExchangeEngineMain::Execute - terminated with exit-code 99
          com.sos.JSHelper.Exceptions.JobSchedulerException: ..error in makeDirs: com.sos.JSHelper.Exceptions.JobSchedulerException: SOSVfs_E_134: '[mkdir]' failed
                  at com.sos.DataExchange.SOSDataExchangeEngine.Execute(SOSDataExchangeEngine.java:295)
                  at com.sos.DataExchange.SOSDataExchangeEngineMain.Execute(SOSDataExchangeEngineMain.java:110)
                  at com.sos.DataExchange.SOSDataExchangeEngineMain.main(SOSDataExchangeEngineMain.java:63)
          
          main INFO  12:03:31,765   INFO (SOSSSHJob2.java:389) ::CheckStdErr stderr = 4:
                  at com.jcraft.jsch.ChannelSftp.mkdir(ChannelSftp.java:2160)
                  at com.sos.VirtualFileSystem.SFTP.SOSVfsSFtpJCraft.mkdir(SOSVfsSFtpJCraft.java:237)
                  at com.sos.DataExchange.SOSDataExchangeEngine.makeDirs(SOSDataExchangeEngine.java:525)
                  at com.sos.DataExchange.SOSDataExchangeEngine.makeDirs(SOSDataExchangeEngine.java:511)
                  at com.sos.DataExchange.SOSDataExchangeEngine.transfer(SOSDataExchangeEngine.java:853)
                  at com.sos.DataExchange.SOSDataExchangeEngine.Execute(SOSDataExchangeEngine.java:292)
                  at com.sos.DataExchange.SOSDataExchangeEngineMain.Execute(SOSDataExchangeEngineMain.java:110)
                  at com.sos.DataExchange.SOSDataExchangeEngineMain.main(SOSDataExchangeEngineMain.java:63)
          Caused by: java.lang.StringIndexOutOfBoundsException: String index out of range: 0
                  at java.lang.String.charAt(String.java:658)
                  at com.jcraft.jsch.ChannelSftp.remoteAbsolutePath(ChannelSftp.java:2916)
                  at com.jcraft.jsch.ChannelSftp.mkdir(ChannelSftp.java:2138)
                  ... 7 more
          com.sos.JSHelper.Exceptions.JobSchedulerException: SOSVfs_E_134: '[mkdir]' failed
                  at com.sos.VirtualFileSystem.common.SOSVfsTransferBaseClass.RaiseException(SOSVfsTransferBaseClass.java:1104)
                  at com.sos.VirtualFileSystem.SFTP.SOSVfsSFtpJCraft.mkdir(SOSVfsSFtpJCraft.java:249)
                  at com.sos.DataExchange.SOSDataExchangeEngine.makeDirs(SOSDataExchangeEngine.java:525)
                  at com.sos.DataExchange.SOSDataExchangeEngine.makeDirs(SOSDataExchangeEngine.java:511)
                  at com.sos.DataExchange.SOSDataExchangeEngine.transfer(SOSDataExchangeEngine.java:853)
                  at com.sos.DataExchange.SOSDataExchangeEngine.Execute(SOSDataExchangeEngine.java:292)
                  at com.sos.DataExchange.SOSDataExchangeEngineMain.Execute(SOSDataExchangeEngineMain.java:110)
                  at com.sos.DataExchange.SOSDataExchangeEngineMain.main(SOSDataExchangeEngineMain.java:63)
          com.sos.JSHelper.Exceptions.JobSchedulerException: ..error in makeDirs: com.sos.JSHelper.Exceptions.JobSchedulerException: SOSVfs_E_134: '[mkdir]' failed
                  at com.sos.DataExchange.SOSDataExchangeEngine.makeDirs(SOSDataExchangeEngine.java:543)
                  at com.sos.DataExchange.SOSDataExchangeEngine.makeDirs(SOSDataExchangeEngine.java:511)
                  at com.sos.DataExchange.SOSDataExchangeEngine.transfer(SOSDataExchangeEngine.java:853)
                  at com.sos.DataExchange.SOSDataExchangeEngine.Execute(SOSDataExchangeEngine.java:292)
                  at com.sos.DataExchange.SOSDataExchangeEngineMain.Execute(SOSDataExchangeEngineMain.java:110)
                  at com.sos.DataExchange.SOSDataExchangeEngineMain.main(SOSDataExchangeEngineMain.java:63)
          
          main INFO  12:03:31,766   INFO (SOSSSHJob2.java:393) ::CheckStdErr SOS-SSH-I-150: output to stderr is ignored: 4:
                  at com.jcraft.jsch.ChannelSftp.mkdir(ChannelSftp.java:2160)
                  at com.sos.VirtualFileSystem.SFTP.SOSVfsSFtpJCraft.mkdir(SOSVfsSFtpJCraft.java:237)
                  at com.sos.DataExchange.SOSDataExchangeEngine.makeDirs(SOSDataExchangeEngine.java:525)
                  at com.sos.DataExchange.SOSDataExchangeEngine.makeDirs(SOSDataExchangeEngine.java:511)
                  at com.sos.DataExchange.SOSDataExchangeEngine.transfer(SOSDataExchangeEngine.java:853)
                  at com.sos.DataExchange.SOSDataExchangeEngine.Execute(SOSDataExchangeEngine.java:292)
                  at com.sos.DataExchange.SOSDataExchangeEngineMain.Execute(SOSDataExchangeEngineMain.java:110)
                  at com.sos.DataExchange.SOSDataExchangeEngineMain.main(SOSDataExchangeEngineMain.java:63)
          Caused by: java.lang.StringIndexOutOfBoundsException: String index out of range: 0
                  at java.lang.String.charAt(String.java:658)
                  at com.jcraft.jsch.ChannelSftp.remoteAbsolutePath(ChannelSftp.java:2916)
                  at com.jcraft.jsch.ChannelSftp.mkdir(ChannelSftp.java:2138)
                  ... 7 more
          com.sos.JSHelper.Exceptions.JobSchedulerException: SOSVfs_E_134: '[mkdir]' failed
                  at com.sos.VirtualFileSystem.common.SOSVfsTransferBaseClass.RaiseException(SOSVfsTransferBaseClass.java:1104)
                  at com.sos.VirtualFileSystem.SFTP.SOSVfsSFtpJCraft.mkdir(SOSVfsSFtpJCraft.java:249)
                  at com.sos.DataExchange.SOSDataExchangeEngine.makeDirs(SOSDataExchangeEngine.java:525)
                  at com.sos.DataExchange.SOSDataExchangeEngine.makeDirs(SOSDataExchangeEngine.java:511)
                  at com.sos.DataExchange.SOSDataExchangeEngine.transfer(SOSDataExchangeEngine.java:853)
                  at com.sos.DataExchange.SOSDataExchangeEngine.Execute(SOSDataExchangeEngine.java:292)
                  at com.sos.DataExchange.SOSDataExchangeEngineMain.Execute(SOSDataExchangeEngineMain.java:110)
                  at com.sos.DataExchange.SOSDataExchangeEngineMain.main(SOSDataExchangeEngineMain.java:63)
          com.sos.JSHelper.Exceptions.JobSchedulerException: ..error in makeDirs: com.sos.JSHelper.Exceptions.JobSchedulerException: SOSVfs_E_134: '[mkdir]' failed
                  at com.sos.DataExchange.SOSDataExchangeEngine.makeDirs(SOSDataExchangeEngine.java:543)
                  at com.sos.DataExchange.SOSDataExchangeEngine.makeDirs(SOSDataExchangeEngine.java:511)
                  at com.sos.DataExchange.SOSDataExchangeEngine.transfer(SOSDataExchangeEngine.java:853)
                  at com.sos.DataExchange.SOSDataExchangeEngine.Execute(SOSDataExchangeEngine.java:292)
                  at com.sos.DataExchange.SOSDataExchangeEngineMain.Execute(SOSDataExchangeEngineMain.java:110)
                  at com.sos.DataExchange.SOSDataExchangeEngineMain.main(SOSDataExchangeEngineMain.java:63)
          
          main ERROR 12:03:31,767   ERROR (SOSSSHJob2.java:357) ::CheckExitCode SOS-SSH-E-150: remote command terminated with exit code: 99
          main INFO  12:03:31,822   INFO (SOSSSHJob2.java:444) ::CheckStdOut stdout = 19939
          
          main INFO  12:03:31,823   INFO (SOSDataExchangeEngine4DMZMain.java:118) ::Execute SOSDataExchangeEngine4DMZMain::Execute - ended without errorsended without errors
          [jenkins@gollum bin]$
          

      Attachments

        Issue Links

          Activity

            People

              oh Oliver Haufe
              mp Mahendra Patidar
              Mahendra Patidar Mahendra Patidar
              Mahendra Patidar Mahendra Patidar
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:

                Time Tracking

                  Estimated:
                  Original Estimate - 4 hours
                  4h
                  Remaining:
                  Time Spent - 3 hours Remaining Estimate - 1 hour
                  1h
                  Logged:
                  Time Spent - 3 hours Remaining Estimate - 1 hour
                  3h