karaf-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Achim Nierbeck <bcanh...@googlemail.com>
Subject Re: svn commit: r1372333 - in /karaf/trunk: main/src/main/java/org/apache/karaf/main/ shell/console/src/main/java/org/apache/karaf/shell/console/impl/jline/
Date Mon, 13 Aug 2012 11:01:33 GMT
-1, I thought it was clearly communicated that this shouldn't be the
default behavior.


2012/8/13 Jamie G. <jamie.goodyear@gmail.com>:
> -1 This behaviour was discussed on the dev list to not be made default.
>
> On Mon, Aug 13, 2012 at 6:40 AM,  <cschneider@apache.org> wrote:
>> Author: cschneider
>> Date: Mon Aug 13 09:10:22 2012
>> New Revision: 1372333
>>
>> URL: http://svn.apache.org/viewvc?rev=1372333&view=rev
>> Log:
>> KARAF-1640: Adding option to start console delayed. Showing some stats when console
comes up
>>
>> Modified:
>>     karaf/trunk/main/src/main/java/org/apache/karaf/main/ConfigProperties.java
>>     karaf/trunk/main/src/main/java/org/apache/karaf/main/Main.java
>>     karaf/trunk/main/src/main/java/org/apache/karaf/main/StartupListener.java
>>     karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/impl/jline/DelayedStarted.java
>>     karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/impl/jline/LocalConsoleManager.java
>>
>> Modified: karaf/trunk/main/src/main/java/org/apache/karaf/main/ConfigProperties.java
>> URL: http://svn.apache.org/viewvc/karaf/trunk/main/src/main/java/org/apache/karaf/main/ConfigProperties.java?rev=1372333&r1=1372332&r2=1372333&view=diff
>> ==============================================================================
>> --- karaf/trunk/main/src/main/java/org/apache/karaf/main/ConfigProperties.java (original)
>> +++ karaf/trunk/main/src/main/java/org/apache/karaf/main/ConfigProperties.java Mon
Aug 13 09:10:22 2012
>> @@ -113,6 +113,10 @@ public class ConfigProperties {
>>      private static final String KARAF_SHUTDOWN_COMMAND = "karaf.shutdown.command";
>>
>>      private static final String KARAF_SHUTDOWN_PID_FILE = "karaf.shutdown.pid.file";
>> +
>> +    private static final String KARAF_STARTUP_MESSAGE = "karaf.startup.message";
>> +
>> +    private static final String KARAF_DELAY_CONSOLE = "karaf.delay.console";
>>
>>      private static final String DEFAULT_SHUTDOWN_COMMAND = "SHUTDOWN";
>>
>> @@ -120,7 +124,7 @@ public class ConfigProperties {
>>
>>      private static final String SECURITY_PROVIDERS = "org.apache.karaf.security.providers";
>>
>> -    private static final String KARAF_STARTUP_MESSAGE = "karaf.startup.message";
>> +
>>
>>      /**
>>       * If a lock should be used before starting the runtime
>> @@ -154,6 +158,7 @@ public class ConfigProperties {
>>      String optionals;
>>      File etcFolder;
>>      String startupMessage;
>> +    boolean delayConsoleStart;
>>
>>      public ConfigProperties() throws Exception {
>>          this.karafHome = Utils.getKarafHome(ConfigProperties.class, PROP_KARAF_HOME,
ENV_KARAF_HOME);
>> @@ -206,6 +211,8 @@ public class ConfigProperties {
>>          this.portFile = props.getProperty(KARAF_SHUTDOWN_PORT_FILE);
>>          this.shutdownCommand = props.getProperty(KARAF_SHUTDOWN_COMMAND, DEFAULT_SHUTDOWN_COMMAND);
>>          this.startupMessage = props.getProperty(KARAF_STARTUP_MESSAGE, "Apache Karaf
starting up. Press Enter to open the shell now...");
>> +        this.delayConsoleStart = Boolean.parseBoolean(props.getProperty(KARAF_DELAY_CONSOLE,
"true"));
>> +        System.setProperty(KARAF_DELAY_CONSOLE, new Boolean(this.delayConsoleStart).toString());
>>      }
>>
>>      private String getProperyOrFail(String propertyName) {
>>
>> Modified: karaf/trunk/main/src/main/java/org/apache/karaf/main/Main.java
>> URL: http://svn.apache.org/viewvc/karaf/trunk/main/src/main/java/org/apache/karaf/main/Main.java?rev=1372333&r1=1372332&r2=1372333&view=diff
>> ==============================================================================
>> --- karaf/trunk/main/src/main/java/org/apache/karaf/main/Main.java (original)
>> +++ karaf/trunk/main/src/main/java/org/apache/karaf/main/Main.java Mon Aug 13 09:10:22
2012
>> @@ -210,7 +210,9 @@ public class Main {
>>
>>      public void launch() throws Exception {
>>          config = new ConfigProperties();
>> -        System.out.println(config.startupMessage);
>> +        if (config.delayConsoleStart) {
>> +            System.out.println(config.startupMessage);
>> +        }
>>          BootstrapLogManager.setProperties(config.props);
>>          Lock lock = createLock();
>>          lockManager = new LockManager(lock, new KarafLockCallback(), config.lockDelay);
>> @@ -252,7 +254,9 @@ public class Main {
>>
>>          setStartLevel(config.lockStartLevel);
>>          // Progress bar
>> -        new StartupListener(framework.getBundleContext());
>> +        if (config.delayConsoleStart) {
>> +            new StartupListener(LOG, framework.getBundleContext());
>> +        }
>>          lockManager.startLockMonitor();
>>      }
>>
>>
>> Modified: karaf/trunk/main/src/main/java/org/apache/karaf/main/StartupListener.java
>> URL: http://svn.apache.org/viewvc/karaf/trunk/main/src/main/java/org/apache/karaf/main/StartupListener.java?rev=1372333&r1=1372332&r2=1372333&view=diff
>> ==============================================================================
>> --- karaf/trunk/main/src/main/java/org/apache/karaf/main/StartupListener.java (original)
>> +++ karaf/trunk/main/src/main/java/org/apache/karaf/main/StartupListener.java Mon
Aug 13 09:10:22 2012
>> @@ -1,5 +1,7 @@
>>  package org.apache.karaf.main;
>>
>> +import java.util.logging.Logger;
>> +
>>  import org.osgi.framework.Bundle;
>>  import org.osgi.framework.BundleContext;
>>  import org.osgi.framework.BundleEvent;
>> @@ -10,20 +12,29 @@ import org.osgi.framework.SynchronousBun
>>  import org.osgi.framework.startlevel.FrameworkStartLevel;
>>
>>  /**
>> - * Watches the startup of the framework and displays a progress bar of the number
of bundles started / total.
>> - * The listener will remove itself after the desired start level is reached or the
system property karaf.console.started is set to
>> - * true.
>> + * Watches the startup of the framework and displays a progress bar of the
>> + * number of bundles started / total. The listener will remove itself after the
>> + * desired start level is reached or the system property karaf.console.started
>> + * is set to true.
>>   */
>>  class StartupListener implements FrameworkListener, SynchronousBundleListener {
>> +    private Logger log;
>>      private static final String SYSTEM_PROP_KARAF_CONSOLE_STARTED = "karaf.console.started";
>> +    private long startTime;
>> +    private int currentPercentage;
>> +
>> +    private final BundleContext context;
>>
>> -       private final BundleContext context;
>> -    StartupListener(BundleContext context) {
>> +    StartupListener(Logger log, BundleContext context) {
>> +        this.log = log;
>>          this.context = context;
>> +        this.currentPercentage = 0;
>> +        this.startTime = System.currentTimeMillis();
>>          context.addBundleListener(this);
>>          context.addFrameworkListener(this);
>>      }
>> -    public synchronized void bundleChanged(BundleEvent bundleEvent) {
>> +
>> +    public BundleStats getBundleStats() {
>>          Bundle[] bundles = context.getBundles();
>>          int numActive = 0;
>>          int numBundles = bundles.length;
>> @@ -31,42 +42,76 @@ class StartupListener implements Framewo
>>              if (bundle.getHeaders().get(Constants.FRAGMENT_HOST) != null) {
>>                  numBundles--;
>>              } else if (bundle.getState() == Bundle.ACTIVE) {
>> -                numActive ++;
>> +                numActive++;
>>              }
>>          }
>> -        boolean started = Boolean.parseBoolean(System.getProperty(SYSTEM_PROP_KARAF_CONSOLE_STARTED,
"false"));
>> -        if (!started) {
>> -            showProgressBar(numActive, numBundles);
>> +        BundleStats stats = new BundleStats();
>> +        stats.numActive = numActive;
>> +        stats.numTotal = numBundles;
>> +        return stats;
>> +    }
>> +
>> +    public synchronized void bundleChanged(BundleEvent bundleEvent) {
>> +        BundleStats stats = getBundleStats();
>> +        if (!isConsoleStarted()) {
>> +            showProgressBar(stats.numActive, stats.numTotal);
>>          }
>>      }
>> +
>> +    private boolean isConsoleStarted() {
>> +        return Boolean.parseBoolean(System.getProperty(SYSTEM_PROP_KARAF_CONSOLE_STARTED,
"false"));
>> +    }
>> +
>>      public synchronized void frameworkEvent(FrameworkEvent frameworkEvent) {
>>          if (frameworkEvent.getType() == FrameworkEvent.STARTLEVEL_CHANGED) {
>> -            int defStartLevel = Integer.parseInt(System.getProperty(Constants.FRAMEWORK_BEGINNING_STARTLEVEL));
>> -            int startLevel = context.getBundle(0).adapt(FrameworkStartLevel.class).getStartLevel();
>> +            int defStartLevel = Integer.parseInt(System
>> +                    .getProperty(Constants.FRAMEWORK_BEGINNING_STARTLEVEL));
>> +            int startLevel = context.getBundle(0)
>> +                    .adapt(FrameworkStartLevel.class).getStartLevel();
>>              if (startLevel >= defStartLevel) {
>>                  context.removeBundleListener(this);
>>                  context.removeFrameworkListener(this);
>> +                long startTimeSeconds = (System.currentTimeMillis() - this.startTime)
/ 1000;
>> +                BundleStats stats = getBundleStats();
>> +                String message = "Karaf started in " + startTimeSeconds + "s. Bundle
stats: " + stats.numActive
>> +                        + " active , " + stats.numTotal + " total";
>> +                log.info(message);
>> +                if (!isConsoleStarted()) {
>> +                    showProgressBar(100, 100);
>> +                    System.out.println(message);
>> +                }
>> +
>>              }
>>          }
>>      }
>> +
>>      public void showProgressBar(int done, int total) {
>>          int percent = (done * 100) / total;
>> -        StringBuilder sb = new StringBuilder();
>> -        sb.append(String.format("\r%3d%% [", percent));
>> -        for (int i = 0; i < 100; i++) {
>> -            if (i < percent) {
>> -                sb.append('=');
>> -            } else if (i == percent) {
>> -                sb.append('>');
>> -            } else {
>> -                sb.append(' ');
>> +        // Make sure we do not go backwards with percentage
>> +        if (percent > currentPercentage) {
>> +            currentPercentage = percent;
>> +            StringBuilder sb = new StringBuilder();
>> +            sb.append(String.format("\r%3d%% [", percent));
>> +            for (int i = 0; i < 100; i++) {
>> +                if (i < percent) {
>> +                    sb.append('=');
>> +                } else if (i == percent) {
>> +                    sb.append('>');
>> +                } else {
>> +                    sb.append(' ');
>> +                }
>>              }
>> +            sb.append(']');
>> +            System.out.print(sb.toString());
>> +            System.out.flush();
>>          }
>> -        sb.append(']');
>> -        System.out.print(sb.toString());
>> -        System.out.flush();
>>          if (done == total) {
>>              System.out.println();
>>          }
>>      }
>> +
>> +    class BundleStats {
>> +        int numActive;
>> +        int numTotal;
>> +    }
>>  }
>> \ No newline at end of file
>>
>> Modified: karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/impl/jline/DelayedStarted.java
>> URL: http://svn.apache.org/viewvc/karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/impl/jline/DelayedStarted.java?rev=1372333&r1=1372332&r2=1372333&view=diff
>> ==============================================================================
>> --- karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/impl/jline/DelayedStarted.java
(original)
>> +++ karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/impl/jline/DelayedStarted.java
Mon Aug 13 09:10:22 2012
>> @@ -55,8 +55,6 @@ class DelayedStarted extends Thread impl
>>
>>          // Signal to the main module that it can stop displaying the startup progress
>>          System.setProperty(SYSTEM_PROP_KARAF_CONSOLE_STARTED, "true");
>> -
>> -        System.out.println();
>>          this.bundleContext.removeFrameworkListener(this);
>>          console.run();
>>      }
>>
>> Modified: karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/impl/jline/LocalConsoleManager.java
>> URL: http://svn.apache.org/viewvc/karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/impl/jline/LocalConsoleManager.java?rev=1372333&r1=1372332&r2=1372333&view=diff
>> ==============================================================================
>> --- karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/impl/jline/LocalConsoleManager.java
(original)
>> +++ karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/impl/jline/LocalConsoleManager.java
Mon Aug 13 09:10:22 2012
>> @@ -88,14 +88,20 @@ public class LocalConsoleManager {
>>          String agentId = startAgent("karaf");
>>          this.console = consoleFactory.createLocal(this.commandProcessor, terminal,
callback);
>>          this.console.getSession().put(SshAgent.SSH_AUTHSOCKET_ENV_NAME, agentId);
>> -        DelayedStarted watcher = new DelayedStarted(new Runnable() {
>> -
>> -            @Override
>> +
>> +        Runnable consoleStarter = new Runnable() {
>>              public void run() {
>>                  consoleFactory.startConsoleAs(console, subject);
>>              }
>> -        }, bundleContext, System.in);
>> -        new Thread(watcher).start();
>> +        };
>> +
>> +        boolean delayconsole = Boolean.parseBoolean(System.getProperty("karaf.delay.console"));
>> +        if (delayconsole) {
>> +            DelayedStarted watcher = new DelayedStarted(consoleStarter, bundleContext,
System.in);
>> +            new Thread(watcher).start();
>> +        } else {
>> +            consoleStarter.run();
>> +        }
>>      }
>>
>>      protected String startAgent(String user) {
>>
>>



-- 

Apache Karaf <http://karaf.apache.org/> Committer & PMC
OPS4J Pax Web <http://wiki.ops4j.org/display/paxweb/Pax+Web/>
Committer & Project Lead
OPS4J Pax for Vaadin
<http://team.ops4j.org/wiki/display/PAXVAADIN/Home> Commiter & Project
Lead
blog <http://notizblog.nierbeck.de/>

Mime
View raw message