karaf-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Guillaume Nodet <gno...@gmail.com>
Subject Re: svn commit: r1364640 - in /karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/impl/jline: BundleWatcher.java LocalConsoleManager.java
Date Mon, 23 Jul 2012 14:14:13 GMT
Won't that change forbid to start the console if any bundle is in error
somehow ?
So if a user installs a bundle which can not start, he can't debug anymore ?

On Mon, Jul 23, 2012 at 4:10 PM, <cschneider@apache.org> wrote:

> Author: cschneider
> Date: Mon Jul 23 14:10:45 2012
> New Revision: 1364640
>
> URL: http://svn.apache.org/viewvc?rev=1364640&view=rev
> Log:
> KARAF-1640 Start shell when all bundles are resolved or active
>
> Added:
>
> karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/impl/jline/BundleWatcher.java
> Modified:
>
> karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/impl/jline/LocalConsoleManager.java
>
> Added:
> karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/impl/jline/BundleWatcher.java
> URL:
> http://svn.apache.org/viewvc/karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/impl/jline/BundleWatcher.java?rev=1364640&view=auto
>
> ==============================================================================
> ---
> karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/impl/jline/BundleWatcher.java
> (added)
> +++
> karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/impl/jline/BundleWatcher.java
> Mon Jul 23 14:10:45 2012
> @@ -0,0 +1,77 @@
> +package org.apache.karaf.shell.console.impl.jline;
> +
> +import java.io.IOException;
> +import java.io.PrintStream;
> +
> +import org.fusesource.jansi.Ansi;
> +import org.osgi.framework.Bundle;
> +import org.osgi.framework.BundleContext;
> +
> +public class BundleWatcher implements Runnable {
> +
> +    private final BundleContext context;
> +    private final Runnable consoleStartCallBack;
> +    private final PrintStream out;
> +
> +    public BundleWatcher(BundleContext context, PrintStream out, Runnable
> consoleStartCallBack) {
> +        this.context = context;
> +        this.out = out;
> +        this.consoleStartCallBack = consoleStartCallBack;
> +    }
> +
> +    @Override
> +    public void run() {
> +        boolean startConsole = false;
> +        out.println("Apache Karaf starting up. Press Enter to start the
> shell now ...");
> +        out.println();
> +        while (!startConsole) {
> +            BundleStats stats = getBundleStats();
> +            //out.print(Ansi.ansi().cursorUp(1).toString());
> +            out.println(String.format("Bundles - total: %d, active: %d,
> resolved: %d, installed: %d         ",
> +                    stats.numTotal, stats.numActive, stats.numResolved,
> stats.numInstalled));
> +            try {
> +                Thread.sleep(500);
> +            } catch (InterruptedException e) {
> +            }
> +            try {
> +                if (System.in.available() > 0) {
> +                    char ch = (char) System.in.read();
> +                    if (ch == '\r') {
> +                        startConsole = true;
> +                    }
> +                }
> +            } catch (IOException e) {
> +            }
> +            if (stats.numActive + stats.numResolved == stats.numTotal) {
> +                startConsole = true;
> +            }
> +        }
> +        consoleStartCallBack.run();
> +    }
> +
> +    private BundleStats getBundleStats() {
> +        Bundle[] bundles = context.getBundles();
> +        BundleStats stats = new BundleStats();
> +        stats.numTotal = bundles.length;
> +        for (Bundle bundle : bundles) {
> +            if (bundle.getState() == Bundle.ACTIVE) {
> +                stats.numActive ++;
> +            }
> +            if (bundle.getState() == Bundle.RESOLVED) {
> +                stats.numResolved ++;
> +            }
> +            if (bundle.getState() == Bundle.INSTALLED) {
> +                stats.numInstalled ++;
> +            }
> +        }
> +        return stats;
> +    }
> +
> +    class BundleStats {
> +        int numResolved = 0;
> +        int numActive = 0;
> +        int numInstalled = 0;
> +        int numTotal = 0;
> +    }
> +
> +}
>
> 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=1364640&r1=1364639&r2=1364640&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 Jul 23 14:10:45 2012
> @@ -33,6 +33,7 @@ import org.apache.karaf.shell.console.Co
>  import org.apache.karaf.shell.console.ConsoleFactory;
>  import org.apache.sshd.agent.SshAgent;
>  import org.apache.sshd.agent.local.AgentImpl;
> +import org.fusesource.jansi.Ansi;
>  import org.osgi.framework.BundleContext;
>  import org.osgi.framework.ServiceRegistration;
>  import org.slf4j.Logger;
> @@ -84,7 +85,14 @@ 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);
> -        consoleFactory.startConsoleAs(console, subject);
> +        BundleWatcher watcher = new BundleWatcher(bundleContext,
> System.out, new Runnable() {
> +
> +            @Override
> +            public void run() {
> +                consoleFactory.startConsoleAs(console, subject);
> +            }
> +        });
> +        new Thread(watcher).start();
>      }
>
>      protected String startAgent(String user) {
>
>
>


-- 
------------------------
Guillaume Nodet
------------------------
Blog: http://gnodet.blogspot.com/
------------------------
FuseSource, Integration everywhere
http://fusesource.com

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message