Search in sources :

Example 1 with PlatformManager

use of org.fakekoji.jobmanager.manager.PlatformManager in project jenkins-scm-koji-plugin by judovana.

the class RedeployApi method addEndpoints.

@Override
public void addEndpoints() {
    get(LATEST, context -> {
        String countValue = context.queryParam(LATEST_count);
        String commentsValue = context.queryParam(PROCESSED_cmments);
        String jobsNamesValue = context.queryParam(PROCESSED_job);
        List<String> jobs = new RedeployApiWorkerBase.RedeployApiStringListing(context).process(jdkProjectManager, jdkTestProjectManager, parser);
        Set<String> nvrs = new HashSet<>(jobs.size());
        for (String job : jobs) {
            File processed = new File(new File(settings.getJenkinsJobsRoot(), job), Constants.PROCESSED_BUILDS_HISTORY);
            List<String> raw = new ArrayList<>(0);
            if (processed.exists()) {
                raw = Utils.readFileToLines(processed, null);
            }
            if (raw.size() > 0) {
                nvrs.add(raw.get(raw.size() - 1).replaceAll("\\s*#.*", ""));
            }
        }
        context.status(OToolService.OK).result(String.join("\n", nvrs) + "\n");
    });
    get(PROCESSED, context -> {
        String job = context.queryParam(PROCESSED_job);
        if (job != null) {
            try {
                File processed = new File(new File(settings.getJenkinsJobsRoot(), job), Constants.PROCESSED_BUILDS_HISTORY);
                List<String> raw = Utils.readFileToLines(processed, null);
                if (context.queryParam(PROCESSED_cmments) == null) {
                    for (int i = 0; i < raw.size(); i++) {
                        raw.set(i, raw.get(i).replaceAll("\\s*#.*", ""));
                    }
                }
                if (context.queryParam(PROCESSED_uniq) == null) {
                    raw = new ArrayList<>(new TreeSet<>(raw));
                }
                if (context.queryParam(PROCESSED_sort) != null) {
                    Collections.sort(raw);
                // Collections.reverse(raw);no!
                }
                context.status(OToolService.OK).result(String.join("\n", raw) + "\n");
            } catch (IOException e) {
                LOGGER.log(Level.WARNING, e.getMessage(), e);
                context.status(400).result(e.getMessage());
            } catch (Exception e) {
                LOGGER.log(Level.WARNING, e.getMessage(), e);
                context.status(500).result(e.getMessage());
            }
        } else {
            context.status(OToolService.BAD).result("job is mandatory\n");
        }
    });
    get(REDEPLOY_CHECKOUT, context -> {
        try {
            String job = context.queryParam(RERUN_JOB);
            String nvr = context.queryParam(REDEPLOY_NVR);
            String force = context.queryParam("force");
            StringBuilder sb = forceCheckoutOnJob(job, nvr, "true".equals(force));
            context.status(OToolService.OK).result(sb.toString());
        } catch (Exception e) {
            LOGGER.log(Level.WARNING, e.getMessage(), e);
            context.status(500).result(e.getClass().getName() + ": " + e.getMessage());
        }
    });
    get(RELOAD, context -> {
        try {
            String job = context.queryParam(RERUN_JOB);
            if (job == null) {
                throw new RuntimeException(RERUN_JOB + " is required parameter for " + RELOAD);
            }
            JenkinsCliWrapper.ClientResponse cr = JenkinsCliWrapper.getCli().reloadJob(job);
            try {
                cr.throwIfNecessary();
            } catch (Exception ex) {
                LOGGER.log(Level.WARNING, ex.getMessage(), cr.toString());
                context.status(500).result(ex.getMessage() + ": " + cr.toString());
            }
            context.status(OToolService.OK).result(cr.toString());
        } catch (Exception e) {
            LOGGER.log(Level.WARNING, e.getMessage(), e);
            context.status(500).result(e.getClass().getName() + ": " + e.getMessage());
        }
    });
    get(REPROVIDER, context -> {
        try {
            String OTOOL_PLATFORM_PROVIDER = JenkinsJobTemplateBuilder.OTOOL_BASH_VAR_PREFIX + JenkinsJobTemplateBuilder.PLATFORM_PROVIDER_VAR;
            List<String> jobs = new RedeployApiWorkerBase.RedeployApiStringListing(context).process(jdkProjectManager, jdkTestProjectManager, parser);
            String doAndHow = context.queryParam(REDEPLOY_DO);
            String nwProvider = context.queryParam(REPROVIDERARG);
            String skipSlaves = context.queryParam(SKIP_SLAVES);
            if (nwProvider == null || nwProvider.trim().isEmpty()) {
                throw new RuntimeException(REPROVIDERARG + " is mandatory\n");
            }
            Set<String> providers = GetterAPI.getProviders(settings.getConfigManager().platformManager);
            if (!providers.contains(nwProvider)) {
                throw new RuntimeException(nwProvider + ": is not valid provider. Use one of: " + String.join(",", providers) + "\n");
            }
            /*
                 * To be able to compute nodes, we need to load nearly everything
                 */
            List<Job> allJobs = new ArrayList<>();
            List<Project> allProjects = new ArrayList<>();
            allProjects.addAll(settings.getConfigManager().jdkProjectManager.readAll());
            allProjects.addAll(settings.getConfigManager().jdkTestProjectManager.readAll());
            for (Project project : allProjects) {
                allJobs.addAll(parser.parse(project));
            }
            StringBuilder sb = new StringBuilder();
            int totalFiles = 0;
            int totalReplacements = 0;
            int invalidNodes = 0;
            final String noneNode = "NoneNodeFound";
            for (String job : jobs) {
                Job foundJob = findJob(allJobs, job);
                sb.append(job).append("\n");
                File jobDir = new File(settings.getJenkinsJobsRoot(), job);
                File config = new File(jobDir, "config.xml");
                List<String> lines = Utils.readFileToLines(config, null);
                for (int i = 0; i < lines.size(); i++) {
                    String mainline = lines.get(i);
                    String[] xmlLines = mainline.split(JenkinsJobTemplateBuilder.XML_NEW_LINE);
                    for (String line : xmlLines) {
                        if (!"true".equals(skipSlaves)) {
                            if (line.contains("<assignedNode>")) {
                                List<OToolVariable> fakeList = new ArrayList<>();
                                JenkinsJobTemplateBuilder.VmWithNodes mWithNodes = null;
                                try {
                                    if (foundJob instanceof TestJob) {
                                        fakeList = Arrays.asList(new OToolVariable("OS_NAME", ((TestJob) foundJob).getPlatform().getOs()));
                                        mWithNodes = JenkinsJobTemplateBuilder.getVmWithNodes(((TestJob) foundJob).getTask(), ((TestJob) foundJob).getPlatform(), new ArrayList<OToolVariable>(), nwProvider);
                                    } else if (foundJob instanceof BuildJob) {
                                        fakeList = Arrays.asList(new OToolVariable("OS_NAME", ((TestJob) foundJob).getPlatform().getOs()));
                                        mWithNodes = JenkinsJobTemplateBuilder.getVmWithNodes(((BuildJob) foundJob).getTask(), ((BuildJob) foundJob).getPlatform(), new ArrayList<OToolVariable>(), nwProvider);
                                    }
                                } catch (Exception ex) {
                                    mWithNodes = new JenkinsJobTemplateBuilder.VmWithNodes("NoNodesForThisCombination", Arrays.asList(noneNode));
                                    invalidNodes++;
                                }
                                String nwVal = "<assignedNode>" + String.join("||", mWithNodes.nodes) + "</assignedNode>";
                                List<String> nvWalToExpand = Arrays.asList(nwVal);
                                String nwValExpanded = JenkinsJobTemplateBuilder.expand(nvWalToExpand, fakeList).get(0);
                                mainline = mainline.replace(line.trim(), nwValExpanded);
                                sb.append(" - " + line.trim() + " -> " + nwValExpanded + "\n");
                                totalReplacements++;
                            }
                        }
                        if (line.contains(OTOOL_PLATFORM_PROVIDER + "=")) {
                            String nwVal = "export " + OTOOL_PLATFORM_PROVIDER + "=" + nwProvider + " # hacked at " + new Date().toString();
                            mainline = mainline.replace(line.trim(), nwVal);
                            sb.append(" - " + line.trim() + " -> " + nwVal + "\n");
                            totalReplacements++;
                        }
                    }
                    lines.set(i, mainline);
                }
                if ("true".equals(doAndHow)) {
                    Utils.writeToFile(config, String.join("\n", lines));
                    sb.append(" - written\n");
                    try {
                        JenkinsCliWrapper.getCli().reloadJob(job).throwIfNecessary();
                        sb.append(" - reloaded\n");
                    } catch (Exception ex) {
                        sb.append(" - reload failed, reload on your own\n");
                    }
                }
                totalFiles++;
            }
            sb.append("true".equals(doAndHow) ? "Written " : "Would be written: " + totalFiles + " of " + jobs.size() + "\n");
            if ("true".equals(skipSlaves)) {
                sb.append("Replaced " + totalReplacements + " of " + jobs.size() + "\n");
            } else {
                sb.append("Replaced " + totalReplacements + " of " + (jobs.size() * 2) + "\n");
            }
            sb.append("Invlaid nodes: " + invalidNodes + "; search for " + noneNode + "\n");
            context.status(OToolService.OK).result(sb.toString() + "\n");
        } catch (Exception e) {
            LOGGER.log(Level.WARNING, e.getMessage(), e);
            context.status(500).result(e.getClass().getName() + ": " + e.getMessage());
        }
    });
    get(RESLAVES, context -> {
        try {
            List<String> jobs = new RedeployApiWorkerBase.RedeployApiStringListing(context).process(jdkProjectManager, jdkTestProjectManager, parser);
            String doAndHow = context.queryParam(REDEPLOY_DO);
            String nwSlaves = context.queryParam(RESLAVES);
            if (nwSlaves == null || nwSlaves.trim().isEmpty()) {
                throw new RuntimeException(RESLAVES + " is mandatory\n");
            }
            StringBuilder sb = new StringBuilder();
            int totalCountReplacements = 0;
            int totalCountFiles = 0;
            for (String job : jobs) {
                sb.append(job).append("\n");
                File jobDir = new File(settings.getJenkinsJobsRoot(), job);
                File config = new File(jobDir, "config.xml");
                List<String> lines = Utils.readFileToLines(config, null);
                for (int i = 0; i < lines.size(); i++) {
                    String line = lines.get(i);
                    if (line.contains("<assignedNode>")) {
                        String orig = line.trim();
                        String nw = "<assignedNode>" + nwSlaves + "</assignedNode>";
                        sb.append(" - " + orig + " -> " + nw + "\n");
                        lines.set(i, nw);
                        totalCountReplacements++;
                    }
                }
                if ("true".equals(doAndHow)) {
                    Utils.writeToFile(config, String.join("\n", lines));
                    sb.append(" - written\n");
                    try {
                        JenkinsCliWrapper.getCli().reloadJob(job).throwIfNecessary();
                        sb.append(" - reloaded\n");
                    } catch (Exception ex) {
                        sb.append(" - reload failed, reload on your own\n");
                    }
                }
                totalCountFiles++;
            }
            sb.append("true".equals(doAndHow) ? "Written " : "Would be written: " + totalCountFiles + " of " + jobs.size() + "\n");
            sb.append("Replaced " + totalCountReplacements + " of " + jobs.size() + "\n");
            context.status(OToolService.OK).result(sb.toString() + "\n");
        } catch (Exception e) {
            LOGGER.log(Level.WARNING, e.getMessage(), e);
            context.status(500).result(e.getClass().getName() + ": " + e.getMessage());
        }
    });
    get(REDEPLOY_CHECKOUT_ALL, context -> {
        try {
            List<String> jobs = new RedeployApiWorkerBase.RedeployApiStringListing(context).process(jdkProjectManager, jdkTestProjectManager, parser);
            String doAndHow = context.queryParam(REDEPLOY_DO);
            String nvr = context.queryParam(REDEPLOY_NVR);
            String force = context.queryParam("force");
            if ("true".equals(doAndHow)) {
                List<String> results = new ArrayList<>(jobs.size());
                for (String job : jobs) {
                    try {
                        forceCheckoutOnJob(job, nvr, "true".equals(force));
                        results.add("ok - checking out -  " + job);
                    } catch (Exception ex) {
                        LOGGER.log(Level.WARNING, ex.getMessage(), ex);
                        results.add("failed " + job + ex.toString());
                    }
                }
                context.status(OToolService.OK).result(String.join("\n", results) + "\n");
            } else {
                context.status(OToolService.OK).result(String.join("\n", jobs) + "\n");
            }
        } catch (Exception e) {
            LOGGER.log(Level.WARNING, e.getMessage(), e);
            context.status(500).result(e.getClass().getName() + ": " + e.getMessage());
        }
    });
    get(REDEPLOY_NOW, context -> {
        try {
            List<String> jobs = new RedeployApiWorkerBase.RedeployApiStringListing(context).process(jdkProjectManager, jdkTestProjectManager, parser);
            String doAndHow = context.queryParam(REDEPLOY_DO);
            if ("true".equals(doAndHow)) {
                List<String> results = new ArrayList<>(jobs.size());
                for (String job : jobs) {
                    try {
                        JenkinsCliWrapper.ClientResponse cr = JenkinsCliWrapper.getCli().scheduleBuild(job);
                        cr.throwIfNecessary();
                        results.add("ok - scheduling -  " + job);
                    } catch (Exception ex) {
                        LOGGER.log(Level.WARNING, ex.getMessage(), ex);
                        results.add("failed " + job + ex.toString());
                    }
                }
                context.status(OToolService.OK).result(String.join("\n", results) + "\n");
            } else {
                context.status(OToolService.OK).result(String.join("\n", jobs) + "\n");
            }
        } catch (Exception e) {
            LOGGER.log(Level.WARNING, e.getMessage(), e);
            context.status(500).result(e.getClass().getName() + ": " + e.getMessage());
        }
    });
    get(REDEPLOY_RUN, context -> {
        // hmm enable filtering?
        try {
            String job = context.queryParam(RERUN_JOB);
            if (job == null) {
                throw new RuntimeException(RERUN_JOB + " must be an existing job id, was " + job);
            }
            String id = context.queryParam(RERUN_BUILD);
            if (id == null) {
                throw new RuntimeException(RERUN_BUILD + " must be an existing build number, was " + id);
            }
            File currentt = new File(settings.getJenkinsJobsRoot().getAbsolutePath() + File.separator + job + File.separator + "build.xml");
            if (!currentt.getParentFile().exists()) {
                throw new RuntimeException(currentt.getParentFile() + " do not exists. bad job?");
            }
            File archived = new File(settings.getJenkinsJobsRoot().getAbsolutePath() + File.separator + job + File.separator + "builds" + File.separator + id + File.separator + "changelog.xml");
            if (!archived.exists()) {
                throw new RuntimeException(archived.getAbsolutePath() + " do not exists. failed at checkout? Bad id? bad job?");
            }
            StringBuilder sb = new StringBuilder();
            if (!currentt.exists()) {
                sb.append(currentt.getAbsolutePath() + " do not exists. bad job? Broken checkou?t No koji-scm job?\n");
            }
            Files.copy(archived.toPath(), currentt.toPath(), StandardCopyOption.REPLACE_EXISTING);
            sb.append("Copied " + archived.getAbsolutePath() + " as " + currentt.getAbsolutePath() + "\n");
            JenkinsCliWrapper.ClientResponse cr = JenkinsCliWrapper.getCli().scheduleBuild(job);
            cr.throwIfNecessary();
            sb.append("scheduled " + job + "\n");
            context.status(OToolService.OK).result(sb.toString());
        } catch (Exception e) {
            LOGGER.log(Level.WARNING, e.getMessage(), e);
            context.status(500).result(e.getClass().getName() + ": " + e.getMessage());
        }
    });
    get(REDEPLOY_BUILD, context -> {
        WarHorse wh = new WarHorse(context);
        wh.workload(new NvrDirOperatorFactory(), BuildJob.class);
    });
    get(REDEPLOY_TEST, context -> {
        WarHorse wh = new WarHorse(context);
        wh.workload(new FakeNvrDirOperatorFactory(), TestJob.class);
    });
    get(ARCHES_EXPECTED, context -> {
        try {
            String nvr = context.queryParam(REDEPLOY_NVR);
            if (nvr != null) {
                OToolParser.LegacyNVR nvrParsed = new OToolParser.LegacyNVR(nvr);
                String set = context.queryParam(ARCHES_EXPECTED_SET);
                if (set == null) {
                    File f = new File(settings.getDbFileRoot().toPath().toFile().getAbsolutePath() + "/" + nvrParsed.getFullPath() + "/data");
                    while (f.getParentFile() != null) {
                        File ae = new File(f, FakeBuild.archesConfigFileName);
                        if (ae.exists()) {
                            break;
                        }
                        f = f.getParentFile();
                    }
                    if (f.getParentFile() == null) {
                        context.status(OToolService.OK).result("No " + FakeBuild.archesConfigFileName + " for " + nvr + " arches expected are old api only!\n");
                    } else {
                        File ae = new File(f, FakeBuild.archesConfigFileName);
                        // by luck, same comments schema is used in processed.txt and arches.expected
                        List<String> archesWithoutCommenrs = Utils.readProcessedTxt(ae);
                        if (ae.length() < 4 || archesWithoutCommenrs.isEmpty()) {
                            context.status(OToolService.BAD).result(ae.getAbsolutePath() + " is emmpty or very small. That will break a lot of stuff!\n");
                        } else {
                            context.status(OToolService.OK).result(String.join(" ", archesWithoutCommenrs.get(0)) + " (" + ae.getAbsolutePath() + ")\n");
                        }
                    }
                } else {
                    File mainPath = new File(settings.getDbFileRoot().toPath().toFile().getAbsolutePath() + "/" + nvrParsed.getFullPath());
                    if (!mainPath.exists()) {
                        context.status(OToolService.BAD).result(mainPath.getAbsolutePath() + " Do not exists. Invlid NVRos?\n");
                    } else {
                        File data = new File(mainPath, "data");
                        File mainFile = new File(data, FakeBuild.archesConfigFileName);
                        if (mainFile.exists()) {
                            List<String> archesWithoutCommenrs = Utils.readProcessedTxt(mainFile);
                            FakeBuild.generateDefaultArchesFile(mainFile, set);
                            if (archesWithoutCommenrs.isEmpty()) {
                                context.status(OToolService.OK).result("overwritten " + mainFile + " (was: empty, is`" + set + "`)\n");
                            } else {
                                context.status(OToolService.OK).result("overwritten " + mainFile + " (was: `" + archesWithoutCommenrs.get(0) + "`, is`" + set + "`)\n");
                            }
                        } else {
                            data.mkdirs();
                            FakeBuild.generateDefaultArchesFile(mainFile, set);
                            context.status(OToolService.OK).result("written " + mainFile + "  (is`" + set + "`)\n");
                        }
                    }
                }
            } else {
                ArchesExpectedWorker aw = new ArchesExpectedWorker();
                aw.prepare();
                List<Platform> platforms = platformManager.readAll();
                Set<String> kojiArches = new HashSet<>();
                for (Platform p : platforms) {
                    kojiArches.add(p.getKojiArch().orElse(p.getArchitecture()));
                }
                // filtr affected jobs + places in builds (s neb arches>
                context.status(OToolService.OK).result(aw.dirsWithArches.entrySet().stream().map((Function<Map.Entry<String, String[]>, String>) e -> String.join(" ", e.getValue()) + " (" + e.getKey() + ")").sorted().collect(Collectors.joining("\n")) + "\n" + "All used: " + aw.usedArches.stream().collect(Collectors.joining(" ")) + "\n" + "All possible: " + kojiArches.stream().collect(Collectors.joining(" ")) + "\n");
            // better to filter them up rather then here
            }
        } catch (StorageException | IOException e) {
            LOGGER.log(Level.WARNING, e.getMessage(), e);
            context.status(400).result(e.getMessage());
        } catch (Exception e) {
            LOGGER.log(Level.WARNING, e.getMessage(), e);
            context.status(500).result(e.getMessage());
        }
    });
}
Also used : MISC(org.fakekoji.api.http.rest.OToolService.MISC) Arrays(java.util.Arrays) Date(java.util.Date) TaskVariantManager(org.fakekoji.jobmanager.manager.TaskVariantManager) Utils(org.fakekoji.Utils) JDKTestProject(org.fakekoji.jobmanager.model.JDKTestProject) PlatformManager(org.fakekoji.jobmanager.manager.PlatformManager) Context(io.javalin.http.Context) Map(java.util.Map) StorageException(org.fakekoji.storage.StorageException) BuildJob(org.fakekoji.jobmanager.model.BuildJob) JavaServerConstants(org.fakekoji.xmlrpc.server.JavaServerConstants) Path(java.nio.file.Path) JDKVersionManager(org.fakekoji.jobmanager.manager.JDKVersionManager) Project(org.fakekoji.jobmanager.model.Project) FileVisitor(java.nio.file.FileVisitor) VariantsConfig(org.fakekoji.jobmanager.model.VariantsConfig) Set(java.util.Set) BuildPlatformConfig(org.fakekoji.jobmanager.model.BuildPlatformConfig) Logger(java.util.logging.Logger) EndpointGroup(io.javalin.apibuilder.EndpointGroup) JDKProject(org.fakekoji.jobmanager.model.JDKProject) Collectors(java.util.stream.Collectors) FileVisitResult(java.nio.file.FileVisitResult) List(java.util.List) OToolBuild(org.fakekoji.model.OToolBuild) Result(org.fakekoji.functional.Result) ApiBuilder.get(io.javalin.apibuilder.ApiBuilder.get) NotNull(org.jetbrains.annotations.NotNull) JenkinsCliWrapper(org.fakekoji.jobmanager.JenkinsCliWrapper) Platform(org.fakekoji.model.Platform) Tuple(org.fakekoji.functional.Tuple) JDKTestProjectManager(org.fakekoji.jobmanager.project.JDKTestProjectManager) Job(org.fakekoji.jobmanager.model.Job) HashMap(java.util.HashMap) JDKProjectParser(org.fakekoji.jobmanager.project.JDKProjectParser) Function(java.util.function.Function) TreeSet(java.util.TreeSet) OToolVariable(org.fakekoji.model.OToolVariable) StandardCopyOption(java.nio.file.StandardCopyOption) ArrayList(java.util.ArrayList) Level(java.util.logging.Level) HashSet(java.util.HashSet) ConfigManager(org.fakekoji.jobmanager.ConfigManager) RedeployApiWorkerBase(org.fakekoji.api.http.rest.utils.RedeployApiWorkerBase) Constants(hudson.plugins.scm.koji.Constants) TestJobConfiguration(org.fakekoji.jobmanager.model.TestJobConfiguration) ManagementException(org.fakekoji.jobmanager.ManagementException) Files(java.nio.file.Files) JenkinsJobTemplateBuilder(org.fakekoji.jobmanager.JenkinsJobTemplateBuilder) FakeBuild(org.fakekoji.core.FakeBuild) IOException(java.io.IOException) BasicFileAttributes(java.nio.file.attribute.BasicFileAttributes) File(java.io.File) OToolParser(org.fakekoji.core.utils.OToolParser) TestJob(org.fakekoji.jobmanager.model.TestJob) JDKProjectManager(org.fakekoji.jobmanager.project.JDKProjectManager) Comparator(java.util.Comparator) Collections(java.util.Collections) AccessibleSettings(org.fakekoji.core.AccessibleSettings) TestJob(org.fakekoji.jobmanager.model.TestJob) Platform(org.fakekoji.model.Platform) ArrayList(java.util.ArrayList) JenkinsJobTemplateBuilder(org.fakekoji.jobmanager.JenkinsJobTemplateBuilder) TreeSet(java.util.TreeSet) OToolVariable(org.fakekoji.model.OToolVariable) BuildJob(org.fakekoji.jobmanager.model.BuildJob) BuildJob(org.fakekoji.jobmanager.model.BuildJob) Job(org.fakekoji.jobmanager.model.Job) TestJob(org.fakekoji.jobmanager.model.TestJob) HashSet(java.util.HashSet) OToolParser(org.fakekoji.core.utils.OToolParser) IOException(java.io.IOException) StorageException(org.fakekoji.storage.StorageException) ManagementException(org.fakekoji.jobmanager.ManagementException) IOException(java.io.IOException) Date(java.util.Date) JDKTestProject(org.fakekoji.jobmanager.model.JDKTestProject) Project(org.fakekoji.jobmanager.model.Project) JDKProject(org.fakekoji.jobmanager.model.JDKProject) JenkinsCliWrapper(org.fakekoji.jobmanager.JenkinsCliWrapper) RedeployApiWorkerBase(org.fakekoji.api.http.rest.utils.RedeployApiWorkerBase) File(java.io.File) StorageException(org.fakekoji.storage.StorageException)

