Changeset 6236

Show
Ignore:
Timestamp:
02/11/13 14:20:01 (6 years ago)
Author:
gpress
Message:

Fixed logging during installation. This log file is stored locally on the sdcard and now is accessible even after a failed installation. ticket #1146

Location:
seattle/trunk/dist/android/SeattleOnAndroid/src/com/seattleonandroid
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • seattle/trunk/dist/android/SeattleOnAndroid/src/com/seattleonandroid/Common.java

    r6066 r6236  
    1818        public static final String LOG_EXCEPTION_MESSAGE_HANDLING = "Exception occured while handling message"; 
    1919        public static final String LOG_EXCEPTION_READING_LOG_FILE = "Exception occured while reading log files"; 
     20        public static final String LOG_EXCEPTION_WRITING_LOG_FILE = "Exception occured while creating log files"; 
    2021        public static final String LOG_EXCEPTION_GETTING_IFS = "Exception occured while getting interface names"; 
    2122        public static final String LOG_EXCEPTION_ABOUT_NNF = "NameNotFound exception while displaying about box"; 
  • seattle/trunk/dist/android/SeattleOnAndroid/src/com/seattleonandroid/InstallerService.java

    r5695 r6236  
    2929import android.util.Log; 
    3030 
     31import java.io.IOException; 
     32import java.util.logging.FileHandler; 
     33import java.util.logging.Level; 
     34import java.util.logging.Logger; 
     35import java.util.logging.SimpleFormatter; 
     36 
    3137import com.seattleonandroid.R; 
    3238import com.seattleonandroid.process.SeattleScriptProcess; 
     
    4349import java.io.FileOutputStream; 
    4450import java.io.FileReader; 
    45 import java.io.IOException; 
    4651import java.io.InputStream; 
    4752import java.net.MalformedURLException; 
     
    7479 
    7580        private final static int NOTIFICATION_ID = NotificationIdFactory.create(); 
     81         
     82        private Logger installerLogger = null; 
     83 
    7684        private final IBinder mBinder; 
    7785 
     
    7987        private AndroidProxy mProxy; 
    8088        private Notification notification; 
    81  
    8289        // An instance of the service, used to determine whether it is running or not 
    8390        private static InstallerService instance = null; 
     
    140147                instance = this; 
    141148                 
    142                 Log.i(Common.LOG_TAG, Common.LOG_INFO_INSTALLER_STARTED); 
    143  
     149                // Start the Logger used during Installation 
     150                try { 
     151                        initalizeInstallerLogger(); 
     152                } catch (IOException e) { 
     153                e.printStackTrace(); 
     154                installerLogger.log(Level.SEVERE, Common.LOG_EXCEPTION_WRITING_LOG_FILE, e); 
     155                } 
     156                 
     157                installerLogger.info(Common.LOG_INFO_INSTALLER_STARTED); 
    144158                // Set up notification icon 
    145159                String ns = Context.NOTIFICATION_SERVICE; 
     
    181195                                        //URL url = new URL("https://seattlegeni.cs.washington.edu/geni/download/"+user_hash+"/seattle_win.zip"); 
    182196                                        URL url = new URL(DownloadURLString); 
    183                                         Log.i(Common.LOG_TAG, Common.LOG_INFO_DOWNLOADING_FROM + url.toString()); 
     197                                        installerLogger.info(Common.LOG_INFO_DOWNLOADING_FROM + url.toString() ); 
    184198 
    185199                                        URLConnection ucon; 
     
    195209                                                HostnameVerifier oldHV = HttpsURLConnection.getDefaultHostnameVerifier(); 
    196210                                                HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {  
    197                                                         public boolean verify(String hostname, SSLSession session) {  
    198                                                                 Log.i(Common.LOG_TAG, hostname);                                                         
     211                                                                        public boolean verify(String hostname, SSLSession session) {  
     212                                                                installerLogger.info(hostname); 
    199213                                                                for (String trustedHostname : Common.TRUSTED_DOWNLOAD_HOSTNAMES_WHITELIST) { 
    200214                                                                        if (trustedHostname.compareTo(hostname) == 0) { 
    201215                                                                                // Host on whitelist --> trust 
    202                                                                                 Log.i(Common.LOG_TAG, Common.LOG_INFO_UNTRUSTED_HOST_CHECK_WHITELIST_OK); 
     216                                                                                installerLogger.info(Common.LOG_INFO_UNTRUSTED_HOST_CHECK_WHITELIST_OK ); 
    203217                                                                                return true; 
    204218                                                                        } 
     
    234248                                                if (!trusted) { 
    235249                                                        // hostname not on whitelist, abort installation 
    236                                                         Log.e(Common.LOG_TAG, Common.LOG_EXCEPTION_UNTRUSTED_HOST); 
     250                                                        installerLogger.severe(Common.LOG_EXCEPTION_UNTRUSTED_HOST); 
    237251                                                        throw new Exception("Untrusted host."); 
    238252                                                } 
    239                                                 Log.i(Common.LOG_TAG, Common.LOG_INFO_UNTRUSTED_HOST_CHECK_WHITELIST_OK); 
     253                                                installerLogger.info(Common.LOG_INFO_UNTRUSTED_HOST_CHECK_WHITELIST_OK); 
    240254                                                ucon = url.openConnection(); 
    241255                                                is = ucon.getInputStream(); 
     
    246260                                        int len = 0; 
    247261                                        byte[] buffer = new byte[4096]; 
    248                                         Log.i(Common.LOG_TAG, Common.LOG_INFO_DOWNLOAD_STARTED); 
     262                                        installerLogger.info(Common.LOG_INFO_DOWNLOAD_STARTED); 
    249263                                        while ((len = bis.read(buffer)) != -1) { 
    250264                                                fos.write(buffer,0,len); 
    251265                                        } 
    252                                         Log.i(Common.LOG_TAG, Common.LOG_INFO_DOWNLOAD_FINISHED); 
     266                                        installerLogger.info(Common.LOG_INFO_DOWNLOAD_FINISHED); 
    253267                                        bis.close(); 
    254268                                        fos.close(); 
    255269                                } catch (SSLException e) { 
    256                                         Log.e(Common.LOG_TAG, Common.LOG_EXCEPTION_UNTRUSTED_HOST, e);                                   
     270                                        installerLogger.log(Level.SEVERE, Common.LOG_EXCEPTION_UNTRUSTED_HOST, e); 
    257271                                        instance = null; 
    258272                                        ScriptActivity.handler.sendEmptyMessage(ScriptActivity.INSTALL_FAILED); 
     
    261275                                        return; 
    262276                                } catch (MalformedURLException e) { 
    263                                         Log.e(Common.LOG_TAG, Common.LOG_EXCEPTION_MALFORMED_URL, e);                                    
     277                                        installerLogger.log(Level.SEVERE, Common.LOG_EXCEPTION_MALFORMED_URL, e); 
    264278                                        instance = null; 
    265279                                        ScriptActivity.handler.sendEmptyMessage(ScriptActivity.INSTALL_FAILED); 
     
    268282                                        return; 
    269283                                } catch (UnknownHostException e) { 
    270                                         Log.e(Common.LOG_TAG, Common.LOG_EXCEPTION_COULD_NOT_RESOLVE_HOST, e);                                   
     284                                        installerLogger.log(Level.SEVERE, Common.LOG_EXCEPTION_COULD_NOT_RESOLVE_HOST, e); 
    271285                                        instance = null; 
    272286                                        ScriptActivity.handler.sendEmptyMessage(ScriptActivity.INSTALL_FAILED); 
     
    275289                                        return; 
    276290                                } catch (IOException e) { 
    277                                         Log.e(Common.LOG_TAG, Common.LOG_EXCEPTION_DOWNLOAD_ERROR, e);                   
     291                                        installerLogger.log(Level.SEVERE, Common.LOG_EXCEPTION_DOWNLOAD_ERROR, e); 
    278292                                        instance = null; 
    279293                                        ScriptActivity.handler.sendEmptyMessage(ScriptActivity.INSTALL_FAILED); 
     
    282296                                        return;                                  
    283297                                } catch (Exception e) { 
    284                                         Log.e(Common.LOG_TAG, Common.LOG_EXCEPTION_DOWNLOAD_UNKNOWN_ERROR, e);                   
     298                                        installerLogger.log(Level.SEVERE, Common.LOG_EXCEPTION_DOWNLOAD_UNKNOWN_ERROR, e); 
    285299                                        instance = null; 
    286300                                        ScriptActivity.handler.sendEmptyMessage(ScriptActivity.INSTALL_FAILED); 
     
    294308                                        Unzip.unzip(archive.getAbsolutePath(), Environment.getExternalStorageDirectory().getAbsolutePath()+"/sl4a"); 
    295309                                } catch (Exception e) { 
    296                                         Log.e(Common.LOG_TAG, Common.LOG_EXCEPTION_UNZIPPING, e);                                        
     310                                        installerLogger.log(Level.SEVERE, Common.LOG_EXCEPTION_UNZIPPING, e); 
    297311                                        archive.delete();                                
    298312                                        instance = null; 
     
    302316                                        return;                                  
    303317                                } 
    304  
    305                                 Log.i(Common.LOG_TAG, Common.LOG_INFO_UNZIP_COMPLETED); 
    306  
     318                                installerLogger.info(Common.LOG_INFO_UNZIP_COMPLETED); 
    307319                                // Remove archive 
    308320                                archive.delete(); 
     
    357369                                if (optionalArgs != null) 
    358370                                        args.add(optionalArgs); 
    359                                  
    360                                 Log.i(Common.LOG_TAG, Common.LOG_INFO_STARTING_INSTALLER_SCRIPT); 
     371                                installerLogger.info(Common.LOG_INFO_STARTING_INSTALLER_SCRIPT); 
    361372                                // Launch installer 
    362373                                SeattleScriptProcess.launchScript(installer, mInterpreterConfiguration, mProxy, new Runnable() { 
     
    368379                                                instance = null; 
    369380 
    370                                                 Log.i(Common.LOG_TAG, Common.LOG_INFO_TERMINATED_INSTALLER_SCRIPT); 
     381                                                installerLogger.info(Common.LOG_INFO_TERMINATED_INSTALLER_SCRIPT); 
    371382                                                // Check whether the installation was successful or not 
    372383                                                if(checkInstallationSuccess()) 
     
    394405                t.start(); 
    395406        } 
    396  
     407        private void initalizeInstallerLogger()throws IOException { 
     408                // Make sure the InstallerLogger is only initalized once 
     409                if (installerLogger != null) { 
     410                        return; 
     411                } 
     412                installerLogger = Logger.getLogger("SeattleOnAndroid"); 
     413                installerLogger.setLevel(Level.INFO); 
     414                File logDir = new File(Environment.getExternalStorageDirectory() 
     415                    +File.separator 
     416                    +"sl4a" //folder name 
     417                    +File.separator 
     418                    +"seattle" //folder name 
     419                    +File.separator 
     420                    +"seattle_repy"); //folder name 
     421            // Check if directory exists, if not create it      
     422                if (!logDir.isDirectory()) { 
     423                        logDir.mkdirs(); 
     424                        } 
     425                // Check if SDCARD is mounted 
     426            if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){ 
     427                //handle case of no SDCARD present 
     428                return; 
     429            } else { 
     430                // the %g is the number of the current log in the rotation 
     431                String logFile = logDir.getAbsolutePath() + File.separator + "installerDebug_%g.log";   
     432                FileHandler logHandler = new FileHandler(logFile, 1024 * 1024 ,5); 
     433                logHandler.setFormatter(new SimpleFormatter());         
     434                    installerLogger.addHandler(logHandler);     
     435                } 
     436        } 
     437         
    397438        // Create initial notification 
    398439        @Override