Split up xpack plugins into their own modules (elastic/x-pack-elasticsearch#3643)
Thanks to some great work by a bunch of amazing people, the chuck norris xpack split is a go! Original commit: elastic/x-pack-elasticsearch@dad98e28f4
This commit is contained in:
parent
744d9325e9
commit
f3ec4a5208
10
build.gradle
10
build.gradle
|
@ -53,8 +53,16 @@ subprojects {
|
|||
approvedLicenses = ['Elasticsearch Confidential']
|
||||
additionalLicense 'ESCON', 'Elasticsearch Confidential', 'ELASTICSEARCH CONFIDENTIAL'
|
||||
}
|
||||
ext.projectSubstitutions += [ "org.elasticsearch.plugin:x-pack-api:${version}": ':x-pack-elasticsearch:plugin']
|
||||
ext.projectSubstitutions += [ "org.elasticsearch.plugin:x-pack-api:${version}": ':x-pack-elasticsearch:plugin:core']
|
||||
ext.projectSubstitutions += [ "org.elasticsearch.plugin:x-pack-core:${version}": ':x-pack-elasticsearch:plugin:core']
|
||||
ext.projectSubstitutions += [ "org.elasticsearch.plugin:x-pack-deprecation:${version}": ':x-pack-elasticsearch:plugin:deprecation']
|
||||
ext.projectSubstitutions += [ "org.elasticsearch.plugin:x-pack-graph:${version}": ':x-pack-elasticsearch:plugin:graph']
|
||||
ext.projectSubstitutions += [ "org.elasticsearch.plugin:x-pack-logstash:${version}": ':x-pack-elasticsearch:plugin:logstash']
|
||||
ext.projectSubstitutions += [ "org.elasticsearch.plugin:x-pack-ml:${version}": ':x-pack-elasticsearch:plugin:ml']
|
||||
ext.projectSubstitutions += [ "org.elasticsearch.plugin:x-pack-monitoring:${version}": ':x-pack-elasticsearch:plugin:monitoring']
|
||||
ext.projectSubstitutions += [ "org.elasticsearch.plugin:x-pack-security:${version}": ':x-pack-elasticsearch:plugin:security']
|
||||
ext.projectSubstitutions += [ "org.elasticsearch.plugin:x-pack-upgrade:${version}": ':x-pack-elasticsearch:plugin:upgrade']
|
||||
ext.projectSubstitutions += [ "org.elasticsearch.plugin:x-pack-watcher:${version}": ':x-pack-elasticsearch:plugin:watcher']
|
||||
|
||||
for (final Version version : versionCollection.versionsIndexCompatibleWithCurrent) {
|
||||
if (version.branch != null) {
|
||||
|
|
|
@ -5,23 +5,21 @@
|
|||
|
||||
<suppressions>
|
||||
<!-- On Windows, Checkstyle matches files using \ path separator -->
|
||||
<suppress files="plugin[/\\]src[/\\]main[/\\]java[/\\]org[/\\]elasticsearch[/\\]xpack[/\\]common[/\\]action[/\\]XPackDeleteByQueryAction.java" checks="LineLength" />
|
||||
<suppress files="plugin[/\\]src[/\\]main[/\\]java[/\\]org[/\\]elasticsearch[/\\]xpack[/\\]ml[/\\]action[/\\]StopDatafeedAction.java" checks="LineLength" />
|
||||
<suppress files="plugin[/\\]src[/\\]main[/\\]java[/\\]org[/\\]elasticsearch[/\\]xpack[/\\]ml[/\\]utils[/\\]DomainSplitFunction.java" checks="LineLength" />
|
||||
<suppress files="plugin[/\\]src[/\\]main[/\\]java[/\\]org[/\\]elasticsearch[/\\]xpack[/\\]persistent[/\\]CompletionPersistentTaskAction.java" checks="LineLength" />
|
||||
<suppress files="plugin[/\\]src[/\\]main[/\\]java[/\\]org[/\\]elasticsearch[/\\]xpack[/\\]security[/\\]Security.java" checks="LineLength" />
|
||||
<suppress files="plugin[/\\]src[/\\]main[/\\]java[/\\]org[/\\]elasticsearch[/\\]xpack[/\\]security[/\\]authc[/\\]Realms.java" checks="LineLength" />
|
||||
<suppress files="plugin[/\\]src[/\\]test[/\\]java[/\\]org[/\\]elasticsearch[/\\]xpack[/\\]ml[/\\]integration[/\\]TooManyJobsIT.java" checks="LineLength" />
|
||||
<suppress files="plugin[/\\]src[/\\]test[/\\]java[/\\]org[/\\]elasticsearch[/\\]xpack[/\\]monitoring[/\\]OldMonitoringIndicesBackwardsCompatibilityTests.java" checks="LineLength" />
|
||||
<suppress files="plugin[/\\]src[/\\]test[/\\]java[/\\]org[/\\]elasticsearch[/\\]xpack[/\\]persistent[/\\]TestPersistentTasksPlugin.java" checks="LineLength" />
|
||||
<suppress files="plugin[/\\]src[/\\]test[/\\]java[/\\]org[/\\]elasticsearch[/\\]xpack[/\\]security[/\\]action[/\\]user[/\\]TransportGetUsersActionTests.java" checks="LineLength" />
|
||||
<suppress files="plugin[/\\]src[/\\]test[/\\]java[/\\]org[/\\]elasticsearch[/\\]xpack[/\\]security[/\\]authc[/\\]file[/\\]FileRealmTests.java" checks="LineLength" />
|
||||
<suppress files="plugin[/\\]src[/\\]test[/\\]java[/\\]org[/\\]elasticsearch[/\\]xpack[/\\]security[/\\]authc[/\\]ldap[/\\]ActiveDirectoryRealmTests.java" checks="LineLength" />
|
||||
<suppress files="plugin[/\\]src[/\\]test[/\\]java[/\\]org[/\\]elasticsearch[/\\]xpack[/\\]security[/\\]authc[/\\]ldap[/\\]ActiveDirectorySessionFactoryTests.java" checks="LineLength" />
|
||||
<suppress files="plugin[/\\]src[/\\]test[/\\]java[/\\]org[/\\]elasticsearch[/\\]xpack[/\\]security[/\\]authc[/\\]ldap[/\\]LdapRealmTests.java" checks="LineLength" />
|
||||
<suppress files="plugin[/\\]src[/\\]test[/\\]java[/\\]org[/\\]elasticsearch[/\\]xpack[/\\]security[/\\]authc[/\\]ldap[/\\]LdapSessionFactoryTests.java" checks="LineLength" />
|
||||
<suppress files="plugin[/\\]src[/\\]test[/\\]java[/\\]org[/\\]elasticsearch[/\\]xpack[/\\]security[/\\]authc[/\\]ldap[/\\]LdapUserSearchSessionFactoryTests.java" checks="LineLength" />
|
||||
<suppress files="plugin[/\\]src[/\\]test[/\\]java[/\\]org[/\\]elasticsearch[/\\]xpack[/\\]security[/\\]authc[/\\]ldap[/\\]support[/\\]SessionFactoryTests.java" checks="LineLength" />
|
||||
<suppress files="plugin[/\\]src[/\\]test[/\\]java[/\\]org[/\\]elasticsearch[/\\]xpack[/\\]security[/\\]authc[/\\]pki[/\\]PkiRealmTests.java" checks="LineLength" />
|
||||
<suppress files="plugin[/\\]core[/\\]src[/\\]main[/\\]java[/\\]org[/\\]elasticsearch[/\\]xpack[/\\]ml[/\\]action[/\\]StopDatafeedAction.java" checks="LineLength" />
|
||||
<suppress files="plugin[/\\]ml[/\\]src[/\\]main[/\\]java[/\\]org[/\\]elasticsearch[/\\]xpack[/\\]ml[/\\]utils[/\\]DomainSplitFunction.java" checks="LineLength" />
|
||||
<suppress files="plugin[/\\]core[/\\]src[/\\]main[/\\]java[/\\]org[/\\]elasticsearch[/\\]xpack[/\\]persistent[/\\]CompletionPersistentTaskAction.java" checks="LineLength" />
|
||||
<suppress files="plugin[/\\]security[/\\]src[/\\]main[/\\]java[/\\]org[/\\]elasticsearch[/\\]xpack[/\\]security[/\\]Security.java" checks="LineLength" />
|
||||
<suppress files="plugin[/\\]security[/\\]src[/\\]main[/\\]java[/\\]org[/\\]elasticsearch[/\\]xpack[/\\]security[/\\]authc[/\\]Realms.java" checks="LineLength" />
|
||||
<suppress files="plugin[/\\]ml[/\\]src[/\\]test[/\\]java[/\\]org[/\\]elasticsearch[/\\]xpack[/\\]ml[/\\]integration[/\\]TooManyJobsIT.java" checks="LineLength" />
|
||||
<suppress files="plugin[/\\]core[/\\]src[/\\]test[/\\]java[/\\]org[/\\]elasticsearch[/\\]xpack[/\\]persistent[/\\]TestPersistentTasksPlugin.java" checks="LineLength" />
|
||||
<suppress files="plugin[/\\]security[/\\]src[/\\]test[/\\]java[/\\]org[/\\]elasticsearch[/\\]xpack[/\\]security[/\\]action[/\\]user[/\\]TransportGetUsersActionTests.java" checks="LineLength" />
|
||||
<suppress files="plugin[/\\]security[/\\]src[/\\]test[/\\]java[/\\]org[/\\]elasticsearch[/\\]xpack[/\\]security[/\\]authc[/\\]file[/\\]FileRealmTests.java" checks="LineLength" />
|
||||
<suppress files="plugin[/\\]security[/\\]src[/\\]test[/\\]java[/\\]org[/\\]elasticsearch[/\\]xpack[/\\]security[/\\]authc[/\\]ldap[/\\]ActiveDirectoryRealmTests.java" checks="LineLength" />
|
||||
<suppress files="plugin[/\\]security[/\\]src[/\\]test[/\\]java[/\\]org[/\\]elasticsearch[/\\]xpack[/\\]security[/\\]authc[/\\]ldap[/\\]ActiveDirectorySessionFactoryTests.java" checks="LineLength" />
|
||||
<suppress files="plugin[/\\]security[/\\]src[/\\]test[/\\]java[/\\]org[/\\]elasticsearch[/\\]xpack[/\\]security[/\\]authc[/\\]ldap[/\\]LdapRealmTests.java" checks="LineLength" />
|
||||
<suppress files="plugin[/\\]security[/\\]src[/\\]test[/\\]java[/\\]org[/\\]elasticsearch[/\\]xpack[/\\]security[/\\]authc[/\\]ldap[/\\]LdapSessionFactoryTests.java" checks="LineLength" />
|
||||
<suppress files="plugin[/\\]security[/\\]src[/\\]test[/\\]java[/\\]org[/\\]elasticsearch[/\\]xpack[/\\]security[/\\]authc[/\\]ldap[/\\]LdapUserSearchSessionFactoryTests.java" checks="LineLength" />
|
||||
<suppress files="plugin[/\\]security[/\\]src[/\\]test[/\\]java[/\\]org[/\\]elasticsearch[/\\]xpack[/\\]security[/\\]authc[/\\]ldap[/\\]support[/\\]SessionFactoryTests.java" checks="LineLength" />
|
||||
<suppress files="plugin[/\\]security[/\\]src[/\\]test[/\\]java[/\\]org[/\\]elasticsearch[/\\]xpack[/\\]security[/\\]authc[/\\]pki[/\\]PkiRealmTests.java" checks="LineLength" />
|
||||
<suppress files="qa[/\\]security-example-extension[/\\]src[/\\]test[/\\]java[/\\]org[/\\]elasticsearch[/\\]example[/\\]realm[/\\]CustomRealmTests.java" checks="LineLength" />
|
||||
</suppressions>
|
||||
|
|
|
@ -93,7 +93,8 @@ buildRestTests.expectedUnconvertedCandidates = [
|
|||
]
|
||||
|
||||
dependencies {
|
||||
testCompile project(path: ':x-pack-elasticsearch:plugin', configuration: 'runtime')
|
||||
testCompile project(path: ':x-pack-elasticsearch:plugin:core', configuration: 'runtime')
|
||||
testCompile project(path: ':x-pack-elasticsearch:plugin:core', configuration: 'testArtifacts')
|
||||
testCompile project(path: ':x-pack-elasticsearch:plugin', configuration: 'testArtifacts')
|
||||
}
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
apply plugin: 'elasticsearch.build'
|
||||
|
||||
dependencies {
|
||||
compile project(':x-pack-elasticsearch:plugin')
|
||||
compile project(':x-pack-elasticsearch:plugin:core')
|
||||
compile "org.elasticsearch:elasticsearch:${version}"
|
||||
testCompile "org.elasticsearch.test:framework:${version}"
|
||||
}
|
||||
|
|
|
@ -1,7 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
# Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
||||
# or more contributor license agreements. Licensed under the Elastic License;
|
||||
# you may not use this file except in compliance with the Elastic License.
|
||||
|
||||
ES_CLASSPATH="$ES_CLASSPATH:$ES_HOME/plugins/x-pack/*"
|
|
@ -1,5 +0,0 @@
|
|||
rem Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
||||
rem or more contributor license agreements. Licensed under the Elastic License;
|
||||
rem you may not use this file except in compliance with the Elastic License.
|
||||
|
||||
set ES_CLASSPATH=!ES_CLASSPATH!;!ES_HOME!/plugins/x-pack/*
|
|
@ -6,200 +6,63 @@ import java.nio.charset.StandardCharsets
|
|||
import java.nio.file.Files
|
||||
import java.nio.file.Path
|
||||
import java.nio.file.StandardCopyOption
|
||||
import org.elasticsearch.gradle.test.RunTask;
|
||||
|
||||
group 'org.elasticsearch.plugin'
|
||||
apply plugin: 'elasticsearch.es-meta-plugin'
|
||||
|
||||
apply plugin: 'elasticsearch.esplugin'
|
||||
esplugin {
|
||||
name 'x-pack'
|
||||
description 'Elasticsearch Expanded Pack Plugin'
|
||||
classname 'org.elasticsearch.xpack.XPackPlugin'
|
||||
hasNativeController true
|
||||
requiresKeystore true
|
||||
licenseFile project(':x-pack-elasticsearch').file('LICENSE.txt')
|
||||
noticeFile project(':x-pack-elasticsearch').file('NOTICE.txt')
|
||||
}
|
||||
archivesBaseName = 'x-pack' // for api jar
|
||||
|
||||
// TODO: fix this! https://github.com/elastic/x-plugins/issues/1066
|
||||
ext.compactProfile = 'full'
|
||||
//dependencyLicenses {
|
||||
// mapping from: /netty-.*/, to: 'netty'
|
||||
// mapping from: /bc.*/, to: 'bouncycastle'
|
||||
// mapping from: /owasp-java-html-sanitizer.*/, to: 'owasp-java-html-sanitizer'
|
||||
// mapping from: /transport-netty.*/, to: 'elasticsearch'
|
||||
// mapping from: /transport-nio.*/, to: 'elasticsearch'
|
||||
// mapping from: /elasticsearch-nio.*/, to: 'elasticsearch'
|
||||
// mapping from: /elasticsearch-rest-client.*/, to: 'elasticsearch'
|
||||
// mapping from: /http.*/, to: 'httpclient' // pulled in by rest client
|
||||
// mapping from: /commons-.*/, to: 'commons' // pulled in by rest client
|
||||
// ignoreSha 'elasticsearch-rest-client'
|
||||
// ignoreSha 'transport-netty4'
|
||||
// ignoreSha 'transport-nio'
|
||||
// ignoreSha 'elasticsearch-nio'
|
||||
// ignoreSha 'elasticsearch-rest-client-sniffer'
|
||||
// ignoreSha 'x-pack-core'
|
||||
//}
|
||||
|
||||
dependencyLicenses {
|
||||
mapping from: /netty-.*/, to: 'netty'
|
||||
mapping from: /bc.*/, to: 'bouncycastle'
|
||||
mapping from: /owasp-java-html-sanitizer.*/, to: 'owasp-java-html-sanitizer'
|
||||
mapping from: /transport-netty.*/, to: 'elasticsearch'
|
||||
mapping from: /transport-nio.*/, to: 'elasticsearch'
|
||||
mapping from: /elasticsearch-nio.*/, to: 'elasticsearch'
|
||||
mapping from: /elasticsearch-rest-client.*/, to: 'elasticsearch'
|
||||
mapping from: /http.*/, to: 'httpclient' // pulled in by rest client
|
||||
mapping from: /commons-.*/, to: 'commons' // pulled in by rest client
|
||||
ignoreSha 'elasticsearch-rest-client'
|
||||
ignoreSha 'transport-netty4'
|
||||
ignoreSha 'transport-nio'
|
||||
ignoreSha 'elasticsearch-nio'
|
||||
ignoreSha 'elasticsearch-rest-client-sniffer'
|
||||
ignoreSha 'x-pack-core'
|
||||
es_meta_plugin {
|
||||
name = 'x-pack'
|
||||
description = 'Elasticsearch Expanded Pack Plugin'
|
||||
plugins = ['core', 'deprecation', 'graph', 'logstash',
|
||||
'ml', 'monitoring', 'security', 'upgrade', 'watcher']
|
||||
}
|
||||
|
||||
configurations {
|
||||
nativeBundle {
|
||||
resolutionStrategy.dependencySubstitution {
|
||||
if (findProject(':machine-learning-cpp') != null) {
|
||||
substitute module("org.elasticsearch.ml:ml-cpp") with project(":machine-learning-cpp")
|
||||
} else {
|
||||
substitute module("org.elasticsearch.ml:ml-cpp") with project("${project.path}:ml-cpp-snapshot")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
// CLI deps
|
||||
compile project(path: ':server:cli', configuration: 'runtime')
|
||||
|
||||
// Core project deps (this is temporary)
|
||||
compile project(':x-pack-elasticsearch:plugin:core')
|
||||
|
||||
// security deps
|
||||
compile project(path: ':modules:transport-netty4', configuration: 'runtime')
|
||||
compile project(path: ':plugins:transport-nio', configuration: 'runtime')
|
||||
compile 'com.unboundid:unboundid-ldapsdk:3.2.0'
|
||||
compile 'org.bouncycastle:bcprov-jdk15on:1.58'
|
||||
compile 'org.bouncycastle:bcpkix-jdk15on:1.58'
|
||||
testCompile 'com.google.jimfs:jimfs:1.1'
|
||||
|
||||
// watcher deps
|
||||
compile 'com.googlecode.owasp-java-html-sanitizer:owasp-java-html-sanitizer:r239'
|
||||
compile 'com.google.guava:guava:16.0.1' // needed by watcher for the html sanitizer and security tests for jimfs
|
||||
compile 'com.sun.mail:javax.mail:1.5.6'
|
||||
// HACK: java 9 removed javax.activation from the default modules, so instead of trying to add modules, which would have
|
||||
// to be conditionalized for java 8/9, we pull in the classes directly
|
||||
compile 'javax.activation:activation:1.1.1'
|
||||
|
||||
testCompile 'org.subethamail:subethasmtp:3.1.7'
|
||||
// needed for subethasmtp, has @GuardedBy annotation
|
||||
testCompile 'com.google.code.findbugs:jsr305:3.0.1'
|
||||
|
||||
// monitoring deps
|
||||
compile "org.elasticsearch.client:elasticsearch-rest-client:${version}"
|
||||
compile "org.elasticsearch.client:elasticsearch-rest-client-sniffer:${version}"
|
||||
|
||||
// ml deps
|
||||
compile 'net.sf.supercsv:super-csv:2.4.0'
|
||||
nativeBundle "org.elasticsearch.ml:ml-cpp:${project.version}@zip"
|
||||
testCompile 'org.ini4j:ini4j:0.5.2'
|
||||
|
||||
// common test deps
|
||||
testCompile 'org.elasticsearch:securemock:1.2'
|
||||
testCompile "org.elasticsearch:mocksocket:${versions.mocksocket}"
|
||||
testCompile 'org.slf4j:slf4j-log4j12:1.6.2'
|
||||
testCompile 'org.slf4j:slf4j-api:1.6.2'
|
||||
testCompile project(path: ':modules:reindex', configuration: 'runtime')
|
||||
testCompile project(path: ':modules:parent-join', configuration: 'runtime')
|
||||
testCompile project(path: ':modules:analysis-common', configuration: 'runtime')
|
||||
}
|
||||
|
||||
// make LicenseSigner available for testing signed licenses
|
||||
sourceSets.test.java {
|
||||
srcDir '../license-tools/src/main/java'
|
||||
}
|
||||
|
||||
compileJava.options.compilerArgs << "-Xlint:-deprecation,-rawtypes,-serial,-try,-unchecked"
|
||||
compileTestJava.options.compilerArgs << "-Xlint:-deprecation,-rawtypes,-serial,-try,-unchecked"
|
||||
|
||||
ext.expansions = [
|
||||
'project.version': version,
|
||||
'project.version': version,
|
||||
]
|
||||
|
||||
processResources {
|
||||
from(sourceSets.main.resources.srcDirs) {
|
||||
exclude '**/public.key'
|
||||
inputs.properties(expansions)
|
||||
MavenFilteringHack.filter(it, expansions)
|
||||
}
|
||||
boolean snapshot = "true".equals(System.getProperty("build.snapshot", "true"))
|
||||
if (snapshot) {
|
||||
from 'keys/dev/public.key'
|
||||
} else {
|
||||
from 'keys/prod/public.key'
|
||||
}
|
||||
dependencies {
|
||||
testCompile project(path: ':x-pack-elasticsearch:plugin:core', configuration: 'testArtifacts')
|
||||
testCompile project(path: ':x-pack-elasticsearch:plugin:deprecation')
|
||||
testCompile project(path: ':x-pack-elasticsearch:plugin:graph')
|
||||
testCompile project(path: ':x-pack-elasticsearch:plugin:logstash')
|
||||
testCompile project(path: ':x-pack-elasticsearch:plugin:ml')
|
||||
testCompile project(path: ':x-pack-elasticsearch:plugin:monitoring')
|
||||
testCompile project(path: ':x-pack-elasticsearch:plugin:security')
|
||||
testCompile project(path: ':x-pack-elasticsearch:plugin:upgrade')
|
||||
testCompile project(path: ':x-pack-elasticsearch:plugin:watcher')
|
||||
}
|
||||
|
||||
forbiddenPatterns {
|
||||
exclude '**/*.key'
|
||||
exclude '**/*.p12'
|
||||
exclude '**/*.der'
|
||||
exclude '**/*.zip'
|
||||
// https://github.com/elastic/x-plugins/issues/724
|
||||
configurations {
|
||||
testArtifacts.extendsFrom testRuntime
|
||||
}
|
||||
|
||||
forbiddenApisMain {
|
||||
signaturesURLs += file('forbidden/ldap-signatures.txt').toURI().toURL()
|
||||
task testJar(type: Jar) {
|
||||
appendix 'test'
|
||||
from sourceSets.test.output
|
||||
}
|
||||
|
||||
task extractNativeLicenses(type: Copy) {
|
||||
dependsOn configurations.nativeBundle
|
||||
into "${buildDir}"
|
||||
from {
|
||||
project.zipTree(configurations.nativeBundle.singleFile)
|
||||
}
|
||||
include 'platform/licenses/**'
|
||||
// This is to reduce the risk of credentials used to access the native bundle not
|
||||
// having propagated throughout AWS by the time it's downloaded; the time needed
|
||||
// to compile the Java is extra time during which the propagation can take place
|
||||
shouldRunAfter compileJava
|
||||
}
|
||||
|
||||
// TODO: standardize packaging config for plugins
|
||||
bundlePlugin {
|
||||
dependsOn configurations.nativeBundle
|
||||
from('bin/x-pack') {
|
||||
into 'bin'
|
||||
}
|
||||
from('config/x-pack') {
|
||||
into 'config'
|
||||
}
|
||||
from {
|
||||
project.zipTree(configurations.nativeBundle.singleFile)
|
||||
}
|
||||
// We don't ship the individual nativeBundle licenses - instead
|
||||
// they get combined into the top level NOTICES file we ship
|
||||
exclude 'platform/licenses/**'
|
||||
}
|
||||
|
||||
// add api jar for extension authors to compile against
|
||||
// note this is just the normal x-pack jar for now, with a different name
|
||||
project.afterEvaluate {
|
||||
task apiJar {
|
||||
dependsOn('generatePomFileForApijarPublication', project.jar)
|
||||
doFirst {
|
||||
Path jarFile = project.jar.outputs.files.singleFile.toPath()
|
||||
String apiFileName = jarFile.fileName.toString().replace(project.version, "api-${project.version}")
|
||||
Files.copy(jarFile, jarFile.resolveSibling(apiFileName), StandardCopyOption.REPLACE_EXISTING)
|
||||
|
||||
String pomFileName = jarFile.fileName.toString().replace('.jar', '.pom')
|
||||
String apiPomFileName = apiFileName.replace('.jar', '.pom')
|
||||
Files.copy(jarFile.resolveSibling(pomFileName), jarFile.resolveSibling(apiPomFileName),
|
||||
StandardCopyOption.REPLACE_EXISTING)
|
||||
}
|
||||
}
|
||||
assemble.dependsOn(apiJar)
|
||||
project.publishing {
|
||||
publications {
|
||||
apijar(MavenPublication) {
|
||||
from project.components.java
|
||||
artifactId = 'x-pack-api'
|
||||
pom.withXml { XmlProvider xml ->
|
||||
Node root = xml.asNode()
|
||||
root.appendNode('name', project.pluginProperties.extension.name)
|
||||
root.appendNode('description', project.pluginProperties.extension.description)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// Add an extra licenses directory to the combined notices
|
||||
project.tasks.findByName('generateNotice').dependsOn extractNativeLicenses
|
||||
project.tasks.findByName('generateNotice').licensesDir new File("${project.buildDir}/platform/licenses")
|
||||
artifacts {
|
||||
testArtifacts testJar
|
||||
}
|
||||
|
||||
integTestRunner {
|
||||
|
@ -303,14 +166,6 @@ integTestCluster {
|
|||
}
|
||||
}
|
||||
|
||||
test {
|
||||
/*
|
||||
* We have to disable setting the number of available processors as tests in the same JVM randomize processors and will step on each
|
||||
* other if we allow them to set the number of available processors as it's set-once in Netty.
|
||||
*/
|
||||
systemProperty 'es.set.netty.runtime.available.processors', 'false'
|
||||
}
|
||||
|
||||
integTestRunner {
|
||||
/*
|
||||
* We have to disable setting the number of available processors as tests in the same JVM randomize processors and will step on each
|
||||
|
@ -319,73 +174,6 @@ integTestRunner {
|
|||
systemProperty 'es.set.netty.runtime.available.processors', 'false'
|
||||
}
|
||||
|
||||
// TODO: don't publish test artifacts just to run messy tests, fix the tests!
|
||||
// https://github.com/elastic/x-plugins/issues/724
|
||||
configurations {
|
||||
testArtifacts.extendsFrom testRuntime
|
||||
}
|
||||
task testJar(type: Jar) {
|
||||
appendix 'test'
|
||||
from sourceSets.test.output
|
||||
}
|
||||
artifacts {
|
||||
// normal es plugins do not publish the jar but we need to since users need it for Transport Clients and extensions
|
||||
archives jar
|
||||
testArtifacts testJar
|
||||
}
|
||||
|
||||
// classes are missing, e.g. com.ibm.icu.lang.UCharacter
|
||||
thirdPartyAudit.excludes = [
|
||||
// uses internal java api: sun.misc.Unsafe
|
||||
'com.google.common.cache.Striped64',
|
||||
'com.google.common.cache.Striped64$1',
|
||||
'com.google.common.cache.Striped64$Cell',
|
||||
'com.google.common.primitives.UnsignedBytes$LexicographicalComparatorHolder$UnsafeComparator',
|
||||
'com.google.common.primitives.UnsignedBytes$LexicographicalComparatorHolder$UnsafeComparator$1',
|
||||
|
||||
// pulled in as external dependency to work on java 9
|
||||
'com.sun.activation.registries.LineTokenizer',
|
||||
'com.sun.activation.registries.LogSupport',
|
||||
'com.sun.activation.registries.MailcapFile',
|
||||
'com.sun.activation.registries.MailcapTokenizer',
|
||||
'com.sun.activation.registries.MimeTypeEntry',
|
||||
'com.sun.activation.registries.MimeTypeFile',
|
||||
'javax.activation.MailcapCommandMap',
|
||||
'javax.activation.MimetypesFileTypeMap',
|
||||
]
|
||||
|
||||
// pulled in as external dependency to work on java 9
|
||||
if (JavaVersion.current() <= JavaVersion.VERSION_1_8) {
|
||||
thirdPartyAudit.excludes += [
|
||||
'com.sun.activation.registries.MailcapParseException',
|
||||
'javax.activation.ActivationDataFlavor',
|
||||
'javax.activation.CommandInfo',
|
||||
'javax.activation.CommandMap',
|
||||
'javax.activation.CommandObject',
|
||||
'javax.activation.DataContentHandler',
|
||||
'javax.activation.DataContentHandlerFactory',
|
||||
'javax.activation.DataHandler$1',
|
||||
'javax.activation.DataHandler',
|
||||
'javax.activation.DataHandlerDataSource',
|
||||
'javax.activation.DataSource',
|
||||
'javax.activation.DataSourceDataContentHandler',
|
||||
'javax.activation.FileDataSource',
|
||||
'javax.activation.FileTypeMap',
|
||||
'javax.activation.MimeType',
|
||||
'javax.activation.MimeTypeParameterList',
|
||||
'javax.activation.MimeTypeParseException',
|
||||
'javax.activation.ObjectDataContentHandler',
|
||||
'javax.activation.SecuritySupport$1',
|
||||
'javax.activation.SecuritySupport$2',
|
||||
'javax.activation.SecuritySupport$3',
|
||||
'javax.activation.SecuritySupport$4',
|
||||
'javax.activation.SecuritySupport$5',
|
||||
'javax.activation.SecuritySupport',
|
||||
'javax.activation.URLDataSource',
|
||||
'javax.activation.UnsupportedDataTypeException'
|
||||
]
|
||||
}
|
||||
|
||||
run {
|
||||
setting 'xpack.ml.enabled', 'true'
|
||||
setting 'xpack.graph.enabled', 'true'
|
||||
|
|
|
@ -1,22 +1,300 @@
|
|||
apply plugin: 'elasticsearch.build'
|
||||
import org.elasticsearch.gradle.MavenFilteringHack
|
||||
|
||||
apply plugin: 'elasticsearch.esplugin'
|
||||
esplugin {
|
||||
name 'x-pack-core'
|
||||
description 'Elasticsearch Expanded Pack Plugin - Core'
|
||||
classname 'org.elasticsearch.xpack.XPackPlugin'
|
||||
hasNativeController true
|
||||
requiresKeystore true
|
||||
licenseFile project(':x-pack-elasticsearch').file('LICENSE.txt')
|
||||
noticeFile project(':x-pack-elasticsearch').file('NOTICE.txt')
|
||||
}
|
||||
|
||||
integTest.enabled = false
|
||||
|
||||
dependencyLicenses {
|
||||
mapping from: /netty-.*/, to: 'netty'
|
||||
mapping from: /bc.*/, to: 'bouncycastle'
|
||||
mapping from: /owasp-java-html-sanitizer.*/, to: 'owasp-java-html-sanitizer'
|
||||
mapping from: /transport-netty.*/, to: 'elasticsearch'
|
||||
mapping from: /transport-nio.*/, to: 'elasticsearch'
|
||||
mapping from: /elasticsearch-nio.*/, to: 'elasticsearch'
|
||||
mapping from: /elasticsearch-rest-client.*/, to: 'elasticsearch'
|
||||
mapping from: /http.*/, to: 'httpclient' // pulled in by rest client
|
||||
mapping from: /commons-.*/, to: 'commons' // pulled in by rest client
|
||||
ignoreSha 'elasticsearch-rest-client'
|
||||
ignoreSha 'transport-netty4'
|
||||
ignoreSha 'transport-nio'
|
||||
ignoreSha 'elasticsearch-nio'
|
||||
ignoreSha 'elasticsearch-rest-client-sniffer'
|
||||
ignoreSha 'x-pack-core'
|
||||
}
|
||||
|
||||
dependencies {
|
||||
provided "org.elasticsearch:elasticsearch:${version}"
|
||||
compile "org.apache.httpcomponents:httpclient:${versions.httpclient}"
|
||||
compile "org.apache.httpcomponents:httpcore:${versions.httpcore}"
|
||||
compile "org.apache.httpcomponents:httpasyncclient:${versions.httpasyncclient}"
|
||||
|
||||
compile "commons-logging:commons-logging:${versions.commonslogging}"
|
||||
compile "commons-codec:commons-codec:${versions.commonscodec}"
|
||||
|
||||
// security deps
|
||||
compile 'com.unboundid:unboundid-ldapsdk:3.2.0'
|
||||
compile 'org.bouncycastle:bcprov-jdk15on:1.58'
|
||||
compile 'org.bouncycastle:bcpkix-jdk15on:1.58'
|
||||
compile project(path: ':modules:transport-netty4', configuration: 'runtime')
|
||||
|
||||
//testCompile project(path: ':core:cli', configuration: 'runtime')
|
||||
testCompile 'org.elasticsearch:securemock:1.2'
|
||||
testCompile "org.elasticsearch:mocksocket:${versions.mocksocket}"
|
||||
testCompile 'org.slf4j:slf4j-log4j12:1.6.2'
|
||||
testCompile 'org.slf4j:slf4j-api:1.6.2'
|
||||
testCompile project(path: ':modules:reindex', configuration: 'runtime')
|
||||
testCompile project(path: ':modules:parent-join', configuration: 'runtime')
|
||||
testCompile project(path: ':modules:analysis-common', configuration: 'runtime')
|
||||
}
|
||||
|
||||
processResources {
|
||||
from(sourceSets.main.resources.srcDirs) {
|
||||
exclude '**/public.key'
|
||||
inputs.properties(expansions)
|
||||
MavenFilteringHack.filter(it, expansions)
|
||||
}
|
||||
boolean snapshot = "true".equals(System.getProperty("build.snapshot", "true"))
|
||||
if (snapshot) {
|
||||
from '../keys/dev/public.key'
|
||||
} else {
|
||||
from '../keys/prod/public.key'
|
||||
}
|
||||
}
|
||||
|
||||
forbiddenPatterns {
|
||||
exclude '**/*.key'
|
||||
exclude '**/*.p12'
|
||||
exclude '**/*.der'
|
||||
exclude '**/*.zip'
|
||||
}
|
||||
|
||||
archivesBaseName = 'x-pack-core'
|
||||
|
||||
compileJava.options.compilerArgs << "-Xlint:-deprecation,-rawtypes,-serial,-try,-unchecked"
|
||||
//compileTestJava.options.compilerArgs << "-Xlint:-deprecation,-rawtypes,-serial,-try,-unchecked"
|
||||
compileTestJava.options.compilerArgs << "-Xlint:-deprecation,-rawtypes,-serial,-try,-unchecked"
|
||||
|
||||
// TODO: enable this once we have tests
|
||||
test.enabled=false
|
||||
// TODO: fix these!
|
||||
thirdPartyAudit.enabled = false
|
||||
|
||||
licenseHeaders {
|
||||
approvedLicenses << 'BCrypt (BSD-like)'
|
||||
additionalLicense 'BCRYP', 'BCrypt (BSD-like)', 'Copyright (c) 2006 Damien Miller <djm@mindrot.org>'
|
||||
enabled = false
|
||||
}
|
||||
|
||||
parent.bundlePlugin {
|
||||
from jar
|
||||
// make LicenseSigner available for testing signed licenses
|
||||
sourceSets.test.java {
|
||||
srcDir '../../license-tools/src/main/java'
|
||||
}
|
||||
|
||||
//// add api jar for extension authors to compile against
|
||||
//// note this is just the normal x-pack jar for now, with a different name
|
||||
//project.afterEvaluate {
|
||||
// task apiJar {
|
||||
// dependsOn('generatePomFileForApijarPublication', project.jar)
|
||||
// doFirst {
|
||||
// Path jarFile = project.jar.outputs.files.singleFile.toPath()
|
||||
// String apiFileName = jarFile.fileName.toString().replace(project.version, "api-${project.version}")
|
||||
// Files.copy(jarFile, jarFile.resolveSibling(apiFileName), StandardCopyOption.REPLACE_EXISTING)
|
||||
//
|
||||
// String pomFileName = jarFile.fileName.toString().replace('.jar', '.pom')
|
||||
// String apiPomFileName = apiFileName.replace('.jar', '.pom')
|
||||
// Files.copy(jarFile.resolveSibling(pomFileName), jarFile.resolveSibling(apiPomFileName),
|
||||
// StandardCopyOption.REPLACE_EXISTING)
|
||||
// }
|
||||
// }
|
||||
// assemble.dependsOn(apiJar)
|
||||
// project.publishing {
|
||||
// publications {
|
||||
// apijar(MavenPublication) {
|
||||
// from project.components.java
|
||||
// artifactId = 'x-pack-api'
|
||||
// pom.withXml { XmlProvider xml ->
|
||||
// Node root = xml.asNode()
|
||||
// root.appendNode('name', project.pluginProperties.extension.name)
|
||||
// root.appendNode('description', project.pluginProperties.extension.description)
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// // Add an extra licenses directory to the combined notices
|
||||
// project.tasks.findByName('generateNotice').dependsOn extractNativeLicenses
|
||||
// project.tasks.findByName('generateNotice').licensesDir new File("${project.buildDir}/platform/licenses")
|
||||
//}
|
||||
//
|
||||
// integTestRunner {
|
||||
// // TODO: fix this rest test to not depend on a hardcoded port!
|
||||
// def blacklist = ['getting_started/10_monitor_cluster_health/*']
|
||||
// boolean snapshot = "true".equals(System.getProperty("build.snapshot", "true"))
|
||||
// if (!snapshot) {
|
||||
// // these tests attempt to install basic/internal licenses signed against the dev/public.key
|
||||
// // Since there is no infrastructure in place (anytime soon) to generate licenses using the production
|
||||
// // private key, these tests are whitelisted in non-snapshot test runs
|
||||
// blacklist.addAll(['xpack/15_basic/*', 'license/20_put_license/*'])
|
||||
// }
|
||||
// systemProperty 'tests.rest.blacklist', blacklist.join(',')
|
||||
// }
|
||||
|
||||
// // location of generated keystores and certificates
|
||||
// File keystoreDir = new File(project.buildDir, 'keystore')
|
||||
|
||||
// // Generate the node's keystore
|
||||
// File nodeKeystore = new File(keystoreDir, 'test-node.jks')
|
||||
// task createNodeKeyStore(type: LoggedExec) {
|
||||
// doFirst {
|
||||
// if (nodeKeystore.parentFile.exists() == false) {
|
||||
// nodeKeystore.parentFile.mkdirs()
|
||||
// }
|
||||
// if (nodeKeystore.exists()) {
|
||||
// delete nodeKeystore
|
||||
// }
|
||||
// }
|
||||
// executable = new File(project.javaHome, 'bin/keytool')
|
||||
// standardInput = new ByteArrayInputStream('FirstName LastName\nUnit\nOrganization\nCity\nState\nNL\nyes\n\n'.getBytes('UTF-8'))
|
||||
// args '-genkey',
|
||||
// '-alias', 'test-node',
|
||||
// '-keystore', nodeKeystore,
|
||||
// '-keyalg', 'RSA',
|
||||
// '-keysize', '2048',
|
||||
// '-validity', '712',
|
||||
// '-dname', 'CN=smoke-test-plugins-ssl',
|
||||
// '-keypass', 'keypass',
|
||||
// '-storepass', 'keypass'
|
||||
// }
|
||||
|
||||
// Add keystores to test classpath: it expects it there
|
||||
//sourceSets.test.resources.srcDir(keystoreDir)
|
||||
//processTestResources.dependsOn(createNodeKeyStore)
|
||||
|
||||
// integTestCluster {
|
||||
// dependsOn createNodeKeyStore
|
||||
// setting 'xpack.ml.enabled', 'true'
|
||||
// setting 'logger.org.elasticsearch.xpack.ml.datafeed', 'TRACE'
|
||||
// // Integration tests are supposed to enable/disable exporters before/after each test
|
||||
// setting 'xpack.monitoring.exporters._local.type', 'local'
|
||||
// setting 'xpack.monitoring.exporters._local.enabled', 'false'
|
||||
// setting 'xpack.monitoring.collection.interval', '-1'
|
||||
// setting 'xpack.security.authc.token.enabled', 'true'
|
||||
// setting 'xpack.security.transport.ssl.enabled', 'true'
|
||||
// setting 'xpack.security.transport.ssl.keystore.path', nodeKeystore.name
|
||||
// setting 'xpack.security.transport.ssl.verification_mode', 'certificate'
|
||||
// setting 'xpack.security.audit.enabled', 'true'
|
||||
// keystoreSetting 'bootstrap.password', 'x-pack-test-password'
|
||||
// keystoreSetting 'xpack.security.transport.ssl.keystore.secure_password', 'keypass'
|
||||
// distribution = 'zip' // this is important since we use the reindex module in ML
|
||||
|
||||
// setupCommand 'setupTestUser', 'bin/x-pack/users', 'useradd', 'x_pack_rest_user', '-p', 'x-pack-test-password', '-r', 'superuser'
|
||||
|
||||
// extraConfigFile nodeKeystore.name, nodeKeystore
|
||||
|
||||
// waitCondition = { NodeInfo node, AntBuilder ant ->
|
||||
// File tmpFile = new File(node.cwd, 'wait.success')
|
||||
|
||||
// for (int i = 0; i < 10; i++) {
|
||||
// // we use custom wait logic here as the elastic user is not available immediately and ant.get will fail when a 401 is returned
|
||||
// HttpURLConnection httpURLConnection = null;
|
||||
// try {
|
||||
// httpURLConnection = (HttpURLConnection) new URL("http://${node.httpUri()}/_cluster/health?wait_for_nodes=${numNodes}&wait_for_status=yellow").openConnection();
|
||||
// httpURLConnection.setRequestProperty("Authorization", "Basic " +
|
||||
// Base64.getEncoder().encodeToString("x_pack_rest_user:x-pack-test-password".getBytes(StandardCharsets.UTF_8)));
|
||||
// httpURLConnection.setRequestMethod("GET");
|
||||
// httpURLConnection.connect();
|
||||
// if (httpURLConnection.getResponseCode() == 200) {
|
||||
// tmpFile.withWriter StandardCharsets.UTF_8.name(), {
|
||||
// it.write(httpURLConnection.getInputStream().getText(StandardCharsets.UTF_8.name()))
|
||||
// }
|
||||
// }
|
||||
// } catch (Exception e) {
|
||||
// if (i == 9) {
|
||||
// logger.error("final attempt of calling cluster health failed", e)
|
||||
// } else {
|
||||
// logger.debug("failed to call cluster health", e)
|
||||
// }
|
||||
// } finally {
|
||||
// if (httpURLConnection != null) {
|
||||
// httpURLConnection.disconnect();
|
||||
// }
|
||||
// }
|
||||
|
||||
// // did not start, so wait a bit before trying again
|
||||
// Thread.sleep(500L);
|
||||
// }
|
||||
// return tmpFile.exists()
|
||||
// }
|
||||
//}
|
||||
|
||||
test {
|
||||
/*
|
||||
* We have to disable setting the number of available processors as tests in the same JVM randomize processors and will step on each
|
||||
* other if we allow them to set the number of available processors as it's set-once in Netty.
|
||||
*/
|
||||
systemProperty 'es.set.netty.runtime.available.processors', 'false'
|
||||
}
|
||||
|
||||
integTestRunner {
|
||||
/*
|
||||
* We have to disable setting the number of available processors as tests in the same JVM randomize processors and will step on each
|
||||
* other if we allow them to set the number of available processors as it's set-once in Netty.
|
||||
*/
|
||||
systemProperty 'es.set.netty.runtime.available.processors', 'false'
|
||||
}
|
||||
|
||||
// TODO: don't publish test artifacts just to run messy tests, fix the tests!
|
||||
// https://github.com/elastic/x-plugins/issues/724
|
||||
configurations {
|
||||
testArtifacts.extendsFrom testRuntime
|
||||
}
|
||||
task testJar(type: Jar) {
|
||||
appendix 'test'
|
||||
from sourceSets.test.output
|
||||
}
|
||||
artifacts {
|
||||
// normal es plugins do not publish the jar but we need to since users need it for Transport Clients and extensions
|
||||
archives jar
|
||||
testArtifacts testJar
|
||||
}
|
||||
|
||||
// pulled in as external dependency to work on java 9
|
||||
if (JavaVersion.current() <= JavaVersion.VERSION_1_8) {
|
||||
thirdPartyAudit.excludes += [
|
||||
'com.sun.activation.registries.MailcapParseException',
|
||||
'javax.activation.ActivationDataFlavor',
|
||||
'javax.activation.CommandInfo',
|
||||
'javax.activation.CommandMap',
|
||||
'javax.activation.CommandObject',
|
||||
'javax.activation.DataContentHandler',
|
||||
'javax.activation.DataContentHandlerFactory',
|
||||
'javax.activation.DataHandler$1',
|
||||
'javax.activation.DataHandler',
|
||||
'javax.activation.DataHandlerDataSource',
|
||||
'javax.activation.DataSource',
|
||||
'javax.activation.DataSourceDataContentHandler',
|
||||
'javax.activation.FileDataSource',
|
||||
'javax.activation.FileTypeMap',
|
||||
'javax.activation.MimeType',
|
||||
'javax.activation.MimeTypeParameterList',
|
||||
'javax.activation.MimeTypeParseException',
|
||||
'javax.activation.ObjectDataContentHandler',
|
||||
'javax.activation.SecuritySupport$1',
|
||||
'javax.activation.SecuritySupport$2',
|
||||
'javax.activation.SecuritySupport$3',
|
||||
'javax.activation.SecuritySupport$4',
|
||||
'javax.activation.SecuritySupport$5',
|
||||
'javax.activation.SecuritySupport',
|
||||
'javax.activation.URLDataSource',
|
||||
'javax.activation.UnsupportedDataTypeException'
|
||||
]
|
||||
}
|
||||
|
||||
run {
|
||||
distribution = 'zip'
|
||||
}
|
||||
|
|
|
@ -0,0 +1,202 @@
|
|||
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright [yyyy] [name of copyright owner]
|
||||
|
||||
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.
|
|
@ -0,0 +1,17 @@
|
|||
Apache Commons Codec
|
||||
Copyright 2002-2014 The Apache Software Foundation
|
||||
|
||||
This product includes software developed at
|
||||
The Apache Software Foundation (http://www.apache.org/).
|
||||
|
||||
src/test/org/apache/commons/codec/language/DoubleMetaphoneTest.java
|
||||
contains test data from http://aspell.net/test/orig/batch0.tab.
|
||||
Copyright (C) 2002 Kevin Atkinson (kevina@gnu.org)
|
||||
|
||||
===============================================================================
|
||||
|
||||
The content of package org.apache.commons.codec.language.bm has been translated
|
||||
from the original php source code available at http://stevemorse.org/phoneticinfo.htm
|
||||
with permission from the original authors.
|
||||
Original source copyright:
|
||||
Copyright (c) 2008 Alexander Beider & Stephen P. Morse.
|
|
@ -0,0 +1 @@
|
|||
4b95f4897fa13f2cd904aee711aeafc0c5295cd8
|
|
@ -0,0 +1 @@
|
|||
f6f66e966c70a83ffbdb6f17a0919eaf7c8aca7f
|
|
@ -0,0 +1 @@
|
|||
95aa3e6fb520191a0970a73cf09f62948ee614be
|
|
@ -0,0 +1 @@
|
|||
733db77aa8d9b2d68015189df76ab06304406e50
|
|
@ -0,0 +1,558 @@
|
|||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
=========================================================================
|
||||
|
||||
This project includes Public Suffix List copied from
|
||||
<https://publicsuffix.org/list/effective_tld_names.dat>
|
||||
licensed under the terms of the Mozilla Public License, v. 2.0
|
||||
|
||||
Full license text: <http://mozilla.org/MPL/2.0/>
|
||||
|
||||
Mozilla Public License Version 2.0
|
||||
==================================
|
||||
|
||||
1. Definitions
|
||||
--------------
|
||||
|
||||
1.1. "Contributor"
|
||||
means each individual or legal entity that creates, contributes to
|
||||
the creation of, or owns Covered Software.
|
||||
|
||||
1.2. "Contributor Version"
|
||||
means the combination of the Contributions of others (if any) used
|
||||
by a Contributor and that particular Contributor's Contribution.
|
||||
|
||||
1.3. "Contribution"
|
||||
means Covered Software of a particular Contributor.
|
||||
|
||||
1.4. "Covered Software"
|
||||
means Source Code Form to which the initial Contributor has attached
|
||||
the notice in Exhibit A, the Executable Form of such Source Code
|
||||
Form, and Modifications of such Source Code Form, in each case
|
||||
including portions thereof.
|
||||
|
||||
1.5. "Incompatible With Secondary Licenses"
|
||||
means
|
||||
|
||||
(a) that the initial Contributor has attached the notice described
|
||||
in Exhibit B to the Covered Software; or
|
||||
|
||||
(b) that the Covered Software was made available under the terms of
|
||||
version 1.1 or earlier of the License, but not also under the
|
||||
terms of a Secondary License.
|
||||
|
||||
1.6. "Executable Form"
|
||||
means any form of the work other than Source Code Form.
|
||||
|
||||
1.7. "Larger Work"
|
||||
means a work that combines Covered Software with other material, in
|
||||
a separate file or files, that is not Covered Software.
|
||||
|
||||
1.8. "License"
|
||||
means this document.
|
||||
|
||||
1.9. "Licensable"
|
||||
means having the right to grant, to the maximum extent possible,
|
||||
whether at the time of the initial grant or subsequently, any and
|
||||
all of the rights conveyed by this License.
|
||||
|
||||
1.10. "Modifications"
|
||||
means any of the following:
|
||||
|
||||
(a) any file in Source Code Form that results from an addition to,
|
||||
deletion from, or modification of the contents of Covered
|
||||
Software; or
|
||||
|
||||
(b) any new file in Source Code Form that contains any Covered
|
||||
Software.
|
||||
|
||||
1.11. "Patent Claims" of a Contributor
|
||||
means any patent claim(s), including without limitation, method,
|
||||
process, and apparatus claims, in any patent Licensable by such
|
||||
Contributor that would be infringed, but for the grant of the
|
||||
License, by the making, using, selling, offering for sale, having
|
||||
made, import, or transfer of either its Contributions or its
|
||||
Contributor Version.
|
||||
|
||||
1.12. "Secondary License"
|
||||
means either the GNU General Public License, Version 2.0, the GNU
|
||||
Lesser General Public License, Version 2.1, the GNU Affero General
|
||||
Public License, Version 3.0, or any later versions of those
|
||||
licenses.
|
||||
|
||||
1.13. "Source Code Form"
|
||||
means the form of the work preferred for making modifications.
|
||||
|
||||
1.14. "You" (or "Your")
|
||||
means an individual or a legal entity exercising rights under this
|
||||
License. For legal entities, "You" includes any entity that
|
||||
controls, is controlled by, or is under common control with You. For
|
||||
purposes of this definition, "control" means (a) the power, direct
|
||||
or indirect, to cause the direction or management of such entity,
|
||||
whether by contract or otherwise, or (b) ownership of more than
|
||||
fifty percent (50%) of the outstanding shares or beneficial
|
||||
ownership of such entity.
|
||||
|
||||
2. License Grants and Conditions
|
||||
--------------------------------
|
||||
|
||||
2.1. Grants
|
||||
|
||||
Each Contributor hereby grants You a world-wide, royalty-free,
|
||||
non-exclusive license:
|
||||
|
||||
(a) under intellectual property rights (other than patent or trademark)
|
||||
Licensable by such Contributor to use, reproduce, make available,
|
||||
modify, display, perform, distribute, and otherwise exploit its
|
||||
Contributions, either on an unmodified basis, with Modifications, or
|
||||
as part of a Larger Work; and
|
||||
|
||||
(b) under Patent Claims of such Contributor to make, use, sell, offer
|
||||
for sale, have made, import, and otherwise transfer either its
|
||||
Contributions or its Contributor Version.
|
||||
|
||||
2.2. Effective Date
|
||||
|
||||
The licenses granted in Section 2.1 with respect to any Contribution
|
||||
become effective for each Contribution on the date the Contributor first
|
||||
distributes such Contribution.
|
||||
|
||||
2.3. Limitations on Grant Scope
|
||||
|
||||
The licenses granted in this Section 2 are the only rights granted under
|
||||
this License. No additional rights or licenses will be implied from the
|
||||
distribution or licensing of Covered Software under this License.
|
||||
Notwithstanding Section 2.1(b) above, no patent license is granted by a
|
||||
Contributor:
|
||||
|
||||
(a) for any code that a Contributor has removed from Covered Software;
|
||||
or
|
||||
|
||||
(b) for infringements caused by: (i) Your and any other third party's
|
||||
modifications of Covered Software, or (ii) the combination of its
|
||||
Contributions with other software (except as part of its Contributor
|
||||
Version); or
|
||||
|
||||
(c) under Patent Claims infringed by Covered Software in the absence of
|
||||
its Contributions.
|
||||
|
||||
This License does not grant any rights in the trademarks, service marks,
|
||||
or logos of any Contributor (except as may be necessary to comply with
|
||||
the notice requirements in Section 3.4).
|
||||
|
||||
2.4. Subsequent Licenses
|
||||
|
||||
No Contributor makes additional grants as a result of Your choice to
|
||||
distribute the Covered Software under a subsequent version of this
|
||||
License (see Section 10.2) or under the terms of a Secondary License (if
|
||||
permitted under the terms of Section 3.3).
|
||||
|
||||
2.5. Representation
|
||||
|
||||
Each Contributor represents that the Contributor believes its
|
||||
Contributions are its original creation(s) or it has sufficient rights
|
||||
to grant the rights to its Contributions conveyed by this License.
|
||||
|
||||
2.6. Fair Use
|
||||
|
||||
This License is not intended to limit any rights You have under
|
||||
applicable copyright doctrines of fair use, fair dealing, or other
|
||||
equivalents.
|
||||
|
||||
2.7. Conditions
|
||||
|
||||
Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
|
||||
in Section 2.1.
|
||||
|
||||
3. Responsibilities
|
||||
-------------------
|
||||
|
||||
3.1. Distribution of Source Form
|
||||
|
||||
All distribution of Covered Software in Source Code Form, including any
|
||||
Modifications that You create or to which You contribute, must be under
|
||||
the terms of this License. You must inform recipients that the Source
|
||||
Code Form of the Covered Software is governed by the terms of this
|
||||
License, and how they can obtain a copy of this License. You may not
|
||||
attempt to alter or restrict the recipients' rights in the Source Code
|
||||
Form.
|
||||
|
||||
3.2. Distribution of Executable Form
|
||||
|
||||
If You distribute Covered Software in Executable Form then:
|
||||
|
||||
(a) such Covered Software must also be made available in Source Code
|
||||
Form, as described in Section 3.1, and You must inform recipients of
|
||||
the Executable Form how they can obtain a copy of such Source Code
|
||||
Form by reasonable means in a timely manner, at a charge no more
|
||||
than the cost of distribution to the recipient; and
|
||||
|
||||
(b) You may distribute such Executable Form under the terms of this
|
||||
License, or sublicense it under different terms, provided that the
|
||||
license for the Executable Form does not attempt to limit or alter
|
||||
the recipients' rights in the Source Code Form under this License.
|
||||
|
||||
3.3. Distribution of a Larger Work
|
||||
|
||||
You may create and distribute a Larger Work under terms of Your choice,
|
||||
provided that You also comply with the requirements of this License for
|
||||
the Covered Software. If the Larger Work is a combination of Covered
|
||||
Software with a work governed by one or more Secondary Licenses, and the
|
||||
Covered Software is not Incompatible With Secondary Licenses, this
|
||||
License permits You to additionally distribute such Covered Software
|
||||
under the terms of such Secondary License(s), so that the recipient of
|
||||
the Larger Work may, at their option, further distribute the Covered
|
||||
Software under the terms of either this License or such Secondary
|
||||
License(s).
|
||||
|
||||
3.4. Notices
|
||||
|
||||
You may not remove or alter the substance of any license notices
|
||||
(including copyright notices, patent notices, disclaimers of warranty,
|
||||
or limitations of liability) contained within the Source Code Form of
|
||||
the Covered Software, except that You may alter any license notices to
|
||||
the extent required to remedy known factual inaccuracies.
|
||||
|
||||
3.5. Application of Additional Terms
|
||||
|
||||
You may choose to offer, and to charge a fee for, warranty, support,
|
||||
indemnity or liability obligations to one or more recipients of Covered
|
||||
Software. However, You may do so only on Your own behalf, and not on
|
||||
behalf of any Contributor. You must make it absolutely clear that any
|
||||
such warranty, support, indemnity, or liability obligation is offered by
|
||||
You alone, and You hereby agree to indemnify every Contributor for any
|
||||
liability incurred by such Contributor as a result of warranty, support,
|
||||
indemnity or liability terms You offer. You may include additional
|
||||
disclaimers of warranty and limitations of liability specific to any
|
||||
jurisdiction.
|
||||
|
||||
4. Inability to Comply Due to Statute or Regulation
|
||||
---------------------------------------------------
|
||||
|
||||
If it is impossible for You to comply with any of the terms of this
|
||||
License with respect to some or all of the Covered Software due to
|
||||
statute, judicial order, or regulation then You must: (a) comply with
|
||||
the terms of this License to the maximum extent possible; and (b)
|
||||
describe the limitations and the code they affect. Such description must
|
||||
be placed in a text file included with all distributions of the Covered
|
||||
Software under this License. Except to the extent prohibited by statute
|
||||
or regulation, such description must be sufficiently detailed for a
|
||||
recipient of ordinary skill to be able to understand it.
|
||||
|
||||
5. Termination
|
||||
--------------
|
||||
|
||||
5.1. The rights granted under this License will terminate automatically
|
||||
if You fail to comply with any of its terms. However, if You become
|
||||
compliant, then the rights granted under this License from a particular
|
||||
Contributor are reinstated (a) provisionally, unless and until such
|
||||
Contributor explicitly and finally terminates Your grants, and (b) on an
|
||||
ongoing basis, if such Contributor fails to notify You of the
|
||||
non-compliance by some reasonable means prior to 60 days after You have
|
||||
come back into compliance. Moreover, Your grants from a particular
|
||||
Contributor are reinstated on an ongoing basis if such Contributor
|
||||
notifies You of the non-compliance by some reasonable means, this is the
|
||||
first time You have received notice of non-compliance with this License
|
||||
from such Contributor, and You become compliant prior to 30 days after
|
||||
Your receipt of the notice.
|
||||
|
||||
5.2. If You initiate litigation against any entity by asserting a patent
|
||||
infringement claim (excluding declaratory judgment actions,
|
||||
counter-claims, and cross-claims) alleging that a Contributor Version
|
||||
directly or indirectly infringes any patent, then the rights granted to
|
||||
You by any and all Contributors for the Covered Software under Section
|
||||
2.1 of this License shall terminate.
|
||||
|
||||
5.3. In the event of termination under Sections 5.1 or 5.2 above, all
|
||||
end user license agreements (excluding distributors and resellers) which
|
||||
have been validly granted by You or Your distributors under this License
|
||||
prior to termination shall survive termination.
|
||||
|
||||
************************************************************************
|
||||
* *
|
||||
* 6. Disclaimer of Warranty *
|
||||
* ------------------------- *
|
||||
* *
|
||||
* Covered Software is provided under this License on an "as is" *
|
||||
* basis, without warranty of any kind, either expressed, implied, or *
|
||||
* statutory, including, without limitation, warranties that the *
|
||||
* Covered Software is free of defects, merchantable, fit for a *
|
||||
* particular purpose or non-infringing. The entire risk as to the *
|
||||
* quality and performance of the Covered Software is with You. *
|
||||
* Should any Covered Software prove defective in any respect, You *
|
||||
* (not any Contributor) assume the cost of any necessary servicing, *
|
||||
* repair, or correction. This disclaimer of warranty constitutes an *
|
||||
* essential part of this License. No use of any Covered Software is *
|
||||
* authorized under this License except under this disclaimer. *
|
||||
* *
|
||||
************************************************************************
|
||||
|
||||
************************************************************************
|
||||
* *
|
||||
* 7. Limitation of Liability *
|
||||
* -------------------------- *
|
||||
* *
|
||||
* Under no circumstances and under no legal theory, whether tort *
|
||||
* (including negligence), contract, or otherwise, shall any *
|
||||
* Contributor, or anyone who distributes Covered Software as *
|
||||
* permitted above, be liable to You for any direct, indirect, *
|
||||
* special, incidental, or consequential damages of any character *
|
||||
* including, without limitation, damages for lost profits, loss of *
|
||||
* goodwill, work stoppage, computer failure or malfunction, or any *
|
||||
* and all other commercial damages or losses, even if such party *
|
||||
* shall have been informed of the possibility of such damages. This *
|
||||
* limitation of liability shall not apply to liability for death or *
|
||||
* personal injury resulting from such party's negligence to the *
|
||||
* extent applicable law prohibits such limitation. Some *
|
||||
* jurisdictions do not allow the exclusion or limitation of *
|
||||
* incidental or consequential damages, so this exclusion and *
|
||||
* limitation may not apply to You. *
|
||||
* *
|
||||
************************************************************************
|
||||
|
||||
8. Litigation
|
||||
-------------
|
||||
|
||||
Any litigation relating to this License may be brought only in the
|
||||
courts of a jurisdiction where the defendant maintains its principal
|
||||
place of business and such litigation shall be governed by laws of that
|
||||
jurisdiction, without reference to its conflict-of-law provisions.
|
||||
Nothing in this Section shall prevent a party's ability to bring
|
||||
cross-claims or counter-claims.
|
||||
|
||||
9. Miscellaneous
|
||||
----------------
|
||||
|
||||
This License represents the complete agreement concerning the subject
|
||||
matter hereof. If any provision of this License is held to be
|
||||
unenforceable, such provision shall be reformed only to the extent
|
||||
necessary to make it enforceable. Any law or regulation which provides
|
||||
that the language of a contract shall be construed against the drafter
|
||||
shall not be used to construe this License against a Contributor.
|
||||
|
||||
10. Versions of the License
|
||||
---------------------------
|
||||
|
||||
10.1. New Versions
|
||||
|
||||
Mozilla Foundation is the license steward. Except as provided in Section
|
||||
10.3, no one other than the license steward has the right to modify or
|
||||
publish new versions of this License. Each version will be given a
|
||||
distinguishing version number.
|
||||
|
||||
10.2. Effect of New Versions
|
||||
|
||||
You may distribute the Covered Software under the terms of the version
|
||||
of the License under which You originally received the Covered Software,
|
||||
or under the terms of any subsequent version published by the license
|
||||
steward.
|
||||
|
||||
10.3. Modified Versions
|
||||
|
||||
If you create software not governed by this License, and you want to
|
||||
create a new license for such software, you may create and use a
|
||||
modified version of this License if you rename the license and remove
|
||||
any references to the name of the license steward (except to note that
|
||||
such modified license differs from this License).
|
||||
|
||||
10.4. Distributing Source Code Form that is Incompatible With Secondary
|
||||
Licenses
|
||||
|
||||
If You choose to distribute Source Code Form that is Incompatible With
|
||||
Secondary Licenses under the terms of this version of the License, the
|
||||
notice described in Exhibit B of this License must be attached.
|
||||
|
||||
Exhibit A - Source Code Form License Notice
|
||||
-------------------------------------------
|
||||
|
||||
This Source Code Form is subject to the terms of the Mozilla Public
|
||||
License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
If it is not possible or desirable to put the notice in a particular
|
||||
file, then You may include the notice in a location (such as a LICENSE
|
||||
file in a relevant directory) where a recipient would be likely to look
|
||||
for such a notice.
|
||||
|
||||
You may add additional accurate notices of copyright ownership.
|
||||
|
||||
Exhibit B - "Incompatible With Secondary Licenses" Notice
|
||||
---------------------------------------------------------
|
||||
|
||||
This Source Code Form is "Incompatible With Secondary Licenses", as
|
||||
defined by the Mozilla Public License, v. 2.0.
|
|
@ -0,0 +1,6 @@
|
|||
Apache HttpComponents Client
|
||||
Copyright 1999-2016 The Apache Software Foundation
|
||||
|
||||
This product includes software developed at
|
||||
The Apache Software Foundation (http://www.apache.org/).
|
||||
|
|
@ -0,0 +1 @@
|
|||
e7501a1b34325abb00d17dde96150604a0658b54
|
|
@ -0,0 +1,12 @@
|
|||
#!/bin/bash
|
||||
|
||||
# Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
||||
# or more contributor license agreements. Licensed under the Elastic License;
|
||||
# you may not use this file except in compliance with the Elastic License.
|
||||
|
||||
ES_CLASSPATH="$ES_CLASSPATH:$ES_HOME/plugins/x-pack/x-pack-core/*"
|
||||
ES_CLASSPATH="$ES_CLASSPATH:$ES_HOME/plugins/x-pack/x-pack-logstash/*"
|
||||
ES_CLASSPATH="$ES_CLASSPATH:$ES_HOME/plugins/x-pack/x-pack-ml/*"
|
||||
ES_CLASSPATH="$ES_CLASSPATH:$ES_HOME/plugins/x-pack/x-pack-monitoring/*"
|
||||
ES_CLASSPATH="$ES_CLASSPATH:$ES_HOME/plugins/x-pack/x-pack-security/*"
|
||||
ES_CLASSPATH="$ES_CLASSPATH:$ES_HOME/plugins/x-pack/x-pack-watcher/*"
|
|
@ -0,0 +1,10 @@
|
|||
rem Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
||||
rem or more contributor license agreements. Licensed under the Elastic License;
|
||||
rem you may not use this file except in compliance with the Elastic License.
|
||||
|
||||
set ES_CLASSPATH=!ES_CLASSPATH!;!ES_HOME!/plugins/x-pack/x-pack-core/*
|
||||
set ES_CLASSPATH=!ES_CLASSPATH!;!ES_HOME!/plugins/x-pack/x-pack-logstash*
|
||||
set ES_CLASSPATH=!ES_CLASSPATH!;!ES_HOME!/plugins/x-pack/x-pack-ml/*
|
||||
set ES_CLASSPATH=!ES_CLASSPATH!;!ES_HOME!/plugins/x-pack/x-pack-monitoring/*
|
||||
set ES_CLASSPATH=!ES_CLASSPATH!;!ES_HOME!/plugins/x-pack/x-pack-security/*
|
||||
set ES_CLASSPATH=!ES_CLASSPATH!;!ES_HOME!/plugins/x-pack/x-pack-watcher/*
|
|
@ -23,7 +23,7 @@ import java.util.EnumSet;
|
|||
/**
|
||||
* Contains metadata about registered licenses
|
||||
*/
|
||||
class LicensesMetaData extends AbstractNamedDiffable<MetaData.Custom> implements MetaData.Custom,
|
||||
public class LicensesMetaData extends AbstractNamedDiffable<MetaData.Custom> implements MetaData.Custom,
|
||||
MergableCustomMetaData<LicensesMetaData> {
|
||||
|
||||
public static final String TYPE = "licenses";
|
||||
|
@ -170,7 +170,7 @@ class LicensesMetaData extends AbstractNamedDiffable<MetaData.Custom> implements
|
|||
}
|
||||
}
|
||||
|
||||
LicensesMetaData(StreamInput streamInput) throws IOException {
|
||||
public LicensesMetaData(StreamInput streamInput) throws IOException {
|
||||
if (streamInput.readBoolean()) {
|
||||
license = License.readLicense(streamInput);
|
||||
} else {
|
|
@ -7,6 +7,7 @@ package org.elasticsearch.license;
|
|||
|
||||
import org.elasticsearch.action.ActionRequest;
|
||||
import org.elasticsearch.action.ActionResponse;
|
||||
import org.elasticsearch.action.GenericAction;
|
||||
import org.elasticsearch.cluster.NamedDiff;
|
||||
import org.elasticsearch.cluster.metadata.IndexNameExpressionResolver;
|
||||
import org.elasticsearch.cluster.metadata.MetaData;
|
||||
|
@ -39,6 +40,8 @@ public class Licensing implements ActionPlugin {
|
|||
private final boolean isTransportClient;
|
||||
private final boolean isTribeNode;
|
||||
|
||||
// Until this is moved out to its own plugin (its currently in XPackPlugin.java, we need to make sure that any edits to this file
|
||||
// are also carried out in XPackClientPlugin.java
|
||||
public List<NamedWriteableRegistry.Entry> getNamedWriteables() {
|
||||
List<NamedWriteableRegistry.Entry> entries = new ArrayList<>();
|
||||
entries.add(new NamedWriteableRegistry.Entry(MetaData.Custom.class, LicensesMetaData.TYPE, LicensesMetaData::new));
|
||||
|
@ -46,6 +49,8 @@ public class Licensing implements ActionPlugin {
|
|||
return entries;
|
||||
}
|
||||
|
||||
// Until this is moved out to its own plugin (its currently in XPackPlugin.java, we need to make sure that any edits to this file
|
||||
// are also carried out in XPackClientPlugin.java
|
||||
public List<NamedXContentRegistry.Entry> getNamedXContent() {
|
||||
List<NamedXContentRegistry.Entry> entries = new ArrayList<>();
|
||||
// Metadata
|
||||
|
@ -87,6 +92,8 @@ public class Licensing implements ActionPlugin {
|
|||
return handlers;
|
||||
}
|
||||
|
||||
// Until this is moved out to its own plugin (its currently in XPackPlugin.java, we need to make sure that any edits to this file
|
||||
// are also carried out in XPackClientPlugin.java
|
||||
public List<Setting<?>> getSettings() {
|
||||
// TODO convert this wildcard to a real setting
|
||||
return Collections.singletonList(Setting.groupSetting("license.", Setting.Property.NodeScope));
|
|
@ -9,7 +9,7 @@ import org.elasticsearch.common.Strings;
|
|||
import org.elasticsearch.common.logging.LoggerMessageFormat;
|
||||
import org.elasticsearch.common.settings.Settings;
|
||||
import org.elasticsearch.license.License.OperationMode;
|
||||
import org.elasticsearch.xpack.XpackField;
|
||||
import org.elasticsearch.xpack.XPackField;
|
||||
import org.elasticsearch.xpack.monitoring.MonitoringField;
|
||||
|
||||
import java.util.Collections;
|
||||
|
@ -29,32 +29,32 @@ public class XPackLicenseState {
|
|||
static final Map<String, String[]> EXPIRATION_MESSAGES;
|
||||
static {
|
||||
Map<String, String[]> messages = new LinkedHashMap<>();
|
||||
messages.put(XpackField.SECURITY, new String[] {
|
||||
messages.put(XPackField.SECURITY, new String[] {
|
||||
"Cluster health, cluster stats and indices stats operations are blocked",
|
||||
"All data operations (read and write) continue to work"
|
||||
});
|
||||
messages.put(XpackField.WATCHER, new String[] {
|
||||
messages.put(XPackField.WATCHER, new String[] {
|
||||
"PUT / GET watch APIs are disabled, DELETE watch API continues to work",
|
||||
"Watches execute and write to the history",
|
||||
"The actions of the watches don't execute"
|
||||
});
|
||||
messages.put(XpackField.MONITORING, new String[] {
|
||||
messages.put(XPackField.MONITORING, new String[] {
|
||||
"The agent will stop collecting cluster and indices metrics",
|
||||
"The agent will stop automatically cleaning indices older than [xpack.monitoring.history.duration]"
|
||||
});
|
||||
messages.put(XpackField.GRAPH, new String[] {
|
||||
messages.put(XPackField.GRAPH, new String[] {
|
||||
"Graph explore APIs are disabled"
|
||||
});
|
||||
messages.put(XpackField.MACHINE_LEARNING, new String[] {
|
||||
messages.put(XPackField.MACHINE_LEARNING, new String[] {
|
||||
"Machine learning APIs are disabled"
|
||||
});
|
||||
messages.put(XpackField.LOGSTASH, new String[] {
|
||||
messages.put(XPackField.LOGSTASH, new String[] {
|
||||
"Logstash will continue to poll centrally-managed pipelines"
|
||||
});
|
||||
messages.put(XpackField.DEPRECATION, new String[] {
|
||||
messages.put(XPackField.DEPRECATION, new String[] {
|
||||
"Deprecation APIs are disabled"
|
||||
});
|
||||
messages.put(XpackField.UPGRADE, new String[] {
|
||||
messages.put(XPackField.UPGRADE, new String[] {
|
||||
"Upgrade API is disabled"
|
||||
});
|
||||
EXPIRATION_MESSAGES = Collections.unmodifiableMap(messages);
|
||||
|
@ -67,12 +67,12 @@ public class XPackLicenseState {
|
|||
static final Map<String, BiFunction<OperationMode, OperationMode, String[]>> ACKNOWLEDGMENT_MESSAGES;
|
||||
static {
|
||||
Map<String, BiFunction<OperationMode, OperationMode, String[]>> messages = new LinkedHashMap<>();
|
||||
messages.put(XpackField.SECURITY, XPackLicenseState::securityAcknowledgementMessages);
|
||||
messages.put(XpackField.WATCHER, XPackLicenseState::watcherAcknowledgementMessages);
|
||||
messages.put(XpackField.MONITORING, XPackLicenseState::monitoringAcknowledgementMessages);
|
||||
messages.put(XpackField.GRAPH, XPackLicenseState::graphAcknowledgementMessages);
|
||||
messages.put(XpackField.MACHINE_LEARNING, XPackLicenseState::machineLearningAcknowledgementMessages);
|
||||
messages.put(XpackField.LOGSTASH, XPackLicenseState::logstashAcknowledgementMessages);
|
||||
messages.put(XPackField.SECURITY, XPackLicenseState::securityAcknowledgementMessages);
|
||||
messages.put(XPackField.WATCHER, XPackLicenseState::watcherAcknowledgementMessages);
|
||||
messages.put(XPackField.MONITORING, XPackLicenseState::monitoringAcknowledgementMessages);
|
||||
messages.put(XPackField.GRAPH, XPackLicenseState::graphAcknowledgementMessages);
|
||||
messages.put(XPackField.MACHINE_LEARNING, XPackLicenseState::machineLearningAcknowledgementMessages);
|
||||
messages.put(XPackField.LOGSTASH, XPackLicenseState::logstashAcknowledgementMessages);
|
||||
ACKNOWLEDGMENT_MESSAGES = Collections.unmodifiableMap(messages);
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,43 @@
|
|||
/*
|
||||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
||||
* or more contributor license agreements. Licensed under the Elastic License;
|
||||
* you may not use this file except in compliance with the Elastic License.
|
||||
*/
|
||||
package org.elasticsearch.xpack;
|
||||
|
||||
import org.elasticsearch.action.ActionListener;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.Map;
|
||||
|
||||
public class EmptyXPackFeatureSet implements XPackFeatureSet {
|
||||
@Override
|
||||
public String name() {
|
||||
return "Empty XPackFeatureSet";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String description() {
|
||||
return "Core will not function without this empty featureset compliments of the way the TransportXPackInfoAction Guice works";
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean available() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean enabled() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, Object> nativeCodeInfo() {
|
||||
return Collections.emptyMap();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void usage(ActionListener<Usage> listener) {
|
||||
|
||||
}
|
||||
}
|
|
@ -0,0 +1,384 @@
|
|||
/*
|
||||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
||||
* or more contributor license agreements. Licensed under the Elastic License;
|
||||
* you may not use this file except in compliance with the Elastic License.
|
||||
*/
|
||||
package org.elasticsearch.xpack;
|
||||
|
||||
import org.elasticsearch.action.GenericAction;
|
||||
import org.elasticsearch.cluster.ClusterState;
|
||||
import org.elasticsearch.cluster.NamedDiff;
|
||||
import org.elasticsearch.cluster.metadata.MetaData;
|
||||
import org.elasticsearch.common.ParseField;
|
||||
import org.elasticsearch.common.io.stream.NamedWriteableRegistry;
|
||||
import org.elasticsearch.common.network.NetworkModule;
|
||||
import org.elasticsearch.common.network.NetworkService;
|
||||
import org.elasticsearch.common.settings.SecureString;
|
||||
import org.elasticsearch.common.settings.Setting;
|
||||
import org.elasticsearch.common.settings.Settings;
|
||||
import org.elasticsearch.common.util.BigArrays;
|
||||
import org.elasticsearch.common.util.PageCacheRecycler;
|
||||
import org.elasticsearch.common.util.concurrent.ThreadContext;
|
||||
import org.elasticsearch.common.xcontent.NamedXContentRegistry;
|
||||
import org.elasticsearch.indices.breaker.CircuitBreakerService;
|
||||
import org.elasticsearch.license.DeleteLicenseAction;
|
||||
import org.elasticsearch.license.GetLicenseAction;
|
||||
import org.elasticsearch.license.GetTrialStatusAction;
|
||||
import org.elasticsearch.license.LicenseService;
|
||||
import org.elasticsearch.license.LicensesMetaData;
|
||||
import org.elasticsearch.license.PostStartTrialAction;
|
||||
import org.elasticsearch.license.PutLicenseAction;
|
||||
import org.elasticsearch.plugins.ActionPlugin;
|
||||
import org.elasticsearch.plugins.NetworkPlugin;
|
||||
import org.elasticsearch.plugins.Plugin;
|
||||
import org.elasticsearch.tasks.Task;
|
||||
import org.elasticsearch.threadpool.ThreadPool;
|
||||
import org.elasticsearch.transport.Transport;
|
||||
import org.elasticsearch.xpack.action.XPackInfoAction;
|
||||
import org.elasticsearch.xpack.action.XPackUsageAction;
|
||||
import org.elasticsearch.xpack.deprecation.DeprecationInfoAction;
|
||||
import org.elasticsearch.xpack.graph.GraphFeatureSetUsage;
|
||||
import org.elasticsearch.xpack.graph.action.GraphExploreAction;
|
||||
import org.elasticsearch.xpack.ml.MachineLearningFeatureSetUsage;
|
||||
import org.elasticsearch.xpack.ml.MlMetadata;
|
||||
import org.elasticsearch.xpack.ml.action.CloseJobAction;
|
||||
import org.elasticsearch.xpack.ml.action.DeleteCalendarAction;
|
||||
import org.elasticsearch.xpack.ml.action.DeleteCalendarEventAction;
|
||||
import org.elasticsearch.xpack.ml.action.DeleteDatafeedAction;
|
||||
import org.elasticsearch.xpack.ml.action.DeleteExpiredDataAction;
|
||||
import org.elasticsearch.xpack.ml.action.DeleteFilterAction;
|
||||
import org.elasticsearch.xpack.ml.action.DeleteJobAction;
|
||||
import org.elasticsearch.xpack.ml.action.DeleteModelSnapshotAction;
|
||||
import org.elasticsearch.xpack.ml.action.FinalizeJobExecutionAction;
|
||||
import org.elasticsearch.xpack.ml.action.FlushJobAction;
|
||||
import org.elasticsearch.xpack.ml.action.ForecastJobAction;
|
||||
import org.elasticsearch.xpack.ml.action.GetBucketsAction;
|
||||
import org.elasticsearch.xpack.ml.action.GetCalendarEventsAction;
|
||||
import org.elasticsearch.xpack.ml.action.GetCalendarsAction;
|
||||
import org.elasticsearch.xpack.ml.action.GetCategoriesAction;
|
||||
import org.elasticsearch.xpack.ml.action.GetDatafeedsAction;
|
||||
import org.elasticsearch.xpack.ml.action.GetDatafeedsStatsAction;
|
||||
import org.elasticsearch.xpack.ml.action.GetFiltersAction;
|
||||
import org.elasticsearch.xpack.ml.action.GetInfluencersAction;
|
||||
import org.elasticsearch.xpack.ml.action.GetJobsAction;
|
||||
import org.elasticsearch.xpack.ml.action.GetJobsStatsAction;
|
||||
import org.elasticsearch.xpack.ml.action.GetModelSnapshotsAction;
|
||||
import org.elasticsearch.xpack.ml.action.GetOverallBucketsAction;
|
||||
import org.elasticsearch.xpack.ml.action.GetRecordsAction;
|
||||
import org.elasticsearch.xpack.ml.action.IsolateDatafeedAction;
|
||||
import org.elasticsearch.xpack.ml.action.KillProcessAction;
|
||||
import org.elasticsearch.xpack.ml.action.OpenJobAction;
|
||||
import org.elasticsearch.xpack.ml.action.PostCalendarEventsAction;
|
||||
import org.elasticsearch.xpack.ml.action.PostDataAction;
|
||||
import org.elasticsearch.xpack.ml.action.PreviewDatafeedAction;
|
||||
import org.elasticsearch.xpack.ml.action.PutCalendarAction;
|
||||
import org.elasticsearch.xpack.ml.action.PutDatafeedAction;
|
||||
import org.elasticsearch.xpack.ml.action.PutFilterAction;
|
||||
import org.elasticsearch.xpack.ml.action.PutJobAction;
|
||||
import org.elasticsearch.xpack.ml.action.RevertModelSnapshotAction;
|
||||
import org.elasticsearch.xpack.ml.action.StartDatafeedAction;
|
||||
import org.elasticsearch.xpack.ml.action.StopDatafeedAction;
|
||||
import org.elasticsearch.xpack.ml.action.UpdateCalendarJobAction;
|
||||
import org.elasticsearch.xpack.ml.action.UpdateDatafeedAction;
|
||||
import org.elasticsearch.xpack.ml.action.UpdateJobAction;
|
||||
import org.elasticsearch.xpack.ml.action.UpdateModelSnapshotAction;
|
||||
import org.elasticsearch.xpack.ml.action.UpdateProcessAction;
|
||||
import org.elasticsearch.xpack.ml.action.ValidateDetectorAction;
|
||||
import org.elasticsearch.xpack.ml.action.ValidateJobConfigAction;
|
||||
import org.elasticsearch.xpack.ml.datafeed.DatafeedState;
|
||||
import org.elasticsearch.xpack.ml.job.config.JobTaskStatus;
|
||||
import org.elasticsearch.xpack.monitoring.MonitoringFeatureSetUsage;
|
||||
import org.elasticsearch.xpack.persistent.CompletionPersistentTaskAction;
|
||||
import org.elasticsearch.xpack.persistent.PersistentTaskParams;
|
||||
import org.elasticsearch.xpack.persistent.PersistentTasksCustomMetaData;
|
||||
import org.elasticsearch.xpack.persistent.PersistentTasksNodeService;
|
||||
import org.elasticsearch.xpack.persistent.RemovePersistentTaskAction;
|
||||
import org.elasticsearch.xpack.persistent.StartPersistentTaskAction;
|
||||
import org.elasticsearch.xpack.persistent.UpdatePersistentTaskStatusAction;
|
||||
import org.elasticsearch.xpack.security.SecurityFeatureSetUsage;
|
||||
import org.elasticsearch.xpack.security.SecurityField;
|
||||
import org.elasticsearch.xpack.security.SecuritySettings;
|
||||
import org.elasticsearch.xpack.security.action.realm.ClearRealmCacheAction;
|
||||
import org.elasticsearch.xpack.security.action.role.ClearRolesCacheAction;
|
||||
import org.elasticsearch.xpack.security.action.role.DeleteRoleAction;
|
||||
import org.elasticsearch.xpack.security.action.role.GetRolesAction;
|
||||
import org.elasticsearch.xpack.security.action.role.PutRoleAction;
|
||||
import org.elasticsearch.xpack.security.action.rolemapping.DeleteRoleMappingAction;
|
||||
import org.elasticsearch.xpack.security.action.rolemapping.GetRoleMappingsAction;
|
||||
import org.elasticsearch.xpack.security.action.rolemapping.PutRoleMappingAction;
|
||||
import org.elasticsearch.xpack.security.action.token.CreateTokenAction;
|
||||
import org.elasticsearch.xpack.security.action.token.InvalidateTokenAction;
|
||||
import org.elasticsearch.xpack.security.action.token.RefreshTokenAction;
|
||||
import org.elasticsearch.xpack.security.action.user.AuthenticateAction;
|
||||
import org.elasticsearch.xpack.security.action.user.ChangePasswordAction;
|
||||
import org.elasticsearch.xpack.security.action.user.DeleteUserAction;
|
||||
import org.elasticsearch.xpack.security.action.user.GetUsersAction;
|
||||
import org.elasticsearch.xpack.security.action.user.HasPrivilegesAction;
|
||||
import org.elasticsearch.xpack.security.action.user.PutUserAction;
|
||||
import org.elasticsearch.xpack.security.action.user.SetEnabledAction;
|
||||
import org.elasticsearch.xpack.security.authc.TokenMetaData;
|
||||
import org.elasticsearch.xpack.security.authc.support.UsernamePasswordToken;
|
||||
import org.elasticsearch.xpack.security.authc.support.mapper.expressiondsl.AllExpression;
|
||||
import org.elasticsearch.xpack.security.authc.support.mapper.expressiondsl.AnyExpression;
|
||||
import org.elasticsearch.xpack.security.authc.support.mapper.expressiondsl.ExceptExpression;
|
||||
import org.elasticsearch.xpack.security.authc.support.mapper.expressiondsl.FieldExpression;
|
||||
import org.elasticsearch.xpack.security.authc.support.mapper.expressiondsl.RoleMapperExpression;
|
||||
import org.elasticsearch.xpack.security.transport.netty4.SecurityNetty4Transport;
|
||||
import org.elasticsearch.xpack.ssl.SSLService;
|
||||
import org.elasticsearch.xpack.ssl.action.GetCertificateInfoAction;
|
||||
import org.elasticsearch.xpack.upgrade.actions.IndexUpgradeAction;
|
||||
import org.elasticsearch.xpack.upgrade.actions.IndexUpgradeInfoAction;
|
||||
import org.elasticsearch.xpack.watcher.WatcherFeatureSetUsage;
|
||||
import org.elasticsearch.xpack.watcher.WatcherMetaData;
|
||||
import org.elasticsearch.xpack.watcher.transport.actions.ack.AckWatchAction;
|
||||
import org.elasticsearch.xpack.watcher.transport.actions.activate.ActivateWatchAction;
|
||||
import org.elasticsearch.xpack.watcher.transport.actions.delete.DeleteWatchAction;
|
||||
import org.elasticsearch.xpack.watcher.transport.actions.execute.ExecuteWatchAction;
|
||||
import org.elasticsearch.xpack.watcher.transport.actions.get.GetWatchAction;
|
||||
import org.elasticsearch.xpack.watcher.transport.actions.put.PutWatchAction;
|
||||
import org.elasticsearch.xpack.watcher.transport.actions.service.WatcherServiceAction;
|
||||
import org.elasticsearch.xpack.watcher.transport.actions.stats.WatcherStatsAction;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
public class XPackClientPlugin extends Plugin implements ActionPlugin, NetworkPlugin {
|
||||
|
||||
private final Settings settings;
|
||||
|
||||
public XPackClientPlugin(final Settings settings) {
|
||||
this.settings = settings;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Setting<?>> getSettings() {
|
||||
ArrayList<Setting<?>> settings = new ArrayList<>();
|
||||
// the only licensing one
|
||||
settings.add(Setting.groupSetting("license.", Setting.Property.NodeScope));
|
||||
|
||||
//TODO split these settings up
|
||||
settings.addAll(XPackSettings.getAllSettings());
|
||||
|
||||
settings.add(LicenseService.SELF_GENERATED_LICENSE_TYPE);
|
||||
|
||||
// we add the `xpack.version` setting to all internal indices
|
||||
settings.add(Setting.simpleString("index.xpack.version", Setting.Property.IndexScope));
|
||||
|
||||
return settings;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Settings additionalSettings() {
|
||||
return additionalSettings(settings, XPackSettings.SECURITY_ENABLED.get(settings), XPackPlugin.transportClientMode(settings));
|
||||
}
|
||||
|
||||
static Settings additionalSettings(final Settings settings, final boolean enabled, final boolean transportClientMode) {
|
||||
if (enabled && transportClientMode) {
|
||||
final Settings.Builder builder = Settings.builder();
|
||||
builder.put(SecuritySettings.addTransportSettings(settings));
|
||||
builder.put(SecuritySettings.addUserSettings(settings));
|
||||
return builder.build();
|
||||
} else {
|
||||
return Settings.EMPTY;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<GenericAction> getClientActions() {
|
||||
return Arrays.asList(
|
||||
// deprecation
|
||||
DeprecationInfoAction.INSTANCE,
|
||||
// graph
|
||||
GraphExploreAction.INSTANCE,
|
||||
// ML
|
||||
GetJobsAction.INSTANCE,
|
||||
GetJobsStatsAction.INSTANCE,
|
||||
PutJobAction.INSTANCE,
|
||||
UpdateJobAction.INSTANCE,
|
||||
DeleteJobAction.INSTANCE,
|
||||
OpenJobAction.INSTANCE,
|
||||
GetFiltersAction.INSTANCE,
|
||||
PutFilterAction.INSTANCE,
|
||||
DeleteFilterAction.INSTANCE,
|
||||
KillProcessAction.INSTANCE,
|
||||
GetBucketsAction.INSTANCE,
|
||||
GetInfluencersAction.INSTANCE,
|
||||
GetOverallBucketsAction.INSTANCE,
|
||||
GetRecordsAction.INSTANCE,
|
||||
PostDataAction.INSTANCE,
|
||||
CloseJobAction.INSTANCE,
|
||||
FinalizeJobExecutionAction.INSTANCE,
|
||||
FlushJobAction.INSTANCE,
|
||||
ValidateDetectorAction.INSTANCE,
|
||||
ValidateJobConfigAction.INSTANCE,
|
||||
GetCategoriesAction.INSTANCE,
|
||||
GetModelSnapshotsAction.INSTANCE,
|
||||
RevertModelSnapshotAction.INSTANCE,
|
||||
UpdateModelSnapshotAction.INSTANCE,
|
||||
GetDatafeedsAction.INSTANCE,
|
||||
GetDatafeedsStatsAction.INSTANCE,
|
||||
PutDatafeedAction.INSTANCE,
|
||||
UpdateDatafeedAction.INSTANCE,
|
||||
DeleteDatafeedAction.INSTANCE,
|
||||
PreviewDatafeedAction.INSTANCE,
|
||||
StartDatafeedAction.INSTANCE,
|
||||
StopDatafeedAction.INSTANCE,
|
||||
IsolateDatafeedAction.INSTANCE,
|
||||
DeleteModelSnapshotAction.INSTANCE,
|
||||
UpdateProcessAction.INSTANCE,
|
||||
DeleteExpiredDataAction.INSTANCE,
|
||||
ForecastJobAction.INSTANCE,
|
||||
GetCalendarsAction.INSTANCE,
|
||||
PutCalendarAction.INSTANCE,
|
||||
DeleteCalendarAction.INSTANCE,
|
||||
DeleteCalendarEventAction.INSTANCE,
|
||||
UpdateCalendarJobAction.INSTANCE,
|
||||
GetCalendarEventsAction.INSTANCE,
|
||||
PostCalendarEventsAction.INSTANCE,
|
||||
// licensing
|
||||
StartPersistentTaskAction.INSTANCE,
|
||||
UpdatePersistentTaskStatusAction.INSTANCE,
|
||||
RemovePersistentTaskAction.INSTANCE,
|
||||
CompletionPersistentTaskAction.INSTANCE,
|
||||
// security
|
||||
ClearRealmCacheAction.INSTANCE,
|
||||
ClearRolesCacheAction.INSTANCE,
|
||||
GetUsersAction.INSTANCE,
|
||||
PutUserAction.INSTANCE,
|
||||
DeleteUserAction.INSTANCE,
|
||||
GetRolesAction.INSTANCE,
|
||||
PutRoleAction.INSTANCE,
|
||||
DeleteRoleAction.INSTANCE,
|
||||
ChangePasswordAction.INSTANCE,
|
||||
AuthenticateAction.INSTANCE,
|
||||
SetEnabledAction.INSTANCE,
|
||||
HasPrivilegesAction.INSTANCE,
|
||||
GetRoleMappingsAction.INSTANCE,
|
||||
PutRoleMappingAction.INSTANCE,
|
||||
DeleteRoleMappingAction.INSTANCE,
|
||||
CreateTokenAction.INSTANCE,
|
||||
InvalidateTokenAction.INSTANCE,
|
||||
GetCertificateInfoAction.INSTANCE,
|
||||
RefreshTokenAction.INSTANCE,
|
||||
// upgrade
|
||||
IndexUpgradeInfoAction.INSTANCE,
|
||||
IndexUpgradeAction.INSTANCE,
|
||||
// watcher
|
||||
PutWatchAction.INSTANCE,
|
||||
DeleteWatchAction.INSTANCE,
|
||||
GetWatchAction.INSTANCE,
|
||||
WatcherStatsAction.INSTANCE,
|
||||
AckWatchAction.INSTANCE,
|
||||
ActivateWatchAction.INSTANCE,
|
||||
WatcherServiceAction.INSTANCE,
|
||||
ExecuteWatchAction.INSTANCE,
|
||||
// license
|
||||
PutLicenseAction.INSTANCE,
|
||||
GetLicenseAction.INSTANCE,
|
||||
DeleteLicenseAction.INSTANCE,
|
||||
PostStartTrialAction.INSTANCE,
|
||||
GetTrialStatusAction.INSTANCE,
|
||||
// x-pack
|
||||
XPackInfoAction.INSTANCE,
|
||||
XPackUsageAction.INSTANCE
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<NamedWriteableRegistry.Entry> getNamedWriteables() {
|
||||
return Arrays.asList(
|
||||
// graph
|
||||
new NamedWriteableRegistry.Entry(XPackFeatureSet.Usage.class, XPackField.GRAPH, GraphFeatureSetUsage::new),
|
||||
// ML - Custom metadata
|
||||
new NamedWriteableRegistry.Entry(MetaData.Custom.class, "ml", MlMetadata::new),
|
||||
new NamedWriteableRegistry.Entry(NamedDiff.class, "ml", MlMetadata.MlMetadataDiff::new),
|
||||
new NamedWriteableRegistry.Entry(MetaData.Custom.class, PersistentTasksCustomMetaData.TYPE,
|
||||
PersistentTasksCustomMetaData::new),
|
||||
new NamedWriteableRegistry.Entry(NamedDiff.class, PersistentTasksCustomMetaData.TYPE,
|
||||
PersistentTasksCustomMetaData::readDiffFrom),
|
||||
// ML - Persistent action requests
|
||||
new NamedWriteableRegistry.Entry(PersistentTaskParams.class, StartDatafeedAction.TASK_NAME,
|
||||
StartDatafeedAction.DatafeedParams::new),
|
||||
new NamedWriteableRegistry.Entry(PersistentTaskParams.class, OpenJobAction.TASK_NAME,
|
||||
OpenJobAction.JobParams::new),
|
||||
// ML - Task statuses
|
||||
new NamedWriteableRegistry.Entry(Task.Status.class, PersistentTasksNodeService.Status.NAME,
|
||||
PersistentTasksNodeService.Status::new),
|
||||
new NamedWriteableRegistry.Entry(Task.Status.class, JobTaskStatus.NAME, JobTaskStatus::new),
|
||||
new NamedWriteableRegistry.Entry(Task.Status.class, DatafeedState.NAME, DatafeedState::fromStream),
|
||||
new NamedWriteableRegistry.Entry(XPackFeatureSet.Usage.class, XPackField.MACHINE_LEARNING,
|
||||
MachineLearningFeatureSetUsage::new),
|
||||
// monitoring
|
||||
new NamedWriteableRegistry.Entry(XPackFeatureSet.Usage.class, XPackField.MONITORING, MonitoringFeatureSetUsage::new),
|
||||
// security
|
||||
new NamedWriteableRegistry.Entry(ClusterState.Custom.class, TokenMetaData.TYPE, TokenMetaData::new),
|
||||
new NamedWriteableRegistry.Entry(NamedDiff.class, TokenMetaData.TYPE, TokenMetaData::readDiffFrom),
|
||||
new NamedWriteableRegistry.Entry(XPackFeatureSet.Usage.class, XPackField.SECURITY, SecurityFeatureSetUsage::new),
|
||||
new NamedWriteableRegistry.Entry(RoleMapperExpression.class, AllExpression.NAME, AllExpression::new),
|
||||
new NamedWriteableRegistry.Entry(RoleMapperExpression.class, AnyExpression.NAME, AnyExpression::new),
|
||||
new NamedWriteableRegistry.Entry(RoleMapperExpression.class, FieldExpression.NAME, FieldExpression::new),
|
||||
new NamedWriteableRegistry.Entry(RoleMapperExpression.class, ExceptExpression.NAME, ExceptExpression::new),
|
||||
// watcher
|
||||
new NamedWriteableRegistry.Entry(MetaData.Custom.class, WatcherMetaData.TYPE, WatcherMetaData::new),
|
||||
new NamedWriteableRegistry.Entry(NamedDiff.class, WatcherMetaData.TYPE, WatcherMetaData::readDiffFrom),
|
||||
new NamedWriteableRegistry.Entry(XPackFeatureSet.Usage.class, XPackField.WATCHER, WatcherFeatureSetUsage::new),
|
||||
// licensing
|
||||
new NamedWriteableRegistry.Entry(MetaData.Custom.class, LicensesMetaData.TYPE, LicensesMetaData::new),
|
||||
new NamedWriteableRegistry.Entry(NamedDiff.class, LicensesMetaData.TYPE, LicensesMetaData::readDiffFrom)
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<NamedXContentRegistry.Entry> getNamedXContent() {
|
||||
return Arrays.asList(
|
||||
// ML - Custom metadata
|
||||
new NamedXContentRegistry.Entry(MetaData.Custom.class, new ParseField("ml"),
|
||||
parser -> MlMetadata.METADATA_PARSER.parse(parser, null).build()),
|
||||
new NamedXContentRegistry.Entry(MetaData.Custom.class, new ParseField(PersistentTasksCustomMetaData.TYPE),
|
||||
PersistentTasksCustomMetaData::fromXContent),
|
||||
// ML - Persistent action requests
|
||||
new NamedXContentRegistry.Entry(PersistentTaskParams.class, new ParseField(StartDatafeedAction.TASK_NAME),
|
||||
StartDatafeedAction.DatafeedParams::fromXContent),
|
||||
new NamedXContentRegistry.Entry(PersistentTaskParams.class, new ParseField(OpenJobAction.TASK_NAME),
|
||||
OpenJobAction.JobParams::fromXContent),
|
||||
// ML - Task statuses
|
||||
new NamedXContentRegistry.Entry(Task.Status.class, new ParseField(DatafeedState.NAME), DatafeedState::fromXContent),
|
||||
new NamedXContentRegistry.Entry(Task.Status.class, new ParseField(JobTaskStatus.NAME), JobTaskStatus::fromXContent),
|
||||
// watcher
|
||||
new NamedXContentRegistry.Entry(MetaData.Custom.class, new ParseField(WatcherMetaData.TYPE),
|
||||
WatcherMetaData::fromXContent),
|
||||
// licensing
|
||||
new NamedXContentRegistry.Entry(MetaData.Custom.class, new ParseField(LicensesMetaData.TYPE),
|
||||
LicensesMetaData::fromXContent)
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, Supplier<Transport>> getTransports(
|
||||
final Settings settings,
|
||||
final ThreadPool threadPool,
|
||||
final BigArrays bigArrays,
|
||||
final PageCacheRecycler pageCacheRecycler,
|
||||
final CircuitBreakerService circuitBreakerService,
|
||||
final NamedWriteableRegistry namedWriteableRegistry,
|
||||
final NetworkService networkService) {
|
||||
// this should only be used in the transport layer, so do not add it if it is not in transport mode or we are disabled
|
||||
if (XPackPlugin.transportClientMode(settings) == false || XPackSettings.SECURITY_ENABLED.get(settings) == false) {
|
||||
return Collections.emptyMap();
|
||||
}
|
||||
final SSLService sslService;
|
||||
try {
|
||||
sslService = new SSLService(settings, null);
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
return Collections.singletonMap(SecurityField.NAME4, () -> new SecurityNetty4Transport(settings, threadPool,
|
||||
networkService, bigArrays, namedWriteableRegistry, circuitBreakerService, sslService));
|
||||
}
|
||||
|
||||
}
|
|
@ -5,7 +5,7 @@
|
|||
*/
|
||||
package org.elasticsearch.xpack;
|
||||
|
||||
public final class XpackField {
|
||||
public final class XPackField {
|
||||
// These should be moved back to XPackPlugin once its moved to common
|
||||
public static final String NAME = "x-pack";
|
||||
/** Name constant for the security feature. */
|
||||
|
@ -27,9 +27,9 @@ public final class XpackField {
|
|||
// inside of YAML settings we still use xpack do not having handle issues with dashes
|
||||
public static final String SETTINGS_NAME = "xpack";
|
||||
|
||||
private XpackField() {}
|
||||
private XPackField() {}
|
||||
|
||||
public static String featureSettingPrefix(String featureName) {
|
||||
return XpackField.SETTINGS_NAME + "." + featureName;
|
||||
return XPackField.SETTINGS_NAME + "." + featureName;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,238 @@
|
|||
/*
|
||||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
||||
* or more contributor license agreements. Licensed under the Elastic License;
|
||||
* you may not use this file except in compliance with the Elastic License.
|
||||
*/
|
||||
package org.elasticsearch.xpack;
|
||||
|
||||
import org.apache.lucene.util.SetOnce;
|
||||
import org.bouncycastle.operator.OperatorCreationException;
|
||||
import org.elasticsearch.SpecialPermission;
|
||||
import org.elasticsearch.action.ActionRequest;
|
||||
import org.elasticsearch.action.ActionResponse;
|
||||
import org.elasticsearch.action.GenericAction;
|
||||
import org.elasticsearch.action.support.ActionFilter;
|
||||
import org.elasticsearch.client.Client;
|
||||
import org.elasticsearch.client.transport.TransportClient;
|
||||
import org.elasticsearch.cluster.metadata.IndexNameExpressionResolver;
|
||||
import org.elasticsearch.cluster.node.DiscoveryNodes;
|
||||
import org.elasticsearch.cluster.service.ClusterService;
|
||||
import org.elasticsearch.common.inject.Binder;
|
||||
import org.elasticsearch.common.inject.Module;
|
||||
import org.elasticsearch.common.inject.multibindings.Multibinder;
|
||||
import org.elasticsearch.common.inject.util.Providers;
|
||||
import org.elasticsearch.common.io.stream.NamedWriteableRegistry;
|
||||
import org.elasticsearch.common.settings.ClusterSettings;
|
||||
import org.elasticsearch.common.settings.IndexScopedSettings;
|
||||
import org.elasticsearch.common.settings.Settings;
|
||||
import org.elasticsearch.common.settings.SettingsFilter;
|
||||
import org.elasticsearch.common.xcontent.NamedXContentRegistry;
|
||||
import org.elasticsearch.env.Environment;
|
||||
import org.elasticsearch.env.NodeEnvironment;
|
||||
import org.elasticsearch.license.LicenseService;
|
||||
import org.elasticsearch.license.Licensing;
|
||||
import org.elasticsearch.license.XPackLicenseState;
|
||||
import org.elasticsearch.plugins.ExtensiblePlugin;
|
||||
import org.elasticsearch.plugins.ScriptPlugin;
|
||||
import org.elasticsearch.rest.RestController;
|
||||
import org.elasticsearch.rest.RestHandler;
|
||||
import org.elasticsearch.script.ScriptService;
|
||||
import org.elasticsearch.threadpool.ThreadPool;
|
||||
import org.elasticsearch.watcher.ResourceWatcherService;
|
||||
import org.elasticsearch.xpack.action.TransportXPackInfoAction;
|
||||
import org.elasticsearch.xpack.action.TransportXPackUsageAction;
|
||||
import org.elasticsearch.xpack.action.XPackInfoAction;
|
||||
import org.elasticsearch.xpack.action.XPackUsageAction;
|
||||
import org.elasticsearch.xpack.extensions.XPackExtension;
|
||||
import org.elasticsearch.xpack.extensions.XPackExtensionsService;
|
||||
import org.elasticsearch.xpack.rest.action.RestXPackInfoAction;
|
||||
import org.elasticsearch.xpack.rest.action.RestXPackUsageAction;
|
||||
import org.elasticsearch.xpack.security.authc.AuthenticationServiceField;
|
||||
import org.elasticsearch.xpack.security.authc.support.UsernamePasswordToken;
|
||||
import org.elasticsearch.xpack.ssl.SSLConfigurationReloader;
|
||||
import org.elasticsearch.xpack.ssl.SSLService;
|
||||
|
||||
import javax.security.auth.DestroyFailedException;
|
||||
import java.io.IOException;
|
||||
import java.nio.file.Path;
|
||||
import java.security.AccessController;
|
||||
import java.security.GeneralSecurityException;
|
||||
import java.security.PrivilegedAction;
|
||||
import java.time.Clock;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.function.Supplier;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class XPackPlugin extends XPackClientPlugin implements ScriptPlugin, ExtensiblePlugin {
|
||||
|
||||
// TODO: clean up this library to not ask for write access to all system properties!
|
||||
static {
|
||||
// invoke this clinit in unbound with permissions to access all system properties
|
||||
SecurityManager sm = System.getSecurityManager();
|
||||
if (sm != null) {
|
||||
sm.checkPermission(new SpecialPermission());
|
||||
}
|
||||
try {
|
||||
AccessController.doPrivileged(new PrivilegedAction<Void>() {
|
||||
@Override
|
||||
public Void run() {
|
||||
try {
|
||||
Class.forName("com.unboundid.util.Debug");
|
||||
} catch (ClassNotFoundException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
});
|
||||
// TODO: fix gradle to add all security resources (plugin metadata) to test classpath
|
||||
// of watcher plugin, which depends on it directly. This prevents these plugins
|
||||
// from being initialized correctly by the test framework, and means we have to
|
||||
// have this leniency.
|
||||
} catch (ExceptionInInitializerError bogus) {
|
||||
if (bogus.getCause() instanceof SecurityException == false) {
|
||||
throw bogus; // some other bug
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected final Settings settings;
|
||||
//private final Environment env;
|
||||
protected boolean transportClientMode;
|
||||
protected final Licensing licensing;
|
||||
// These should not be directly accessed as they cannot be overriden in tests. Please use the getters so they can be overridden.
|
||||
private static final SetOnce<XPackLicenseState> licenseState = new SetOnce<>();
|
||||
private static final SetOnce<SSLService> sslService = new SetOnce<>();
|
||||
private static final SetOnce<LicenseService> licenseService = new SetOnce<>();
|
||||
|
||||
public XPackPlugin(
|
||||
final Settings settings,
|
||||
final Path configPath) throws IOException, DestroyFailedException, OperatorCreationException, GeneralSecurityException {
|
||||
super(settings);
|
||||
this.settings = settings;
|
||||
this.transportClientMode = transportClientMode(settings);
|
||||
Environment env = transportClientMode ? null : new Environment(settings, configPath);
|
||||
|
||||
setSslService(new SSLService(settings, env));
|
||||
setLicenseState(new XPackLicenseState());
|
||||
|
||||
this.licensing = new Licensing(settings);
|
||||
}
|
||||
|
||||
// For tests only
|
||||
public Collection<Class<? extends XPackExtension>> getExtensions() {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
// overridable by tests
|
||||
protected Clock getClock() {
|
||||
return Clock.systemUTC();
|
||||
}
|
||||
|
||||
protected SSLService getSslService() { return getSharedSslService(); }
|
||||
protected LicenseService getLicenseService() { return getSharedLicenseService(); }
|
||||
protected XPackLicenseState getLicenseState() { return getSharedLicenseState(); }
|
||||
protected void setSslService(SSLService sslService) { XPackPlugin.sslService.set(sslService); }
|
||||
protected void setLicenseService(LicenseService licenseService) { XPackPlugin.licenseService.set(licenseService); }
|
||||
protected void setLicenseState(XPackLicenseState licenseState) { XPackPlugin.licenseState.set(licenseState); }
|
||||
public static SSLService getSharedSslService() { return sslService.get(); }
|
||||
public static LicenseService getSharedLicenseService() { return licenseService.get(); }
|
||||
public static XPackLicenseState getSharedLicenseState() { return licenseState.get(); }
|
||||
|
||||
@Override
|
||||
public Collection<Module> createGuiceModules() {
|
||||
ArrayList<Module> modules = new ArrayList<>();
|
||||
//modules.add(b -> b.bind(Clock.class).toInstance(getClock()));
|
||||
// used to get core up and running, we do not bind the actual feature set here
|
||||
modules.add(b -> XPackPlugin.createFeatureSetMultiBinder(b, EmptyXPackFeatureSet.class));
|
||||
|
||||
if (transportClientMode) {
|
||||
modules.add(b -> b.bind(XPackLicenseState.class).toProvider(Providers.of(null)));
|
||||
}
|
||||
return modules;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<Object> createComponents(Client client, ClusterService clusterService, ThreadPool threadPool,
|
||||
ResourceWatcherService resourceWatcherService, ScriptService scriptService,
|
||||
NamedXContentRegistry xContentRegistry, Environment environment,
|
||||
NodeEnvironment nodeEnvironment, NamedWriteableRegistry namedWriteableRegistry) {
|
||||
List<Object> components = new ArrayList<>();
|
||||
|
||||
// just create the reloader as it will pull all of the loaded ssl configurations and start watching them
|
||||
new SSLConfigurationReloader(settings, environment, getSslService(), resourceWatcherService);
|
||||
|
||||
setLicenseService(new LicenseService(settings, clusterService, getClock(),
|
||||
environment, resourceWatcherService, getLicenseState()));
|
||||
|
||||
// It is useful to override these as they are what guice is injecting into actions
|
||||
components.add(getSslService());
|
||||
components.add(getLicenseService());
|
||||
components.add(getLicenseState());
|
||||
|
||||
return components;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ActionHandler<? extends ActionRequest, ? extends ActionResponse>> getActions() {
|
||||
List<ActionHandler<? extends ActionRequest, ? extends ActionResponse>> actions = new ArrayList<>();
|
||||
actions.add(new ActionHandler<>(XPackInfoAction.INSTANCE, TransportXPackInfoAction.class));
|
||||
actions.add(new ActionHandler<>(XPackUsageAction.INSTANCE, TransportXPackUsageAction.class));
|
||||
actions.addAll(licensing.getActions());
|
||||
return actions;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<GenericAction> getClientActions() {
|
||||
List<GenericAction> actions = new ArrayList<>();
|
||||
actions.addAll(licensing.getClientActions());
|
||||
actions.addAll(super.getClientActions());
|
||||
return actions;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ActionFilter> getActionFilters() {
|
||||
List<ActionFilter> filters = new ArrayList<>();
|
||||
filters.addAll(licensing.getActionFilters());
|
||||
return filters;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<RestHandler> getRestHandlers(Settings settings, RestController restController, ClusterSettings clusterSettings,
|
||||
IndexScopedSettings indexScopedSettings, SettingsFilter settingsFilter, IndexNameExpressionResolver indexNameExpressionResolver,
|
||||
Supplier<DiscoveryNodes> nodesInCluster) {
|
||||
List<RestHandler> handlers = new ArrayList<>();
|
||||
handlers.add(new RestXPackInfoAction(settings, restController));
|
||||
handlers.add(new RestXPackUsageAction(settings, restController));
|
||||
handlers.addAll(licensing.getRestHandlers(settings, restController, clusterSettings, indexScopedSettings, settingsFilter,
|
||||
indexNameExpressionResolver, nodesInCluster));
|
||||
return handlers;
|
||||
}
|
||||
|
||||
public static void bindFeatureSet(Binder binder, Class<? extends XPackFeatureSet> featureSet) {
|
||||
Multibinder<XPackFeatureSet> featureSetBinder = createFeatureSetMultiBinder(binder, featureSet);
|
||||
featureSetBinder.addBinding().to(featureSet);
|
||||
}
|
||||
|
||||
public static Multibinder<XPackFeatureSet> createFeatureSetMultiBinder(Binder binder, Class<? extends XPackFeatureSet> featureSet) {
|
||||
binder.bind(featureSet).asEagerSingleton();
|
||||
return Multibinder.newSetBinder(binder, XPackFeatureSet.class);
|
||||
}
|
||||
|
||||
public static boolean transportClientMode(Settings settings) {
|
||||
return TransportClient.CLIENT_TYPE.equals(settings.get(Client.CLIENT_TYPE_SETTING_S.getKey()));
|
||||
}
|
||||
|
||||
public static Path resolveConfigFile(Environment env, String name) {
|
||||
return env.configFile().resolve(XPackField.NAME).resolve(name);
|
||||
}
|
||||
|
||||
public static Path resolveXPackExtensionsFile(Environment env) {
|
||||
return env.pluginsFile().resolve(XPackField.NAME).resolve("x-pack-security").resolve("extensions");
|
||||
}
|
||||
|
||||
}
|
|
@ -6,9 +6,13 @@
|
|||
package org.elasticsearch.xpack;
|
||||
|
||||
import org.elasticsearch.common.network.NetworkModule;
|
||||
import org.elasticsearch.common.settings.SecureString;
|
||||
import org.elasticsearch.common.settings.Setting;
|
||||
import org.elasticsearch.common.settings.Setting.Property;
|
||||
import org.elasticsearch.common.settings.Settings;
|
||||
import org.elasticsearch.common.util.concurrent.ThreadContext;
|
||||
import org.elasticsearch.xpack.security.SecurityField;
|
||||
import org.elasticsearch.xpack.security.authc.support.UsernamePasswordToken;
|
||||
import org.elasticsearch.xpack.ssl.SSLClientAuth;
|
||||
import org.elasticsearch.xpack.ssl.SSLConfigurationSettings;
|
||||
import org.elasticsearch.xpack.ssl.VerificationMode;
|
||||
|
@ -19,6 +23,9 @@ import java.util.ArrayList;
|
|||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
import static org.elasticsearch.xpack.security.SecurityField.USER_SETTING;
|
||||
|
||||
/**
|
||||
* A container for xpack setting constants.
|
||||
|
@ -121,7 +128,7 @@ public class XPackSettings {
|
|||
private static final SSLConfigurationSettings TRANSPORT_SSL = SSLConfigurationSettings.withPrefix(TRANSPORT_SSL_PREFIX);
|
||||
|
||||
/** Returns all settings created in {@link XPackSettings}. */
|
||||
static List<Setting<?>> getAllSettings() {
|
||||
public static List<Setting<?>> getAllSettings() {
|
||||
ArrayList<Setting<?>> settings = new ArrayList<>();
|
||||
settings.addAll(GLOBAL_SSL.getAllSettings());
|
||||
settings.addAll(HTTP_SSL.getAllSettings());
|
||||
|
@ -138,6 +145,8 @@ public class XPackSettings {
|
|||
settings.add(HTTP_SSL_ENABLED);
|
||||
settings.add(RESERVED_REALM_ENABLED_SETTING);
|
||||
settings.add(TOKEN_SERVICE_ENABLED_SETTING);
|
||||
settings.add(USER_SETTING);
|
||||
return Collections.unmodifiableList(settings);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -10,6 +10,7 @@ import org.elasticsearch.action.support.ActionFilters;
|
|||
import org.elasticsearch.action.support.HandledTransportAction;
|
||||
import org.elasticsearch.cluster.metadata.IndexNameExpressionResolver;
|
||||
import org.elasticsearch.common.inject.Inject;
|
||||
import org.elasticsearch.common.inject.internal.Nullable;
|
||||
import org.elasticsearch.common.settings.Settings;
|
||||
import org.elasticsearch.license.XPackInfoResponse;
|
||||
import org.elasticsearch.license.License;
|
|
@ -74,7 +74,7 @@ public class DeprecationInfoAction extends Action<DeprecationInfoAction.Request,
|
|||
private List<DeprecationIssue> nodeSettingsIssues;
|
||||
private Map<String, List<DeprecationIssue>> indexSettingsIssues;
|
||||
|
||||
Response() {
|
||||
public Response() {
|
||||
}
|
||||
|
||||
public Response(List<DeprecationIssue> clusterSettingsIssues,
|
||||
|
@ -157,7 +157,7 @@ public class DeprecationInfoAction extends Action<DeprecationInfoAction.Request,
|
|||
* concrete indices
|
||||
* @return The list of deprecation issues found in the cluster
|
||||
*/
|
||||
static DeprecationInfoAction.Response from(List<NodeInfo> nodesInfo, List<NodeStats> nodesStats, ClusterState state,
|
||||
public static DeprecationInfoAction.Response from(List<NodeInfo> nodesInfo, List<NodeStats> nodesStats, ClusterState state,
|
||||
IndexNameExpressionResolver indexNameExpressionResolver,
|
||||
String[] indices, IndicesOptions indicesOptions,
|
||||
List<Function<ClusterState,DeprecationIssue>>clusterSettingsChecks,
|
||||
|
|
|
@ -14,6 +14,7 @@ import org.elasticsearch.cli.Terminal;
|
|||
import org.elasticsearch.cli.UserException;
|
||||
import org.elasticsearch.common.Strings;
|
||||
import org.elasticsearch.env.Environment;
|
||||
import org.elasticsearch.xpack.XPackPlugin;
|
||||
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
|
@ -50,7 +51,7 @@ class RemoveXPackExtensionCommand extends EnvironmentAwareCommand {
|
|||
void execute(Terminal terminal, String extensionName, Environment env) throws Exception {
|
||||
terminal.println("-> Removing " + Strings.coalesceToEmpty(extensionName) + "...");
|
||||
|
||||
Path extensionDir = resolveXPackExtensionsFile(env).resolve(extensionName);
|
||||
Path extensionDir = XPackPlugin.resolveXPackExtensionsFile(env).resolve(extensionName);
|
||||
if (Files.exists(extensionDir) == false) {
|
||||
throw new UserException(ExitCodes.USAGE,
|
||||
"Extension " + extensionName + " not found. Run 'bin/x-pack/extension list' to get list of installed extensions.");
|
||||
|
@ -59,7 +60,7 @@ class RemoveXPackExtensionCommand extends EnvironmentAwareCommand {
|
|||
List<Path> extensionPaths = new ArrayList<>();
|
||||
|
||||
terminal.println(VERBOSE, "Removing: " + extensionDir);
|
||||
Path tmpExtensionDir = resolveXPackExtensionsFile(env).resolve(".removing-" + extensionName);
|
||||
Path tmpExtensionDir = XPackPlugin.resolveXPackExtensionsFile(env).resolve(".removing-" + extensionName);
|
||||
Files.move(extensionDir, tmpExtensionDir, StandardCopyOption.ATOMIC_MOVE);
|
||||
extensionPaths.add(tmpExtensionDir);
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
/*
|
||||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
||||
* or more contributor license agreements. Licensed under the Elastic License;
|
||||
* you may not use this file except in compliance with the Elastic License.
|
||||
*/
|
||||
package org.elasticsearch.xpack.graph;
|
||||
|
||||
import org.elasticsearch.common.io.stream.StreamInput;
|
||||
import org.elasticsearch.xpack.XPackFeatureSet;
|
||||
import org.elasticsearch.xpack.XPackField;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
public class GraphFeatureSetUsage extends XPackFeatureSet.Usage {
|
||||
|
||||
public GraphFeatureSetUsage(StreamInput input) throws IOException {
|
||||
super(input);
|
||||
}
|
||||
|
||||
public GraphFeatureSetUsage(boolean available, boolean enabled) {
|
||||
super(XPackField.GRAPH, available, enabled);
|
||||
}
|
||||
}
|
|
@ -40,11 +40,11 @@ public class GraphExploreResponse extends ActionResponse implements ToXContentOb
|
|||
private boolean returnDetailedInfo;
|
||||
static final String RETURN_DETAILED_INFO_PARAM = "returnDetailedInfo";
|
||||
|
||||
GraphExploreResponse() {
|
||||
public GraphExploreResponse() {
|
||||
}
|
||||
|
||||
GraphExploreResponse(long tookInMillis, boolean timedOut, ShardOperationFailedException[] shardFailures, Map<VertexId, Vertex> vertices,
|
||||
Map<ConnectionId, Connection> connections, boolean returnDetailedInfo) {
|
||||
public GraphExploreResponse(long tookInMillis, boolean timedOut, ShardOperationFailedException[] shardFailures,
|
||||
Map<VertexId, Vertex> vertices, Map<ConnectionId, Connection> connections, boolean returnDetailedInfo) {
|
||||
this.tookInMillis = tookInMillis;
|
||||
this.timedOut = timedOut;
|
||||
this.shardFailures = shardFailures;
|
||||
|
|
|
@ -46,7 +46,7 @@ public class Hop {
|
|||
List<VertexRequest> vertices = null;
|
||||
QueryBuilder guidingQuery = null;
|
||||
|
||||
Hop(Hop parent) {
|
||||
public Hop(Hop parent) {
|
||||
this.parentHop = parent;
|
||||
}
|
||||
|
||||
|
@ -132,11 +132,11 @@ public class Hop {
|
|||
return parentHop.getEffectiveVertexRequests();
|
||||
}
|
||||
|
||||
int getNumberVertexRequests() {
|
||||
public int getNumberVertexRequests() {
|
||||
return getEffectiveVertexRequests().size();
|
||||
}
|
||||
|
||||
VertexRequest getVertexRequest(int requestNumber) {
|
||||
public VertexRequest getVertexRequest(int requestNumber) {
|
||||
return getEffectiveVertexRequests().get(requestNumber);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -28,7 +28,7 @@ public class Vertex implements ToXContentFragment {
|
|||
final long bg;
|
||||
long fg;
|
||||
|
||||
Vertex(String field, String term, double weight, int depth, long bg, long fg) {
|
||||
public Vertex(String field, String term, double weight, int depth, long bg, long fg) {
|
||||
super();
|
||||
this.field = field;
|
||||
this.term = term;
|
||||
|
|
|
@ -32,7 +32,7 @@ public class VertexRequest {
|
|||
private int shardMinDocCount = DEFAULT_SHARD_MIN_DOC_COUNT;
|
||||
|
||||
|
||||
VertexRequest() {
|
||||
public VertexRequest() {
|
||||
|
||||
}
|
||||
|
||||
|
@ -151,7 +151,7 @@ public class VertexRequest {
|
|||
return includes.values().toArray(new TermBoost[includes.size()]);
|
||||
}
|
||||
|
||||
String[] includeValuesAsStringArray() {
|
||||
public String[] includeValuesAsStringArray() {
|
||||
String[] result = new String[includes.size()];
|
||||
int i = 0;
|
||||
for (TermBoost tb : includes.values()) {
|
||||
|
@ -160,7 +160,7 @@ public class VertexRequest {
|
|||
return result;
|
||||
}
|
||||
|
||||
String[] excludesAsArray() {
|
||||
public String[] excludesAsArray() {
|
||||
return excludes.toArray(new String[excludes.size()]);
|
||||
}
|
||||
|
||||
|
|
|
@ -11,9 +11,4 @@ import org.elasticsearch.common.unit.TimeValue;
|
|||
|
||||
public interface MachineLearningClientActionPlugin {
|
||||
|
||||
Setting<ByteSizeValue> MAX_MODEL_MEMORY_LIMIT =
|
||||
Setting.memorySizeSetting("xpack.ml.max_model_memory_limit", new ByteSizeValue(0),
|
||||
Setting.Property.Dynamic, Setting.Property.NodeScope);
|
||||
|
||||
TimeValue STATE_PERSIST_RESTORE_TIMEOUT = TimeValue.timeValueMinutes(30);
|
||||
}
|
||||
|
|
|
@ -0,0 +1,61 @@
|
|||
/*
|
||||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
||||
* or more contributor license agreements. Licensed under the Elastic License;
|
||||
* you may not use this file except in compliance with the Elastic License.
|
||||
*/
|
||||
package org.elasticsearch.xpack.ml;
|
||||
|
||||
import org.elasticsearch.common.io.stream.StreamInput;
|
||||
import org.elasticsearch.common.io.stream.StreamOutput;
|
||||
import org.elasticsearch.common.xcontent.XContentBuilder;
|
||||
import org.elasticsearch.xpack.XPackFeatureSet;
|
||||
import org.elasticsearch.xpack.XPackField;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
|
||||
public class MachineLearningFeatureSetUsage extends XPackFeatureSet.Usage {
|
||||
|
||||
protected static final String ALL = "_all";
|
||||
protected static final String JOBS_FIELD = "jobs";
|
||||
protected static final String DATAFEEDS_FIELD = "datafeeds";
|
||||
protected static final String COUNT = "count";
|
||||
protected static final String DETECTORS = "detectors";
|
||||
protected static final String MODEL_SIZE = "model_size";
|
||||
|
||||
private final Map<String, Object> jobsUsage;
|
||||
private final Map<String, Object> datafeedsUsage;
|
||||
|
||||
public MachineLearningFeatureSetUsage(boolean available, boolean enabled, Map<String, Object> jobsUsage,
|
||||
Map<String, Object> datafeedsUsage) {
|
||||
super(XPackField.MACHINE_LEARNING, available, enabled);
|
||||
this.jobsUsage = Objects.requireNonNull(jobsUsage);
|
||||
this.datafeedsUsage = Objects.requireNonNull(datafeedsUsage);
|
||||
}
|
||||
|
||||
public MachineLearningFeatureSetUsage(StreamInput in) throws IOException {
|
||||
super(in);
|
||||
this.jobsUsage = in.readMap();
|
||||
this.datafeedsUsage = in.readMap();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeTo(StreamOutput out) throws IOException {
|
||||
super.writeTo(out);
|
||||
out.writeMap(jobsUsage);
|
||||
out.writeMap(datafeedsUsage);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void innerXContent(XContentBuilder builder, Params params) throws IOException {
|
||||
super.innerXContent(builder, params);
|
||||
if (jobsUsage != null) {
|
||||
builder.field(JOBS_FIELD, jobsUsage);
|
||||
}
|
||||
if (datafeedsUsage != null) {
|
||||
builder.field(DATAFEEDS_FIELD, datafeedsUsage);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,22 @@
|
|||
/*
|
||||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
||||
* or more contributor license agreements. Licensed under the Elastic License;
|
||||
* you may not use this file except in compliance with the Elastic License.
|
||||
*/
|
||||
package org.elasticsearch.xpack.ml;
|
||||
|
||||
import org.elasticsearch.common.settings.Setting;
|
||||
import org.elasticsearch.common.unit.ByteSizeValue;
|
||||
import org.elasticsearch.common.unit.TimeValue;
|
||||
|
||||
public final class MachineLearningField {
|
||||
public static final Setting<Boolean> AUTODETECT_PROCESS =
|
||||
Setting.boolSetting("xpack.ml.autodetect_process", true, Setting.Property.NodeScope);
|
||||
public static final Setting<ByteSizeValue> MAX_MODEL_MEMORY_LIMIT =
|
||||
Setting.memorySizeSetting("xpack.ml.max_model_memory_limit", new ByteSizeValue(0),
|
||||
Setting.Property.Dynamic, Setting.Property.NodeScope);
|
||||
public static final TimeValue STATE_PERSIST_RESTORE_TIMEOUT = TimeValue.timeValueMinutes(30);
|
||||
|
||||
private MachineLearningField() {}
|
||||
|
||||
}
|
|
@ -21,7 +21,7 @@ import org.elasticsearch.common.xcontent.ToXContentObject;
|
|||
import org.elasticsearch.common.xcontent.XContentBuilder;
|
||||
import org.elasticsearch.common.xcontent.XContentParser;
|
||||
import org.elasticsearch.tasks.Task;
|
||||
import org.elasticsearch.xpack.ml.MachineLearningClientActionPlugin;
|
||||
import org.elasticsearch.xpack.ml.MachineLearningField;
|
||||
import org.elasticsearch.xpack.ml.job.config.Job;
|
||||
|
||||
import java.io.IOException;
|
||||
|
@ -74,13 +74,13 @@ public class CloseJobAction extends Action<CloseJobAction.Request, CloseJobActio
|
|||
private boolean allowNoJobs = true;
|
||||
// A big state can take a while to persist. For symmetry with the _open endpoint any
|
||||
// changes here should be reflected there too.
|
||||
private TimeValue timeout = MachineLearningClientActionPlugin.STATE_PERSIST_RESTORE_TIMEOUT;
|
||||
private TimeValue timeout = MachineLearningField.STATE_PERSIST_RESTORE_TIMEOUT;
|
||||
|
||||
private String[] openJobIds;
|
||||
|
||||
private boolean local;
|
||||
|
||||
Request() {
|
||||
public Request() {
|
||||
openJobIds = new String[] {};
|
||||
}
|
||||
|
||||
|
@ -215,17 +215,17 @@ public class CloseJobAction extends Action<CloseJobAction.Request, CloseJobActio
|
|||
|
||||
private boolean closed;
|
||||
|
||||
Response() {
|
||||
public Response() {
|
||||
super(null, null);
|
||||
|
||||
}
|
||||
|
||||
Response(StreamInput in) throws IOException {
|
||||
public Response(StreamInput in) throws IOException {
|
||||
super(null, null);
|
||||
readFrom(in);
|
||||
}
|
||||
|
||||
Response(boolean closed) {
|
||||
public Response(boolean closed) {
|
||||
super(null, null);
|
||||
this.closed = closed;
|
||||
}
|
||||
|
|
|
@ -44,7 +44,7 @@ public class DeleteCalendarAction extends Action<DeleteCalendarAction.Request, D
|
|||
|
||||
private String calendarId;
|
||||
|
||||
Request() {
|
||||
public Request() {
|
||||
}
|
||||
|
||||
public Request(String calendarId) {
|
||||
|
@ -102,7 +102,7 @@ public class DeleteCalendarAction extends Action<DeleteCalendarAction.Request, D
|
|||
super(acknowledged);
|
||||
}
|
||||
|
||||
private Response() {}
|
||||
public Response() {}
|
||||
|
||||
@Override
|
||||
public void readFrom(StreamInput in) throws IOException {
|
||||
|
|
|
@ -44,7 +44,7 @@ public class DeleteCalendarEventAction extends Action<DeleteCalendarEventAction.
|
|||
private String calendarId;
|
||||
private String eventId;
|
||||
|
||||
Request() {
|
||||
public Request() {
|
||||
}
|
||||
|
||||
public Request(String calendarId, String eventId) {
|
||||
|
|
|
@ -54,7 +54,7 @@ public class DeleteDatafeedAction extends Action<DeleteDatafeedAction.Request, D
|
|||
this.datafeedId = ExceptionsHelper.requireNonNull(datafeedId, DatafeedConfig.ID.getPreferredName());
|
||||
}
|
||||
|
||||
Request() {
|
||||
public Request() {
|
||||
}
|
||||
|
||||
public String getDatafeedId() {
|
||||
|
@ -121,10 +121,10 @@ public class DeleteDatafeedAction extends Action<DeleteDatafeedAction.Request, D
|
|||
|
||||
public static class Response extends AcknowledgedResponse {
|
||||
|
||||
Response() {
|
||||
public Response() {
|
||||
}
|
||||
|
||||
Response(boolean acknowledged) {
|
||||
public Response(boolean acknowledged) {
|
||||
super(acknowledged);
|
||||
}
|
||||
|
||||
|
|
|
@ -67,7 +67,7 @@ public class DeleteExpiredDataAction extends Action<DeleteExpiredDataAction.Requ
|
|||
this.deleted = deleted;
|
||||
}
|
||||
|
||||
Response() {}
|
||||
public Response() {}
|
||||
|
||||
@Override
|
||||
public void readFrom(StreamInput in) throws IOException {
|
||||
|
|
|
@ -45,7 +45,7 @@ public class DeleteFilterAction extends Action<DeleteFilterAction.Request, Delet
|
|||
|
||||
private String filterId;
|
||||
|
||||
Request() {
|
||||
public Request() {
|
||||
|
||||
}
|
||||
|
||||
|
@ -102,7 +102,7 @@ public class DeleteFilterAction extends Action<DeleteFilterAction.Request, Delet
|
|||
super(acknowledged);
|
||||
}
|
||||
|
||||
private Response() {}
|
||||
public Response() {}
|
||||
|
||||
@Override
|
||||
public void readFrom(StreamInput in) throws IOException {
|
||||
|
|
|
@ -52,7 +52,7 @@ public class DeleteJobAction extends Action<DeleteJobAction.Request, DeleteJobAc
|
|||
this.jobId = ExceptionsHelper.requireNonNull(jobId, Job.ID.getPreferredName());
|
||||
}
|
||||
|
||||
Request() {}
|
||||
public Request() {}
|
||||
|
||||
public String getJobId() {
|
||||
return jobId;
|
||||
|
@ -129,7 +129,7 @@ public class DeleteJobAction extends Action<DeleteJobAction.Request, DeleteJobAc
|
|||
super(acknowledged);
|
||||
}
|
||||
|
||||
Response() {}
|
||||
public Response() {}
|
||||
|
||||
@Override
|
||||
public void readFrom(StreamInput in) throws IOException {
|
||||
|
|
|
@ -44,7 +44,7 @@ public class DeleteModelSnapshotAction extends Action<DeleteModelSnapshotAction.
|
|||
private String jobId;
|
||||
private String snapshotId;
|
||||
|
||||
Request() {
|
||||
public Request() {
|
||||
}
|
||||
|
||||
public Request(String jobId, String snapshotId) {
|
||||
|
@ -86,7 +86,7 @@ public class DeleteModelSnapshotAction extends Action<DeleteModelSnapshotAction.
|
|||
super(acknowledged);
|
||||
}
|
||||
|
||||
private Response() {}
|
||||
public Response() {}
|
||||
|
||||
@Override
|
||||
public void readFrom(StreamInput in) throws IOException {
|
||||
|
|
|
@ -44,7 +44,7 @@ public class FinalizeJobExecutionAction extends Action<FinalizeJobExecutionActio
|
|||
this.jobIds = jobIds;
|
||||
}
|
||||
|
||||
Request() {
|
||||
public Request() {
|
||||
}
|
||||
|
||||
public String[] getJobIds() {
|
||||
|
@ -79,11 +79,11 @@ public class FinalizeJobExecutionAction extends Action<FinalizeJobExecutionActio
|
|||
|
||||
public static class Response extends AcknowledgedResponse {
|
||||
|
||||
Response(boolean acknowledged) {
|
||||
public Response(boolean acknowledged) {
|
||||
super(acknowledged);
|
||||
}
|
||||
|
||||
Response() {
|
||||
public Response() {
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -78,7 +78,7 @@ public class FlushJobAction extends Action<FlushJobAction.Request, FlushJobActio
|
|||
private String advanceTime;
|
||||
private String skipTime;
|
||||
|
||||
Request() {
|
||||
public Request() {
|
||||
}
|
||||
|
||||
public Request(String jobId) {
|
||||
|
@ -205,7 +205,7 @@ public class FlushJobAction extends Action<FlushJobAction.Request, FlushJobActio
|
|||
private boolean flushed;
|
||||
private Date lastFinalizedBucketEnd;
|
||||
|
||||
Response() {
|
||||
public Response() {
|
||||
super(null, null);
|
||||
}
|
||||
|
||||
|
|
|
@ -71,7 +71,7 @@ public class ForecastJobAction extends Action<ForecastJobAction.Request, Forecas
|
|||
private TimeValue duration;
|
||||
private TimeValue expiresIn;
|
||||
|
||||
Request() {
|
||||
public Request() {
|
||||
}
|
||||
|
||||
public Request(String jobId) {
|
||||
|
@ -174,11 +174,11 @@ public class ForecastJobAction extends Action<ForecastJobAction.Request, Forecas
|
|||
private boolean acknowledged;
|
||||
private String forecastId;
|
||||
|
||||
Response() {
|
||||
public Response() {
|
||||
super(null, null);
|
||||
}
|
||||
|
||||
Response(boolean acknowledged, String forecastId) {
|
||||
public Response(boolean acknowledged, String forecastId) {
|
||||
super(null, null);
|
||||
this.acknowledged = acknowledged;
|
||||
this.forecastId = forecastId;
|
||||
|
|
|
@ -94,7 +94,7 @@ public class GetBucketsAction extends Action<GetBucketsAction.Request, GetBucket
|
|||
private String sort = Result.TIMESTAMP.getPreferredName();
|
||||
private boolean descending = false;
|
||||
|
||||
Request() {
|
||||
public Request() {
|
||||
}
|
||||
|
||||
public Request(String jobId) {
|
||||
|
@ -305,10 +305,10 @@ public class GetBucketsAction extends Action<GetBucketsAction.Request, GetBucket
|
|||
|
||||
private QueryPage<Bucket> buckets;
|
||||
|
||||
Response() {
|
||||
public Response() {
|
||||
}
|
||||
|
||||
Response(QueryPage<Bucket> buckets) {
|
||||
public Response(QueryPage<Bucket> buckets) {
|
||||
this.buckets = buckets;
|
||||
}
|
||||
|
||||
|
|
|
@ -77,7 +77,7 @@ public class GetCalendarEventsAction extends Action<GetCalendarEventsAction.Requ
|
|||
private String jobId;
|
||||
private PageParams pageParams = PageParams.defaultParams();
|
||||
|
||||
Request() {
|
||||
public Request() {
|
||||
}
|
||||
|
||||
public Request(String calendarId) {
|
||||
|
@ -204,7 +204,7 @@ public class GetCalendarEventsAction extends Action<GetCalendarEventsAction.Requ
|
|||
|
||||
private QueryPage<ScheduledEvent> scheduledEvents;
|
||||
|
||||
Response() {
|
||||
public Response() {
|
||||
}
|
||||
|
||||
public Response(QueryPage<ScheduledEvent> scheduledEvents) {
|
||||
|
|
|
@ -162,7 +162,7 @@ public class GetCalendarsAction extends Action<GetCalendarsAction.Request, GetCa
|
|||
this.calendars = calendars;
|
||||
}
|
||||
|
||||
Response() {
|
||||
public Response() {
|
||||
}
|
||||
|
||||
public QueryPage<Calendar> getCalendars() {
|
||||
|
|
|
@ -79,7 +79,7 @@ Action<GetCategoriesAction.Request, GetCategoriesAction.Response, GetCategoriesA
|
|||
this.jobId = ExceptionsHelper.requireNonNull(jobId, Job.ID.getPreferredName());
|
||||
}
|
||||
|
||||
Request() {
|
||||
public Request() {
|
||||
}
|
||||
|
||||
public String getJobId() { return jobId; }
|
||||
|
@ -178,7 +178,7 @@ Action<GetCategoriesAction.Request, GetCategoriesAction.Response, GetCategoriesA
|
|||
this.result = result;
|
||||
}
|
||||
|
||||
Response() {
|
||||
public Response() {
|
||||
}
|
||||
|
||||
public QueryPage<CategoryDefinition> getResult() {
|
||||
|
|
|
@ -59,11 +59,11 @@ public class GetDatafeedsAction extends Action<GetDatafeedsAction.Request, GetDa
|
|||
this.datafeedId = ExceptionsHelper.requireNonNull(datafeedId, DatafeedConfig.ID.getPreferredName());
|
||||
}
|
||||
|
||||
Request() {
|
||||
public Request() {
|
||||
local(true);
|
||||
}
|
||||
|
||||
Request(StreamInput in) throws IOException {
|
||||
public Request(StreamInput in) throws IOException {
|
||||
super(in);
|
||||
datafeedId = in.readString();
|
||||
if (in.getVersion().onOrAfter(Version.V_6_1_0)) {
|
||||
|
|
|
@ -64,9 +64,9 @@ public class GetDatafeedsStatsAction extends Action<GetDatafeedsStatsAction.Requ
|
|||
this.datafeedId = ExceptionsHelper.requireNonNull(datafeedId, DatafeedConfig.ID.getPreferredName());
|
||||
}
|
||||
|
||||
Request() {}
|
||||
public Request() {}
|
||||
|
||||
Request(StreamInput in) throws IOException {
|
||||
public Request(StreamInput in) throws IOException {
|
||||
super(in);
|
||||
datafeedId = in.readString();
|
||||
if (in.getVersion().onOrAfter(Version.V_6_1_0)) {
|
||||
|
@ -141,7 +141,7 @@ public class GetDatafeedsStatsAction extends Action<GetDatafeedsStatsAction.Requ
|
|||
@Nullable
|
||||
private String assignmentExplanation;
|
||||
|
||||
DatafeedStats(String datafeedId, DatafeedState datafeedState, @Nullable DiscoveryNode node,
|
||||
public DatafeedStats(String datafeedId, DatafeedState datafeedState, @Nullable DiscoveryNode node,
|
||||
@Nullable String assignmentExplanation) {
|
||||
this.datafeedId = Objects.requireNonNull(datafeedId);
|
||||
this.datafeedState = Objects.requireNonNull(datafeedState);
|
||||
|
|
|
@ -126,7 +126,7 @@ public class GetFiltersAction extends Action<GetFiltersAction.Request, GetFilter
|
|||
this.filters = filters;
|
||||
}
|
||||
|
||||
Response() {
|
||||
public Response() {
|
||||
}
|
||||
|
||||
public QueryPage<MlFilter> getFilters() {
|
||||
|
|
|
@ -87,7 +87,7 @@ extends Action<GetInfluencersAction.Request, GetInfluencersAction.Response, GetI
|
|||
private String sort = Influencer.INFLUENCER_SCORE.getPreferredName();
|
||||
private boolean descending = true;
|
||||
|
||||
Request() {
|
||||
public Request() {
|
||||
}
|
||||
|
||||
public Request(String jobId) {
|
||||
|
@ -235,10 +235,10 @@ extends Action<GetInfluencersAction.Request, GetInfluencersAction.Response, GetI
|
|||
|
||||
private QueryPage<Influencer> influencers;
|
||||
|
||||
Response() {
|
||||
public Response() {
|
||||
}
|
||||
|
||||
Response(QueryPage<Influencer> influencers) {
|
||||
public Response(QueryPage<Influencer> influencers) {
|
||||
this.influencers = influencers;
|
||||
}
|
||||
|
||||
|
|
|
@ -56,11 +56,11 @@ public class GetJobsAction extends Action<GetJobsAction.Request, GetJobsAction.R
|
|||
this.jobId = ExceptionsHelper.requireNonNull(jobId, Job.ID.getPreferredName());
|
||||
}
|
||||
|
||||
Request() {
|
||||
public Request() {
|
||||
local(true);
|
||||
}
|
||||
|
||||
Request(StreamInput in) throws IOException {
|
||||
public Request(StreamInput in) throws IOException {
|
||||
super(in);
|
||||
jobId = in.readString();
|
||||
if (in.getVersion().onOrAfter(Version.V_6_1_0)) {
|
||||
|
|
|
@ -78,7 +78,7 @@ public class GetJobsStatsAction extends Action<GetJobsStatsAction.Request, GetJo
|
|||
this.expandedJobsIds = Collections.singletonList(jobId);
|
||||
}
|
||||
|
||||
Request() {}
|
||||
public Request() {}
|
||||
|
||||
public List<String> getExpandedJobsIds() { return expandedJobsIds; }
|
||||
|
||||
|
@ -177,7 +177,7 @@ public class GetJobsStatsAction extends Action<GetJobsStatsAction.Request, GetJo
|
|||
this.openTime = opentime;
|
||||
}
|
||||
|
||||
JobStats(StreamInput in) throws IOException {
|
||||
public JobStats(StreamInput in) throws IOException {
|
||||
jobId = in.readString();
|
||||
dataCounts = new DataCounts(in);
|
||||
modelSizeStats = in.readOptionalWriteable(ModelSizeStats::new);
|
||||
|
@ -297,7 +297,7 @@ public class GetJobsStatsAction extends Action<GetJobsStatsAction.Request, GetJo
|
|||
this.jobsStats = jobsStats;
|
||||
}
|
||||
|
||||
Response(List<TaskOperationFailure> taskFailures, List<? extends FailedNodeException> nodeFailures,
|
||||
public Response(List<TaskOperationFailure> taskFailures, List<? extends FailedNodeException> nodeFailures,
|
||||
QueryPage<JobStats> jobsStats) {
|
||||
super(taskFailures, nodeFailures);
|
||||
this.jobsStats = jobsStats;
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue