37 changed files with 1041 additions and 47 deletions
@ -0,0 +1,140 @@ |
|||
/** |
|||
* Copyright © 2016-2018 The Thingsboard Authors |
|||
* |
|||
* 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. |
|||
*/ |
|||
import org.apache.tools.ant.filters.ReplaceTokens |
|||
|
|||
buildscript { |
|||
ext { |
|||
osPackageVersion = "3.8.0" |
|||
} |
|||
repositories { |
|||
jcenter() |
|||
} |
|||
dependencies { |
|||
classpath("com.netflix.nebula:gradle-ospackage-plugin:${osPackageVersion}") |
|||
} |
|||
} |
|||
|
|||
apply plugin: "nebula.ospackage" |
|||
|
|||
buildDir = projectBuildDir |
|||
version = projectVersion |
|||
distsDirName = "./" |
|||
|
|||
// OS Package plugin configuration |
|||
ospackage { |
|||
packageName = pkgName |
|||
version = "${project.version}" |
|||
release = 1 |
|||
os = LINUX |
|||
type = BINARY |
|||
|
|||
into pkgInstallFolder |
|||
|
|||
user pkgName |
|||
permissionGroup pkgName |
|||
|
|||
// Copy the actual .jar file |
|||
from(mainJar) { |
|||
// Strip the version from the jar filename |
|||
rename { String fileName -> |
|||
"${pkgName}.jar" |
|||
} |
|||
fileMode 0500 |
|||
into "bin" |
|||
} |
|||
|
|||
// Copy the config files |
|||
from("target/conf") { |
|||
exclude "${pkgName}.conf" |
|||
fileType CONFIG | NOREPLACE |
|||
fileMode 0754 |
|||
into "conf" |
|||
} |
|||
|
|||
} |
|||
|
|||
// Configure our RPM build task |
|||
buildRpm { |
|||
|
|||
arch = NOARCH |
|||
|
|||
version = projectVersion.replace('-', '') |
|||
archiveName = "${pkgName}.rpm" |
|||
|
|||
requires("java-1.8.0") |
|||
|
|||
from("target/conf") { |
|||
include "${pkgName}.conf" |
|||
filter(ReplaceTokens, tokens: ['pkg.platform': 'rpm']) |
|||
fileType CONFIG | NOREPLACE |
|||
fileMode 0754 |
|||
into "${pkgInstallFolder}/conf" |
|||
} |
|||
|
|||
preInstall file("${buildDir}/control/rpm/preinst") |
|||
postInstall file("${buildDir}/control/rpm/postinst") |
|||
preUninstall file("${buildDir}/control/rpm/prerm") |
|||
postUninstall file("${buildDir}/control/rpm/postrm") |
|||
|
|||
user pkgName |
|||
permissionGroup pkgName |
|||
|
|||
// Copy the system unit files |
|||
from("${buildDir}/control/${pkgName}.service") { |
|||
addParentDirs = false |
|||
fileMode 0644 |
|||
into "/usr/lib/systemd/system" |
|||
} |
|||
|
|||
directory(pkgLogFolder, 0755) |
|||
link("${pkgInstallFolder}/bin/${pkgName}.yml", "${pkgInstallFolder}/conf/${pkgName}.yml") |
|||
link("/etc/${pkgName}/conf", "${pkgInstallFolder}/conf") |
|||
} |
|||
|
|||
// Same as the buildRpm task |
|||
buildDeb { |
|||
|
|||
arch = "all" |
|||
|
|||
archiveName = "${pkgName}.deb" |
|||
|
|||
requires("openjdk-8-jre").or("java8-runtime").or("oracle-java8-installer").or("openjdk-8-jre-headless") |
|||
|
|||
from("target/conf") { |
|||
include "${pkgName}.conf" |
|||
filter(ReplaceTokens, tokens: ['pkg.platform': 'deb']) |
|||
fileType CONFIG | NOREPLACE |
|||
fileMode 0754 |
|||
into "${pkgInstallFolder}/conf" |
|||
} |
|||
|
|||
configurationFile("${pkgInstallFolder}/conf/${pkgName}.conf") |
|||
configurationFile("${pkgInstallFolder}/conf/${pkgName}.yml") |
|||
configurationFile("${pkgInstallFolder}/conf/logback.xml") |
|||
|
|||
preInstall file("${buildDir}/control/deb/preinst") |
|||
postInstall file("${buildDir}/control/deb/postinst") |
|||
preUninstall file("${buildDir}/control/deb/prerm") |
|||
postUninstall file("${buildDir}/control/deb/postrm") |
|||
|
|||
user pkgName |
|||
permissionGroup pkgName |
|||
|
|||
directory(pkgLogFolder, 0755) |
|||
link("/etc/init.d/${pkgName}", "${pkgInstallFolder}/bin/${pkgName}.jar") |
|||
link("${pkgInstallFolder}/bin/${pkgName}.yml", "${pkgInstallFolder}/conf/${pkgName}.yml") |
|||
link("/etc/${pkgName}/conf", "${pkgInstallFolder}/conf") |
|||
} |
|||
@ -0,0 +1,341 @@ |
|||
<!-- |
|||
|
|||
Copyright © 2016-2018 The Thingsboard Authors |
|||
|
|||
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. |
|||
|
|||
--> |
|||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
|||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> |
|||
<modelVersion>4.0.0</modelVersion> |
|||
<parent> |
|||
<groupId>org.thingsboard</groupId> |
|||
<version>2.2.0-SNAPSHOT</version> |
|||
<artifactId>transport</artifactId> |
|||
</parent> |
|||
<groupId>org.thingsboard.transport</groupId> |
|||
<artifactId>http</artifactId> |
|||
<packaging>jar</packaging> |
|||
|
|||
<name>Thingsboard HTTP Transport Service</name> |
|||
<url>https://thingsboard.io</url> |
|||
|
|||
<properties> |
|||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> |
|||
<main.dir>${basedir}/../..</main.dir> |
|||
<pkg.name>tb-http-transport</pkg.name> |
|||
<pkg.unixLogFolder>/var/log/${pkg.name}</pkg.unixLogFolder> |
|||
<pkg.installFolder>/usr/share/${pkg.name}</pkg.installFolder> |
|||
<pkg.win.dist>${project.build.directory}/windows</pkg.win.dist> |
|||
</properties> |
|||
|
|||
<dependencies> |
|||
<dependency> |
|||
<groupId>org.thingsboard.common.transport</groupId> |
|||
<artifactId>http</artifactId> |
|||
</dependency> |
|||
<dependency> |
|||
<groupId>org.thingsboard.common</groupId> |
|||
<artifactId>queue</artifactId> |
|||
</dependency> |
|||
<dependency> |
|||
<groupId>com.sun.winsw</groupId> |
|||
<artifactId>winsw</artifactId> |
|||
<classifier>bin</classifier> |
|||
<type>exe</type> |
|||
<scope>provided</scope> |
|||
</dependency> |
|||
<dependency> |
|||
<groupId>org.springframework.boot</groupId> |
|||
<artifactId>spring-boot-starter-web</artifactId> |
|||
</dependency> |
|||
<dependency> |
|||
<groupId>org.springframework.boot</groupId> |
|||
<artifactId>spring-boot-starter-test</artifactId> |
|||
<scope>test</scope> |
|||
</dependency> |
|||
<dependency> |
|||
<groupId>junit</groupId> |
|||
<artifactId>junit</artifactId> |
|||
<scope>test</scope> |
|||
</dependency> |
|||
<dependency> |
|||
<groupId>org.mockito</groupId> |
|||
<artifactId>mockito-all</artifactId> |
|||
<scope>test</scope> |
|||
</dependency> |
|||
</dependencies> |
|||
|
|||
<build> |
|||
<finalName>${pkg.name}-${project.version}</finalName> |
|||
<resources> |
|||
<resource> |
|||
<directory>${project.basedir}/src/main/resources</directory> |
|||
</resource> |
|||
</resources> |
|||
<plugins> |
|||
<plugin> |
|||
<groupId>org.apache.maven.plugins</groupId> |
|||
<artifactId>maven-resources-plugin</artifactId> |
|||
<executions> |
|||
<execution> |
|||
<id>copy-conf</id> |
|||
<phase>process-resources</phase> |
|||
<goals> |
|||
<goal>copy-resources</goal> |
|||
</goals> |
|||
<configuration> |
|||
<outputDirectory>${project.build.directory}/conf</outputDirectory> |
|||
<resources> |
|||
<resource> |
|||
<directory>src/main/resources</directory> |
|||
<excludes> |
|||
<exclude>logback.xml</exclude> |
|||
</excludes> |
|||
<filtering>false</filtering> |
|||
</resource> |
|||
</resources> |
|||
</configuration> |
|||
</execution> |
|||
<execution> |
|||
<id>copy-service-conf</id> |
|||
<phase>process-resources</phase> |
|||
<goals> |
|||
<goal>copy-resources</goal> |
|||
</goals> |
|||
<configuration> |
|||
<outputDirectory>${project.build.directory}/conf</outputDirectory> |
|||
<resources> |
|||
<resource> |
|||
<directory>src/main/conf</directory> |
|||
<filtering>true</filtering> |
|||
</resource> |
|||
</resources> |
|||
<filters> |
|||
<filter>src/main/filters/unix.properties</filter> |
|||
</filters> |
|||
</configuration> |
|||
</execution> |
|||
<execution> |
|||
<id>copy-win-conf</id> |
|||
<phase>process-resources</phase> |
|||
<goals> |
|||
<goal>copy-resources</goal> |
|||
</goals> |
|||
<configuration> |
|||
<outputDirectory>${pkg.win.dist}/conf</outputDirectory> |
|||
<resources> |
|||
<resource> |
|||
<directory>src/main/resources</directory> |
|||
<excludes> |
|||
<exclude>logback.xml</exclude> |
|||
</excludes> |
|||
<filtering>false</filtering> |
|||
</resource> |
|||
<resource> |
|||
<directory>src/main/conf</directory> |
|||
<excludes> |
|||
<exclude>tb-mqtt-transport.conf</exclude> |
|||
</excludes> |
|||
<filtering>true</filtering> |
|||
</resource> |
|||
</resources> |
|||
<filters> |
|||
<filter>src/main/filters/windows.properties</filter> |
|||
</filters> |
|||
</configuration> |
|||
</execution> |
|||
<execution> |
|||
<id>copy-control</id> |
|||
<phase>process-resources</phase> |
|||
<goals> |
|||
<goal>copy-resources</goal> |
|||
</goals> |
|||
<configuration> |
|||
<outputDirectory>${project.build.directory}/control</outputDirectory> |
|||
<resources> |
|||
<resource> |
|||
<directory>src/main/scripts/control</directory> |
|||
<filtering>true</filtering> |
|||
</resource> |
|||
</resources> |
|||
<filters> |
|||
<filter>src/main/filters/unix.properties</filter> |
|||
</filters> |
|||
</configuration> |
|||
</execution> |
|||
<execution> |
|||
<id>copy-windows-control</id> |
|||
<phase>process-resources</phase> |
|||
<goals> |
|||
<goal>copy-resources</goal> |
|||
</goals> |
|||
<configuration> |
|||
<outputDirectory>${pkg.win.dist}</outputDirectory> |
|||
<resources> |
|||
<resource> |
|||
<directory>src/main/scripts/windows</directory> |
|||
<filtering>true</filtering> |
|||
</resource> |
|||
</resources> |
|||
<filters> |
|||
<filter>src/main/filters/windows.properties</filter> |
|||
</filters> |
|||
</configuration> |
|||
</execution> |
|||
</executions> |
|||
</plugin> |
|||
<plugin> |
|||
<groupId>org.apache.maven.plugins</groupId> |
|||
<artifactId>maven-dependency-plugin</artifactId> |
|||
<executions> |
|||
<execution> |
|||
<id>copy-winsw-service</id> |
|||
<phase>package</phase> |
|||
<goals> |
|||
<goal>copy</goal> |
|||
</goals> |
|||
<configuration> |
|||
<artifactItems> |
|||
<artifactItem> |
|||
<groupId>com.sun.winsw</groupId> |
|||
<artifactId>winsw</artifactId> |
|||
<classifier>bin</classifier> |
|||
<type>exe</type> |
|||
<destFileName>service.exe</destFileName> |
|||
</artifactItem> |
|||
</artifactItems> |
|||
<outputDirectory>${pkg.win.dist}</outputDirectory> |
|||
</configuration> |
|||
</execution> |
|||
</executions> |
|||
</plugin> |
|||
<plugin> |
|||
<groupId>org.apache.maven.plugins</groupId> |
|||
<artifactId>maven-jar-plugin</artifactId> |
|||
<configuration> |
|||
<excludes> |
|||
<exclude>**/logback.xml</exclude> |
|||
</excludes> |
|||
<archive> |
|||
<manifestEntries> |
|||
<Implementation-Title>ThingsBoard MQTT Transport Service</Implementation-Title> |
|||
<Implementation-Version>${project.version}</Implementation-Version> |
|||
</manifestEntries> |
|||
</archive> |
|||
</configuration> |
|||
</plugin> |
|||
<plugin> |
|||
<groupId>org.springframework.boot</groupId> |
|||
<artifactId>spring-boot-maven-plugin</artifactId> |
|||
<configuration> |
|||
<mainClass>org.thingsboard.server.mqtt.ThingsboardHttpTransportApplication</mainClass> |
|||
<classifier>boot</classifier> |
|||
<layout>ZIP</layout> |
|||
<executable>true</executable> |
|||
<excludeDevtools>true</excludeDevtools> |
|||
<embeddedLaunchScriptProperties> |
|||
<confFolder>${pkg.installFolder}/conf</confFolder> |
|||
<logFolder>${pkg.unixLogFolder}</logFolder> |
|||
<logFilename>${pkg.name}.out</logFilename> |
|||
<initInfoProvides>${pkg.name}</initInfoProvides> |
|||
</embeddedLaunchScriptProperties> |
|||
</configuration> |
|||
<executions> |
|||
<execution> |
|||
<goals> |
|||
<goal>repackage</goal> |
|||
</goals> |
|||
</execution> |
|||
</executions> |
|||
</plugin> |
|||
<plugin> |
|||
<groupId>org.fortasoft</groupId> |
|||
<artifactId>gradle-maven-plugin</artifactId> |
|||
<configuration> |
|||
<tasks> |
|||
<task>build</task> |
|||
<task>buildDeb</task> |
|||
<task>buildRpm</task> |
|||
</tasks> |
|||
<args> |
|||
<arg>-PprojectBuildDir=${project.build.directory}</arg> |
|||
<arg>-PprojectVersion=${project.version}</arg> |
|||
<arg>-PmainJar=${project.build.directory}/${project.build.finalName}-boot.${project.packaging}</arg> |
|||
<arg>-PpkgName=${pkg.name}</arg> |
|||
<arg>-PpkgInstallFolder=${pkg.installFolder}</arg> |
|||
<arg>-PpkgLogFolder=${pkg.unixLogFolder}</arg> |
|||
</args> |
|||
</configuration> |
|||
<executions> |
|||
<execution> |
|||
<phase>package</phase> |
|||
<goals> |
|||
<goal>invoke</goal> |
|||
</goals> |
|||
</execution> |
|||
</executions> |
|||
</plugin> |
|||
<plugin> |
|||
<groupId>org.apache.maven.plugins</groupId> |
|||
<artifactId>maven-assembly-plugin</artifactId> |
|||
<configuration> |
|||
<finalName>${pkg.name}</finalName> |
|||
<descriptors> |
|||
<descriptor>src/main/assembly/windows.xml</descriptor> |
|||
</descriptors> |
|||
</configuration> |
|||
<executions> |
|||
<execution> |
|||
<id>assembly</id> |
|||
<phase>package</phase> |
|||
<goals> |
|||
<goal>single</goal> |
|||
</goals> |
|||
</execution> |
|||
</executions> |
|||
</plugin> |
|||
<plugin> |
|||
<groupId>org.apache.maven.plugins</groupId> |
|||
<artifactId>maven-install-plugin</artifactId> |
|||
<configuration> |
|||
<file>${project.build.directory}/${pkg.name}.deb</file> |
|||
<artifactId>${project.artifactId}</artifactId> |
|||
<groupId>${project.groupId}</groupId> |
|||
<version>${project.version}</version> |
|||
<classifier>deb</classifier> |
|||
<packaging>deb</packaging> |
|||
</configuration> |
|||
<executions> |
|||
<execution> |
|||
<id>install-deb</id> |
|||
<phase>package</phase> |
|||
<goals> |
|||
<goal>install-file</goal> |
|||
</goals> |
|||
</execution> |
|||
</executions> |
|||
</plugin> |
|||
</plugins> |
|||
</build> |
|||
<repositories> |
|||
<repository> |
|||
<id>jenkins</id> |
|||
<name>Jenkins Repository</name> |
|||
<url>http://repo.jenkins-ci.org/releases</url> |
|||
<snapshots> |
|||
<enabled>false</enabled> |
|||
</snapshots> |
|||
</repository> |
|||
</repositories> |
|||
</project> |
|||
@ -0,0 +1,71 @@ |
|||
<!-- |
|||
|
|||
Copyright © 2016-2018 The Thingsboard Authors |
|||
|
|||
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. |
|||
|
|||
--> |
|||
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3" |
|||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
|||
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd"> |
|||
<id>windows</id> |
|||
|
|||
<formats> |
|||
<format>zip</format> |
|||
</formats> |
|||
|
|||
<!-- Workaround to create logs directory --> |
|||
<fileSets> |
|||
<fileSet> |
|||
<directory>${pkg.win.dist}</directory> |
|||
<outputDirectory>logs</outputDirectory> |
|||
<excludes> |
|||
<exclude>*/**</exclude> |
|||
</excludes> |
|||
</fileSet> |
|||
<fileSet> |
|||
<directory>${pkg.win.dist}/conf</directory> |
|||
<outputDirectory>conf</outputDirectory> |
|||
<lineEnding>windows</lineEnding> |
|||
</fileSet> |
|||
</fileSets> |
|||
|
|||
<files> |
|||
<file> |
|||
<source>${project.build.directory}/${project.build.finalName}-boot.${project.packaging}</source> |
|||
<outputDirectory>lib</outputDirectory> |
|||
<destName>${pkg.name}.jar</destName> |
|||
</file> |
|||
<file> |
|||
<source>${pkg.win.dist}/service.exe</source> |
|||
<outputDirectory/> |
|||
<destName>${pkg.name}.exe</destName> |
|||
</file> |
|||
<file> |
|||
<source>${pkg.win.dist}/service.xml</source> |
|||
<outputDirectory/> |
|||
<destName>${pkg.name}.xml</destName> |
|||
<lineEnding>windows</lineEnding> |
|||
</file> |
|||
<file> |
|||
<source>${pkg.win.dist}/install.bat</source> |
|||
<outputDirectory/> |
|||
<lineEnding>windows</lineEnding> |
|||
</file> |
|||
<file> |
|||
<source>${pkg.win.dist}/uninstall.bat</source> |
|||
<outputDirectory/> |
|||
<lineEnding>windows</lineEnding> |
|||
</file> |
|||
</files> |
|||
</assembly> |
|||
@ -0,0 +1,43 @@ |
|||
<?xml version="1.0" encoding="UTF-8" ?> |
|||
<!-- |
|||
|
|||
Copyright © 2016-2018 The Thingsboard Authors |
|||
|
|||
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. |
|||
|
|||
--> |
|||
<!DOCTYPE configuration> |
|||
<configuration> |
|||
|
|||
<appender name="fileLogAppender" |
|||
class="ch.qos.logback.core.rolling.RollingFileAppender"> |
|||
<file>${pkg.logFolder}/${pkg.name}.log</file> |
|||
<rollingPolicy |
|||
class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> |
|||
<fileNamePattern>${pkg.logFolder}/${pkg.name}.%d{yyyy-MM-dd}.%i.log</fileNamePattern> |
|||
<maxFileSize>100MB</maxFileSize> |
|||
<maxHistory>30</maxHistory> |
|||
<totalSizeCap>3GB</totalSizeCap> |
|||
</rollingPolicy> |
|||
<encoder> |
|||
<pattern>%d{ISO8601} [%thread] %-5level %logger{36} - %msg%n</pattern> |
|||
</encoder> |
|||
</appender> |
|||
|
|||
<logger name="org.thingsboard.server" level="INFO" /> |
|||
|
|||
<root level="INFO"> |
|||
<appender-ref ref="fileLogAppender"/> |
|||
</root> |
|||
|
|||
</configuration> |
|||
@ -0,0 +1,23 @@ |
|||
# |
|||
# Copyright © 2016-2018 The Thingsboard Authors |
|||
# |
|||
# 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. |
|||
# |
|||
|
|||
export JAVA_OPTS="$JAVA_OPTS -Xloggc:@pkg.logFolder@/gc.log -XX:+IgnoreUnrecognizedVMOptions -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintGCDetails -XX:+PrintGCDateStamps" |
|||
export JAVA_OPTS="$JAVA_OPTS -XX:+PrintHeapAtGC -XX:+PrintTenuringDistribution -XX:+PrintGCApplicationStoppedTime -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10" |
|||
export JAVA_OPTS="$JAVA_OPTS -XX:GCLogFileSize=10M -XX:-UseBiasedLocking -XX:+UseTLAB -XX:+ResizeTLAB -XX:+PerfDisableSharedMem -XX:+UseCondCardMark" |
|||
export JAVA_OPTS="$JAVA_OPTS -XX:CMSWaitDuration=10000 -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+CMSParallelInitialMarkEnabled" |
|||
export JAVA_OPTS="$JAVA_OPTS -XX:+CMSEdenChunksRecordAlways -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly" |
|||
export LOG_FILENAME=${pkg.name}.out |
|||
export LOADER_PATH=${pkg.installFolder}/conf |
|||
@ -0,0 +1 @@ |
|||
pkg.logFolder=${pkg.unixLogFolder} |
|||
@ -0,0 +1,2 @@ |
|||
pkg.logFolder=${BASE}\\logs |
|||
pkg.winWrapperLogFolder=%BASE%\\logs |
|||
@ -0,0 +1,48 @@ |
|||
package org.thingsboard.server.mqtt; /** |
|||
* Copyright © 2016-2018 The Thingsboard Authors |
|||
* |
|||
* 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. |
|||
*/ |
|||
|
|||
import org.springframework.boot.SpringApplication; |
|||
import org.springframework.boot.SpringBootConfiguration; |
|||
import org.springframework.boot.autoconfigure.EnableAutoConfiguration; |
|||
import org.springframework.boot.autoconfigure.SpringBootApplication; |
|||
import org.springframework.context.annotation.ComponentScan; |
|||
import org.springframework.scheduling.annotation.EnableAsync; |
|||
import org.springframework.scheduling.annotation.EnableScheduling; |
|||
|
|||
import java.util.Arrays; |
|||
|
|||
@SpringBootApplication |
|||
@EnableAsync |
|||
@ComponentScan({"org.thingsboard.server.http", "org.thingsboard.server.common", "org.thingsboard.server.transport.http", "org.thingsboard.server.kafka"}) |
|||
public class ThingsboardHttpTransportApplication { |
|||
|
|||
private static final String SPRING_CONFIG_NAME_KEY = "--spring.config.name"; |
|||
private static final String DEFAULT_SPRING_CONFIG_PARAM = SPRING_CONFIG_NAME_KEY + "=" + "tb-http-transport"; |
|||
|
|||
public static void main(String[] args) { |
|||
SpringApplication.run(ThingsboardHttpTransportApplication.class, updateArguments(args)); |
|||
} |
|||
|
|||
private static String[] updateArguments(String[] args) { |
|||
if (Arrays.stream(args).noneMatch(arg -> arg.startsWith(SPRING_CONFIG_NAME_KEY))) { |
|||
String[] modifiedArgs = new String[args.length + 1]; |
|||
System.arraycopy(args, 0, modifiedArgs, 0, args.length); |
|||
modifiedArgs[args.length] = DEFAULT_SPRING_CONFIG_PARAM; |
|||
return modifiedArgs; |
|||
} |
|||
return args; |
|||
} |
|||
} |
|||
@ -0,0 +1,34 @@ |
|||
<?xml version="1.0" encoding="UTF-8" ?> |
|||
<!-- |
|||
|
|||
Copyright © 2016-2018 The Thingsboard Authors |
|||
|
|||
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. |
|||
|
|||
--> |
|||
<!DOCTYPE configuration> |
|||
<configuration scan="true" scanPeriod="10 seconds"> |
|||
|
|||
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> |
|||
<encoder> |
|||
<pattern>%d{ISO8601} [%thread] %-5level %logger{36} - %msg%n</pattern> |
|||
</encoder> |
|||
</appender> |
|||
|
|||
<logger name="org.thingsboard.server" level="TRACE" /> |
|||
|
|||
<root level="INFO"> |
|||
<appender-ref ref="STDOUT"/> |
|||
</root> |
|||
|
|||
</configuration> |
|||
@ -0,0 +1,69 @@ |
|||
# |
|||
# Copyright © 2016-2018 The Thingsboard Authors |
|||
# |
|||
# 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. |
|||
# |
|||
|
|||
server: |
|||
# Server bind address |
|||
address: "${HTTP_BIND_ADDRESS:0.0.0.0}" |
|||
# Server bind port |
|||
port: "${HTTP_BIND_PORT:8081}" |
|||
|
|||
# HTTP server parameters |
|||
transport: |
|||
http: |
|||
request_timeout: "${HTTP_REQUEST_TIMEOUT:60000}" |
|||
|
|||
#Quota parameters |
|||
quota: |
|||
host: |
|||
# Max allowed number of API requests in interval for single host |
|||
limit: "${QUOTA_HOST_LIMIT:10000}" |
|||
# Interval duration |
|||
intervalMs: "${QUOTA_HOST_INTERVAL_MS:60000}" |
|||
# Maximum silence duration for host after which Host removed from QuotaService. Must be bigger than intervalMs |
|||
ttlMs: "${QUOTA_HOST_TTL_MS:60000}" |
|||
# Interval for scheduled task that cleans expired records. TTL is used for expiring |
|||
cleanPeriodMs: "${QUOTA_HOST_CLEAN_PERIOD_MS:300000}" |
|||
# Enable Host API Limits |
|||
enabled: "${QUOTA_HOST_ENABLED:true}" |
|||
# Array of whitelist hosts |
|||
whitelist: "${QUOTA_HOST_WHITELIST:localhost,127.0.0.1}" |
|||
# Array of blacklist hosts |
|||
blacklist: "${QUOTA_HOST_BLACKLIST:}" |
|||
log: |
|||
topSize: 10 |
|||
intervalMin: 2 |
|||
|
|||
kafka: |
|||
enabled: true |
|||
bootstrap.servers: "${TB_KAFKA_SERVERS:localhost:9092}" |
|||
acks: "${TB_KAFKA_ACKS:all}" |
|||
retries: "${TB_KAFKA_RETRIES:1}" |
|||
batch.size: "${TB_KAFKA_BATCH_SIZE:16384}" |
|||
linger.ms: "${TB_KAFKA_LINGER_MS:1}" |
|||
buffer.memory: "${TB_BUFFER_MEMORY:33554432}" |
|||
transport_api: |
|||
requests_topic: "${TB_TRANSPORT_API_REQUEST_TOPIC:tb.transport.api.requests}" |
|||
responses_topic: "${TB_TRANSPORT_API_RESPONSE_TOPIC:tb.transport.api.responses}" |
|||
max_pending_requests: "${TB_TRANSPORT_MAX_PENDING_REQUESTS:10000}" |
|||
max_requests_timeout: "${TB_TRANSPORT_MAX_REQUEST_TIMEOUT:10000}" |
|||
response_poll_interval: "${TB_TRANSPORT_RESPONSE_POLL_INTERVAL_MS:25}" |
|||
response_auto_commit_interval: "${TB_TRANSPORT_RESPONSE_AUTO_COMMIT_INTERVAL_MS:100}" |
|||
rule_engine: |
|||
topic: "${TB_RULE_ENGINE_TOPIC:tb.rule-engine}" |
|||
notifications: |
|||
topic: "${TB_TRANSPORT_NOTIFICATIONS_TOPIC:tb.transport.notifications}" |
|||
poll_interval: "${TB_TRANSPORT_NOTIFICATIONS_POLL_INTERVAL_MS:25}" |
|||
auto_commit_interval: "${TB_TRANSPORT_NOTIFICATIONS_AUTO_COMMIT_INTERVAL_MS:100}" |
|||
@ -0,0 +1,6 @@ |
|||
#!/bin/sh |
|||
|
|||
chown -R ${pkg.name}: ${pkg.logFolder} |
|||
chown -R ${pkg.name}: ${pkg.installFolder} |
|||
update-rc.d ${pkg.name} defaults |
|||
|
|||
@ -0,0 +1,3 @@ |
|||
#!/bin/sh |
|||
|
|||
update-rc.d -f ${pkg.name} remove |
|||
@ -0,0 +1,18 @@ |
|||
#!/bin/sh |
|||
|
|||
if ! getent group ${pkg.name} >/dev/null; then |
|||
addgroup --system ${pkg.name} |
|||
fi |
|||
|
|||
if ! getent passwd ${pkg.name} >/dev/null; then |
|||
adduser --quiet \ |
|||
--system \ |
|||
--ingroup ${pkg.name} \ |
|||
--quiet \ |
|||
--disabled-login \ |
|||
--disabled-password \ |
|||
--home ${pkg.installFolder} \ |
|||
--no-create-home \ |
|||
-gecos "Thingsboard application" \ |
|||
${pkg.name} |
|||
fi |
|||
@ -0,0 +1,5 @@ |
|||
#!/bin/sh |
|||
|
|||
if [ -e /var/run/${pkg.name}/${pkg.name}.pid ]; then |
|||
service ${pkg.name} stop |
|||
fi |
|||
@ -0,0 +1,9 @@ |
|||
#!/bin/sh |
|||
|
|||
chown -R ${pkg.name}: ${pkg.logFolder} |
|||
chown -R ${pkg.name}: ${pkg.installFolder} |
|||
|
|||
if [ $1 -eq 1 ] ; then |
|||
# Initial installation |
|||
systemctl --no-reload enable ${pkg.name}.service >/dev/null 2>&1 || : |
|||
fi |
|||
@ -0,0 +1,6 @@ |
|||
#!/bin/sh |
|||
|
|||
if [ $1 -ge 1 ] ; then |
|||
# Package upgrade, not uninstall |
|||
systemctl try-restart ${pkg.name}.service >/dev/null 2>&1 || : |
|||
fi |
|||
@ -0,0 +1,6 @@ |
|||
#!/bin/sh |
|||
|
|||
getent group ${pkg.name} >/dev/null || groupadd -r ${pkg.name} |
|||
getent passwd ${pkg.name} >/dev/null || \ |
|||
useradd -d ${pkg.installFolder} -g ${pkg.name} -M -r ${pkg.name} -s /sbin/nologin \ |
|||
-c "Thingsboard application" |
|||
@ -0,0 +1,6 @@ |
|||
#!/bin/sh |
|||
|
|||
if [ $1 -eq 0 ] ; then |
|||
# Package removal, not upgrade |
|||
systemctl --no-reload disable --now ${pkg.name}.service > /dev/null 2>&1 || : |
|||
fi |
|||
@ -0,0 +1,11 @@ |
|||
[Unit] |
|||
Description=${pkg.name} |
|||
After=syslog.target |
|||
|
|||
[Service] |
|||
User=${pkg.name} |
|||
ExecStart=${pkg.installFolder}/bin/${pkg.name}.jar |
|||
SuccessExitStatus=143 |
|||
|
|||
[Install] |
|||
WantedBy=multi-user.target |
|||
@ -0,0 +1,87 @@ |
|||
@ECHO OFF |
|||
|
|||
setlocal ENABLEEXTENSIONS |
|||
|
|||
@ECHO Detecting Java version installed. |
|||
:CHECK_JAVA_64 |
|||
@ECHO Detecting if it is 64 bit machine |
|||
set KEY_NAME="HKEY_LOCAL_MACHINE\Software\Wow6432Node\JavaSoft\Java Runtime Environment" |
|||
set VALUE_NAME=CurrentVersion |
|||
|
|||
FOR /F "usebackq skip=2 tokens=1-3" %%A IN (`REG QUERY %KEY_NAME% /v %VALUE_NAME% 2^>nul`) DO ( |
|||
set ValueName=%%A |
|||
set ValueType=%%B |
|||
set ValueValue=%%C |
|||
) |
|||
@ECHO CurrentVersion %ValueValue% |
|||
|
|||
SET KEY_NAME="%KEY_NAME:~1,-1%\%ValueValue%" |
|||
SET VALUE_NAME=JavaHome |
|||
|
|||
if defined ValueName ( |
|||
FOR /F "usebackq skip=2 tokens=1,2*" %%A IN (`REG QUERY %KEY_NAME% /v %VALUE_NAME% 2^>nul`) DO ( |
|||
set ValueName2=%%A |
|||
set ValueType2=%%B |
|||
set JRE_PATH2=%%C |
|||
|
|||
if defined ValueName2 ( |
|||
set ValueName = %ValueName2% |
|||
set ValueType = %ValueType2% |
|||
set ValueValue = %JRE_PATH2% |
|||
) |
|||
) |
|||
) |
|||
|
|||
IF NOT "%JRE_PATH2%" == "" GOTO JAVA_INSTALLED |
|||
|
|||
:CHECK_JAVA_32 |
|||
@ECHO Detecting if it is 32 bit machine |
|||
set KEY_NAME="HKEY_LOCAL_MACHINE\Software\JavaSoft\Java Runtime Environment" |
|||
set VALUE_NAME=CurrentVersion |
|||
|
|||
FOR /F "usebackq skip=2 tokens=1-3" %%A IN (`REG QUERY %KEY_NAME% /v %VALUE_NAME% 2^>nul`) DO ( |
|||
set ValueName=%%A |
|||
set ValueType=%%B |
|||
set ValueValue=%%C |
|||
) |
|||
@ECHO CurrentVersion %ValueValue% |
|||
|
|||
SET KEY_NAME="%KEY_NAME:~1,-1%\%ValueValue%" |
|||
SET VALUE_NAME=JavaHome |
|||
|
|||
if defined ValueName ( |
|||
FOR /F "usebackq skip=2 tokens=1,2*" %%A IN (`REG QUERY %KEY_NAME% /v %VALUE_NAME% 2^>nul`) DO ( |
|||
set ValueName2=%%A |
|||
set ValueType2=%%B |
|||
set JRE_PATH2=%%C |
|||
|
|||
if defined ValueName2 ( |
|||
set ValueName = %ValueName2% |
|||
set ValueType = %ValueType2% |
|||
set ValueValue = %JRE_PATH2% |
|||
) |
|||
) |
|||
) |
|||
|
|||
IF "%JRE_PATH2%" == "" GOTO JAVA_NOT_INSTALLED |
|||
|
|||
:JAVA_INSTALLED |
|||
|
|||
@ECHO Java 1.8 found! |
|||
@ECHO Installing ${pkg.name} ... |
|||
|
|||
%BASE%${pkg.name}.exe install |
|||
|
|||
@ECHO ${pkg.name} installed successfully! |
|||
|
|||
GOTO END |
|||
|
|||
:JAVA_NOT_INSTALLED |
|||
@ECHO Java 1.8 or above is not installed |
|||
@ECHO Please go to https://java.com/ and install Java. Then retry installation. |
|||
PAUSE |
|||
GOTO END |
|||
|
|||
:END |
|||
|
|||
|
|||
@ -0,0 +1,36 @@ |
|||
<service> |
|||
<id>${pkg.name}</id> |
|||
<name>${project.name}</name> |
|||
<description>${project.description}</description> |
|||
<workingdirectory>%BASE%\conf</workingdirectory> |
|||
<logpath>${pkg.winWrapperLogFolder}</logpath> |
|||
<logmode>rotate</logmode> |
|||
<env name="LOADER_PATH" value="%BASE%\conf" /> |
|||
<executable>java</executable> |
|||
<startargument>-Xloggc:%BASE%\logs\gc.log</startargument> |
|||
<startargument>-XX:+HeapDumpOnOutOfMemoryError</startargument> |
|||
<startargument>-XX:+PrintGCDetails</startargument> |
|||
<startargument>-XX:+PrintGCDateStamps</startargument> |
|||
<startargument>-XX:+PrintHeapAtGC</startargument> |
|||
<startargument>-XX:+PrintTenuringDistribution</startargument> |
|||
<startargument>-XX:+PrintGCApplicationStoppedTime</startargument> |
|||
<startargument>-XX:+UseGCLogFileRotation</startargument> |
|||
<startargument>-XX:NumberOfGCLogFiles=10</startargument> |
|||
<startargument>-XX:GCLogFileSize=10M</startargument> |
|||
<startargument>-XX:-UseBiasedLocking</startargument> |
|||
<startargument>-XX:+UseTLAB</startargument> |
|||
<startargument>-XX:+ResizeTLAB</startargument> |
|||
<startargument>-XX:+PerfDisableSharedMem</startargument> |
|||
<startargument>-XX:+UseCondCardMark</startargument> |
|||
<startargument>-XX:CMSWaitDuration=10000</startargument> |
|||
<startargument>-XX:+UseParNewGC</startargument> |
|||
<startargument>-XX:+UseConcMarkSweepGC</startargument> |
|||
<startargument>-XX:+CMSParallelRemarkEnabled</startargument> |
|||
<startargument>-XX:+CMSParallelInitialMarkEnabled</startargument> |
|||
<startargument>-XX:+CMSEdenChunksRecordAlways</startargument> |
|||
<startargument>-XX:CMSInitiatingOccupancyFraction=75</startargument> |
|||
<startargument>-XX:+UseCMSInitiatingOccupancyOnly</startargument> |
|||
<startargument>-jar</startargument> |
|||
<startargument>%BASE%\lib\${pkg.name}.jar</startargument> |
|||
|
|||
</service> |
|||
@ -0,0 +1,9 @@ |
|||
@ECHO OFF |
|||
|
|||
@ECHO Stopping ${pkg.name} ... |
|||
net stop ${pkg.name} |
|||
|
|||
@ECHO Uninstalling ${pkg.name} ... |
|||
%~dp0${pkg.name}.exe uninstall |
|||
|
|||
@ECHO DONE. |
|||
Loading…
Reference in new issue