Skip to content

Commit 7d9b4c6

Browse files
committed
Merge branch '193-PerformanceTrace' of https://github.com/maeisabelle/marklogic-data-hub into maeisabelle-193-PerformanceTrace
# Conflicts: # marklogic-data-hub/src/main/java/com/marklogic/hub/DataHub.java # marklogic-data-hub/src/main/java/com/marklogic/hub/Scaffolding.java
2 parents b848a18 + c2cd767 commit 7d9b4c6

File tree

18 files changed

+278
-128
lines changed

18 files changed

+278
-128
lines changed

marklogic-data-hub/src/main/java/com/marklogic/hub/DataHub.java

Lines changed: 35 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,6 @@
1515
*/
1616
package com.marklogic.hub;
1717

18-
import java.nio.file.Paths;
19-
import java.util.ArrayList;
20-
import java.util.HashMap;
21-
import java.util.List;
22-
import java.util.Map;
23-
24-
import org.slf4j.Logger;
25-
import org.slf4j.LoggerFactory;
26-
import org.springframework.web.client.ResourceAccessException;
27-
2818
import com.fasterxml.jackson.databind.JsonNode;
2919
import com.marklogic.appdeployer.AppConfig;
3020
import com.marklogic.appdeployer.ConfigDir;
@@ -46,14 +36,7 @@
4636
import com.marklogic.appdeployer.command.groups.DeployGroupsCommand;
4737
import com.marklogic.appdeployer.command.mimetypes.DeployMimetypesCommand;
4838
import com.marklogic.appdeployer.command.schemas.LoadSchemasCommand;
49-
import com.marklogic.appdeployer.command.security.DeployAmpsCommand;
50-
import com.marklogic.appdeployer.command.security.DeployCertificateAuthoritiesCommand;
51-
import com.marklogic.appdeployer.command.security.DeployCertificateTemplatesCommand;
52-
import com.marklogic.appdeployer.command.security.DeployExternalSecurityCommand;
53-
import com.marklogic.appdeployer.command.security.DeployPrivilegesCommand;
54-
import com.marklogic.appdeployer.command.security.DeployProtectedCollectionsCommand;
55-
import com.marklogic.appdeployer.command.security.DeployRolesCommand;
56-
import com.marklogic.appdeployer.command.security.DeployUsersCommand;
39+
import com.marklogic.appdeployer.command.security.*;
5740
import com.marklogic.appdeployer.command.tasks.DeployScheduledTasksCommand;
5841
import com.marklogic.appdeployer.command.triggers.DeployTriggersCommand;
5942
import com.marklogic.appdeployer.command.viewschemas.DeployViewSchemasCommand;
@@ -68,6 +51,7 @@
6851
import com.marklogic.client.util.RequestParameters;
6952
import com.marklogic.hub.commands.LoadHubModulesCommand;
7053
import com.marklogic.hub.commands.LoadUserModulesCommand;
54+
import com.marklogic.hub.util.PerformanceLogger;
7155
import com.marklogic.mgmt.ManageClient;
7256
import com.marklogic.mgmt.ManageConfig;
7357
import com.marklogic.mgmt.admin.AdminConfig;
@@ -76,6 +60,15 @@
7660
import com.marklogic.mgmt.databases.DatabaseManager;
7761
import com.marklogic.rest.util.Fragment;
7862
import com.marklogic.rest.util.ResourcesFragment;
63+
import org.slf4j.Logger;
64+
import org.slf4j.LoggerFactory;
65+
import org.springframework.web.client.ResourceAccessException;
66+
67+
import java.nio.file.Paths;
68+
import java.util.ArrayList;
69+
import java.util.HashMap;
70+
import java.util.List;
71+
import java.util.Map;
7972