Example 2 with PlatformManager

use of org.fakekoji.jobmanager.manager.PlatformManager in project jenkins-scm-koji-plugin by judovana.

the class BumpPlatformArgs method parse.

public static Result<BumpPlatformArgs, OToolError> parse(final ConfigManager configManger, final Map<String, List<String>> paramsMap) {
    return extractParams(paramsMap).flatMap(params -> {
        final Platform from;
        final Platform to;
        try {
            final PlatformManager platformManager = configManger.platformManager;
            from = platformManager.read(params.from);
            to = platformManager.read(params.to);
        } catch (StorageException e) {
            LOGGER.log(Level.SEVERE, e.getMessage(), e);
            return Result.err(new OToolError(e.getMessage(), 500));
        } catch (ManagementException e) {
            LOGGER.log(Level.SEVERE, e.getMessage(), e);
            return Result.err(new OToolError(e.getMessage(), 400));
        }
        final Result<PlatformBumpVariant, String> variantParseResult = PlatformBumpVariant.parse(params.variant);
        if (variantParseResult.isError()) {
            return Result.err(new OToolError(variantParseResult.getError(), 400));
        }
        final PlatformBumpVariant variant = variantParseResult.getValue();
        final List<String> projectsList = Arrays.asList(params.projects.split(","));
        final Optional<Pattern> filter = Optional.ofNullable(compileFilter(params.filter));
        return BumpArgs.parseBumpArgs(paramsMap).flatMap(bumpArgs -> configManger.getProjects(projectsList).flatMap(projects -> Result.ok(new BumpPlatformArgs(bumpArgs, from, to, filter, variant, projects))));
    });
}
Also used : OToolError(org.fakekoji.api.http.rest.OToolError) Project(org.fakekoji.jobmanager.model.Project) Arrays(java.util.Arrays) Platform(org.fakekoji.model.Platform) ManagementException(org.fakekoji.jobmanager.ManagementException) BUMP_TO(org.fakekoji.api.http.rest.BumperAPI.BUMP_TO) RestUtils.extractMandatoryParamValue(org.fakekoji.api.http.rest.RestUtils.extractMandatoryParamValue) Logger(java.util.logging.Logger) PlatformManager(org.fakekoji.jobmanager.manager.PlatformManager) PlatformBumpVariant(org.fakekoji.jobmanager.model.PlatformBumpVariant) Level(java.util.logging.Level) ConfigManager(org.fakekoji.jobmanager.ConfigManager) List(java.util.List) PLATFORM_BUMP_VARIANT(org.fakekoji.api.http.rest.BumperAPI.PLATFORM_BUMP_VARIANT) OToolError(org.fakekoji.api.http.rest.OToolError) FILTER(org.fakekoji.api.http.rest.BumperAPI.FILTER) Map(java.util.Map) RestUtils.extractParamValue(org.fakekoji.api.http.rest.RestUtils.extractParamValue) Result(org.fakekoji.functional.Result) StorageException(org.fakekoji.storage.StorageException) Optional(java.util.Optional) JavaServerConstants(org.fakekoji.xmlrpc.server.JavaServerConstants) Pattern(java.util.regex.Pattern) BUMP_FROM(org.fakekoji.api.http.rest.BumperAPI.BUMP_FROM) PROJECTS(org.fakekoji.api.http.rest.BumperAPI.PROJECTS) Pattern(java.util.regex.Pattern) PlatformManager(org.fakekoji.jobmanager.manager.PlatformManager) Platform(org.fakekoji.model.Platform) PlatformBumpVariant(org.fakekoji.jobmanager.model.PlatformBumpVariant) ManagementException(org.fakekoji.jobmanager.ManagementException) StorageException(org.fakekoji.storage.StorageException)

