Search in sources :

Example 1 with Service

use of aQute.jpm.lib.Service in project bnd by bndtools.

the class Main method _status.

/**
	 * Status a service.
	 * 
	 * @param options
	 * @throws InterruptedException
	 */
@Description("Status of a service/services")
public void _status(statusOptions options) throws InterruptedException {
    while (true) {
        for (String s : options._arguments()) {
            String runs = "false";
            String status = "no service";
            try {
                Service service = jpm.getService(s);
                if (service != null) {
                    runs = service.isRunning() + "";
                    status = service.status();
                }
            } catch (Exception e) {
                status = e.toString();
                exception(e, "could not fetch status information from service %s, due to %s", s, status);
            }
            out.printf("%-40s %8s %s\r", s, runs, status);
        }
        if (!options.continuous()) {
            out.println();
            return;
        }
        Thread.sleep(1000);
    }
}
Also used : Service(aQute.jpm.lib.Service) InvocationTargetException(java.lang.reflect.InvocationTargetException) UnsupportedEncodingException(java.io.UnsupportedEncodingException) IOException(java.io.IOException) UnknownHostException(java.net.UnknownHostException) Description(aQute.lib.getopt.Description)

Example 2 with Service

use of aQute.jpm.lib.Service in project bnd by bndtools.

the class Main method _update.

@Description("Perform updates for installed commands and services")
public void _update(UpdateOptions opts) throws Exception {
    if (!jpm.hasAccess()) {
        error("No write acces, might require administrator or root privileges (sudo in *nix)");
        return;
    }
    ArrayList<String> refs = new ArrayList<String>();
    for (CommandData data : jpm.getCommands()) {
        refs.add(data.name);
    }
    for (ServiceData data : jpm.getServices()) {
        refs.add(data.name);
    }
    ArrayList<UpdateMemo> notFound = new ArrayList<JustAnotherPackageManager.UpdateMemo>();
    ArrayList<UpdateMemo> upToDate = new ArrayList<JustAnotherPackageManager.UpdateMemo>();
    ArrayList<UpdateMemo> toUpdate = new ArrayList<JustAnotherPackageManager.UpdateMemo>();
    ArrayList<CommandData> datas = new ArrayList<CommandData>();
    if (opts._arguments().size() == 0) {
        datas.addAll(jpm.getCommands());
        datas.addAll(jpm.getServices());
    } else {
        for (String pattern : opts._arguments()) {
            Glob glob = new Glob(pattern);
            for (String name : refs) {
                if (glob.matcher(name).matches()) {
                    CommandData data = jpm.getCommand(name);
                    if (data == null) {
                        Service service = jpm.getService(name);
                        if (service != null) {
                            data = service.getServiceData();
                        }
                    }
                    if (data != null) {
                        datas.add(data);
                    }
                }
            }
        }
    }
    for (CommandData data : datas) {
        jpm.listUpdates(notFound, upToDate, toUpdate, data, opts.staged());
    }
    if (opts.all() || opts._arguments().size() > 0) {
        for (UpdateMemo memo : toUpdate) {
            jpm.update(memo);
        }
        out.format("%d command(s) updated%n", toUpdate.size());
    } else {
        Justif justif = new Justif(100, 20, 50);
        StringBuilder sb = new StringBuilder();
        Formatter f = new Formatter(sb);
        if (upToDate.size() > 0) {
            f.format("Up to date:%n");
            for (UpdateMemo memo : upToDate) {
                if (memo.current instanceof ServiceData) {
                    f.format(" - %s (service) \t0- %s%n", memo.current.name, memo.current.version);
                } else {
                    f.format(" - %s \t0- %s%n", memo.current.name, memo.current.version);
                }
            }
            f.format("%n");
        }
        if (toUpdate.size() > 0) {
            f.format("Update available:%n");
            for (UpdateMemo memo : toUpdate) {
                if (memo.current instanceof ServiceData) {
                    f.format(" - %s (service) \t0- %s \t1-> %s%n", memo.current.name, memo.current.version, memo.best.version);
                } else {
                    f.format(" - %s \t0- %s \t1-> %s%n", memo.current.name, memo.current.version, memo.best.version);
                }
            }
            f.format("%n");
        }
        if (notFound.size() > 0) {
            if (opts.staged()) {
                f.format("Information not found (local install ?):%n");
            } else {
                f.format("Information not found (try including staging versions with the --staged (-s) flag)%n");
            }
            for (UpdateMemo memo : notFound) {
                if (memo.current instanceof ServiceData) {
                    f.format(" - %s (service)%n", memo.current.name);
                } else {
                    f.format(" - %s%n", memo.current.name);
                }
            }
        }
        if (toUpdate.size() > 0) {
            f.format("%nIn order to apply all possible updates, run jpm update again with the --all (or -a) flag.%n");
        }
        f.flush();
        justif.wrap(sb);
        out.println(sb.toString());
        f.close();
    }
}
Also used : JustAnotherPackageManager(aQute.jpm.lib.JustAnotherPackageManager) Justif(aQute.lib.justif.Justif) Formatter(java.util.Formatter) ArrayList(java.util.ArrayList) UpdateMemo(aQute.jpm.lib.JustAnotherPackageManager.UpdateMemo) Service(aQute.jpm.lib.Service) ServiceData(aQute.jpm.lib.ServiceData) Glob(aQute.libg.glob.Glob) CommandData(aQute.jpm.lib.CommandData) Description(aQute.lib.getopt.Description)

Example 3 with Service

use of aQute.jpm.lib.Service in project bnd by bndtools.

the class Main method _service.