8073
public class DataHub {
8174

@@ -109,6 +102,8 @@ private void init(HubConfig hubConfig) {
109102
* @return true if installed, false otherwise
110103
*/
111104
public boolean isInstalled() {
105+
long startTime = PerformanceLogger.monitorTimeInsideMethod();
106+
112107
ServerManager sm = new ServerManager(client);
113108
DatabaseManager dm = new DatabaseManager(client);
114109

@@ -156,6 +151,8 @@ public boolean isInstalled() {
156151
tracingDbExists && tracingIndexesOn);
157152
boolean forestsOk = (stagingForestsExist && finalForestsExist && tracingForestsExist);
158153

154+
PerformanceLogger.logTimeInsideMethod(startTime, "DataHub.isInstalled");
155+
159156
return (appserversOk && dbsOk && forestsOk);
160157
}
161158

@@ -164,6 +161,7 @@ public boolean isInstalled() {
164161
* @throws ServerValidationException if the server is not compatible
165162
*/
166163
public void validateServer() throws ServerValidationException {
164+
long startTime = PerformanceLogger.monitorTimeInsideMethod();
167165
try {
168166
AdminManager am = getAdminManager();
169167
String versionString = am.getServerVersion();
@@ -176,6 +174,7 @@ public void validateServer() throws ServerValidationException {
176174
catch(ResourceAccessException e) {
177175
throw new ServerValidationException(e.toString());
178176
}
177+
PerformanceLogger.logTimeInsideMethod(startTime, "DataHub.validateServer");
179178
}
180179

181180
private AppConfig getAppConfig() {
@@ -230,14 +229,13 @@ public void updateAppConfig(AppConfig config) {
230229
}
231230

232231
public void initProject() {
233-
long startTime = System.nanoTime();
232+
long startTime = PerformanceLogger.monitorTimeInsideMethod();
234233
LOGGER.info("Initializing the Hub Project");
235234

236235
HubProject hp = new HubProject(hubConfig);
237236
hp.init();
238-
long endTime = System.nanoTime();
239-
long duration = (endTime - startTime);
240-
LOGGER.info("Initialize took: " + (duration / 1000000000) + " seconds");
237+
238+
PerformanceLogger.logTimeInsideMethod(startTime, "DataHub.initProject");
241239
}
242240

243241
private DatabaseClient getDatabaseClient(int port) {
@@ -255,8 +253,7 @@ private DatabaseClient getDatabaseClient(int port) {
255253
* Installs User Provided modules into the Data Hub
256254
*/
257255
public void installUserModules() {
258-
long startTime = System.nanoTime();
259-
256+
long startTime = PerformanceLogger.monitorTimeInsideMethod();
260257
LOGGER.debug("Installing user modules into MarkLogic");
261258

262259
List<Command> commands = new ArrayList<Command>();
@@ -266,17 +263,20 @@ public void installUserModules() {
266263
SimpleAppDeployer deployer = new SimpleAppDeployer(client, getAdminManager());
267264
deployer.setCommands(commands);
268265
deployer.deploy(config);
269-
long endTime = System.nanoTime();
270-
long duration = (endTime - startTime);
271-
LOGGER.info("Installing User Modules took: " + (duration / 1000000000) + " seconds");
272-
266+
PerformanceLogger.logTimeInsideMethod(startTime, "DataHub.installUserModules");
273267
}
274268

275269
public JsonNode validateUserModules() {
270+
long startTime = PerformanceLogger.monitorTimeInsideMethod();
276271
LOGGER.debug("validating user modules");
272+
277273
DatabaseClient client = getDatabaseClient(hubConfig.stagingPort);
278274
EntitiesValidator ev = new EntitiesValidator(client);
279-
return ev.validate();
275+
JsonNode jsonNode = ev.validate();
276+
277+
PerformanceLogger.logTimeInsideMethod(startTime, "DataHub.validateUserModules");
278+
279+
return jsonNode;
280280
}
281281

282282
private List<Command> getCommands(AppConfig config) {
@@ -377,10 +377,9 @@ private AdminManager getAdminManager() {
377377
* Installs the data hub configuration and server-side modules into MarkLogic
378378
*/
379379
public void install() {
380-
381380
initProject();
382381

383-
long startTime = System.nanoTime();
382+
long startTime = PerformanceLogger.monitorTimeInsideMethod();
384383
LOGGER.info("Installing the Data Hub into MarkLogic");
385384

386385
// clean up any lingering cache for deployed modules
@@ -392,17 +391,16 @@ public void install() {
392391
deployer.setCommands(getCommands(config));
393392
deployer.deploy(config);
394393

395-
long endTime = System.nanoTime();
396-
long duration = (endTime - startTime);
397-
LOGGER.info("Install took: " + (duration / 1000000000) + " seconds");
394+
PerformanceLogger.logTimeInsideMethod(startTime, "DataHub.install");
398395
}
399396

400397
/**
401398
* Uninstalls the data hub configuration and server-side modules from MarkLogic
402399
*/
403400
public void uninstall() {
404-
long startTime = System.nanoTime();
401+
long startTime = PerformanceLogger.monitorTimeInsideMethod();
405402
LOGGER.debug("Uninstalling the Data Hub from MarkLogic");
403+
406404
AppConfig config = getAppConfig();
407405
SimpleAppDeployer deployer = new SimpleAppDeployer(client, getAdminManager());
408406
deployer.setCommands(getCommands(config));
@@ -411,9 +409,8 @@ public void uninstall() {
411409
// clean up any lingering cache for deployed modules
412410
PropertiesModuleManager moduleManager = new PropertiesModuleManager();
413411
moduleManager.deletePropertiesFile();
414-
long endTime = System.nanoTime();
415-
long duration = (endTime - startTime);
416-
LOGGER.info("Uninstall took: " + (duration / 1000000000) + " seconds");
412+
413+
PerformanceLogger.logTimeInsideMethod(startTime, "DataHub.uninstall");
417414
}
418415

419416
class EntitiesValidator extends ResourceManager {

marklogic-data-hub/src/main/java/com/marklogic/hub/EntityManager.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import com.marklogic.client.util.RequestParameters;
3232
import com.marklogic.hub.entity.Entity;
3333
import com.marklogic.hub.entity.EntityImpl;
34+
import com.marklogic.hub.util.PerformanceLogger;
3435

3536
public class EntityManager extends ResourceManager {
3637
static final public String NAME = "entity";
@@ -44,10 +45,12 @@ public EntityManager(DatabaseClient client) {
4445

4546
/**
4647
* Retrieves a list of entities from the Server
47-
*
48+
*
4849
* @return a list of entities
4950
*/
5051
public List<Entity> getEntities() {
52+
long startTime = PerformanceLogger.monitorTimeInsideMethod();
53+
5154
RequestParameters params = new RequestParameters();
5255
ServiceResultIterator resultItr = this.getServices().get(params);
5356
if (resultItr == null || ! resultItr.hasNext()) {
@@ -70,12 +73,15 @@ public List<Entity> getEntities() {
7073
entities.add(entityFromXml((Element) children.item(i)));
7174
}
7275
}
76+
77+
PerformanceLogger.logTimeInsideMethod(startTime, "EntityManager.getEntities");
78+
7379
return entities;
7480
}
7581

7682
/**
7783
* Retrieve a named entity
78-
*
84+
*
7985
* @param entityName
8086
* - the name of the entity to retrieve
8187
* @return a entity

marklogic-data-hub/src/main/java/com/marklogic/hub/FlowManager.java

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@
5555
import com.marklogic.hub.flow.Flow;
5656
import com.marklogic.hub.flow.FlowType;
5757
import com.marklogic.hub.flow.SimpleFlow;
58+
import com.marklogic.hub.util.PerformanceLogger;
5859
import com.marklogic.spring.batch.hub.CollectorReader;
5960
import com.marklogic.spring.batch.hub.FlowWriter;
6061

@@ -153,7 +154,10 @@ public List<Flow> getFlows(String entityName) {
153154
* @return the flow
154155
*/
155156
public Flow getFlow(String entityName, String flowName) {
156-
return getFlow(entityName, flowName, null);
157+
long startTime = PerformanceLogger.monitorTimeInsideMethod();
158+
Flow flow = getFlow(entityName, flowName, null);
159+
PerformanceLogger.logTimeInsideMethod(startTime, "FlowManager.getFlow");
160+
return flow;
157161
}
158162

159163
public Flow getFlow(String entityName, String flowName, FlowType flowType) {
@@ -196,6 +200,8 @@ public JobExecution runFlow(Flow flow, int batchSize) {
196200
* @return a JobExecution instance
197201
*/
198202
public JobExecution runFlow(Flow flow, int batchSize, JobExecutionListener listener) {
203+
long startTime = PerformanceLogger.monitorTimeInsideMethod();
204+
199205
Collector c = flow.getCollector();
200206
if (c instanceof ServerCollector) {
201207
((ServerCollector)c).setClient(client);
@@ -217,9 +223,10 @@ public JobExecution runFlow(Flow flow, int batchSize, JobExecutionListener liste
217223

218224
try {
219225
return jobLauncher.run(job, new JobParameters());
220-
}
221-
catch (Exception e) {
226+
} catch (Exception e) {
222227
throw new RuntimeException(e);
228+
} finally {
229+
PerformanceLogger.logTimeInsideMethod(startTime, "FlowManager.runFlow");
223230
}
224231
}
225232

marklogic-data-hub/src/main/java/com/marklogic/hub/Scaffolding.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import com.marklogic.client.io.Format;
3434
import com.marklogic.hub.flow.FlowType;
3535
import com.marklogic.hub.flow.SimpleFlow;
36+
import com.marklogic.hub.util.PerformanceLogger;
3637

3738
public class Scaffolding {
3839

@@ -51,20 +52,25 @@ public Scaffolding(String projectDir) {
5152
}
5253

5354
public Path getFlowDir(String entityName, String flowName, FlowType flowType) {
55+
long startTime = PerformanceLogger.monitorTimeInsideMethod();
5456
Path entityDir = entitiesDir.resolve(entityName);
5557
Path typeDir = entityDir.resolve(flowType.toString());
5658
Path flowDir = typeDir.resolve(flowName);
59+
PerformanceLogger.logTimeInsideMethod(startTime, "Scaffolding.getFlowDir");
5760
return flowDir;
5861
}
5962

6063
public void createEntity(String entityName) {
64+
long startTime = PerformanceLogger.monitorTimeInsideMethod();
6165
Path entityDir = entitiesDir.resolve(entityName);
6266
entityDir.toFile().mkdirs();
67+
PerformanceLogger.logTimeInsideMethod(startTime, "Scaffolding.createEntity");
6368
}
6469

6570
public void createFlow(String entityName, String flowName,
6671
FlowType flowType, PluginFormat pluginFormat, Format dataFormat)
6772
throws IOException {
73+
long startTime = PerformanceLogger.monitorTimeInsideMethod();
6874
Path flowDir = getFlowDir(entityName, flowName, flowType);
6975

7076
if (flowType.equals(FlowType.HARMONIZE)) {
@@ -101,6 +107,7 @@ public void createFlow(String entityName, String flowName,
101107
out.println(flow.serialize(false));
102108
out.close();
103109
}
110+
PerformanceLogger.logTimeInsideMethod(startTime, "Scaffolding.createFlow");
104111
}
105112

106113
private void writeFile(String srcFile, Path dstFile) throws IOException {
@@ -115,6 +122,8 @@ public void createRestExtension(String entityName, String extensionName,
115122
FlowType flowType, PluginFormat pluginFormat) throws IOException, ScaffoldingValidationException {
116123
LOGGER.info(extensionName);
117124

125+
long startTime = PerformanceLogger.monitorTimeInsideMethod();
126+
118127
if(!validator.isUniqueRestServiceExtension(extensionName)) {
119128
throw new ScaffoldingValidationException("A rest service extension with the same name as " + extensionName + " already exists.");
120129
}
@@ -123,11 +132,13 @@ public void createRestExtension(String entityName, String extensionName,
123132
File dstFile = createEmptyRestExtensionFile(entityName, extensionName, flowType, pluginFormat);
124133
writeToFile(fileContent, dstFile);
125134
writeMetadataForFile(dstFile, scaffoldRestServicesPath + "metadata/template.xml", extensionName);
135+
PerformanceLogger.logTimeInsideMethod(startTime, "Scaffolding.createRestExtension");
126136
}
127137

128138
public void createRestTransform(String entityName, String transformName,
129139
FlowType flowType, PluginFormat pluginFormat) throws IOException, ScaffoldingValidationException {
130140
LOGGER.info(transformName);
141+
long startTime = PerformanceLogger.monitorTimeInsideMethod();
131142
if(!validator.isUniqueRestTransform(transformName)) {
132143
throw new ScaffoldingValidationException("A rest transform with the same name as " + transformName + " already exists.");
133144
}
@@ -136,6 +147,7 @@ public void createRestTransform(String entityName, String transformName,
136147
File dstFile = createEmptyRestTransformFile(entityName, transformName, flowType, pluginFormat);
137148
writeToFile(fileContent, dstFile);
138149
writeMetadataForFile(dstFile, scaffoldRestTransformsPath + "metadata/template.xml", transformName);
150+
PerformanceLogger.logTimeInsideMethod(startTime, "Scaffolding.createRestTransform");
139151
}
140152

141153
private void writeToFile(String fileContent, File dstFile)
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package com.marklogic.hub.util;
2+
3+
import org.slf4j.Logger;
4+
import org.slf4j.LoggerFactory;
5+
6+
public class PerformanceLogger {
7+
8+
private final static Logger LOGGER = LoggerFactory.getLogger(PerformanceLogger.class);
9+
10+
public static long monitorTimeInsideMethod() {
11+
return System.nanoTime();
12+
}
13+
14+
public static void logTimeInsideMethod(long startTime, String location) {
15+
long endTime = System.nanoTime();
16+
long duration = (endTime - startTime) / 1000000000;
17+
18+
StringBuilder logMessage = new StringBuilder();
19+
logMessage.append("PERFORMANCE: ");
20+
logMessage.append(location);
21+
logMessage.append(" took ");
22+
logMessage.append(duration);
23+
logMessage.append("s");
24+
LOGGER.info(logMessage.toString());
25+
}
26+
}

0 commit comments

Comments
 (0)