Example 3 with PlatformManager

use of org.fakekoji.jobmanager.manager.PlatformManager in project jenkins-scm-koji-plugin by judovana.

the class GetterAPI method getPlatformDetailsHandler.

private QueryHandler getPlatformDetailsHandler() {
    final PlatformManager platformManager = settings.getConfigManager().platformManager;
    return new QueryHandler() {

        @Override
        public Result<String, String> handle(Map<String, List<String>> queryParams) throws StorageException {
            final Optional<String> id = extractParamValue(queryParams, PLATFORM_ID);
            List<Platform> platforms = platformManager.readAll();
            String kojiArches = platforms.stream().filter(platform -> {
                if (id.isPresent()) {
                    return platform.getId().equals(id.get());
                } else {
                    return true;
                }
            }).map(platform -> platform.toString("\n")).sorted().collect(Collectors.joining("\n"));
            return Result.ok(kojiArches + "\n");
        }

        @Override
        public String about() {
            return "/platformDetails?id=optionalSelecto";
        }
    };
}
Also used : JenkinsCliWrapper(org.fakekoji.jobmanager.JenkinsCliWrapper) Platform(org.fakekoji.model.Platform) JDKTestProjectManager(org.fakekoji.jobmanager.project.JDKTestProjectManager) Task(org.fakekoji.model.Task) TaskVariantManager(org.fakekoji.jobmanager.manager.TaskVariantManager) Job(org.fakekoji.jobmanager.model.Job) HashMap(java.util.HashMap) JDKTestProject(org.fakekoji.jobmanager.model.JDKTestProject) PlatformManager(org.fakekoji.jobmanager.manager.PlatformManager) ArrayList(java.util.ArrayList) HashSet(java.util.HashSet) Map(java.util.Map) RestUtils.extractParamValue(org.fakekoji.api.http.rest.RestUtils.extractParamValue) StorageException(org.fakekoji.storage.StorageException) Path(java.nio.file.Path) JDKVersionManager(org.fakekoji.jobmanager.manager.JDKVersionManager) Project(org.fakekoji.jobmanager.model.Project) ManagementException(org.fakekoji.jobmanager.ManagementException) FileVisitor(java.nio.file.FileVisitor) Files(java.nio.file.Files) Predicate(java.util.function.Predicate) Collection(java.util.Collection) TaskManager(org.fakekoji.jobmanager.manager.TaskManager) Set(java.util.Set) IOException(java.io.IOException) BasicFileAttributes(java.nio.file.attribute.BasicFileAttributes) EndpointGroup(io.javalin.apibuilder.EndpointGroup) JDKProject(org.fakekoji.jobmanager.model.JDKProject) Collectors(java.util.stream.Collectors) TaskVariantValue(org.fakekoji.model.TaskVariantValue) Objects(java.util.Objects) FileVisitResult(java.nio.file.FileVisitResult) OToolParser(org.fakekoji.core.utils.OToolParser) List(java.util.List) Stream(java.util.stream.Stream) OToolBuild(org.fakekoji.model.OToolBuild) Result(org.fakekoji.functional.Result) TaskVariant(org.fakekoji.model.TaskVariant) Optional(java.util.Optional) ApiBuilder.get(io.javalin.apibuilder.ApiBuilder.get) Pattern(java.util.regex.Pattern) ApiBuilder.path(io.javalin.apibuilder.ApiBuilder.path) JDKProjectManager(org.fakekoji.jobmanager.project.JDKProjectManager) JDKVersion(org.fakekoji.model.JDKVersion) Comparator(java.util.Comparator) Collections(java.util.Collections) OToolArchive(org.fakekoji.model.OToolArchive) AccessibleSettings(org.fakekoji.core.AccessibleSettings) PlatformManager(org.fakekoji.jobmanager.manager.PlatformManager) Platform(org.fakekoji.model.Platform) HashMap(java.util.HashMap) Map(java.util.Map)

