Skip to content

Commit

Permalink
Merge pull request #347 from wttech/feature/install-cloud-mode
Browse files Browse the repository at this point in the history
fixed new launcher
  • Loading branch information
dprzybyl authored May 11, 2022
2 parents c826f63 + 60c493b commit ef31aac
Show file tree
Hide file tree
Showing 12 changed files with 119 additions and 130 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*
* http://www.apache.org/licenses/LICENSE-2.0
*
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
Expand All @@ -19,56 +19,8 @@
*/
package com.cognifide.apm.api.services;

import java.io.Serializable;
import org.apache.commons.lang.StringUtils;
public enum ExecutionMode {

public enum ExecutionMode implements Serializable {
RUN, AUTOMATIC_RUN, DRY_RUN, VALIDATION

RUN {
@Override
public boolean isRun() {
return true;
}

@Override
public String getName() {
return "run";
}
},

AUTOMATIC_RUN {
@Override
public boolean isRun() {
return true;
}

@Override
public String getName() {
return "automatic run";
}
},

DRY_RUN {
@Override
public String getName() {
return "dry run";
}
},

VALIDATION {
@Override
public String getName() {
return "validation";
}
};

public static ExecutionMode fromString(String modeName, ExecutionMode defaultMode) {
return (StringUtils.isEmpty(modeName)) ? defaultMode : ExecutionMode.valueOf(modeName.toUpperCase());
}

public boolean isRun() {
return false;
}

abstract public String getName();
}
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,6 @@
import com.cognifide.apm.core.actions.ActionResultImpl;
import com.cognifide.apm.core.sessions.SessionSavingPolicyImpl;
import com.cognifide.apm.core.utils.AuthorizableManagerImpl;
import com.cognifide.apm.core.utils.RuntimeUtils;
import javax.jcr.RepositoryException;
import javax.jcr.ValueFactory;
import javax.jcr.security.AccessControlManager;
Expand Down Expand Up @@ -58,22 +57,22 @@ public final class ContextImpl implements Context {
@Getter
private boolean compositeNodeStore;

public ContextImpl(final JackrabbitSession session) throws RepositoryException {
public ContextImpl(JackrabbitSession session, boolean compositeNodeStore) throws RepositoryException {
this.session = session;
this.accessControlManager = session.getAccessControlManager();
this.authorizableManager = new AuthorizableManagerImpl(session.getUserManager());
this.savingPolicy = new SessionSavingPolicyImpl();
this.compositeNodeStore = RuntimeUtils.determineCompositeNodeStore(session);
this.compositeNodeStore = compositeNodeStore;
}

private ContextImpl(AccessControlManager accessControlManager,
AuthorizableManager authorizableManager, SessionSavingPolicy savingPolicy,
JackrabbitSession session) {
AuthorizableManager authorizableManager, SessionSavingPolicy savingPolicy,
JackrabbitSession session, boolean compositeNodeStore) {
this.accessControlManager = accessControlManager;
this.authorizableManager = authorizableManager;
this.savingPolicy = savingPolicy;
this.session = session;
this.compositeNodeStore = RuntimeUtils.determineCompositeNodeStore(session);
this.compositeNodeStore = compositeNodeStore;
}

@Override
Expand Down Expand Up @@ -122,7 +121,7 @@ public ActionResult createActionResult() {

@Override
public Context newContext() {
return new ContextImpl(accessControlManager, authorizableManager, savingPolicy, session);
return new ContextImpl(accessControlManager, authorizableManager, savingPolicy, session, compositeNodeStore);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.resource.ValueMap;
import org.jetbrains.annotations.NotNull;
import org.osgi.service.cm.ConfigurationAdmin;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
import org.slf4j.Logger;
Expand Down Expand Up @@ -82,13 +82,16 @@ public class HistoryImpl implements History {
@Reference
private VersionService versionService;

@Reference
private ConfigurationAdmin configurationAdmin;

@Override
public HistoryEntry logLocal(Script script, ExecutionMode mode, Progress progressLogger) {
return resolveDefault(resolverProvider, progressLogger.getExecutor(), (ResolveCallback<HistoryEntry>) resolver -> {
final HistoryEntryWriter historyEntryWriter = createBuilder(resolver, script, mode, progressLogger)
.executionTime(Calendar.getInstance())
.build();
return createHistoryEntry(resolver, script, mode, historyEntryWriter, false);
return createHistoryEntry(resolver, script, mode, historyEntryWriter);
}, null);
}

Expand All @@ -103,7 +106,7 @@ private HistoryEntryWriterBuilder createBuilder(ResourceResolver resolver, Scrip
.isRunSuccessful(progressLogger.isSuccess())
.mode(mode.toString())
.progressLog(ProgressHelper.toJson(progressLogger.getEntries()))
.compositeNodeStore(RuntimeUtils.determineCompositeNodeStore(resolver.adaptTo(Session.class)));
.compositeNodeStore(RuntimeUtils.determineCompositeNodeStore(configurationAdmin));
}

@Override
Expand Down Expand Up @@ -158,12 +161,12 @@ public ScriptHistory findScriptHistory(ResourceResolver resourceResolver, Script
}

private HistoryEntry createHistoryEntry(ResourceResolver resolver, Script script, ExecutionMode mode,
HistoryEntryWriter historyEntryWriter, boolean remote) {
HistoryEntryWriter historyEntryWriter) {
try {
Session session = resolver.adaptTo(Session.class);

Node scriptHistoryNode = createScriptHistoryNode(script, session);
Node historyEntryNode = createHistoryEntryNode(scriptHistoryNode, script, mode, remote);
Node historyEntryNode = createHistoryEntryNode(scriptHistoryNode, script, mode);
historyEntryNode.setProperty(HistoryEntryImpl.SCRIPT_CONTENT_PATH, versionService.getVersionPath(script));
writeProperties(resolver, historyEntryNode, historyEntryWriter);

Expand All @@ -176,7 +179,6 @@ private HistoryEntry createHistoryEntry(ResourceResolver resolver, Script script
}
}

@NotNull
private Resource writeProperties(ResourceResolver resolver, Node historyEntry, HistoryEntryWriter
historyEntryWriter)
throws RepositoryException {
Expand All @@ -185,9 +187,9 @@ private Resource writeProperties(ResourceResolver resolver, Node historyEntry, H
return entryResource;
}

private Node createHistoryEntryNode(Node scriptHistoryNode, Script script, ExecutionMode mode, boolean remote)
private Node createHistoryEntryNode(Node scriptHistoryNode, Script script, ExecutionMode mode)
throws RepositoryException {
String modeName = getModeName(mode, remote);
String modeName = getModeName(mode);
Node historyEntry = getOrCreateUniqueByPath(scriptHistoryNode, modeName, NT_UNSTRUCTURED);
historyEntry.setProperty(APM_HISTORY, APM_HISTORY_ENTRY);
historyEntry.setProperty(HistoryEntryImpl.CHECKSUM, script.getChecksum());
Expand All @@ -196,7 +198,6 @@ private Node createHistoryEntryNode(Node scriptHistoryNode, Script script, Execu
return historyEntry;
}

@NotNull
private Node createScriptHistoryNode(Script script, Session session) throws RepositoryException {
String path = getScriptHistoryPath(script);
Node scriptHistory = getOrCreateByPath(path, SLING_ORDERED_FOLDER, NT_UNSTRUCTURED, session, true);
Expand All @@ -205,19 +206,10 @@ private Node createScriptHistoryNode(Script script, Session session) throws Repo
return scriptHistory;
}

@NotNull
private String getModeName(ExecutionMode mode, boolean remote) {
String modeName = (remote ? "Remote" : "Local");
if (mode == ExecutionMode.AUTOMATIC_RUN || mode == ExecutionMode.RUN) {
modeName += "Run";
} else {
modeName += "DryRun";
}
modeName = modeName.replace("_", "");
return modeName;
private String getModeName(ExecutionMode mode) {
return (mode == ExecutionMode.AUTOMATIC_RUN || mode == ExecutionMode.RUN) ? "LocalRun" : "LocalDryRun";
}

@NotNull
private String getScriptHistoryPath(Script script) {
return HISTORY_FOLDER + "/" + script.getPath().replace("/", "_").substring(1);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,12 +30,8 @@ public interface ScriptHistory {

String getLastLocalDryRunPath();

String getLastRemoteRunPath();

HistoryEntry getLastLocalRun();

HistoryEntry getLastLocalDryRun();

HistoryEntry getLastRemoteRun();

}
Original file line number Diff line number Diff line change
Expand Up @@ -32,9 +32,11 @@
public class ScriptHistoryImpl implements ScriptHistory {

public static final String SCRIPT_PATH = "scriptPath";

public static final String LAST_LOCAL_RUN = "lastLocalRun";

public static final String LAST_LOCAL_DRY_RUN = "lastLocalDryRun";
public static final String LAST_REMOTE_RUN = "lastRemoteRun";

public static final String LAST_CHECKSUM = "lastChecksum";

@Self
Expand All @@ -58,19 +60,14 @@ public class ScriptHistoryImpl implements ScriptHistory {
@Named(LAST_LOCAL_DRY_RUN)
private String lastLocalDryRunPath;

@Inject
@Getter
@Named(LAST_REMOTE_RUN)
private String lastRemoteRunPath;

@Inject
@Getter
@Named(LAST_CHECKSUM)
private String lastChecksum;

private HistoryEntry lastLocalRun;

private HistoryEntry lastLocalDryRun;
private HistoryEntry lastRemoteRun;

public static ScriptHistoryImpl empty(String scriptPath) {
ScriptHistoryImpl scriptHistoryImpl = new ScriptHistoryImpl();
Expand All @@ -90,17 +87,12 @@ public HistoryEntry getLastLocalDryRun() {
return lastLocalDryRun;
}

@Override
public HistoryEntry getLastRemoteRun() {
lastRemoteRun = getHistoryEntry(lastRemoteRun, lastRemoteRunPath);
return lastRemoteRun;
}

private HistoryEntry getHistoryEntry(HistoryEntry entry, String historyEntryPath) {
HistoryEntry historyEntry = entry;
if (historyEntry == null && resource != null && historyEntryPath != null) {
historyEntry = history.findHistoryEntry(resource.getResourceResolver(), historyEntryPath);
}
return historyEntry;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -33,10 +33,11 @@
import com.cognifide.apm.core.utils.sling.SlingHelper;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
import javax.jcr.Session;
import org.apache.sling.api.resource.PersistenceException;
import org.apache.sling.api.resource.ResourceResolver;
import org.osgi.service.cm.ConfigurationAdmin;
import org.osgi.service.component.annotations.Activate;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
Expand Down Expand Up @@ -71,28 +72,50 @@ public class ApmInstallService extends AbstractLauncher {
@Reference
private History history;

@Reference
private ConfigurationAdmin configurationAdmin;

@Activate
public void activate(Configuration config) {
SlingHelper.operateTraced(resolverProvider, resolver -> processScripts(config, resolver));
}

private void processScripts(Configuration config, ResourceResolver resolver) throws PersistenceException {
logger.info("scriptPaths = {}", Arrays.asList(config.scriptPaths()));
logger.info("ifModified = {}", config.ifModified());
ReferenceFinder referenceFinder = new ReferenceFinder(scriptFinder, resolver);
boolean compositeNodeStore = RuntimeUtils.determineCompositeNodeStore(resolver.adaptTo(Session.class));
boolean compositeNodeStore = RuntimeUtils.determineCompositeNodeStore(configurationAdmin);
logger.info("compositeNodeStore = {}", compositeNodeStore);
List<Script> scripts = Arrays.stream(config.scriptPaths())
.map(scriptPath -> scriptFinder.find(scriptPath, resolver))
.filter(Objects::nonNull)
.filter(script -> {
List<Script> subtree = referenceFinder.findReferences(script);
String checksum = versionService.countChecksum(subtree);
ScriptVersion scriptVersion = versionService.getScriptVersion(resolver, script);
HistoryEntry lastLocalRun = history.findScriptHistory(resolver, script).getLastLocalRun();
return !config.ifModified()
logger.info("script.path = {} checksum = {}", script.getPath(), checksum);
if (scriptVersion.getLastChecksum() == null) {
logger.info("script.path = {} scriptVersion.lastChecksum = null", script.getPath());
} else {
logger.info("script.path = {} scriptVersion.lastChecksum = {}", script.getPath(), scriptVersion.getLastChecksum());
}
if (lastLocalRun == null) {
logger.info("script.path = {} lastLocalRun = null", script.getPath());
} else {
logger.info("script.path = {} lastLocalRun.checksum = {}", script.getPath(), lastLocalRun.getChecksum());
logger.info("script.path = {} lastLocalRun.compositeNodeStore = {}", script.getPath(), lastLocalRun.isCompositeNodeStore());
}
boolean result = !config.ifModified()
|| !checksum.equals(scriptVersion.getLastChecksum())
|| lastLocalRun == null
|| !checksum.equals(lastLocalRun.getChecksum())
|| compositeNodeStore != lastLocalRun.isCompositeNodeStore();
logger.info("script.path = {} result = {}", script.getPath(), result);
return result;
})
.collect(Collectors.toList());
logger.info("scripts.size = {}", scripts.size());
processScripts(scripts, resolver);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@
import com.cognifide.apm.core.services.event.ApmEvent.ScriptLaunchedEvent;
import com.cognifide.apm.core.services.event.EventManager;
import com.cognifide.apm.core.services.version.VersionService;
import com.cognifide.apm.core.utils.RuntimeUtils;
import com.google.common.collect.Maps;
import java.util.Arrays;
import java.util.HashMap;
Expand All @@ -56,6 +57,7 @@
import org.apache.jackrabbit.api.JackrabbitSession;
import org.apache.sling.api.resource.PersistenceException;
import org.apache.sling.api.resource.ResourceResolver;
import org.osgi.service.cm.ConfigurationAdmin;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
import org.osgi.service.component.annotations.ReferenceCardinality;
Expand Down Expand Up @@ -93,6 +95,9 @@ public class ScriptManagerImpl implements ScriptManager {
@Reference
private History history;

@Reference
private ConfigurationAdmin configurationAdmin;

@Reference(
cardinality = ReferenceCardinality.MULTIPLE,
policy = ReferencePolicy.DYNAMIC,
Expand Down Expand Up @@ -206,7 +211,8 @@ public Map<String, String> getPredefinedDefinitions() {
}

private ActionExecutor createExecutor(ExecutionMode mode, ResourceResolver resolver) throws RepositoryException {
final Context context = new ContextImpl((JackrabbitSession) resolver.adaptTo(Session.class));
boolean compositeNodeStore = RuntimeUtils.determineCompositeNodeStore(configurationAdmin);
final Context context = new ContextImpl((JackrabbitSession) resolver.adaptTo(Session.class), compositeNodeStore);
return ActionExecutorFactory.create(mode, context, actionFactory);
}
}
Loading

0 comments on commit ef31aac

Please sign in to comment.