diff --git a/examples/gradle-advanced/build.gradle b/examples/gradle-advanced/build.gradle index 1dd367ef43..b5a2f5f1a7 100644 --- a/examples/gradle-advanced/build.gradle +++ b/examples/gradle-advanced/build.gradle @@ -10,7 +10,7 @@ plugins { id 'eclipse' id 'idea' id 'net.saliman.properties' version '1.4.5' - id 'com.marklogic.ml-data-hub-plugin' version '1.0.0-beta.1' + id 'com.marklogic.ml-data-hub-plugin' version '1.0.0-beta.2' id 'com.marklogic.ml-gradle' version '2.1.0' } diff --git a/examples/hr-hub/plugins/entities/Employee/conformance/conform-acme-tech/headers/headers.sjs b/examples/hr-hub/plugins/entities/Employee/conformance/conform-acme-tech/headers/headers.sjs index 982f85969d..2b4634c551 100644 --- a/examples/hr-hub/plugins/entities/Employee/conformance/conform-acme-tech/headers/headers.sjs +++ b/examples/hr-hub/plugins/entities/Employee/conformance/conform-acme-tech/headers/headers.sjs @@ -5,7 +5,7 @@ * @param content - the output of your content plugin * @param options - an object containing options. Options are sent from Java * - * @return - an array of header objects + * @return - an object of headers */ function createHeaders(id, content, options) { var latest = xs.date('1900-01-01'); @@ -20,17 +20,11 @@ function createHeaders(id, content, options) { } } - return [ - { - employeeId: content.id - }, - { - hireDate: xs.date(xdmp.parseDateTime('[M01]/[D01]/[Y0001]', content.hireDate)) - }, - { - salary: xs.int(salary) - } - ]; + return { + employeeId: content.id, + hireDate: xs.date(xdmp.parseDateTime('[M01]/[D01]/[Y0001]', content.hireDate)), + salary: xs.int(salary) + }; } module.exports = { diff --git a/examples/hr-hub/plugins/entities/Employee/conformance/conform-global-corp/headers/headers.sjs b/examples/hr-hub/plugins/entities/Employee/conformance/conform-global-corp/headers/headers.sjs index e3c1a2c98e..d605b2ddd7 100644 --- a/examples/hr-hub/plugins/entities/Employee/conformance/conform-global-corp/headers/headers.sjs +++ b/examples/hr-hub/plugins/entities/Employee/conformance/conform-global-corp/headers/headers.sjs @@ -5,20 +5,14 @@ * @param content - the output of your content plugin * @param options - an object containing options. Options are sent from Java * - * @return - an array of header objects + * @return - an object of headers */ function createHeaders(id, content, options) { - return [ - { - employeeId: content.emp_id - }, - { - hireDate: xs.date(xdmp.parseDateTime('[M01]/[D01]/[Y0001]', content.hire_date)) - }, - { - salary: xs.int(content.base_salary) + xs.int(content.bonus) - } - ]; + return { + employeeId: content.emp_id, + hireDate: xs.date(xdmp.parseDateTime('[M01]/[D01]/[Y0001]', content.hire_date)), + salary: xs.int(content.base_salary) + xs.int(content.bonus) + }; } module.exports = { diff --git a/examples/hr-hub/plugins/entities/Employee/input/load-acme-tech/headers/headers.sjs b/examples/hr-hub/plugins/entities/Employee/input/load-acme-tech/headers/headers.sjs index 8aa692ccaf..2f7d26b073 100644 --- a/examples/hr-hub/plugins/entities/Employee/input/load-acme-tech/headers/headers.sjs +++ b/examples/hr-hub/plugins/entities/Employee/input/load-acme-tech/headers/headers.sjs @@ -5,10 +5,10 @@ * @param content - the output of your content plugin * @param options - an object containing options. Options are sent from Java * - * @return - an array of header objects + * @return - an object of headers */ function createHeaders(id, content, options) { - return []; + return {}; } module.exports = { diff --git a/examples/hr-hub/plugins/entities/Employee/input/load-global-corp/headers/headers.sjs b/examples/hr-hub/plugins/entities/Employee/input/load-global-corp/headers/headers.sjs index 8aa692ccaf..2f7d26b073 100644 --- a/examples/hr-hub/plugins/entities/Employee/input/load-global-corp/headers/headers.sjs +++ b/examples/hr-hub/plugins/entities/Employee/input/load-global-corp/headers/headers.sjs @@ -5,10 +5,10 @@ * @param content - the output of your content plugin * @param options - an object containing options. Options are sent from Java * - * @return - an array of header objects + * @return - an object of headers */ function createHeaders(id, content, options) { - return []; + return {}; } module.exports = { diff --git a/marklogic-data-hub/build.gradle b/marklogic-data-hub/build.gradle index 7acf9f4ec5..a62eca8f3d 100644 --- a/marklogic-data-hub/build.gradle +++ b/marklogic-data-hub/build.gradle @@ -5,6 +5,7 @@ plugins { id 'idea' id 'maven-publish' id 'com.jfrog.bintray' version '1.6' + id 'com.marklogic.ml-gradle' version '2.1.0' } repositories { @@ -121,3 +122,70 @@ bintray { issueTrackerUrl = 'https://github.com/marklogic/marklogic-data-hub/issues' } } + +ext { + // mlAppConfig is an instance of com.marklogic.appdeployer.AppConfig + mlAppConfig { + // override some default values with our values + modulesDatabaseName = mlModulesDbName + triggersDatabaseName = mlTriggersDbName + schemasDatabaseName = mlSchemasDbName + restPort = Integer.parseInt(mlStagingPort) + + // Configure custom tokens for our json files + customTokens.put("%%STAGING_SERVER_NAME%%", mlStagingAppserverName) + customTokens.put("%%STAGING_SERVER_PORT%%", mlStagingPort) + customTokens.put("%%STAGING_DB_NAME%%", mlStagingDbName) + + customTokens.put("%%FINAL_SERVER_NAME%%", mlFinalAppserverName) + customTokens.put("%%FINAL_SERVER_PORT%%", mlFinalPort) + customTokens.put("%%FINAL_DB_NAME%%", mlFinalDbName) + + customTokens.put("%%TRACE_SERVER_NAME%%", mlTraceAppserverName) + customTokens.put("%%TRACE_SERVER_PORT%%", mlTracePort) + customTokens.put("%%TRACE_DB_NAME%%", mlTraceDbName) + + customTokens.put("%%MODULES_DB_NAME%%", mlModulesDbName) + + modulePaths = ["marklogic-data-hub/src/main/resources/ml-modules"] + } +} + +ext { + // don't create the REST Api. We will do it manually + mlAppDeployer.commands.remove(mlAppDeployer.getCommand("DeployRestApiServersCommand")) + mlAppDeployer.commands.remove(mlAppDeployer.getCommand("UpdateRestApiServersCommand")) + + // remove the original deploy content database command + // as we do not need it. + def deployDbCmd = mlAppDeployer.getCommand("DeployContentDatabasesCommand") + mlAppDeployer.commands.remove(deployDbCmd) + + // install the staging database + def stagingDbCommand = new com.marklogic.appdeployer.command.databases.DeployDatabaseCommand("staging-database.json") + stagingDbCommand.setForestsPerHost(Integer.parseInt(mlStagingForestsPerHost)); + mlAppDeployer.commands.add(stagingDbCommand) + mlDatabaseCommands.add(stagingDbCommand) + + // install the final database + def finalDbCommand = new com.marklogic.appdeployer.command.databases.DeployDatabaseCommand("final-database.json") + finalDbCommand.setForestsPerHost(Integer.parseInt(mlFinalForestsPerHost)); + mlAppDeployer.commands.add(finalDbCommand) + mlDatabaseCommands.add(finalDbCommand) + + // install the trace database + def traceDbCommand = new com.marklogic.appdeployer.command.databases.DeployDatabaseCommand("trace-database.json") + traceDbCommand.setForestsPerHost(Integer.parseInt(mlTraceForestsPerHost)); + mlAppDeployer.commands.add(traceDbCommand) + mlDatabaseCommands.add(traceDbCommand) + + // install the modules database + def modulesDbCommand = new com.marklogic.appdeployer.command.databases.DeployDatabaseCommand("modules-database.json") + mlAppDeployer.commands.add(modulesDbCommand) + mlDatabaseCommands.add(modulesDbCommand) + + // temp workaround for ml-gradle issue #78 + // https://github.com/rjrudin/ml-gradle/issues/78 + def lmc = mlAppDeployer.getCommand("LoadModulesCommand") + lmc.setModulesLoader(new com.marklogic.client.modulesloader.impl.DefaultModulesLoader(mlAppConfig.newXccAssetLoader())) +} diff --git a/marklogic-data-hub/gradle.properties b/marklogic-data-hub/gradle.properties index b5065d7344..60e9c5accb 100644 --- a/marklogic-data-hub/gradle.properties +++ b/marklogic-data-hub/gradle.properties @@ -1,12 +1,33 @@ -mlAppDeployerDependency=com.marklogic:ml-app-deployer:+ mlConfigDir=marklogic-data-hub/src/main/resources/ml-config -publishUrl=file:../marklogic-data-hub/releases -mlStagingRestPort=8010 -mlFinalRestPort=8011 -mlTraceRestPort=8012 -mlUsername=admin -mlPassword=admin + mlHost=localhost mlAppName=data-hub + +mlUsername=admin +mlPassword=admin auth=digest + +mlStagingAppserverName=data-hub-STAGING +mlStagingPort=8010 +mlStagingDbName=data-hub-STAGING +mlStagingForestsPerHost=4 + +mlFinalAppserverName=data-hub-FINAL +mlFinalPort=8011 +mlFinalDbName=data-hub-FINAL +mlFinalForestsPerHost=4 + +mlTraceAppserverName=data-hub-TRACING +mlTracePort=8012 +mlTraceDbName=data-hub-TRACING +mlTraceForestsPerHost=1 + +mlModulesDbName=data-hub-MODULES +mlTriggersDbName=data-hub-TRIGGERS +mlSchemasDbName=data-hub-SCHEMAS + +hubModulesPath=exmaples/hr-hub/plugins + version=1.0.0-beta.2 + + diff --git a/marklogic-data-hub/src/main/java/com/marklogic/hub/DataHub.java b/marklogic-data-hub/src/main/java/com/marklogic/hub/DataHub.java index 0e3e7c9128..d6b4171af0 100644 --- a/marklogic-data-hub/src/main/java/com/marklogic/hub/DataHub.java +++ b/marklogic-data-hub/src/main/java/com/marklogic/hub/DataHub.java @@ -58,6 +58,7 @@ import com.marklogic.hub.commands.DeployModulesDatabaseCommand; import com.marklogic.hub.commands.DeployRestApiCommand; import com.marklogic.hub.commands.LoadModulesCommand; +import com.marklogic.hub.commands.UpdateRestApiServersCommand; import com.marklogic.hub.util.HubFileFilter; import com.marklogic.hub.util.HubModulesLoader; import com.marklogic.mgmt.ManageClient; @@ -315,8 +316,6 @@ private List getCommands(AppConfig config) { dbCommands.add(tracingDb); dbCommands.add(new DeployModulesDatabaseCommand(hubConfig.modulesDbName)); - dbCommands.add(new DeployTriggersDatabaseCommand()); - dbCommands.add(new DeploySchemasDatabaseCommand()); commands.addAll(dbCommands); // App Servers @@ -324,6 +323,10 @@ private List getCommands(AppConfig config) { commands.add(new DeployRestApiCommand(hubConfig.finalHttpName, hubConfig.finalPort)); commands.add(new DeployRestApiCommand(hubConfig.tracingHttpName, hubConfig.tracePort)); + commands.add(new UpdateRestApiServersCommand(hubConfig.stagingHttpName)); + commands.add(new UpdateRestApiServersCommand(hubConfig.finalHttpName)); + commands.add(new UpdateRestApiServersCommand(hubConfig.tracingHttpName)); + // Modules commands.add(new LoadModulesCommand()); diff --git a/marklogic-data-hub/src/main/java/com/marklogic/hub/Debugging.java b/marklogic-data-hub/src/main/java/com/marklogic/hub/Debugging.java new file mode 100644 index 0000000000..f5c665260e --- /dev/null +++ b/marklogic-data-hub/src/main/java/com/marklogic/hub/Debugging.java @@ -0,0 +1,52 @@ +package com.marklogic.hub; + +import com.marklogic.client.DatabaseClient; +import com.marklogic.client.extensions.ResourceManager; +import com.marklogic.client.extensions.ResourceServices.ServiceResult; +import com.marklogic.client.extensions.ResourceServices.ServiceResultIterator; +import com.marklogic.client.io.StringHandle; +import com.marklogic.client.util.RequestParameters; + +public class Debugging extends ResourceManager { + private static final String NAME = "debug"; + + public Debugging(DatabaseClient client) { + super(); + client.init(NAME, this); + } + + /** + * Enables tracing + */ + public void enable() { + RequestParameters params = new RequestParameters(); + params.add("enable", "true"); + this.getServices().post(params, new StringHandle("{}")); + } + + /** + * Disables tracing + */ + public void disable() { + RequestParameters params = new RequestParameters(); + params.add("enable", "false"); + this.getServices().post(params, new StringHandle("{}")); + } + + /** + * Determines if the hub has tracing enabled or not + * + * @return - true if enabled, false otherwise + */ + public boolean isEnabled() { + RequestParameters params = new RequestParameters(); + ServiceResultIterator resultItr = this.getServices().get(params); + if (resultItr == null || ! resultItr.hasNext()) { + return false; + } + ServiceResult res = resultItr.next(); + StringHandle handle = new StringHandle(); + String enabled = res.getContent(handle).get(); + return Boolean.parseBoolean(enabled); + } +} diff --git a/marklogic-data-hub/src/main/java/com/marklogic/hub/HubConfig.java b/marklogic-data-hub/src/main/java/com/marklogic/hub/HubConfig.java index 14d6a97bcc..8d82fac94c 100644 --- a/marklogic-data-hub/src/main/java/com/marklogic/hub/HubConfig.java +++ b/marklogic-data-hub/src/main/java/com/marklogic/hub/HubConfig.java @@ -59,7 +59,7 @@ public class HubConfig { public String tracingDbName = DEFAULT_TRACING_NAME; public String tracingHttpName = DEFAULT_TRACING_NAME; - public int tracingForestsPerHost = DEFAULT_FORESTS_PER_HOST; + public int tracingForestsPerHost = 1; public Integer tracePort = DEFAULT_TRACE_PORT; public String modulesDbName = DEFAULT_MODULES_DB_NAME; diff --git a/marklogic-data-hub/src/main/java/com/marklogic/hub/commands/UpdateRestApiServersCommand.java b/marklogic-data-hub/src/main/java/com/marklogic/hub/commands/UpdateRestApiServersCommand.java new file mode 100644 index 0000000000..4238aceadf --- /dev/null +++ b/marklogic-data-hub/src/main/java/com/marklogic/hub/commands/UpdateRestApiServersCommand.java @@ -0,0 +1,53 @@ +package com.marklogic.hub.commands; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.core.util.DefaultPrettyPrinter; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.node.ObjectNode; +import com.marklogic.appdeployer.AppConfig; +import com.marklogic.appdeployer.command.AbstractCommand; +import com.marklogic.appdeployer.command.CommandContext; +import com.marklogic.appdeployer.command.SortOrderConstants; +import com.marklogic.mgmt.appservers.ServerManager; + +/** + * Command for updating an existing REST API server that was presumably created via /v1/rest-apis. + */ +public class UpdateRestApiServersCommand extends AbstractCommand { + + private String serverName; + public UpdateRestApiServersCommand(String serverName) { + this.serverName = serverName; + setExecuteSortOrder(SortOrderConstants.UPDATE_REST_API_SERVERS); + } + + /** + * This uses a different file than that of creating a REST API, as the payload for /v1/rest-apis differs from that + * of the /manage/v2/servers endpoint. + */ + @Override + public void execute(CommandContext context) { + AppConfig appConfig = context.getAppConfig(); + + ServerManager mgr = new ServerManager(context.getManageClient(), appConfig.getGroupName()); + + String json = buildRestApiJson(appConfig); + mgr.save(json); + } + + private String buildRestApiJson(AppConfig config) { + ObjectMapper m = new ObjectMapper(); + ObjectNode node = m.createObjectNode(); + node.put("server-name", serverName); + node.put("error-handler", "/com.marklogic.hub/error-handler.xqy"); + + try { + String json = m.writer(new DefaultPrettyPrinter()).writeValueAsString(node); + return json; + } catch (JsonProcessingException ex) { + throw new RuntimeException(ex); + } + } + + +} diff --git a/marklogic-data-hub/src/main/resources/ml-config/databases/final-database.json b/marklogic-data-hub/src/main/resources/ml-config/databases/final-database.json index cf62d605a6..98cb688caa 100644 --- a/marklogic-data-hub/src/main/resources/ml-config/databases/final-database.json +++ b/marklogic-data-hub/src/main/resources/ml-config/databases/final-database.json @@ -1,5 +1,9 @@ { - "database-name": "data-hub-FINAL", + "database-name": "%%FINAL_DB_NAME%%", + "range-element-index": [], + "schema-database": "%%SCHEMAS_DATABASE%%", + "triggers-database": "%%TRIGGERS_DATABASE%%", "triple-index": true, - "collection-lexicon":true + "collection-lexicon": true, + "uri-lexicon": true } diff --git a/marklogic-data-hub/src/main/resources/ml-config/databases/modules-database.json b/marklogic-data-hub/src/main/resources/ml-config/databases/modules-database.json new file mode 100644 index 0000000000..712ed77f40 --- /dev/null +++ b/marklogic-data-hub/src/main/resources/ml-config/databases/modules-database.json @@ -0,0 +1,5 @@ +{ + "database-name": "%%MODULES_DB_NAME%%", + "collection-lexicon": true, + "uri-lexicon": true +} diff --git a/marklogic-data-hub/src/main/resources/ml-config/databases/schemas-database.json b/marklogic-data-hub/src/main/resources/ml-config/databases/schemas-database.json new file mode 100644 index 0000000000..c3e12981b3 --- /dev/null +++ b/marklogic-data-hub/src/main/resources/ml-config/databases/schemas-database.json @@ -0,0 +1,3 @@ +{ + "database-name": "%%SCHEMAS_DATABASE%%" +} diff --git a/marklogic-data-hub/src/main/resources/ml-config/databases/staging-database.json b/marklogic-data-hub/src/main/resources/ml-config/databases/staging-database.json index 54998d6e00..e3e6bc65fb 100644 --- a/marklogic-data-hub/src/main/resources/ml-config/databases/staging-database.json +++ b/marklogic-data-hub/src/main/resources/ml-config/databases/staging-database.json @@ -1,5 +1,9 @@ { - "database-name": "data-hub-STAGING", + "database-name": "%%STAGING_DB_NAME%%", + "range-element-index": [], + "schema-database": "%%SCHEMAS_DATABASE%%", + "triggers-database": "%%TRIGGERS_DATABASE%%", "triple-index": true, - "collection-lexicon":true + "collection-lexicon": true, + "uri-lexicon": true } diff --git a/marklogic-data-hub/src/main/resources/ml-config/databases/trace-database.json b/marklogic-data-hub/src/main/resources/ml-config/databases/trace-database.json new file mode 100644 index 0000000000..65aac5eab4 --- /dev/null +++ b/marklogic-data-hub/src/main/resources/ml-config/databases/trace-database.json @@ -0,0 +1,9 @@ +{ + "database-name": "%%TRACE_DB_NAME%%", + "range-element-index": [], + "schema-database": "%%SCHEMAS_DATABASE%%", + "triggers-database": "%%TRIGGERS_DATABASE%%", + "triple-index": true, + "collection-lexicon": true, + "uri-lexicon": true +} diff --git a/marklogic-data-hub/src/main/resources/ml-config/databases/triggers-database.json b/marklogic-data-hub/src/main/resources/ml-config/databases/triggers-database.json new file mode 100644 index 0000000000..f686bda5d5 --- /dev/null +++ b/marklogic-data-hub/src/main/resources/ml-config/databases/triggers-database.json @@ -0,0 +1,3 @@ +{ + "database-name": "%%TRIGGERS_DATABASE%%" +} diff --git a/marklogic-data-hub/src/main/resources/ml-config/rest-api.json b/marklogic-data-hub/src/main/resources/ml-config/rest-api.json deleted file mode 100644 index 94122206c1..0000000000 --- a/marklogic-data-hub/src/main/resources/ml-config/rest-api.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "rest-api" : { - "name" : "data-hub-STAGING", - "group" : "%%GROUP%%", - "database" : "data-hub-STAGING", - "modules-database" : "%%MODULES_DATABASE%%", - "port" : %%PORT%%, - "xdbc-enabled" : true, - "error-format" : "json" - } -} diff --git a/marklogic-data-hub/src/main/resources/ml-config/servers/final-server.json b/marklogic-data-hub/src/main/resources/ml-config/servers/final-server.json new file mode 100644 index 0000000000..672ca7327b --- /dev/null +++ b/marklogic-data-hub/src/main/resources/ml-config/servers/final-server.json @@ -0,0 +1,14 @@ +{ + "server-name": "%%FINAL_SERVER_NAME%%", + "server-type": "http", + "root": "/", + "group-name": "%%GROUP%%", + "port": %%FINAL_SERVER_PORT%%, + "modules-database": "%%MODULES_DB_NAME%%", + "content-database": "%%FINAL_DB_NAME%%", + "authentication": "digest", + "default-error-format": "json", + "error-handler": "/MarkLogic/rest-api/error-handler.xqy", + "url-rewriter": "/MarkLogic/rest-api/rewriter.xml", + "rewrite-resolves-globally": true +} diff --git a/marklogic-data-hub/src/main/resources/ml-config/servers/rest-api-server.json b/marklogic-data-hub/src/main/resources/ml-config/servers/rest-api-server.json deleted file mode 100644 index 81325bbda6..0000000000 --- a/marklogic-data-hub/src/main/resources/ml-config/servers/rest-api-server.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "server-name": "%%NAME%%", - "authentication": "digest" -} diff --git a/marklogic-data-hub/src/main/resources/ml-config/servers/staging-server.json b/marklogic-data-hub/src/main/resources/ml-config/servers/staging-server.json new file mode 100644 index 0000000000..99b67bb75a --- /dev/null +++ b/marklogic-data-hub/src/main/resources/ml-config/servers/staging-server.json @@ -0,0 +1,14 @@ +{ + "server-name": "%%STAGING_SERVER_NAME%%", + "server-type": "http", + "root": "/", + "group-name": "%%GROUP%%", + "port": %%STAGING_SERVER_PORT%%, + "modules-database": "%%MODULES_DB_NAME%%", + "content-database": "%%STAGING_DB_NAME%%", + "authentication": "digest", + "default-error-format": "json", + "error-handler": "/MarkLogic/rest-api/error-handler.xqy", + "url-rewriter": "/MarkLogic/rest-api/rewriter.xml", + "rewrite-resolves-globally": true +} diff --git a/marklogic-data-hub/src/main/resources/ml-config/servers/trace-server.json b/marklogic-data-hub/src/main/resources/ml-config/servers/trace-server.json new file mode 100644 index 0000000000..bc2377e308 --- /dev/null +++ b/marklogic-data-hub/src/main/resources/ml-config/servers/trace-server.json @@ -0,0 +1,14 @@ +{ + "server-name": "%%TRACE_SERVER_NAME%%", + "server-type": "http", + "root": "/", + "group-name": "%%GROUP%%", + "port": %%TRACE_SERVER_PORT%%, + "modules-database": "%%MODULES_DB_NAME%%", + "content-database": "%%TRACE_DB_NAME%%", + "authentication": "digest", + "default-error-format": "json", + "error-handler": "/MarkLogic/rest-api/error-handler.xqy", + "url-rewriter": "/MarkLogic/rest-api/rewriter.xml", + "rewrite-resolves-globally": true +} diff --git a/marklogic-data-hub/src/main/resources/ml-modules/root/com.marklogic.hub/lib/debug-lib.xqy b/marklogic-data-hub/src/main/resources/ml-modules/root/com.marklogic.hub/lib/debug-lib.xqy index 8bc3e7bfa8..698bfd149d 100644 --- a/marklogic-data-hub/src/main/resources/ml-modules/root/com.marklogic.hub/lib/debug-lib.xqy +++ b/marklogic-data-hub/src/main/resources/ml-modules/root/com.marklogic.hub/lib/debug-lib.xqy @@ -19,6 +19,12 @@ module namespace debug = "http://marklogic.com/data-hub/debug-lib"; declare option xdmp:mapping "false"; +declare function debug:enable($enable as xs:boolean) +{ + xdmp:set-server-field("HUB_DEBUG", $enable), + xdmp:set-server-field("MarkLogic.DEBUG", $enable) +}; + (:~ : Determines whether debugging is on or not : @@ -26,12 +32,7 @@ declare option xdmp:mapping "false"; :) declare function debug:on() as xs:boolean { - fn:not( - fn:empty(( - xdmp:get-server-field("DEBUG", ()), - fn:doc('/debug')/*:debug - )[1]) - ) + xdmp:get-server-field("HUB_DEBUG", fn:false()) }; (:~ @@ -51,6 +52,11 @@ declare function debug:log($items) : Dumps the request environment. Useful for debugging :) declare function debug:dump-env() +{ + debug:dump-env(()) +}; + +declare function debug:dump-env($name as xs:string?) { let $request-path := xdmp:get-request-path() let $request-path := @@ -67,7 +73,16 @@ declare function debug:dump-env() return debug:log(( "", + "", + "################################################################", "REQUEST DETAILS:", + "", + if ($name) then + ( + " **" || $name || "**", + "" + ) + else (), " [" || xdmp:get-request-method() || "] " || $request-path, "", " [Headers]", @@ -85,10 +100,25 @@ declare function debug:dump-env() ( "", " [Body]", - $body + " " || xdmp:describe($body, (), ()) ) else (), "", + "################################################################", + "", + "", "" )) }; + +declare function debug:dump-map($m as map:map) +{ + debug:dump-map($m, ()) +}; + +declare function debug:dump-map($m as map:map, $prefix) +{ + for $key in map:keys($m) + return + $prefix || $key || " => " || map:get($m, $key) +}; diff --git a/marklogic-data-hub/src/main/resources/ml-modules/root/com.marklogic.hub/lib/flow-lib.xqy b/marklogic-data-hub/src/main/resources/ml-modules/root/com.marklogic.hub/lib/flow-lib.xqy index e7da67d472..762080c9e7 100644 --- a/marklogic-data-hub/src/main/resources/ml-modules/root/com.marklogic.hub/lib/flow-lib.xqy +++ b/marklogic-data-hub/src/main/resources/ml-modules/root/com.marklogic.hub/lib/flow-lib.xqy @@ -26,6 +26,9 @@ import module namespace debug = "http://marklogic.com/data-hub/debug-lib" import module namespace hul = "http://marklogic.com/data-hub/hub-utils-lib" at "/com.marklogic.hub/lib/hub-utils-lib.xqy"; +import module namespace json="http://marklogic.com/xdmp/json" + at "/MarkLogic/json/json.xqy"; + import module namespace functx = "http://www.functx.com" at "/MarkLogic/functx/functx-1.0-nodoc-2007-01.xqy"; @@ -195,15 +198,6 @@ declare %private function flow:get-writer( for $uri in $uris let $filename as xs:string := hul:get-file-from-uri($uri) let $type := flow:get-type($filename) - let $_ := - if (debug:on()) then - debug:log(( - "$flow-name: " || $flow-name, - "$uri: " || $uri, - "$filename: " || $filename, - "$type: " || $type - )) - else () return element hub:writer { attribute type { $type }, @@ -253,10 +247,6 @@ declare %private function flow:get-flow( $flow-type as xs:string?, $uris as xs:string*) as element(hub:flow) { - let $_ := - if (debug:on()) then - debug:log(("entity: " || $entity-name, "flow: " || $flow-name, "flow-type: " || $flow-type, "uris:", $uris)) - else () let $real-flow-type := fn:replace($uris[1], $ENTITIES-DIR || $entity-name || "/([^/]+)/" || $flow-name || ".*$", "$1") let $map := map:map() let $_ := @@ -414,20 +404,39 @@ declare function flow:run-collector( let $ns := flow:get-module-ns($type) let $func := xdmp:function(fn:QName($ns, "collect"), $module-uri) let $before := xdmp:elapsed-time() - let $resp := $func($options) - let $duration := xdmp:elapsed-time() - $before + let $resp := + try { + $func($options) + } + catch($ex) { + xdmp:log($ex), + trace:create-trace( + trace:error-trace( + (), + $module-uri, + "collector", + "conformance", + $ex, + (), + xdmp:elapsed-time() - $before, + "json" + ) + ), + xdmp:rethrow() + } let $_ := trace:create-trace( - ( - collector, - {$module-uri}, - - { - $resp ! {.} - } - - ), - $duration) + trace:plugin-trace( + null-node {}, + $module-uri, + "collector", + "conformance", + null-node {}, + json:to-array($resp), + xdmp:elapsed-time() - $before, + "json" + ) + ) return $resp }; @@ -463,7 +472,6 @@ declare function flow:run-plugins( else () )) let $data-format := $flow/hub:data-format - let $_ := xdmp:log($flow) let $flow-type := $flow/hub:type let $flow-complexity := $flow/hub:complexity let $_ := @@ -499,7 +507,7 @@ declare function flow:run-flow( xdmp:invoke-function(function() { for $writer in $flow/hub:writer return - flow:run-writer($writer, $identifier, $envelope, $options) + flow:run-writer($writer, $identifier, $envelope, $flow/hub:type, $options) }, map:new(( map:entry("isolation", "different-transaction"), @@ -573,22 +581,87 @@ declare function flow:run-plugin( else "create-" || $destination let $func := xdmp:function(fn:QName($ns, $func-name), $module-uri) + let $trace-input := + if (trace:enabled()) then + if ($data-format = 'application/xml') then + switch($destination) + case "content" return + if ($flow-type = "input") then + element trace:rawContent { $content } + else + () + case "headers" return + element trace:content { $content } + case "triples" return + ( + element trace:content { $content }, + element trace:headers { $headers } + ) + default return () + else + let $o := json:object() + let $_ := + let $content := + ( + if ($content instance of document-node()) then + $content/node() + else + $content, + null-node{} + )[1] + return + switch($destination) + case "content" return + if ($flow-type = "input") then + map:put($o, "rawContent", $content) + else + () + case "headers" return + map:put($o, "content", $content) + case "triples" return + ( + map:put($o, "content", $content), + map:put($o, "headers", ($headers, null-node{})[1]) + ) + default return () + return + $o + else () let $before := xdmp:elapsed-time() let $resp := - if ($simple) then - switch ($destination) - case "content" return - if ($flow-type = "input") then + try { + if ($simple) then + switch ($destination) + case "content" return + if ($flow-type = "input") then + $func($identifier, $content, $options) + else + $func($identifier, $options) + case "headers" return $func($identifier, $content, $options) - else - $func($identifier, $options) - case "headers" return - $func($identifier, $content, $options) - case "triples" return - $func($identifier, $content, $headers, $options) - default return () - else - $func($identifier, $content, $headers, $triples, $options) + case "triples" return + $func($identifier, $content, $headers, $options) + default return () + else + $func($identifier, $content, $headers, $triples, $options) + } + catch($ex) { + xdmp:log($ex), + trace:create-trace( + trace:error-trace( + $identifier, + $module-uri, + $destination, + $flow-type, + $ex, + $trace-input, + xdmp:elapsed-time() - $before, + if ($data-format = 'application/xml') then "xml" + else "json" + ) + ), + xdmp:rethrow() + } let $duration := xdmp:elapsed-time() - $before let $resp := typeswitch($resp) @@ -597,6 +670,16 @@ declare function flow:run-plugin( fn:error("Too Many Nodes!. Return just 1 node") else $resp/node() + default return + $resp + + let $resp := + typeswitch($resp) + case object-node() | json:object return + if ($data-format = 'application/xml') then + json:transform-from-json($resp, json:config("custom")) + else + $resp case json:array return if ($data-format = 'application/xml') then json:array-values($resp) @@ -607,20 +690,21 @@ declare function flow:run-plugin( let $_ := if (trace:enabled()) then trace:create-trace( - ( - {$destination}, - {$module-uri}, - - {$identifier} - {$content} - {$headers} - {$triples} - , - - {$resp} - - ), - $duration) + trace:plugin-trace( + $identifier, + $module-uri, + $destination, + $flow-type, + $trace-input, + if ($data-format = 'application/xml') then + $resp + else + ($resp, null-node{})[1], + $duration, + if ($data-format = 'application/xml') then "xml" + else "json" + ) + ) else () return $resp @@ -639,6 +723,7 @@ declare function flow:run-writer( $writer as element(hub:writer), $identifier as xs:string, $envelope as item(), + $flow-type as xs:string, $options as map:map) { let $module-uri as xs:string := $writer/@module @@ -647,19 +732,43 @@ declare function flow:run-writer( let $ns := flow:get-module-ns($type) let $func := xdmp:function(fn:QName($ns, "write"), $module-uri) let $before := xdmp:elapsed-time() - let $resp := $func($identifier, $envelope, $options) + let $resp := + try { + $func($identifier, $envelope, $options) + } + catch($ex) { + xdmp:log($ex), + trace:create-trace( + trace:error-trace( + $identifier, + $module-uri, + "writer", + $flow-type, + $ex, + $envelope, + xdmp:elapsed-time() - $before, + if ($envelope instance of element()) then "xml" + else "json" + ) + ), + xdmp:rethrow() + } let $duration := xdmp:elapsed-time() - $before let $_ := trace:create-trace( - ( - {$identifier}, - writer, - {$module-uri}, - - {$envelope} - - ), - $duration) + trace:plugin-trace( + $identifier, + $module-uri, + $flow-type, + "writer", + $envelope, + if ($envelope instance of element()) then () + else null-node {}, + $duration, + if ($envelope instance of element()) then "xml" + else "json" + ) + ) return $resp }; diff --git a/marklogic-data-hub/src/main/resources/ml-modules/root/com.marklogic.hub/lib/trace-lib.xqy b/marklogic-data-hub/src/main/resources/ml-modules/root/com.marklogic.hub/lib/trace-lib.xqy index 63f40c8878..517094c451 100644 --- a/marklogic-data-hub/src/main/resources/ml-modules/root/com.marklogic.hub/lib/trace-lib.xqy +++ b/marklogic-data-hub/src/main/resources/ml-modules/root/com.marklogic.hub/lib/trace-lib.xqy @@ -20,8 +20,14 @@ module namespace trace = "http://marklogic.com/data-hub/trace"; import module namespace config = "http://marklogic.com/data-hub/config" at "/com.marklogic.hub/lib/config.xqy"; +import module namespace json="http://marklogic.com/xdmp/json" + at "/MarkLogic/json/json.xqy"; + declare option xdmp:mapping "false"; +declare variable $FORMAT-XML := "xml"; +declare variable $FORMAT-JSON := "json"; + declare function trace:enable-tracing($enabled as xs:boolean) { xdmp:set-server-field("HUB-TRACING-ENABLED", $enabled) @@ -32,28 +38,21 @@ declare function trace:enabled() as xs:boolean xdmp:get-server-field("HUB-TRACING-ENABLED", fn:false()) }; -declare function trace:create-trace( - $stuff-to-trace, - $duration as xs:dayTimeDuration -) +declare function trace:create-trace($trace) { if (trace:enabled()) then xdmp:eval(' - declare variable $stuff-to-trace external; - declare variable $duration external; + declare variable $trace external; xdmp:document-insert( "/" || xdmp:random(), - - {fn:current-dateTime()} - {$stuff-to-trace} - {$duration} - + $trace, + xdmp:default-permissions(), + ($trace/*:type) ) ', map:new(( - map:entry("stuff-to-trace", $stuff-to-trace), - map:entry("duration", $duration) + map:entry("trace", $trace) )), map:new(( map:entry("database", xdmp:database($config:TRACING-DATABASE)), @@ -61,3 +60,87 @@ declare function trace:create-trace( ))) else () }; + +declare function trace:plugin-trace( + $identifier, + $module-uri, + $plugin-type as xs:string, + $flow-type as xs:string, + $input, + $output, + $duration as xs:dayTimeDuration, + $format as xs:string?) +{ + if ($format eq $FORMAT-JSON) then + object-node { + "trace" : object-node { + "type": "plugin-trace", + "created": fn:current-dateTime(), + "id": $identifier, + "plugin-type": $plugin-type, + "flow-type": $flow-type, + "input": $input, + "output": $output, + "duration": $duration + } + } + else + + input-trace + {fn:current-dateTime()} + {$identifier} + {$plugin-type} + {$flow-type} + {$module-uri} + {$input} + {$output} + {$duration} + +}; + +declare function trace:error-trace( + $identifier as xs:string?, + $module-uri as xs:string, + $plugin-type as xs:string, + $flow-type as xs:string, + $error as element(error:error), + $input, + $duration as xs:dayTimeDuration, + $format as xs:string?) +{ + if ($format eq $FORMAT-JSON) then + let $error := + let $config := json:config("custom") + let $_ := map:put($config, "array-element-names", xs:QName("error:frame")) + let $_ := map:put($config, "ignore-attribute-names", xs:QName("xsi:schemaLocation")) + let $_ := map:put($config, "whitespace", "ignore") + return + json:transform-to-json($error, $config) + return + object-node { + "trace": object-node { + "type": "error-trace", + "created": fn:current-dateTime(), + "id": $identifier, + "plugin-type": $plugin-type, + "flow-type": $flow-type, + "error": $error, + "input": $input, + "duration": $duration + } + } + else + + error-trace + {fn:current-dateTime()} + { + $identifier ! {.} + } + {$plugin-type} + {$flow-type} + {$module-uri} + {$error} + {$input} + {$duration} + +}; diff --git a/marklogic-data-hub/src/main/resources/ml-modules/root/com.marklogic.hub/mlcp-flow-transform.xqy b/marklogic-data-hub/src/main/resources/ml-modules/root/com.marklogic.hub/mlcp-flow-transform.xqy index 00160fc58c..1e926513be 100644 --- a/marklogic-data-hub/src/main/resources/ml-modules/root/com.marklogic.hub/mlcp-flow-transform.xqy +++ b/marklogic-data-hub/src/main/resources/ml-modules/root/com.marklogic.hub/mlcp-flow-transform.xqy @@ -2,14 +2,43 @@ xquery version "1.0-ml"; module namespace mlcpFlow = "http://marklogic.com/data-hub/mlcp-flow-transform"; +import module namespace debug = "http://marklogic.com/data-hub/debug-lib" + at "/com.marklogic.hub/lib/debug-lib.xqy"; + import module namespace flow = "http://marklogic.com/data-hub/flow-lib" at "/com.marklogic.hub/lib/flow-lib.xqy"; +import module namespace trace = "http://marklogic.com/data-hub/trace" + at "/com.marklogic.hub/lib/trace-lib.xqy"; + +declare namespace hub = "http://marklogic.com/data-hub"; + +declare option xdmp:mapping "false"; + declare function mlcpFlow:transform( $content as map:map, $context as map:map ) as map:map* { + if (debug:on()) then + debug:log(( + "", + "", + "################################################################", + " MLCP INPUT TRANSFORM", + "", + "", + "$content:", + debug:dump-map($content, " "), + "", + "$context: ", + debug:dump-map($context, " "), + "", + "################################################################", + "", + "" + )) + else (), let $uri := map:get($content, "uri") let $paramNodes := xdmp:unquote(map:get($context, 'transform_param'))/node()/* @@ -21,8 +50,34 @@ declare function mlcpFlow:transform( map:get($paramMap, 'flow-name'), map:get($paramMap, 'flow-type')) - let $envelope := flow:run-plugins($flow, $uri, map:get($content, "value"), $paramMap) + let $envelope := try { + flow:run-plugins($flow, $uri, map:get($content, "value"), $paramMap) + } + catch($ex) { + xdmp:log($ex), + xdmp:rethrow() + } let $_ := map:put($content, "value", $envelope) + let $_ := + if (trace:enabled()) then + trace:create-trace( + trace:plugin-trace( + $uri, + if ($envelope instance of element()) then () + else + null-node {}, + "mlcp-writer", + $flow/hub:type, + $envelope, + if ($envelope instance of element()) then () + else + null-node {}, + xs:dayTimeDuration("PT0S"), + if ($envelope instance of element()) then "xml" + else "json" + ) + ) + else () return $content }; diff --git a/marklogic-data-hub/src/main/resources/ml-modules/services/debug.xqy b/marklogic-data-hub/src/main/resources/ml-modules/services/debug.xqy new file mode 100644 index 0000000000..ddde78ea40 --- /dev/null +++ b/marklogic-data-hub/src/main/resources/ml-modules/services/debug.xqy @@ -0,0 +1,50 @@ +(: + Copyright 2012-2016 MarkLogic Corporation + + 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. + See the License for the specific language governing permissions and + limitations under the License. +:) +xquery version "1.0-ml"; + +module namespace service = "http://marklogic.com/rest-api/resource/debug"; + +import module namespace debug = "http://marklogic.com/data-hub/debug-lib" + at "/com.marklogic.hub/lib/debug-lib.xqy"; + +declare namespace rapi = "http://marklogic.com/rest-api"; + +declare option xdmp:mapping "false"; + +declare function get( + $context as map:map, + $params as map:map + ) as document-node()* +{ + debug:dump-env(), + + document { debug:on() } +}; + +declare %rapi:transaction-mode("update") function post( + $context as map:map, + $params as map:map, + $input as document-node()* + ) as document-node()* +{ + debug:dump-env(), + + let $enable := map:get($params, "enable") = ("true", "yes") + let $_ := debug:enable($enable) + return + (), + document { () } +}; diff --git a/marklogic-data-hub/src/main/resources/ml-modules/services/entity.xqy b/marklogic-data-hub/src/main/resources/ml-modules/services/entity.xqy index 5a1c11bab1..8151bb9f27 100644 --- a/marklogic-data-hub/src/main/resources/ml-modules/services/entity.xqy +++ b/marklogic-data-hub/src/main/resources/ml-modules/services/entity.xqy @@ -41,7 +41,7 @@ declare function get( $params as map:map ) as document-node()* { - debug:dump-env(), + debug:dump-env("GET ENTITY(s)"), document { let $entity-name := map:get($params, "entity-name") @@ -50,7 +50,6 @@ declare function get( flow:get-entity($entity-name) else flow:get-entities() - let $_ := debug:log($resp) return $resp } diff --git a/marklogic-data-hub/src/main/resources/ml-modules/services/flow.xqy b/marklogic-data-hub/src/main/resources/ml-modules/services/flow.xqy index c7cac672a9..c17bc7f8c2 100644 --- a/marklogic-data-hub/src/main/resources/ml-modules/services/flow.xqy +++ b/marklogic-data-hub/src/main/resources/ml-modules/services/flow.xqy @@ -41,7 +41,7 @@ declare function get( $params as map:map ) as document-node()* { - debug:dump-env(), + debug:dump-env("GET FLOW"), document { let $entity-name := map:get($params, "entity-name") @@ -52,7 +52,6 @@ declare function get( flow:get-flow($entity-name, $flow-name, $flow-type) else flow:get-flows($entity-name) - let $_ := debug:log($resp) return $resp } @@ -69,7 +68,7 @@ declare %rapi:transaction-mode("update") function post( $input as document-node()* ) as document-node()* { - debug:dump-env(), + debug:dump-env("RUN FLOW"), let $flow as element(hub:flow) := $input/hub:flow let $identifier := map:get($params, "identifier") diff --git a/marklogic-data-hub/src/main/resources/ml-modules/services/metadata/debug.xml b/marklogic-data-hub/src/main/resources/ml-modules/services/metadata/debug.xml new file mode 100644 index 0000000000..8ccb977295 --- /dev/null +++ b/marklogic-data-hub/src/main/resources/ml-modules/services/metadata/debug.xml @@ -0,0 +1,13 @@ + + + debug + +
+ Entry point for debug +
+
+ + + + +
diff --git a/marklogic-data-hub/src/main/resources/ml-modules/transforms/run-flow.xqy b/marklogic-data-hub/src/main/resources/ml-modules/transforms/run-flow.xqy index 8140658710..c74b34742b 100644 --- a/marklogic-data-hub/src/main/resources/ml-modules/transforms/run-flow.xqy +++ b/marklogic-data-hub/src/main/resources/ml-modules/transforms/run-flow.xqy @@ -5,6 +5,11 @@ module namespace runFlow = "http://marklogic.com/rest-api/transform/run-flow"; import module namespace flow = "http://marklogic.com/data-hub/flow-lib" at "/com.marklogic.hub/lib/flow-lib.xqy"; +import module namespace trace = "http://marklogic.com/data-hub/trace" + at "/com.marklogic.hub/lib/trace-lib.xqy"; + +declare namespace hub = "http://marklogic.com/data-hub"; + declare function runFlow:transform( $context as map:map, $params as map:map, @@ -18,8 +23,27 @@ declare function runFlow:transform( let $uri := map:get($context, 'uri') - let $transformedContent := flow:run-plugins($flow, $uri, $content, $params) - - return document { $transformedContent } + let $envelope := flow:run-plugins($flow, $uri, $content, $params) + let $_ := + if (trace:enabled()) then + trace:create-trace( + trace:plugin-trace( + $uri, + if ($envelope instance of element()) then () + else + null-node {}, + $flow/hub:type, + "rest-document-writer", + $envelope, + if ($envelope instance of element()) then () + else + null-node {}, + xs:dayTimeDuration("PT0S"), + if ($envelope instance of element()) then "xml" + else "json" + ) + ) + else () + return document { $envelope } }; diff --git a/marklogic-data-hub/src/main/resources/scaffolding/conformance/sjs/headers.sjs b/marklogic-data-hub/src/main/resources/scaffolding/conformance/sjs/headers.sjs index 6994d0420d..efb96d569d 100644 --- a/marklogic-data-hub/src/main/resources/scaffolding/conformance/sjs/headers.sjs +++ b/marklogic-data-hub/src/main/resources/scaffolding/conformance/sjs/headers.sjs @@ -5,10 +5,10 @@ * @param content - the output of your content plugin * @param options - an object containing options. Options are sent from Java * - * @return - an array of header objects + * @return - an object of headers */ function createHeaders(id, content, options) { - return []; + return {}; } module.exports = { diff --git a/marklogic-data-hub/src/main/resources/scaffolding/input/sjs/headers.sjs b/marklogic-data-hub/src/main/resources/scaffolding/input/sjs/headers.sjs index 8aa692ccaf..2f7d26b073 100644 --- a/marklogic-data-hub/src/main/resources/scaffolding/input/sjs/headers.sjs +++ b/marklogic-data-hub/src/main/resources/scaffolding/input/sjs/headers.sjs @@ -5,10 +5,10 @@ * @param content - the output of your content plugin * @param options - an object containing options. Options are sent from Java * - * @return - an array of header objects + * @return - an object of headers */ function createHeaders(id, content, options) { - return []; + return {}; } module.exports = { diff --git a/marklogic-data-hub/src/test/java/com/marklogic/hub/EndToEndTestSjsXml.java b/marklogic-data-hub/src/test/java/com/marklogic/hub/EndToEndTestSjsXml.java index 7da67035d9..444050c6c8 100644 --- a/marklogic-data-hub/src/test/java/com/marklogic/hub/EndToEndTestSjsXml.java +++ b/marklogic-data-hub/src/test/java/com/marklogic/hub/EndToEndTestSjsXml.java @@ -35,6 +35,7 @@ public static void setup() throws IOException { installHub(); enableDebugging(); + enableTracing(); Scaffolding.createEntity(ENTITY, pluginsDir); Scaffolding.createFlow(ENTITY, "testinput", FlowType.INPUT, diff --git a/marklogic-data-hub/src/test/java/com/marklogic/hub/HubTestBase.java b/marklogic-data-hub/src/test/java/com/marklogic/hub/HubTestBase.java index 44a1bf84d4..32e63bd801 100644 --- a/marklogic-data-hub/src/test/java/com/marklogic/hub/HubTestBase.java +++ b/marklogic-data-hub/src/test/java/com/marklogic/hub/HubTestBase.java @@ -115,9 +115,9 @@ private static void init() { } host = properties.getProperty("mlHost"); - stagingPort = Integer.parseInt(properties.getProperty("mlStagingRestPort")); - finalPort = Integer.parseInt(properties.getProperty("mlFinalRestPort")); - tracePort = Integer.parseInt(properties.getProperty("mlTraceRestPort")); + stagingPort = Integer.parseInt(properties.getProperty("mlStagingPort")); + finalPort = Integer.parseInt(properties.getProperty("mlFinalPort")); + tracePort = Integer.parseInt(properties.getProperty("mlTracePort")); user = properties.getProperty("mlUsername"); password = properties.getProperty("mlPassword"); authMethod = Authentication.valueOf(properties.getProperty("auth").toUpperCase()); @@ -136,7 +136,11 @@ public HubTestBase() { } protected static void enableDebugging() { - stagingDocMgr.write("/debug", new StringHandle("true")); + new Debugging(stagingClient).enable(); + } + + protected static void enableTracing() { + new Tracing(stagingClient).enable(); } protected static HubConfig getHubConfig() { diff --git a/ml-data-hub-plugin/src/main/groovy/com/marklogic/gradle/task/CreateFlowTask.groovy b/ml-data-hub-plugin/src/main/groovy/com/marklogic/gradle/task/CreateFlowTask.groovy index 53fc016328..bf1da2f16d 100644 --- a/ml-data-hub-plugin/src/main/groovy/com/marklogic/gradle/task/CreateFlowTask.groovy +++ b/ml-data-hub-plugin/src/main/groovy/com/marklogic/gradle/task/CreateFlowTask.groovy @@ -1,15 +1,13 @@ package com.marklogic.gradle.task import com.marklogic.hub.Scaffolding; -import com.marklogic.hub.HubConfig; import com.marklogic.hub.PluginFormat; import com.marklogic.hub.flow.FlowType; import com.marklogic.client.io.Format; -import org.gradle.api.DefaultTask import org.gradle.api.tasks.TaskAction -class CreateFlowTask extends DefaultTask { +class CreateFlowTask extends HubTask { void createFlow(FlowType flowType) { def entityName = project.hasProperty("entityName") ? project.property("entityName") : null @@ -49,8 +47,4 @@ class CreateFlowTask extends DefaultTask { def userlandPath = new File(getHubConfig().modulesPath) Scaffolding.createFlow(entityName, flowName, flowType, pluginFormat, dataFormat, userlandPath) } - - HubConfig getHubConfig() { - getProject().property("hubConfig") - } } diff --git a/ml-data-hub-plugin/src/main/groovy/com/marklogic/gradle/task/DeployUserModulesTask.groovy b/ml-data-hub-plugin/src/main/groovy/com/marklogic/gradle/task/DeployUserModulesTask.groovy index 16331a945f..8253e507f9 100644 --- a/ml-data-hub-plugin/src/main/groovy/com/marklogic/gradle/task/DeployUserModulesTask.groovy +++ b/ml-data-hub-plugin/src/main/groovy/com/marklogic/gradle/task/DeployUserModulesTask.groovy @@ -1,12 +1,8 @@ package com.marklogic.gradle.task -import com.marklogic.hub.DataHub; -import com.marklogic.hub.HubConfig; - -import org.gradle.api.DefaultTask import org.gradle.api.tasks.TaskAction -class DeployUserModulesTask extends DefaultTask { +class DeployUserModulesTask extends HubTask { @TaskAction void deployUserModules() { @@ -19,13 +15,4 @@ class DeployUserModulesTask extends DefaultTask { def pathToUserModules = new File(getHubConfig().modulesPath) dh.installUserModules(pathToUserModules) } - - HubConfig getHubConfig() { - getProject().property("hubConfig") - } - - DataHub getDataHub() { - getProject().property("dataHub") - } - } diff --git a/ml-data-hub-plugin/src/main/groovy/com/marklogic/gradle/task/DisableDebuggingTask.groovy b/ml-data-hub-plugin/src/main/groovy/com/marklogic/gradle/task/DisableDebuggingTask.groovy new file mode 100644 index 0000000000..58c5970cd1 --- /dev/null +++ b/ml-data-hub-plugin/src/main/groovy/com/marklogic/gradle/task/DisableDebuggingTask.groovy @@ -0,0 +1,11 @@ +package com.marklogic.gradle.task + +import org.gradle.api.tasks.TaskAction + +class DisableDebuggingTask extends HubTask { + + @TaskAction + void disableDebugging() { + getDebugging().disable() + } +} diff --git a/ml-data-hub-plugin/src/main/groovy/com/marklogic/gradle/task/DisableTracingTask.groovy b/ml-data-hub-plugin/src/main/groovy/com/marklogic/gradle/task/DisableTracingTask.groovy new file mode 100644 index 0000000000..a24738a15b --- /dev/null +++ b/ml-data-hub-plugin/src/main/groovy/com/marklogic/gradle/task/DisableTracingTask.groovy @@ -0,0 +1,11 @@ +package com.marklogic.gradle.task + +import org.gradle.api.tasks.TaskAction + +class DisableTracingTask extends HubTask { + + @TaskAction + void disableTracing() { + getTracing().disable() + } +} diff --git a/ml-data-hub-plugin/src/main/groovy/com/marklogic/gradle/task/EnableDebuggingTask.groovy b/ml-data-hub-plugin/src/main/groovy/com/marklogic/gradle/task/EnableDebuggingTask.groovy new file mode 100644 index 0000000000..d22bf9e693 --- /dev/null +++ b/ml-data-hub-plugin/src/main/groovy/com/marklogic/gradle/task/EnableDebuggingTask.groovy @@ -0,0 +1,11 @@ +package com.marklogic.gradle.task + +import org.gradle.api.tasks.TaskAction + +class EnableDebuggingTask extends DefaultTask { + + @TaskAction + void enableDebugging() { + getDebugging().enable() + } +} diff --git a/ml-data-hub-plugin/src/main/groovy/com/marklogic/gradle/task/EnableTracingTask.groovy b/ml-data-hub-plugin/src/main/groovy/com/marklogic/gradle/task/EnableTracingTask.groovy new file mode 100644 index 0000000000..f045b20a09 --- /dev/null +++ b/ml-data-hub-plugin/src/main/groovy/com/marklogic/gradle/task/EnableTracingTask.groovy @@ -0,0 +1,11 @@ +package com.marklogic.gradle.task + +import org.gradle.api.tasks.TaskAction + +class EnableTracingTask extends DefaultTask { + + @TaskAction + void enableTracing() { + getTracing().enable() + } +} diff --git a/ml-data-hub-plugin/src/main/groovy/com/marklogic/gradle/task/HubTask.groovy b/ml-data-hub-plugin/src/main/groovy/com/marklogic/gradle/task/HubTask.groovy new file mode 100644 index 0000000000..b5a5ad5a7d --- /dev/null +++ b/ml-data-hub-plugin/src/main/groovy/com/marklogic/gradle/task/HubTask.groovy @@ -0,0 +1,48 @@ +package com.marklogic.gradle.task + +import com.marklogic.hub.Tracing; +import com.marklogic.hub.HubConfig; + +import com.marklogic.client.DatabaseClient; +import com.marklogic.client.DatabaseClientFactory; +import com.marklogic.client.DatabaseClientFactory.Authentication; + +import com.marklogic.hub.FlowManager; +import com.marklogic.hub.flow.Flow; + +import org.gradle.api.DefaultTask +import org.gradle.api.tasks.TaskAction + +class HubTask extends DefaultTask { + + HubConfig getHubConfig() { + getProject().property("hubConfig") + } + + DataHub getDataHub() { + getProject().property("dataHub") + } + + Tracing getTracing() { + return new Tracing(getStagingClient()) + } + + Tracing getDebugging() { + return new Tracing(getStagingClient()) + } + + FlowManager getFlowManager() { + return new FlowManager(getStagingClient()) + } + + DatabaseClient getStagingClient() { + HubConfig hc = getHubConfig() + Authentication authMethod = Authentication.valueOf(hc.authMethod.toUpperCase()) + return DatabaseClientFactory.newClient( + hc.host, + hc.stagingPort, + hc.adminUsername, + hc.adminPassword, + authMethod); + } +} diff --git a/ml-data-hub-plugin/src/main/groovy/com/marklogic/gradle/task/InstallHubTask.groovy b/ml-data-hub-plugin/src/main/groovy/com/marklogic/gradle/task/InstallHubTask.groovy index 7c06c0a804..f9c4a7f8ea 100644 --- a/ml-data-hub-plugin/src/main/groovy/com/marklogic/gradle/task/InstallHubTask.groovy +++ b/ml-data-hub-plugin/src/main/groovy/com/marklogic/gradle/task/InstallHubTask.groovy @@ -1,24 +1,11 @@ package com.marklogic.gradle.task -import com.marklogic.hub.DataHub; -import com.marklogic.hub.HubConfig; - -import org.gradle.api.DefaultTask import org.gradle.api.tasks.TaskAction -class InstallHubTask extends DefaultTask { +class InstallHubTask extends HubTask { @TaskAction void installHub() { getDataHub().install() } - - HubConfig getHubConfig() { - getProject().property("hubConfig") - } - - DataHub getDataHub() { - getProject().property("dataHub") - } - } diff --git a/ml-data-hub-plugin/src/main/groovy/com/marklogic/gradle/task/RunFlowTask.groovy b/ml-data-hub-plugin/src/main/groovy/com/marklogic/gradle/task/RunFlowTask.groovy index 3f44789d1b..8f7b792626 100644 --- a/ml-data-hub-plugin/src/main/groovy/com/marklogic/gradle/task/RunFlowTask.groovy +++ b/ml-data-hub-plugin/src/main/groovy/com/marklogic/gradle/task/RunFlowTask.groovy @@ -1,18 +1,8 @@ package com.marklogic.gradle.task -import com.marklogic.hub.HubConfig; - -import com.marklogic.client.DatabaseClient; -import com.marklogic.client.DatabaseClientFactory; -import com.marklogic.client.DatabaseClientFactory.Authentication; -import com.marklogic.hub.DataHub; -import com.marklogic.hub.FlowManager; -import com.marklogic.hub.flow.Flow; - -import org.gradle.api.DefaultTask import org.gradle.api.tasks.TaskAction -class RunFlowTask extends DefaultTask { +class RunFlowTask extends HubTask { @TaskAction void runFlow() { @@ -37,8 +27,8 @@ class RunFlowTask extends DefaultTask { return } - FlowManager fm = getFlowManager() - Flow flow = fm.getFlow(entityName, flowName, flowType) + def fm = getFlowManager() + def flow = fm.getFlow(entityName, flowName, flowType) if (flow) { println("Running Flow: [" + entityName + ":" + flowName + "] with batch size: " + batchSize) fm.runFlow(flow, batchSize) @@ -47,25 +37,4 @@ class RunFlowTask extends DefaultTask { println("Flow Not Found: [" + entityName + ":" + flowName + "]") } } - - HubConfig getHubConfig() { - getProject().property("hubConfig") - } - - DataHub getDataHub() { - getProject().property("dataHub") - } - - FlowManager getFlowManager() { - HubConfig hc = getHubConfig() - Authentication authMethod = Authentication.valueOf(hc.authMethod.toUpperCase()) - DatabaseClient client = DatabaseClientFactory.newClient( - hc.host, - hc.stagingPort, - hc.adminUsername, - hc.adminPassword, - authMethod); - return new FlowManager(client) - } - } diff --git a/ml-data-hub-plugin/src/main/groovy/com/marklogic/gradle/task/UninstallHubTask.groovy b/ml-data-hub-plugin/src/main/groovy/com/marklogic/gradle/task/UninstallHubTask.groovy index 4f5228d7ab..51088618c4 100644 --- a/ml-data-hub-plugin/src/main/groovy/com/marklogic/gradle/task/UninstallHubTask.groovy +++ b/ml-data-hub-plugin/src/main/groovy/com/marklogic/gradle/task/UninstallHubTask.groovy @@ -1,24 +1,11 @@ package com.marklogic.gradle.task -import com.marklogic.hub.DataHub; -import com.marklogic.hub.HubConfig; - -import org.gradle.api.DefaultTask import org.gradle.api.tasks.TaskAction -class UninstallHubTask extends DefaultTask { +class UninstallHubTask extends HubTask { @TaskAction void unInstallHub() { getDataHub().uninstall() } - - HubConfig getHubConfig() { - getProject().property("hubConfig") - } - - DataHub getDataHub() { - getProject().property("dataHub") - } - } diff --git a/quick-start/src/main/java/com/marklogic/hub/config/EnvironmentConfiguration.java b/quick-start/src/main/java/com/marklogic/hub/config/EnvironmentConfiguration.java index bc671bb275..8aac731b5e 100644 --- a/quick-start/src/main/java/com/marklogic/hub/config/EnvironmentConfiguration.java +++ b/quick-start/src/main/java/com/marklogic/hub/config/EnvironmentConfiguration.java @@ -37,9 +37,9 @@ public class EnvironmentConfiguration { private static final String ML_HOST = "mlHost"; private static final String ML_USERNAME = "mlUsername"; private static final String ML_PASSWORD = "mlPassword"; - private static final String ML_STAGING_REST_PORT = "mlStagingRestPort"; - private static final String ML_FINAL_REST_PORT = "mlFinalRestPort"; - private static final String ML_TRACE_REST_PORT = "mlTraceRestPort"; + private static final String ML_STAGING_REST_PORT = "mlStagingPort"; + private static final String ML_FINAL_REST_PORT = "mlFinalPort"; + private static final String ML_TRACE_REST_PORT = "mlTracePort"; private static final String ML_AUTH = "mlAuth"; private static final String USER_PLUGIN_DIR = "userPluginDir"; private static final String ASSET_INSTALL_TIME_FILE = "assetInstallTimeFile"; @@ -93,7 +93,7 @@ public String getMLPassword() { return this.environment.getProperty(ML_PASSWORD + DEFAULT_SUFFIX); } - public String getMLStagingRestPort() { + public String getMLStagingPort() { String value = this.environmentProperties.getProperty(ML_STAGING_REST_PORT); if (value != null) { return value; @@ -106,7 +106,7 @@ public String getMLStagingRestPort() { return this.environment.getProperty(ML_STAGING_REST_PORT + DEFAULT_SUFFIX); } - public String getMLFinalRestPort() { + public String getMLFinalPort() { String value = this.environmentProperties.getProperty(ML_FINAL_REST_PORT); if (value != null) { return value; @@ -119,7 +119,7 @@ public String getMLFinalRestPort() { return this.environment.getProperty(ML_FINAL_REST_PORT + DEFAULT_SUFFIX); } - public String getMLTraceRestPort() { + public String getMLTracePort() { String value = this.environmentProperties.getProperty(ML_TRACE_REST_PORT); if (value != null) { return value; @@ -175,16 +175,16 @@ public void setMLHost(String mlHost) { this.environmentProperties.setProperty(ML_HOST, mlHost); } - public void setMLStagingRestPort(String mlStagingRestPort) { - this.environmentProperties.setProperty(ML_STAGING_REST_PORT, mlStagingRestPort); + public void setMLStagingPort(String mlStagingPort) { + this.environmentProperties.setProperty(ML_STAGING_REST_PORT, mlStagingPort); } - public void setMLFinalRestPort(String mlFinalRestPort) { - this.environmentProperties.setProperty(ML_FINAL_REST_PORT, mlFinalRestPort); + public void setMLFinalPort(String mlFinalPort) { + this.environmentProperties.setProperty(ML_FINAL_REST_PORT, mlFinalPort); } - public void setMlTraceRestPort(String mlTraceRestPort) { - this.environmentProperties.setProperty(ML_TRACE_REST_PORT, mlTraceRestPort); + public void setMlTracePort(String mlTracePort) { + this.environmentProperties.setProperty(ML_TRACE_REST_PORT, mlTracePort); } public void setMLUsername(String mlUsername) { @@ -257,9 +257,9 @@ public String getFlowInputPath(String entityName, String flowName) { public HubConfig getHubConfig() { HubConfig hubConfig = new HubConfig(); hubConfig.host = getMLHost(); - hubConfig.stagingPort = Integer.parseInt(getMLStagingRestPort()); - hubConfig.finalPort = Integer.parseInt(getMLFinalRestPort()); - hubConfig.tracePort = Integer.parseInt(getMLTraceRestPort()); + hubConfig.stagingPort = Integer.parseInt(getMLStagingPort()); + hubConfig.finalPort = Integer.parseInt(getMLFinalPort()); + hubConfig.tracePort = Integer.parseInt(getMLTracePort()); hubConfig.adminUsername = getMLUsername(); hubConfig.adminPassword = getMLPassword(); return hubConfig; diff --git a/quick-start/src/main/java/com/marklogic/hub/service/DataHubService.java b/quick-start/src/main/java/com/marklogic/hub/service/DataHubService.java index 4a0f6c028d..afa330e413 100644 --- a/quick-start/src/main/java/com/marklogic/hub/service/DataHubService.java +++ b/quick-start/src/main/java/com/marklogic/hub/service/DataHubService.java @@ -49,7 +49,7 @@ private DataHub getDataHub() throws DataHubException { LOGGER.info("Connecting to DataHub at host is {}:{} with user={}", new Object[] { environmentConfiguration.getMLHost() - ,environmentConfiguration.getMLStagingRestPort() + ,environmentConfiguration.getMLStagingPort() ,environmentConfiguration.getMLUsername() }); DataHub dataHub = new DataHub(environmentConfiguration.getHubConfig()); diff --git a/quick-start/src/main/java/com/marklogic/hub/service/EntityManagerService.java b/quick-start/src/main/java/com/marklogic/hub/service/EntityManagerService.java index 8e3a9e55ca..db1456fa81 100644 --- a/quick-start/src/main/java/com/marklogic/hub/service/EntityManagerService.java +++ b/quick-start/src/main/java/com/marklogic/hub/service/EntityManagerService.java @@ -43,7 +43,7 @@ public EntityManager getEntityManager() { .valueOf(environmentConfiguration.getMLAuth().toUpperCase()); DatabaseClient client = DatabaseClientFactory.newClient( environmentConfiguration.getMLHost(), - Integer.parseInt(environmentConfiguration.getMLStagingRestPort()), + Integer.parseInt(environmentConfiguration.getMLStagingPort()), environmentConfiguration.getMLUsername(), environmentConfiguration.getMLPassword(), authMethod); return new EntityManager(client); diff --git a/quick-start/src/main/java/com/marklogic/hub/service/FlowManagerService.java b/quick-start/src/main/java/com/marklogic/hub/service/FlowManagerService.java index d0b2235dbb..ae8b1a4f1a 100644 --- a/quick-start/src/main/java/com/marklogic/hub/service/FlowManagerService.java +++ b/quick-start/src/main/java/com/marklogic/hub/service/FlowManagerService.java @@ -39,7 +39,7 @@ public FlowManager getFlowManager() { .valueOf(environmentConfiguration.getMLAuth().toUpperCase()); DatabaseClient client = DatabaseClientFactory.newClient( environmentConfiguration.getMLHost(), - Integer.parseInt(environmentConfiguration.getMLStagingRestPort()), + Integer.parseInt(environmentConfiguration.getMLStagingPort()), environmentConfiguration.getMLUsername(), environmentConfiguration.getMLPassword(), authMethod); return new FlowManager(client); @@ -74,7 +74,7 @@ public JobExecution testFlow(Flow flow) { public JobExecution runFlow(Flow flow, int batchSize) { return runFlow(flow, batchSize, null); } - + public JobExecution runFlow(Flow flow, int batchSize, JobExecutionListener listener) { FlowManager flowManager = getFlowManager(); return flowManager.runFlow(flow, batchSize, listener); diff --git a/quick-start/src/main/java/com/marklogic/hub/web/controller/api/DataHubServerApiController.java b/quick-start/src/main/java/com/marklogic/hub/web/controller/api/DataHubServerApiController.java index ed60478a2c..b9816e6c52 100644 --- a/quick-start/src/main/java/com/marklogic/hub/web/controller/api/DataHubServerApiController.java +++ b/quick-start/src/main/java/com/marklogic/hub/web/controller/api/DataHubServerApiController.java @@ -181,9 +181,9 @@ public JsonNode validateUserModules(HttpSession session) { private void updateEnvironmentConfiguration(LoginForm loginForm) { environmentConfiguration.setMLHost(loginForm.getMlHost()); - environmentConfiguration.setMLStagingRestPort(loginForm.getMlStagingRestPort()); - environmentConfiguration.setMLFinalRestPort(loginForm.getMlFinalRestPort()); - environmentConfiguration.setMlTraceRestPort(loginForm.getMlTraceRestPort()); + environmentConfiguration.setMLStagingPort(loginForm.getMlStagingPort()); + environmentConfiguration.setMLFinalPort(loginForm.getMlFinalPort()); + environmentConfiguration.setMlTracePort(loginForm.getMlTracePort()); environmentConfiguration.setMLUsername(loginForm.getMlUsername()); environmentConfiguration.setMLPassword(loginForm.getMlPassword()); environmentConfiguration.setUserPluginDir(loginForm.getUserPluginDir()); @@ -191,9 +191,9 @@ private void updateEnvironmentConfiguration(LoginForm loginForm) { private void retrieveEnvironmentConfiguration(LoginForm loginForm) { loginForm.setMlHost(environmentConfiguration.getMLHost()); - loginForm.setMlStagingRestPort(environmentConfiguration.getMLStagingRestPort()); - loginForm.setMlFinalRestPort(environmentConfiguration.getMLFinalRestPort()); - loginForm.setMlTraceRestPort(environmentConfiguration.getMLTraceRestPort()); + loginForm.setMlStagingPort(environmentConfiguration.getMLStagingPort()); + loginForm.setMlFinalPort(environmentConfiguration.getMLFinalPort()); + loginForm.setMlTracePort(environmentConfiguration.getMLTracePort()); loginForm.setMlUsername(environmentConfiguration.getMLUsername()); loginForm.setMlPassword(environmentConfiguration.getMLPassword()); loginForm.setUserPluginDir(environmentConfiguration.getUserPluginDir()); diff --git a/quick-start/src/main/java/com/marklogic/hub/web/controller/api/FlowApiController.java b/quick-start/src/main/java/com/marklogic/hub/web/controller/api/FlowApiController.java index fd6c34ad91..88a6509173 100644 --- a/quick-start/src/main/java/com/marklogic/hub/web/controller/api/FlowApiController.java +++ b/quick-start/src/main/java/com/marklogic/hub/web/controller/api/FlowApiController.java @@ -190,9 +190,9 @@ public void afterJob(JobExecution jobExecution) { @RequestMapping(value="/run/input", method = RequestMethod.POST) public BigInteger runInputFlow(@RequestBody RunFlowModel runFlow) { - + saveInputPath(runFlow); - + CancellableTask task = new CancellableTask() { @Override @@ -204,10 +204,10 @@ public void cancel(BasicFuture resultFuture) { public void run(BasicFuture resultFuture) { try { Flow flow = flowManagerService.getFlow(runFlow.getEntityName(), runFlow.getFlowName()); - + Mlcp mlcp = new Mlcp( environmentConfiguration.getMLHost() - ,Integer.parseInt(environmentConfiguration.getMLStagingRestPort()) + ,Integer.parseInt(environmentConfiguration.getMLStagingPort()) ,environmentConfiguration.getMLUsername() ,environmentConfiguration.getMLPassword() ); @@ -225,7 +225,7 @@ public void run(BasicFuture resultFuture) { resultFuture.completed(null); } - + catch (IOException e) { LOGGER.error("Error encountered while trying to run flow: " + runFlow.getEntityName() + " > " + runFlow.getFlowName(), @@ -234,10 +234,10 @@ public void run(BasicFuture resultFuture) { } } }; - + return taskManagerService.addTask(task); } - + @RequestMapping(value = "/input-path", method = RequestMethod.GET, produces = { MediaType.TEXT_PLAIN_VALUE }) @ResponseBody public String getPreviousInputPath(HttpServletRequest request) { @@ -245,7 +245,7 @@ public String getPreviousInputPath(HttpServletRequest request) { String flowName = request.getParameter("flowName"); return getPreviousInputPath(entityName,flowName); } - + private String getPreviousInputPath(String entityName, String flowName) { String value = environmentConfiguration.getFlowInputPath(entityName, flowName); return value == null ? "." : value; diff --git a/quick-start/src/main/java/com/marklogic/hub/web/form/LoginForm.java b/quick-start/src/main/java/com/marklogic/hub/web/form/LoginForm.java index 8fdd1177fc..40b983df0c 100644 --- a/quick-start/src/main/java/com/marklogic/hub/web/form/LoginForm.java +++ b/quick-start/src/main/java/com/marklogic/hub/web/form/LoginForm.java @@ -1,135 +1,135 @@ -package com.marklogic.hub.web.form; - -import java.util.ArrayList; -import java.util.List; - -import com.marklogic.hub.model.EntityModel; - -public class LoginForm extends BaseForm { - - private String mlHost; - private String mlStagingRestPort; - private String mlFinalRestPort; - private String mlTraceRestPort; - private String mlUsername; - private String mlPassword; - private String userPluginDir; - private boolean serverVersionAccepted; - private boolean installed; - private boolean loggedIn; - private List entities = new ArrayList(); - private EntityModel selectedEntity; - - public String getMlHost() { - return mlHost; - } - - public void setMlHost(String mlHost) { - this.mlHost = mlHost; - } - - public String getMlStagingRestPort() { - return mlStagingRestPort; - } - - public void setMlStagingRestPort(String mlStagingRestPort) { - this.mlStagingRestPort = mlStagingRestPort; - } - - public String getMlFinalRestPort() { - return mlFinalRestPort; - } - - public void setMlFinalRestPort(String mlFinalRestPort) { - this.mlFinalRestPort = mlFinalRestPort; - } - - public String getMlTraceRestPort() { - return mlTraceRestPort; - } - - public void setMlTraceRestPort(String mlTraceRestPort) { - this.mlTraceRestPort = mlTraceRestPort; - } - - public String getMlUsername() { - return mlUsername; - } - - public void setMlUsername(String mlUsername) { - this.mlUsername = mlUsername; - } - - public String getMlPassword() { - return mlPassword; - } - - public void setMlPassword(String mlPassword) { - this.mlPassword = mlPassword; - } - - public boolean isServerVersionAccepted() { - return serverVersionAccepted; - } - - public void setServerVersionAccepted(boolean serverVersionAccepted) { - this.serverVersionAccepted = serverVersionAccepted; - } - - public boolean isInstalled() { - return installed; - } - - public void setInstalled(boolean installed) { - this.installed = installed; - } - - public boolean isLoggedIn() { - return loggedIn; - } - - public void setLoggedIn(boolean loggedIn) { - this.loggedIn = loggedIn; - } - - public String getUserPluginDir() { - return userPluginDir; - } - - public void setUserPluginDir(String userPluginDir) { - this.userPluginDir = userPluginDir; - } - - public List getEntities() { - return entities; - } - - public void setEntities(List entities) { - this.entities = entities; - } - - public EntityModel getSelectedEntity() { - return selectedEntity; - } - - public void setSelectedEntity(EntityModel selectedEntity) { - this.selectedEntity = selectedEntity; - } - - public void selectEntity(String entityName) { - if (entities != null) { - for (EntityModel entity : entities) { - if (entity.getEntityName().equals(entityName)) { - setSelectedEntity(entity); - return; - } - } - } - } - - public void refreshSelectedEntity() { - if (selectedEntity != null) { - selectEntity(selectedEntity.getEntityName()); - } - } -} +package com.marklogic.hub.web.form; + +import java.util.ArrayList; +import java.util.List; + +import com.marklogic.hub.model.EntityModel; + +public class LoginForm extends BaseForm { + + private String mlHost; + private String mlStagingPort; + private String mlFinalPort; + private String mlTracePort; + private String mlUsername; + private String mlPassword; + private String userPluginDir; + private boolean serverVersionAccepted; + private boolean installed; + private boolean loggedIn; + private List entities = new ArrayList(); + private EntityModel selectedEntity; + + public String getMlHost() { + return mlHost; + } + + public void setMlHost(String mlHost) { + this.mlHost = mlHost; + } + + public String getMlStagingPort() { + return mlStagingPort; + } + + public void setMlStagingPort(String mlStagingPort) { + this.mlStagingPort = mlStagingPort; + } + + public String getMlFinalPort() { + return mlFinalPort; + } + + public void setMlFinalPort(String mlFinalPort) { + this.mlFinalPort = mlFinalPort; + } + + public String getMlTracePort() { + return mlTracePort; + } + + public void setMlTracePort(String mlTracePort) { + this.mlTracePort = mlTracePort; + } + + public String getMlUsername() { + return mlUsername; + } + + public void setMlUsername(String mlUsername) { + this.mlUsername = mlUsername; + } + + public String getMlPassword() { + return mlPassword; + } + + public void setMlPassword(String mlPassword) { + this.mlPassword = mlPassword; + } + + public boolean isServerVersionAccepted() { + return serverVersionAccepted; + } + + public void setServerVersionAccepted(boolean serverVersionAccepted) { + this.serverVersionAccepted = serverVersionAccepted; + } + + public boolean isInstalled() { + return installed; + } + + public void setInstalled(boolean installed) { + this.installed = installed; + } + + public boolean isLoggedIn() { + return loggedIn; + } + + public void setLoggedIn(boolean loggedIn) { + this.loggedIn = loggedIn; + } + + public String getUserPluginDir() { + return userPluginDir; + } + + public void setUserPluginDir(String userPluginDir) { + this.userPluginDir = userPluginDir; + } + + public List getEntities() { + return entities; + } + + public void setEntities(List entities) { + this.entities = entities; + } + + public EntityModel getSelectedEntity() { + return selectedEntity; + } + + public void setSelectedEntity(EntityModel selectedEntity) { + this.selectedEntity = selectedEntity; + } + + public void selectEntity(String entityName) { + if (entities != null) { + for (EntityModel entity : entities) { + if (entity.getEntityName().equals(entityName)) { + setSelectedEntity(entity); + return; + } + } + } + } + + public void refreshSelectedEntity() { + if (selectedEntity != null) { + selectEntity(selectedEntity.getEntityName()); + } + } +} diff --git a/quick-start/src/main/resources/application.properties b/quick-start/src/main/resources/application.properties index 53cdd74f23..290586c145 100644 --- a/quick-start/src/main/resources/application.properties +++ b/quick-start/src/main/resources/application.properties @@ -4,9 +4,9 @@ server.contextPath=/ spring.thymeleaf.cache=true logging.level.com.marklogic.hub: DEBUG mlHost.default=localhost -mlStagingRestPort.default=8010 -mlFinalRestPort.default=8011 -mlTraceRestPort.default=8012 +mlStagingPort.default=8010 +mlFinalPort.default=8011 +mlTracePort.default=8012 mlUsername.default=admin mlPassword.default=admin mlAuth.default=digest diff --git a/quick-start/src/main/resources/static/login/login.html b/quick-start/src/main/resources/static/login/login.html index e3cfb951c2..66537d1a89 100644 --- a/quick-start/src/main/resources/static/login/login.html +++ b/quick-start/src/main/resources/static/login/login.html @@ -23,16 +23,16 @@

Login

- - + +
- - + +
- +