Example 4 with PlatformManager

use of org.fakekoji.jobmanager.manager.PlatformManager in project jenkins-scm-koji-plugin by judovana.

the class GetterAPI method getPlatformsHandler.

private QueryHandler getPlatformsHandler() {
    final PlatformManager platformManager = settings.getConfigManager().platformManager;
    return new QueryHandler() {

        @Override
        public Result<String, String> handle(Map<String, List<String>> queryParams) throws StorageException {
            List<Platform> platforms = platformManager.readAll();
            String kojiArches = platforms.stream().map(platform -> platform.getId()).sorted().collect(Collectors.joining("\n"));
            return Result.ok(kojiArches + "\n");
        }

        @Override
        public String about() {
            return "/platforms";
        }
    };
}
Also used : PlatformManager(org.fakekoji.jobmanager.manager.PlatformManager) Platform(org.fakekoji.model.Platform) HashMap(java.util.HashMap) Map(java.util.Map)

Example 5 with PlatformManager

use of org.fakekoji.jobmanager.manager.PlatformManager in project jenkins-scm-koji-plugin by judovana.

the class ViewsAppi method getJenkinsViewTemplateBuilders.

@NotNull
List<JenkinsViewTemplateBuilder> getJenkinsViewTemplateBuilders(JDKTestProjectManager jdkTestProjectManager, JDKProjectManager jdkProjectManager, PlatformManager platformManager, TaskManager taskManager, TaskVariantManager variantManager, JDKVersionManager jdkVersionManager, Optional<List<String>> filterOutViewsAsap) throws StorageException, IOException {
    nestedColumnsStyle.setJobs(filterOutViewsAsap);
    listColumnsStyle.setJobs(filterOutViewsAsap);
    List<TaskVariant> taskVariants = variantManager.readAll();
    List<JDKTestProject> jdkTestProjecs = jdkTestProjectManager.readAll();
    List<JDKVersion> jdkVersions = jdkVersionManager.readAll();
    List<JDKProject> jdkProjects = jdkProjectManager.readAll();
    List<Platform> allPlatforms = platformManager.readAll();
    List<Task> allTasks = taskManager.readAll();
    List<String> projects = new ArrayList<>();
    for (JDKTestProject p : jdkTestProjecs) {
        projects.add(p.getId());
    }
    for (JDKProject p : jdkProjects) {
        projects.add(p.getId());
    }
    Set<String> ossesSet = new HashSet<>();
    Set<String> ossesVersionedSet = new HashSet<>();
    Set<String> archesSet = new HashSet<>();
    Set<VersionlessPlatform> versionlessPlatformsSet = new HashSet<>();
    for (Platform p : allPlatforms) {
        ossesSet.add(p.getOs());
        ossesVersionedSet.add(p.getOs() + p.getVersion());
        archesSet.add(p.getArchitecture());
        versionlessPlatformsSet.add(new VersionlessPlatform(p.getOs(), p.getArchitecture()));
    }
    // jenkins will resort any way, however..
    Collections.sort(projects);
    Collections.sort(allTasks, new Comparator<Task>() {

        @Override
        public int compare(Task o1, Task o2) {
            return o1.getId().compareTo(o2.getId());
        }
    });
    Collections.sort(allPlatforms, new Comparator<Platform>() {

        @Override
        public int compare(Platform o1, Platform o2) {
            return o1.getId().compareTo(o2.getId());
        }
    });
    List<String> osses = new ArrayList<>(ossesSet);
    List<String> ossesVersioned = new ArrayList<>(ossesVersionedSet);
    List<String> arches = new ArrayList<>(archesSet);
    List<VersionlessPlatform> versionlessPlatforms = new ArrayList<>(versionlessPlatformsSet);
    Collections.sort(osses);
    Collections.sort(ossesVersioned);
    Collections.sort(arches);
    Collections.sort(versionlessPlatforms);
    List<List<String>> subArches = Arrays.asList(osses, ossesVersioned, arches);
    List<JenkinsViewTemplateBuilder> jvt;
    if (nested) {
        jvt = getNestedViews(taskVariants, allPlatforms, allTasks, projects, versionlessPlatforms, jdkVersions, osses, ossesVersioned, arches, isSkipEmpty() ? filterOutViewsAsap : Optional.empty());
    } else {
        jvt = getDirectViews(taskVariants, allPlatforms, allTasks, projects, versionlessPlatforms, subArches, jdkVersions);
    }
    return jvt.stream().filter(jvtb -> filter.matcher(jvtb.getName()).matches()).collect(Collectors.toList());
}
Also used : JenkinsCliWrapper(org.fakekoji.jobmanager.JenkinsCliWrapper) java.util(java.util) Platform(org.fakekoji.model.Platform) VariantsMultiplier(org.fakekoji.jobmanager.views.VariantsMultiplier) JDKTestProjectManager(org.fakekoji.jobmanager.project.JDKTestProjectManager) Task(org.fakekoji.model.Task) TaskVariantManager(org.fakekoji.jobmanager.manager.TaskVariantManager) Job(org.fakekoji.jobmanager.model.Job) JDKTestProject(org.fakekoji.jobmanager.model.JDKTestProject) PlatformManager(org.fakekoji.jobmanager.manager.PlatformManager) Context(io.javalin.http.Context) StorageException(org.fakekoji.storage.StorageException) JDKVersionManager(org.fakekoji.jobmanager.manager.JDKVersionManager) VersionlessPlatform(org.fakekoji.jobmanager.views.VersionlessPlatform) TaskManager(org.fakekoji.jobmanager.manager.TaskManager) IOException(java.io.IOException) JDKProject(org.fakekoji.jobmanager.model.JDKProject) Collectors(java.util.stream.Collectors) TaskVariantValue(org.fakekoji.model.TaskVariantValue) TaskVariant(org.fakekoji.model.TaskVariant) JenkinsViewTemplateBuilderFactory(org.fakekoji.jobmanager.views.JenkinsViewTemplateBuilderFactory) Pattern(java.util.regex.Pattern) JDKProjectManager(org.fakekoji.jobmanager.project.JDKProjectManager) JDKVersion(org.fakekoji.model.JDKVersion) NotNull(org.jetbrains.annotations.NotNull) JenkinsViewTemplateBuilder(org.fakekoji.jobmanager.views.JenkinsViewTemplateBuilder) Task(org.fakekoji.model.Task) Platform(org.fakekoji.model.Platform) VersionlessPlatform(org.fakekoji.jobmanager.views.VersionlessPlatform) VersionlessPlatform(org.fakekoji.jobmanager.views.VersionlessPlatform) JDKVersion(org.fakekoji.model.JDKVersion) JDKTestProject(org.fakekoji.jobmanager.model.JDKTestProject) JDKProject(org.fakekoji.jobmanager.model.JDKProject) TaskVariant(org.fakekoji.model.TaskVariant) JenkinsViewTemplateBuilder(org.fakekoji.jobmanager.views.JenkinsViewTemplateBuilder) NotNull(org.jetbrains.annotations.NotNull)

Aggregations

PlatformManager (org.fakekoji.jobmanager.manager.PlatformManager)6 Platform (org.fakekoji.model.Platform)6 Map (java.util.Map)5 StorageException (org.fakekoji.storage.StorageException)5 IOException (java.io.IOException)4 HashMap (java.util.HashMap)4 List (java.util.List)4 Pattern (java.util.regex.Pattern)4 Collectors (java.util.stream.Collectors)4 ApiBuilder.get (io.javalin.apibuilder.ApiBuilder.get)3 EndpointGroup (io.javalin.apibuilder.EndpointGroup)3 FileVisitResult (java.nio.file.FileVisitResult)3 FileVisitor (java.nio.file.FileVisitor)3 Files (java.nio.file.Files)3 Path (java.nio.file.Path)3 BasicFileAttributes (java.nio.file.attribute.BasicFileAttributes)3 ArrayList (java.util.ArrayList)3 Collections (java.util.Collections)3 Comparator (java.util.Comparator)3 HashSet (java.util.HashSet)3