karaf-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Christian Schneider <ch...@die-schneider.net>
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:17:43 GMT
Am I missing something? The default is that the delayed start is turned 
off. Have you guys tested the code?

Christian

Am 13.08.2012 13:01, schrieb Achim Nierbeck:
> -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) {
>>>
>>>
>
>


-- 
Christian Schneider
http://www.liquid-reality.de

Open Source Architect
Talend Application Integration Division http://www.talend.com


Mime
View raw message