@Description("Manage the jpm4j services")
public void _service(ServiceOptions opts) throws Exception {
    if (opts._arguments().isEmpty()) {
        for (ServiceData sd : jpm.getServices()) print(sd);
        return;
    }
    List<String> cmdline = opts._arguments();
    String name = cmdline.remove(0);
    Service s = jpm.getService(name);
    if (opts.remove()) {
        if (!jpm.hasAccess()) {
            error("No write access to remove service %s", name);
            return;
        }
        if (s == null) {
            error("No such service %s to remove", name);
            return;
        }
        s.stop();
        s.remove();
        return;
    }
    if (opts.create() != null) {
        logger.debug("create service");
        if (s != null) {
            error("Service already exists, cannot be created: %s. Update or remove it first", name);
            return;
        }
        ArtifactData target = jpm.getCandidate(opts.create());
        if (target == null) {
            error("Cannot find candidate for coordinates", opts.create());
            return;
        }
        ServiceData data = new ServiceData();
        CommandData cmd = jpm.parseCommandData(target);
        for (Field f : cmd.getClass().getFields()) {
            f.set(data, f.get(cmd));
        }
        logger.debug("service data {}", cmd);
        data.name = name;
        updateServiceData(data, opts);
        logger.debug("update service data");
        String result = jpm.createService(data, false);
        if (result != null)
            error("Create service failed: %s", result);
        return;
    }
    if (s == null) {
        error("No such service: %s", name);
        return;
    }
    ServiceData data = s.getServiceData();
    if (updateServiceData(data, opts) || opts.coordinates() != null || opts.update()) {
        if (!jpm.hasAccess()) {
            error("No write access to update service %s", name);
            return;
        }
        if (opts.coordinates() != null || opts.update()) {
            String coordinates = opts.coordinates();
            if (coordinates == null) {
                error("No coordinate found in old service record");
                return;
            }
            int n = coordinates.indexOf('@');
            if (n > 0)
                coordinates = coordinates.substring(0, n);
            logger.debug("Updating from coordinate: {}", coordinates);
            ArtifactData target = jpm.getCandidate(coordinates);
            if (target == null) {
                error("No candidates found for %s (%s)", coordinates, opts.staged() ? "staged" : "only masters");
                return;
            }
            CommandData cmd = jpm.parseCommandData(target);
            for (Field f : cmd.getClass().getFields()) {
                f.set(data, f.get(cmd));
            }
            data.name = name;
        }
        String result = jpm.createService(data, true);
        if (result != null)
            error("Update service failed: %s", result);
        else if (s.isRunning())
            warning("Changes will not affect the currently running process");
    }
    Data.details(data, out);
}
Also used : Field(java.lang.reflect.Field) Service(aQute.jpm.lib.Service) CommandData(aQute.jpm.lib.CommandData) ServiceData(aQute.jpm.lib.ServiceData) ArtifactData(aQute.jpm.lib.ArtifactData) Description(aQute.lib.getopt.Description)

Example 4 with Service

use of aQute.jpm.lib.Service in project bnd by bndtools.

the class Main method print.

private void print(ServiceData sd) throws Exception {
    Service s = jpm.getService(sd.name);
    out.printf("%-40s (%s) %s%n", sd.name, s.isRunning() ? "runs   " : "stopped", sd.args);
}
Also used : Service(aQute.jpm.lib.Service)

Example 5 with Service

use of aQute.jpm.lib.Service in project bnd by bndtools.

the class Main method _log.

@Description("Show the service log")
public void _log(logOptions opts) throws Exception {
    String s = opts._arguments().isEmpty() ? null : opts._arguments().get(0);
    if (s == null) {
        error("No such service %s", s);
        return;
    }
    Service service = jpm.getService(s);
    if (service == null) {
        error("No such service %s", s);
        return;
    }
    ServiceData data = service.getServiceData();
    File logFile = new File(data.log);
    if (!logFile.isFile()) {
        error("Log file %s for service %s is not a file", logFile, s);
        return;
    }
    if (opts.clear()) {
        IO.delete(logFile);
        logFile.createNewFile();
    }
    try (RandomAccessFile raf = new RandomAccessFile(logFile, "r")) {
        long start = Math.max(logFile.length() - 2000, 0);
        while (true) {
            long l = raf.length();
            byte[] buffer = new byte[(int) (l - start)];
            raf.seek(start);
            raf.read(buffer);
            out.write(buffer);
            start = l;
            if (!service.isRunning() || !opts.tail())
                return;
            if (l == raf.length())
                Thread.sleep(100);
        }
    }
}
Also used : RandomAccessFile(java.io.RandomAccessFile) Service(aQute.jpm.lib.Service) RandomAccessFile(java.io.RandomAccessFile) File(java.io.File) ServiceData(aQute.jpm.lib.ServiceData) Description(aQute.lib.getopt.Description)

Aggregations

Service (aQute.jpm.lib.Service)8 Description (aQute.lib.getopt.Description)7 ServiceData (aQute.jpm.lib.ServiceData)5 CommandData (aQute.jpm.lib.CommandData)3 IOException (java.io.IOException)3 UnsupportedEncodingException (java.io.UnsupportedEncodingException)3 InvocationTargetException (java.lang.reflect.InvocationTargetException)3 UnknownHostException (java.net.UnknownHostException)3 Glob (aQute.libg.glob.Glob)2 ArrayList (java.util.ArrayList)2 ArtifactData (aQute.jpm.lib.ArtifactData)1 JustAnotherPackageManager (aQute.jpm.lib.JustAnotherPackageManager)1 UpdateMemo (aQute.jpm.lib.JustAnotherPackageManager.UpdateMemo)1 Justif (aQute.lib.justif.Justif)1 File (java.io.File)1 RandomAccessFile (java.io.RandomAccessFile)1 Field (java.lang.reflect.Field)1 Formatter (java.util.Formatter)1