Merge branch 'develop/2.2' of github.com:thingsboard/thingsboard into develop/2.2
This commit is contained in:
		
						commit
						0271e2b8e9
					
				
							
								
								
									
										31
									
								
								msa/js-executor/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								msa/js-executor/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,31 @@
 | 
			
		||||
*.toDelete
 | 
			
		||||
output/**
 | 
			
		||||
*.class
 | 
			
		||||
*~
 | 
			
		||||
*.iml
 | 
			
		||||
*/.idea/**
 | 
			
		||||
.idea/**
 | 
			
		||||
.idea
 | 
			
		||||
*.log
 | 
			
		||||
*.log.[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]
 | 
			
		||||
*/.classpath
 | 
			
		||||
.classpath
 | 
			
		||||
*/.project
 | 
			
		||||
.project
 | 
			
		||||
.cache/**
 | 
			
		||||
target/
 | 
			
		||||
logs/
 | 
			
		||||
build/
 | 
			
		||||
.settings/
 | 
			
		||||
/bin
 | 
			
		||||
bin/
 | 
			
		||||
**/dependency-reduced-pom.xml
 | 
			
		||||
pom.xml.versionsBackup
 | 
			
		||||
.DS_Store
 | 
			
		||||
**/.gradle
 | 
			
		||||
**/local.properties
 | 
			
		||||
**/build
 | 
			
		||||
**/target
 | 
			
		||||
**/.env
 | 
			
		||||
node_modules
 | 
			
		||||
package-lock.json
 | 
			
		||||
							
								
								
									
										25
									
								
								msa/js-executor/api/jsMessageConsumer.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								msa/js-executor/api/jsMessageConsumer.js
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,25 @@
 | 
			
		||||
/*
 | 
			
		||||
 * 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.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
'use strict';
 | 
			
		||||
 | 
			
		||||
var logger = require('../config/logger')('JsMessageConsumer');
 | 
			
		||||
 | 
			
		||||
exports.onJsInvokeMessage = function(message, producer) {
 | 
			
		||||
 | 
			
		||||
    logger.info('Received message: %s', message);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										120
									
								
								msa/js-executor/build.gradle
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										120
									
								
								msa/js-executor/build.gradle
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,120 @@
 | 
			
		||||
/**
 | 
			
		||||
 * 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 pkgUser
 | 
			
		||||
    permissionGroup pkgUser
 | 
			
		||||
 | 
			
		||||
    // Copy the executable file
 | 
			
		||||
    from("target/package/linux/bin/${pkgName}") {
 | 
			
		||||
        fileMode 0500
 | 
			
		||||
        into "bin"
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Copy the init file
 | 
			
		||||
    from("target/package/linux/init/${pkgName}") {
 | 
			
		||||
        fileMode 0500
 | 
			
		||||
        into "init"
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Copy the config files
 | 
			
		||||
    from("target/package/linux/conf") {
 | 
			
		||||
        fileType CONFIG | NOREPLACE
 | 
			
		||||
        fileMode 0754
 | 
			
		||||
        into "conf"
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Configure our RPM build task
 | 
			
		||||
buildRpm {
 | 
			
		||||
 | 
			
		||||
    arch = X86_64
 | 
			
		||||
 | 
			
		||||
    version = projectVersion.replace('-', '')
 | 
			
		||||
    archiveName = "${pkgName}.rpm"
 | 
			
		||||
 | 
			
		||||
    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 pkgUser
 | 
			
		||||
    permissionGroup pkgUser
 | 
			
		||||
 | 
			
		||||
    // Copy the system unit files
 | 
			
		||||
    from("${buildDir}/control/${pkgName}.service") {
 | 
			
		||||
        addParentDirs = false
 | 
			
		||||
        fileMode 0644
 | 
			
		||||
        into "/usr/lib/systemd/system"
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    directory(pkgLogFolder, 0755)
 | 
			
		||||
    link("/etc/${pkgName}/conf", "${pkgInstallFolder}/conf")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Same as the buildRpm task
 | 
			
		||||
buildDeb {
 | 
			
		||||
 | 
			
		||||
    arch = "amd64"
 | 
			
		||||
 | 
			
		||||
    archiveName = "${pkgName}.deb"
 | 
			
		||||
 | 
			
		||||
    configurationFile("${pkgInstallFolder}/conf/${pkgName}.conf")
 | 
			
		||||
    configurationFile("${pkgInstallFolder}/conf/custom-environment-variables.yml")
 | 
			
		||||
    configurationFile("${pkgInstallFolder}/conf/default.yml")
 | 
			
		||||
    configurationFile("${pkgInstallFolder}/conf/logger.js")
 | 
			
		||||
 | 
			
		||||
    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 pkgUser
 | 
			
		||||
    permissionGroup pkgUser
 | 
			
		||||
 | 
			
		||||
    directory(pkgLogFolder, 0755)
 | 
			
		||||
    link("/etc/init.d/${pkgName}", "${pkgInstallFolder}/init/${pkgName}")
 | 
			
		||||
    link("/etc/${pkgName}/conf", "${pkgInstallFolder}/conf")
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										25
									
								
								msa/js-executor/config/custom-environment-variables.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								msa/js-executor/config/custom-environment-variables.yml
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,25 @@
 | 
			
		||||
#
 | 
			
		||||
# 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.
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
kafka:
 | 
			
		||||
  request_topic: "REMOTE_JS_EVAL_REQUEST_TOPIC"
 | 
			
		||||
  bootstrap:
 | 
			
		||||
    # Kafka Bootstrap Servers
 | 
			
		||||
    servers: "TB_KAFKA_SERVERS"
 | 
			
		||||
logger:
 | 
			
		||||
  level: "LOGGER_LEVEL"
 | 
			
		||||
  path: "LOG_FOLDER"
 | 
			
		||||
  filename: "LOGGER_FILENAME"
 | 
			
		||||
							
								
								
									
										26
									
								
								msa/js-executor/config/default.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								msa/js-executor/config/default.yml
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,26 @@
 | 
			
		||||
#
 | 
			
		||||
# 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.
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
kafka:
 | 
			
		||||
  request_topic: "js.eval.requests"
 | 
			
		||||
  bootstrap:
 | 
			
		||||
    # Kafka Bootstrap Servers
 | 
			
		||||
    servers: "localhost:9092"
 | 
			
		||||
 | 
			
		||||
logger:
 | 
			
		||||
  level: "info"
 | 
			
		||||
  path: "logs"
 | 
			
		||||
  filename: "tb-js-executor-%DATE%.log"
 | 
			
		||||
							
								
								
									
										59
									
								
								msa/js-executor/config/logger.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								msa/js-executor/config/logger.js
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,59 @@
 | 
			
		||||
/*
 | 
			
		||||
 * 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.
 | 
			
		||||
 */
 | 
			
		||||
var config = require('config'),
 | 
			
		||||
    path = require('path'),
 | 
			
		||||
    DailyRotateFile = require('winston-daily-rotate-file');
 | 
			
		||||
 | 
			
		||||
const { createLogger, format, transports } = require('winston');
 | 
			
		||||
const { combine, timestamp, label, printf, splat } = format;
 | 
			
		||||
 | 
			
		||||
var loggerTransports = [];
 | 
			
		||||
 | 
			
		||||
if (process.env.NODE_ENV !== 'production') {
 | 
			
		||||
    loggerTransports.push(new transports.Console({
 | 
			
		||||
        handleExceptions: true
 | 
			
		||||
    }));
 | 
			
		||||
} else {
 | 
			
		||||
    var filename = path.join(config.get('logger.path'), config.get('logger.filename'));
 | 
			
		||||
    var transport = new (DailyRotateFile)({
 | 
			
		||||
        filename: filename,
 | 
			
		||||
        datePattern: 'YYYY-MM-DD-HH',
 | 
			
		||||
        zippedArchive: true,
 | 
			
		||||
        maxSize: '20m',
 | 
			
		||||
        maxFiles: '14d',
 | 
			
		||||
        handleExceptions: true
 | 
			
		||||
    });
 | 
			
		||||
    loggerTransports.push(transport);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const tbFormat = printf(info => {
 | 
			
		||||
    return `${info.timestamp} [${info.label}] ${info.level.toUpperCase()}: ${info.message}`;
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
function _logger(moduleLabel) {
 | 
			
		||||
    return createLogger({
 | 
			
		||||
        level: config.get('logger.level'),
 | 
			
		||||
        format:combine(
 | 
			
		||||
            splat(),
 | 
			
		||||
            label({ label: moduleLabel }),
 | 
			
		||||
            timestamp({format: 'YYYY-MM-DD HH:mm:ss,SSS'}),
 | 
			
		||||
            tbFormat
 | 
			
		||||
        ),
 | 
			
		||||
        transports: loggerTransports
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
module.exports = _logger;
 | 
			
		||||
							
								
								
									
										19
									
								
								msa/js-executor/config/tb-js-executor.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								msa/js-executor/config/tb-js-executor.conf
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,19 @@
 | 
			
		||||
#
 | 
			
		||||
# 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 NODE_CONFIG_DIR=${pkg.installFolder}/conf
 | 
			
		||||
export LOG_FOLDER=${pkg.logFolder}
 | 
			
		||||
export NODE_ENV=production
 | 
			
		||||
							
								
								
									
										42
									
								
								msa/js-executor/install.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								msa/js-executor/install.js
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,42 @@
 | 
			
		||||
/*
 | 
			
		||||
 * 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.
 | 
			
		||||
 */
 | 
			
		||||
const fs = require('fs');
 | 
			
		||||
const fse = require('fs-extra');
 | 
			
		||||
const path = require('path');
 | 
			
		||||
 | 
			
		||||
let _projectRoot = null;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
(async() => {
 | 
			
		||||
    await fse.move(path.join(projectRoot(), 'target', 'thingsboard-js-executor-linux'),
 | 
			
		||||
                   path.join(targetPackageDir('linux'), 'bin', 'tb-js-executor'),
 | 
			
		||||
                   {overwrite: true});
 | 
			
		||||
    await fse.move(path.join(projectRoot(), 'target', 'thingsboard-js-executor-win.exe'),
 | 
			
		||||
                   path.join(targetPackageDir('windows'), 'bin', 'tb-js-executor.exe'),
 | 
			
		||||
                   {overwrite: true});
 | 
			
		||||
})();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
function projectRoot() {
 | 
			
		||||
    if (!_projectRoot) {
 | 
			
		||||
        _projectRoot = __dirname;
 | 
			
		||||
    }
 | 
			
		||||
    return _projectRoot;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function targetPackageDir(platform) {
 | 
			
		||||
    return path.join(projectRoot(), 'target', 'package', platform);
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										35
									
								
								msa/js-executor/package.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								msa/js-executor/package.json
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,35 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "thingsboard-js-executor",
 | 
			
		||||
  "private": true,
 | 
			
		||||
  "version": "2.2.0",
 | 
			
		||||
  "description": "ThingsBoard JavaScript Executor Microservice",
 | 
			
		||||
  "main": "server.js",
 | 
			
		||||
  "bin": "server.js",
 | 
			
		||||
  "scripts": {
 | 
			
		||||
    "install": "pkg -t node8-linux-x64,node8-win-x64 --out-path ./target . && node install.js",
 | 
			
		||||
    "test": "echo \"Error: no test specified\" && exit 1",
 | 
			
		||||
    "start": "nodemon server.js",
 | 
			
		||||
    "start-prod": "NODE_ENV=production nodemon server.js"
 | 
			
		||||
  },
 | 
			
		||||
  "dependencies": {
 | 
			
		||||
    "config": "^1.30.0",
 | 
			
		||||
    "js-yaml": "^3.12.0",
 | 
			
		||||
    "kafka-node": "^3.0.1",
 | 
			
		||||
    "winston": "^3.0.0",
 | 
			
		||||
    "winston-daily-rotate-file": "^3.2.1"
 | 
			
		||||
  },
 | 
			
		||||
  "engine": "node >= 5.9.0",
 | 
			
		||||
  "nyc": {
 | 
			
		||||
    "exclude": [
 | 
			
		||||
      "test",
 | 
			
		||||
      "__tests__",
 | 
			
		||||
      "node_modules",
 | 
			
		||||
      "target"
 | 
			
		||||
    ]
 | 
			
		||||
  },
 | 
			
		||||
  "devDependencies": {
 | 
			
		||||
    "fs-extra": "^6.0.1",
 | 
			
		||||
    "nodemon": "^1.17.5",
 | 
			
		||||
    "pkg": "^4.3.3"
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										310
									
								
								msa/js-executor/pom.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										310
									
								
								msa/js-executor/pom.xml
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,310 @@
 | 
			
		||||
<!--
 | 
			
		||||
 | 
			
		||||
    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>msa</artifactId>
 | 
			
		||||
    </parent>
 | 
			
		||||
    <groupId>org.thingsboard.msa</groupId>
 | 
			
		||||
    <artifactId>js-executor</artifactId>
 | 
			
		||||
    <packaging>pom</packaging>
 | 
			
		||||
 | 
			
		||||
    <name>ThingsBoard JavaScript Executor Microservice</name>
 | 
			
		||||
    <url>https://thingsboard.io</url>
 | 
			
		||||
    <description>Service executing JavaScript functions in sandboxed environment</description>
 | 
			
		||||
 | 
			
		||||
    <properties>
 | 
			
		||||
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 | 
			
		||||
        <main.dir>${basedir}/../..</main.dir>
 | 
			
		||||
        <pkg.name>tb-js-executor</pkg.name>
 | 
			
		||||
        <pkg.user>thingsboard</pkg.user>
 | 
			
		||||
        <pkg.unixLogFolder>/var/log/${pkg.name}</pkg.unixLogFolder>
 | 
			
		||||
        <pkg.installFolder>/usr/share/${pkg.name}</pkg.installFolder>
 | 
			
		||||
        <pkg.linux.dist>${project.build.directory}/package/linux</pkg.linux.dist>
 | 
			
		||||
        <pkg.win.dist>${project.build.directory}/package/windows</pkg.win.dist>
 | 
			
		||||
    </properties>
 | 
			
		||||
 | 
			
		||||
    <dependencies>
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>com.sun.winsw</groupId>
 | 
			
		||||
            <artifactId>winsw</artifactId>
 | 
			
		||||
            <classifier>bin</classifier>
 | 
			
		||||
            <type>exe</type>
 | 
			
		||||
            <scope>provided</scope>
 | 
			
		||||
        </dependency>
 | 
			
		||||
    </dependencies>
 | 
			
		||||
 | 
			
		||||
    <build>
 | 
			
		||||
        <plugins>
 | 
			
		||||
            <plugin>
 | 
			
		||||
                <groupId>com.github.eirslett</groupId>
 | 
			
		||||
                <artifactId>frontend-maven-plugin</artifactId>
 | 
			
		||||
                <version>1.0</version>
 | 
			
		||||
                <configuration>
 | 
			
		||||
                    <installDirectory>target</installDirectory>
 | 
			
		||||
                    <workingDirectory>${basedir}</workingDirectory>
 | 
			
		||||
                </configuration>
 | 
			
		||||
                <executions>
 | 
			
		||||
                    <execution>
 | 
			
		||||
                        <id>install node and npm</id>
 | 
			
		||||
                        <goals>
 | 
			
		||||
                            <goal>install-node-and-npm</goal>
 | 
			
		||||
                        </goals>
 | 
			
		||||
                        <configuration>
 | 
			
		||||
                            <nodeVersion>v8.11.3</nodeVersion>
 | 
			
		||||
                            <npmVersion>5.6.0</npmVersion>
 | 
			
		||||
                        </configuration>
 | 
			
		||||
                    </execution>
 | 
			
		||||
                    <execution>
 | 
			
		||||
                        <id>npm install</id>
 | 
			
		||||
                        <goals>
 | 
			
		||||
                            <goal>npm</goal>
 | 
			
		||||
                        </goals>
 | 
			
		||||
                        <configuration>
 | 
			
		||||
                            <arguments>install</arguments>
 | 
			
		||||
                        </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-resources-plugin</artifactId>
 | 
			
		||||
                <executions>
 | 
			
		||||
                    <execution>
 | 
			
		||||
                        <id>copy-linux-conf</id>
 | 
			
		||||
                        <phase>process-resources</phase>
 | 
			
		||||
                        <goals>
 | 
			
		||||
                            <goal>copy-resources</goal>
 | 
			
		||||
                        </goals>
 | 
			
		||||
                        <configuration>
 | 
			
		||||
                            <outputDirectory>${pkg.linux.dist}/conf</outputDirectory>
 | 
			
		||||
                            <resources>
 | 
			
		||||
                                <resource>
 | 
			
		||||
                                    <directory>config</directory>
 | 
			
		||||
                                    <filtering>true</filtering>
 | 
			
		||||
                                </resource>
 | 
			
		||||
                            </resources>
 | 
			
		||||
                            <filters>
 | 
			
		||||
                                <filter>src/main/filters/unix.properties</filter>
 | 
			
		||||
                            </filters>
 | 
			
		||||
                        </configuration>
 | 
			
		||||
                    </execution>
 | 
			
		||||
                    <execution>
 | 
			
		||||
                        <id>copy-linux-init</id>
 | 
			
		||||
                        <phase>process-resources</phase>
 | 
			
		||||
                        <goals>
 | 
			
		||||
                            <goal>copy-resources</goal>
 | 
			
		||||
                        </goals>
 | 
			
		||||
                        <configuration>
 | 
			
		||||
                            <outputDirectory>${pkg.linux.dist}/init</outputDirectory>
 | 
			
		||||
                            <resources>
 | 
			
		||||
                                <resource>
 | 
			
		||||
                                    <directory>src/main/scripts/init</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>config</directory>
 | 
			
		||||
                                    <excludes>
 | 
			
		||||
                                        <exclude>tb-js-executor.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.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>-PpkgName=${pkg.name}</arg>
 | 
			
		||||
                        <arg>-PpkgUser=${pkg.user}</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>
 | 
			
		||||
                <version>3.0.0</version>
 | 
			
		||||
                <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>
 | 
			
		||||
        </plugins>
 | 
			
		||||
    </build>
 | 
			
		||||
    <profiles>
 | 
			
		||||
        <profile>
 | 
			
		||||
            <id>npm-start</id>
 | 
			
		||||
            <activation>
 | 
			
		||||
                <property>
 | 
			
		||||
                    <name>npm-start</name>
 | 
			
		||||
                </property>
 | 
			
		||||
            </activation>
 | 
			
		||||
            <build>
 | 
			
		||||
                <plugins>
 | 
			
		||||
                    <plugin>
 | 
			
		||||
                        <groupId>com.github.eirslett</groupId>
 | 
			
		||||
                        <artifactId>frontend-maven-plugin</artifactId>
 | 
			
		||||
                        <version>1.0</version>
 | 
			
		||||
                        <configuration>
 | 
			
		||||
                            <installDirectory>target</installDirectory>
 | 
			
		||||
                            <workingDirectory>${basedir}</workingDirectory>
 | 
			
		||||
                        </configuration>
 | 
			
		||||
                        <executions>
 | 
			
		||||
                            <execution>
 | 
			
		||||
                                <id>npm start</id>
 | 
			
		||||
                                <goals>
 | 
			
		||||
                                    <goal>npm</goal>
 | 
			
		||||
                                </goals>
 | 
			
		||||
 | 
			
		||||
                                <configuration>
 | 
			
		||||
                                    <arguments>start</arguments>
 | 
			
		||||
                                </configuration>
 | 
			
		||||
                            </execution>
 | 
			
		||||
                        </executions>
 | 
			
		||||
                    </plugin>
 | 
			
		||||
                </plugins>
 | 
			
		||||
            </build>
 | 
			
		||||
        </profile>
 | 
			
		||||
    </profiles>
 | 
			
		||||
    <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>
 | 
			
		||||
							
								
								
									
										83
									
								
								msa/js-executor/server.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										83
									
								
								msa/js-executor/server.js
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,83 @@
 | 
			
		||||
/*
 | 
			
		||||
 * 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.
 | 
			
		||||
 */
 | 
			
		||||
var config = require('config'),
 | 
			
		||||
    kafka = require('kafka-node'),
 | 
			
		||||
    Consumer = kafka.Consumer,
 | 
			
		||||
    Producer = kafka.Producer,
 | 
			
		||||
    JsMessageConsumer = require('./api/jsMessageConsumer');
 | 
			
		||||
 | 
			
		||||
var logger = require('./config/logger')('main');
 | 
			
		||||
 | 
			
		||||
var kafkaBootstrapServers = config.get('kafka.bootstrap.servers');
 | 
			
		||||
var kafkaRequestTopic = config.get('kafka.request_topic');
 | 
			
		||||
 | 
			
		||||
logger.info('Kafka Bootstrap Servers: %s', kafkaBootstrapServers);
 | 
			
		||||
logger.info('Kafka Requests Topic: %s', kafkaRequestTopic);
 | 
			
		||||
 | 
			
		||||
var kafkaClient;
 | 
			
		||||
 | 
			
		||||
(async() => {
 | 
			
		||||
    try {
 | 
			
		||||
        logger.info('Starting ThingsBoard JavaScript Executor Microservice...');
 | 
			
		||||
 | 
			
		||||
        kafkaClient = new kafka.KafkaClient({kafkaHost: kafkaBootstrapServers});
 | 
			
		||||
 | 
			
		||||
        var consumer = new Consumer(
 | 
			
		||||
            kafkaClient,
 | 
			
		||||
            [
 | 
			
		||||
                { topic: kafkaRequestTopic, partition: 0 }
 | 
			
		||||
            ],
 | 
			
		||||
            {
 | 
			
		||||
                autoCommit: true
 | 
			
		||||
            }
 | 
			
		||||
        );
 | 
			
		||||
 | 
			
		||||
        var producer = new Producer(kafkaClient);
 | 
			
		||||
        producer.on('error', (err) => {
 | 
			
		||||
            logger.error('Unexpected kafka producer error');
 | 
			
		||||
            logger.error(err);
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        producer.on('ready', () => {
 | 
			
		||||
            consumer.on('message', (message) => {
 | 
			
		||||
                JsMessageConsumer.onJsInvokeMessage(message, producer);
 | 
			
		||||
            });
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        logger.info('Started ThingsBoard JavaScript Executor Microservice.');
 | 
			
		||||
    } catch (e) {
 | 
			
		||||
        logger.error('Failed to start ThingsBoard JavaScript Executor Microservice: %s', e.message);
 | 
			
		||||
        logger.error(e);
 | 
			
		||||
        exit(-1);
 | 
			
		||||
    }
 | 
			
		||||
})();
 | 
			
		||||
 | 
			
		||||
process.on('exit', function () {
 | 
			
		||||
    exit(0);
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
function exit(status) {
 | 
			
		||||
    logger.info('Exiting with status: %d ...', status);
 | 
			
		||||
    if (kafkaClient) {
 | 
			
		||||
        logger.info('Stopping Kafka Client...');
 | 
			
		||||
        kafkaClient.close(() => {
 | 
			
		||||
            logger.info('Kafka Client stopped.');
 | 
			
		||||
            process.exit(status);
 | 
			
		||||
        });
 | 
			
		||||
    } else {
 | 
			
		||||
        process.exit(status);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										71
									
								
								msa/js-executor/src/main/assembly/windows.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										71
									
								
								msa/js-executor/src/main/assembly/windows.xml
									
									
									
									
									
										Normal file
									
								
							@ -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>${pkg.win.dist}/bin/${pkg.name}.exe</source>
 | 
			
		||||
            <outputDirectory>bin</outputDirectory>
 | 
			
		||||
            <destName>${pkg.name}.exe</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>
 | 
			
		||||
							
								
								
									
										1
									
								
								msa/js-executor/src/main/filters/unix.properties
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								msa/js-executor/src/main/filters/unix.properties
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1 @@
 | 
			
		||||
pkg.logFolder=${pkg.unixLogFolder}
 | 
			
		||||
							
								
								
									
										2
									
								
								msa/js-executor/src/main/filters/windows.properties
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								msa/js-executor/src/main/filters/windows.properties
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,2 @@
 | 
			
		||||
pkg.logFolder=${BASE}\\logs
 | 
			
		||||
pkg.winWrapperLogFolder=%BASE%\\logs
 | 
			
		||||
							
								
								
									
										6
									
								
								msa/js-executor/src/main/scripts/control/deb/postinst
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								msa/js-executor/src/main/scripts/control/deb/postinst
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,6 @@
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
 | 
			
		||||
chown -R ${pkg.user}: ${pkg.logFolder}
 | 
			
		||||
chown -R ${pkg.user}: ${pkg.installFolder}
 | 
			
		||||
update-rc.d ${pkg.name} defaults
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										3
									
								
								msa/js-executor/src/main/scripts/control/deb/postrm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								msa/js-executor/src/main/scripts/control/deb/postrm
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,3 @@
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
 | 
			
		||||
update-rc.d -f ${pkg.name} remove
 | 
			
		||||
							
								
								
									
										18
									
								
								msa/js-executor/src/main/scripts/control/deb/preinst
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								msa/js-executor/src/main/scripts/control/deb/preinst
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,18 @@
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
 | 
			
		||||
if ! getent group ${pkg.user} >/dev/null; then
 | 
			
		||||
    addgroup --system ${pkg.user}
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if ! getent passwd ${pkg.user} >/dev/null; then
 | 
			
		||||
    adduser --quiet \
 | 
			
		||||
            --system \
 | 
			
		||||
            --ingroup ${pkg.user} \
 | 
			
		||||
            --quiet \
 | 
			
		||||
            --disabled-login \
 | 
			
		||||
            --disabled-password \
 | 
			
		||||
            --home ${pkg.installFolder} \
 | 
			
		||||
            --no-create-home \
 | 
			
		||||
            -gecos "Thingsboard application" \
 | 
			
		||||
            ${pkg.user}
 | 
			
		||||
fi
 | 
			
		||||
							
								
								
									
										5
									
								
								msa/js-executor/src/main/scripts/control/deb/prerm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								msa/js-executor/src/main/scripts/control/deb/prerm
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,5 @@
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
 | 
			
		||||
if [ -e /var/run/${pkg.name}/${pkg.name}.pid ]; then
 | 
			
		||||
    service ${pkg.name} stop
 | 
			
		||||
fi
 | 
			
		||||
							
								
								
									
										9
									
								
								msa/js-executor/src/main/scripts/control/rpm/postinst
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								msa/js-executor/src/main/scripts/control/rpm/postinst
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,9 @@
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
 | 
			
		||||
chown -R ${pkg.user}: ${pkg.logFolder}
 | 
			
		||||
chown -R ${pkg.user}: ${pkg.installFolder}
 | 
			
		||||
 | 
			
		||||
if [ $1 -eq 1 ] ; then
 | 
			
		||||
        # Initial installation
 | 
			
		||||
        systemctl --no-reload enable ${pkg.name}.service >/dev/null 2>&1 || :
 | 
			
		||||
fi
 | 
			
		||||
							
								
								
									
										6
									
								
								msa/js-executor/src/main/scripts/control/rpm/postrm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								msa/js-executor/src/main/scripts/control/rpm/postrm
									
									
									
									
									
										Normal file
									
								
							@ -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
 | 
			
		||||
							
								
								
									
										6
									
								
								msa/js-executor/src/main/scripts/control/rpm/preinst
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								msa/js-executor/src/main/scripts/control/rpm/preinst
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,6 @@
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
 | 
			
		||||
getent group ${pkg.user} >/dev/null || groupadd -r ${pkg.user}
 | 
			
		||||
getent passwd ${pkg.user} >/dev/null || \
 | 
			
		||||
useradd -d ${pkg.installFolder} -g ${pkg.user} -M -r ${pkg.user} -s /sbin/nologin \
 | 
			
		||||
-c "Thingsboard application"
 | 
			
		||||
							
								
								
									
										6
									
								
								msa/js-executor/src/main/scripts/control/rpm/prerm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								msa/js-executor/src/main/scripts/control/rpm/prerm
									
									
									
									
									
										Normal file
									
								
							@ -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.user}
 | 
			
		||||
ExecStart=${pkg.installFolder}/init/${pkg.name}
 | 
			
		||||
SuccessExitStatus=143
 | 
			
		||||
 | 
			
		||||
[Install]
 | 
			
		||||
WantedBy=multi-user.target
 | 
			
		||||
							
								
								
									
										233
									
								
								msa/js-executor/src/main/scripts/init/tb-js-executor
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										233
									
								
								msa/js-executor/src/main/scripts/init/tb-js-executor
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,233 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### BEGIN INIT INFO
 | 
			
		||||
# Provides:          tb-js-executor
 | 
			
		||||
# Required-Start:    $remote_fs $syslog $network
 | 
			
		||||
# Required-Stop:     $remote_fs $syslog $network
 | 
			
		||||
# Default-Start:     2 3 4 5
 | 
			
		||||
# Default-Stop:      0 1 6
 | 
			
		||||
# Short-Description: ${project.name}
 | 
			
		||||
# Description:       ${project.description}
 | 
			
		||||
# chkconfig:         2345 99 01
 | 
			
		||||
### END INIT INFO
 | 
			
		||||
 | 
			
		||||
[[ -n "$DEBUG" ]] && set -x
 | 
			
		||||
 | 
			
		||||
# Initialize variables that cannot be provided by a .conf file
 | 
			
		||||
WORKING_DIR="$(pwd)"
 | 
			
		||||
# shellcheck disable=SC2153
 | 
			
		||||
 | 
			
		||||
mainfile=${pkg.installFolder}/bin/${pkg.name}
 | 
			
		||||
configfile=${pkg.name}.conf
 | 
			
		||||
 | 
			
		||||
# Follow symlinks to find the real script and detect init.d script
 | 
			
		||||
cd "$(dirname "$0")" || exit 1
 | 
			
		||||
[[ -z "$initfile" ]] && initfile=$(pwd)/$(basename "$0")
 | 
			
		||||
while [[ -L "$initfile" ]]; do
 | 
			
		||||
  [[ "$initfile" =~ init\.d ]] && init_script=$(basename "$initfile")
 | 
			
		||||
  initfile=$(readlink "$initfile")
 | 
			
		||||
  cd "$(dirname "$initfile")" || exit 1
 | 
			
		||||
  initfile=$(pwd)/$(basename "$initfile")
 | 
			
		||||
done
 | 
			
		||||
initfolder="$( (cd "$(dirname "initfile")" && pwd -P) )"
 | 
			
		||||
cd "$WORKING_DIR" || exit 1
 | 
			
		||||
 | 
			
		||||
# Initialize CONF_FOLDER location
 | 
			
		||||
[[ -z "$CONF_FOLDER" ]] && CONF_FOLDER="${pkg.installFolder}/conf"
 | 
			
		||||
 | 
			
		||||
# shellcheck source=/dev/null
 | 
			
		||||
[[ -r "${CONF_FOLDER}/${configfile}" ]] && source "${CONF_FOLDER}/${configfile}"
 | 
			
		||||
 | 
			
		||||
# Initialize PID/LOG locations if they weren't provided by the config file
 | 
			
		||||
[[ -z "$PID_FOLDER" ]] && PID_FOLDER="/var/run"
 | 
			
		||||
[[ -z "$LOG_FOLDER" ]] && LOG_FOLDER="${pkg.unixLogFolder}"
 | 
			
		||||
! [[ "$PID_FOLDER" == /* ]] && PID_FOLDER="$(dirname "$mainfile")"/"$PID_FOLDER"
 | 
			
		||||
! [[ "$LOG_FOLDER" == /* ]] && LOG_FOLDER="$(dirname "$mainfile")"/"$LOG_FOLDER"
 | 
			
		||||
! [[ -x "$PID_FOLDER" ]] && PID_FOLDER="/tmp"
 | 
			
		||||
! [[ -x "$LOG_FOLDER" ]] && LOG_FOLDER="/tmp"
 | 
			
		||||
 | 
			
		||||
# Set up defaults
 | 
			
		||||
[[ -z "$MODE" ]] && MODE="auto" # modes are "auto", "service" or "run"
 | 
			
		||||
[[ -z "$USE_START_STOP_DAEMON" ]] && USE_START_STOP_DAEMON="true"
 | 
			
		||||
 | 
			
		||||
# Create an identity for log/pid files
 | 
			
		||||
if [[ -z "$identity" ]]; then
 | 
			
		||||
  if [[ -n "$init_script" ]]; then
 | 
			
		||||
    identity="${init_script}"
 | 
			
		||||
  else
 | 
			
		||||
    identity=$(basename "${initfile%.*}")_${initfolder//\//}
 | 
			
		||||
  fi
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# Initialize log file name if not provided by the config file
 | 
			
		||||
[[ -z "$LOG_FILENAME" ]] && LOG_FILENAME="${identity}.log"
 | 
			
		||||
 | 
			
		||||
# ANSI Colors
 | 
			
		||||
echoRed() { echo $'\e[0;31m'"$1"$'\e[0m'; }
 | 
			
		||||
echoGreen() { echo $'\e[0;32m'"$1"$'\e[0m'; }
 | 
			
		||||
echoYellow() { echo $'\e[0;33m'"$1"$'\e[0m'; }
 | 
			
		||||
 | 
			
		||||
# Utility functions
 | 
			
		||||
checkPermissions() {
 | 
			
		||||
  touch "$pid_file" &> /dev/null || { echoRed "Operation not permitted (cannot access pid file)"; return 4; }
 | 
			
		||||
  touch "$log_file" &> /dev/null || { echoRed "Operation not permitted (cannot access log file)"; return 4; }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
isRunning() {
 | 
			
		||||
  ps -p "$1" &> /dev/null
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
await_file() {
 | 
			
		||||
  end=$(date +%s)
 | 
			
		||||
  let "end+=10"
 | 
			
		||||
  while [[ ! -s "$1" ]]
 | 
			
		||||
  do
 | 
			
		||||
    now=$(date +%s)
 | 
			
		||||
    if [[ $now -ge $end ]]; then
 | 
			
		||||
      break
 | 
			
		||||
    fi
 | 
			
		||||
    sleep 1
 | 
			
		||||
  done
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Determine the script mode
 | 
			
		||||
action="run"
 | 
			
		||||
if [[ "$MODE" == "auto" && -n "$init_script" ]] || [[ "$MODE" == "service" ]]; then
 | 
			
		||||
  action="$1"
 | 
			
		||||
  shift
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# Build the pid and log filenames
 | 
			
		||||
if [[ "$identity" == "$init_script" ]] || [[ "$identity" == "$APP_NAME" ]]; then
 | 
			
		||||
  PID_FOLDER="$PID_FOLDER/${identity}"
 | 
			
		||||
  pid_subfolder=$PID_FOLDER
 | 
			
		||||
fi
 | 
			
		||||
pid_file="$PID_FOLDER/${identity}.pid"
 | 
			
		||||
log_file="$LOG_FOLDER/$LOG_FILENAME"
 | 
			
		||||
 | 
			
		||||
# Determine the user to run as if we are root
 | 
			
		||||
# shellcheck disable=SC2012
 | 
			
		||||
[[ $(id -u) == "0" ]] && run_user=$(ls -ld "$mainfile" | awk '{print $3}')
 | 
			
		||||
 | 
			
		||||
arguments=($RUN_ARGS "$@")
 | 
			
		||||
 | 
			
		||||
# Action functions
 | 
			
		||||
start() {
 | 
			
		||||
  if [[ -f "$pid_file" ]]; then
 | 
			
		||||
    pid=$(cat "$pid_file")
 | 
			
		||||
    isRunning "$pid" && { echoYellow "Already running [$pid]"; return 0; }
 | 
			
		||||
  fi
 | 
			
		||||
  do_start "$@"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
do_start() {
 | 
			
		||||
  working_dir=$(dirname "$mainfile")
 | 
			
		||||
  pushd "$working_dir" > /dev/null
 | 
			
		||||
  mkdir -p "$PID_FOLDER" &> /dev/null
 | 
			
		||||
  if [[ -n "$run_user" ]]; then
 | 
			
		||||
    checkPermissions || return $?
 | 
			
		||||
    if [[ -z "$pid_subfolder" ]]; then
 | 
			
		||||
      chown "$run_user" "$pid_subfolder"
 | 
			
		||||
    fi
 | 
			
		||||
    chown "$run_user" "$pid_file"
 | 
			
		||||
    chown "$run_user" "$log_file"
 | 
			
		||||
    if [ $USE_START_STOP_DAEMON = true ] && type start-stop-daemon > /dev/null 2>&1; then
 | 
			
		||||
      start-stop-daemon --start --quiet \
 | 
			
		||||
        --chuid "$run_user" \
 | 
			
		||||
        --name "$identity" \
 | 
			
		||||
        --make-pidfile --pidfile "$pid_file" \
 | 
			
		||||
        --background --no-close \
 | 
			
		||||
        --startas "$mainfile" \
 | 
			
		||||
        --chdir "$working_dir" \
 | 
			
		||||
        -- "${arguments[@]}" \
 | 
			
		||||
        >> "$log_file" 2>&1
 | 
			
		||||
      await_file "$pid_file"
 | 
			
		||||
    else
 | 
			
		||||
      su -s /bin/sh -c "$mainfile $(printf "\"%s\" " "${arguments[@]}") >> \"$log_file\" 2>&1 & echo \$!" "$run_user" > "$pid_file"
 | 
			
		||||
    fi
 | 
			
		||||
    pid=$(cat "$pid_file")
 | 
			
		||||
  else
 | 
			
		||||
    checkPermissions || return $?
 | 
			
		||||
    "$mainfile" "${arguments[@]}" >> "$log_file" 2>&1 &
 | 
			
		||||
    pid=$!
 | 
			
		||||
    disown $pid
 | 
			
		||||
    echo "$pid" > "$pid_file"
 | 
			
		||||
  fi
 | 
			
		||||
  [[ -z $pid ]] && { echoRed "Failed to start"; return 1; }
 | 
			
		||||
  echoGreen "Started [$pid]"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
stop() {
 | 
			
		||||
  working_dir=$(dirname "$mainfile")
 | 
			
		||||
  pushd "$working_dir" > /dev/null
 | 
			
		||||
  [[ -f $pid_file ]] || { echoYellow "Not running (pidfile not found)"; return 0; }
 | 
			
		||||
  pid=$(cat "$pid_file")
 | 
			
		||||
  isRunning "$pid" || { echoYellow "Not running (process ${pid}). Removing stale pid file."; rm -f "$pid_file"; return 0; }
 | 
			
		||||
  do_stop "$pid" "$pid_file"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
do_stop() {
 | 
			
		||||
  kill -2 "$1" &> /dev/null || { echoRed "Unable to kill process $1"; return 1; }
 | 
			
		||||
  for i in $(seq 1 60); do
 | 
			
		||||
    isRunning "$1" || { echoGreen "Stopped [$1]"; rm -f "$2"; return 0; }
 | 
			
		||||
    [[ $i -eq 30 ]] && kill -9 "$1" &> /dev/null
 | 
			
		||||
    sleep 1
 | 
			
		||||
  done
 | 
			
		||||
  echoRed "Unable to kill process $1";
 | 
			
		||||
  return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
restart() {
 | 
			
		||||
  stop && start
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
orce_reload() {
 | 
			
		||||
  working_dir=$(dirname "$mainfile")
 | 
			
		||||
  pushd "$working_dir" > /dev/null
 | 
			
		||||
  [[ -f $pid_file ]] || { echoRed "Not running (pidfile not found)"; return 7; }
 | 
			
		||||
  pid=$(cat "$pid_file")
 | 
			
		||||
  rm -f "$pid_file"
 | 
			
		||||
  isRunning "$pid" || { echoRed "Not running (process ${pid} not found)"; return 7; }
 | 
			
		||||
  do_stop "$pid" "$pid_file"
 | 
			
		||||
  do_start
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
status() {
 | 
			
		||||
  working_dir=$(dirname "$mainfile")
 | 
			
		||||
  pushd "$working_dir" > /dev/null
 | 
			
		||||
  [[ -f "$pid_file" ]] || { echoRed "Not running"; return 3; }
 | 
			
		||||
  pid=$(cat "$pid_file")
 | 
			
		||||
  isRunning "$pid" || { echoRed "Not running (process ${pid} not found)"; return 1; }
 | 
			
		||||
  echoGreen "Running [$pid]"
 | 
			
		||||
  return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
run() {
 | 
			
		||||
  pushd "$(dirname "$mainfile")" > /dev/null
 | 
			
		||||
  "$mainfile" "${arguments[@]}"
 | 
			
		||||
  result=$?
 | 
			
		||||
  popd > /dev/null
 | 
			
		||||
  return "$result"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Call the appropriate action function
 | 
			
		||||
case "$action" in
 | 
			
		||||
start)
 | 
			
		||||
  start "$@"; exit $?;;
 | 
			
		||||
stop)
 | 
			
		||||
  stop "$@"; exit $?;;
 | 
			
		||||
restart)
 | 
			
		||||
  restart "$@"; exit $?;;
 | 
			
		||||
force-reload)
 | 
			
		||||
  force_reload "$@"; exit $?;;
 | 
			
		||||
status)
 | 
			
		||||
  status "$@"; exit $?;;
 | 
			
		||||
run)
 | 
			
		||||
  run "$@"; exit $?;;
 | 
			
		||||
*)
 | 
			
		||||
  echo "Usage: $0 {start|stop|restart|force-reload|status|run}"; exit 1;
 | 
			
		||||
esac
 | 
			
		||||
 | 
			
		||||
exit 0
 | 
			
		||||
							
								
								
									
										31
									
								
								msa/js-executor/src/main/scripts/windows/install.bat
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								msa/js-executor/src/main/scripts/windows/install.bat
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,31 @@
 | 
			
		||||
@REM
 | 
			
		||||
@REM Copyright © 2016-2018 The Thingsboard Authors
 | 
			
		||||
@REM
 | 
			
		||||
@REM Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
@REM you may not use this file except in compliance with the License.
 | 
			
		||||
@REM You may obtain a copy of the License at
 | 
			
		||||
@REM
 | 
			
		||||
@REM     http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
@REM
 | 
			
		||||
@REM Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
@REM distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
@REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
@REM See the License for the specific language governing permissions and
 | 
			
		||||
@REM limitations under the License.
 | 
			
		||||
@REM
 | 
			
		||||
 | 
			
		||||
@ECHO OFF
 | 
			
		||||
 | 
			
		||||
setlocal ENABLEEXTENSIONS
 | 
			
		||||
 | 
			
		||||
@ECHO Installing ${pkg.name} ...
 | 
			
		||||
 | 
			
		||||
SET BASE=%~dp0
 | 
			
		||||
 | 
			
		||||
%BASE%${pkg.name}.exe install
 | 
			
		||||
 | 
			
		||||
@ECHO ${pkg.name} installed successfully!
 | 
			
		||||
 | 
			
		||||
GOTO END
 | 
			
		||||
 | 
			
		||||
:END
 | 
			
		||||
							
								
								
									
										29
									
								
								msa/js-executor/src/main/scripts/windows/service.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								msa/js-executor/src/main/scripts/windows/service.xml
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,29 @@
 | 
			
		||||
<!--
 | 
			
		||||
 | 
			
		||||
    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.
 | 
			
		||||
 | 
			
		||||
-->
 | 
			
		||||
<service>
 | 
			
		||||
    <id>${pkg.name}</id>
 | 
			
		||||
    <name>${project.name}</name>
 | 
			
		||||
    <description>${project.description}</description>
 | 
			
		||||
    <workingdirectory>%BASE%\bin</workingdirectory>
 | 
			
		||||
    <logpath>${pkg.winWrapperLogFolder}</logpath>
 | 
			
		||||
    <logmode>rotate</logmode>
 | 
			
		||||
    <env name="NODE_CONFIG_DIR" value="%BASE%\conf" />
 | 
			
		||||
    <env name="LOG_FOLDER" value="${pkg.winWrapperLogFolder}" />
 | 
			
		||||
    <env name="NODE_ENV" value="production" />
 | 
			
		||||
    <executable>%BASE%\bin\${pkg.name}.exe</executable>
 | 
			
		||||
</service>
 | 
			
		||||
							
								
								
									
										25
									
								
								msa/js-executor/src/main/scripts/windows/uninstall.bat
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								msa/js-executor/src/main/scripts/windows/uninstall.bat
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,25 @@
 | 
			
		||||
@REM
 | 
			
		||||
@REM Copyright © 2016-2018 The Thingsboard Authors
 | 
			
		||||
@REM
 | 
			
		||||
@REM Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
@REM you may not use this file except in compliance with the License.
 | 
			
		||||
@REM You may obtain a copy of the License at
 | 
			
		||||
@REM
 | 
			
		||||
@REM     http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
@REM
 | 
			
		||||
@REM Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
@REM distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
@REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
@REM See the License for the specific language governing permissions and
 | 
			
		||||
@REM limitations under the License.
 | 
			
		||||
@REM
 | 
			
		||||
 | 
			
		||||
@ECHO OFF
 | 
			
		||||
 | 
			
		||||
@ECHO Stopping ${pkg.name} ...
 | 
			
		||||
net stop ${pkg.name}
 | 
			
		||||
 | 
			
		||||
@ECHO Uninstalling ${pkg.name} ...
 | 
			
		||||
%~dp0${pkg.name}.exe uninstall
 | 
			
		||||
 | 
			
		||||
@ECHO DONE.
 | 
			
		||||
							
								
								
									
										41
									
								
								msa/pom.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								msa/pom.xml
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,41 @@
 | 
			
		||||
<!--
 | 
			
		||||
 | 
			
		||||
    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>thingsboard</artifactId>
 | 
			
		||||
    </parent>
 | 
			
		||||
    <groupId>org.thingsboard</groupId>
 | 
			
		||||
    <artifactId>msa</artifactId>
 | 
			
		||||
    <packaging>pom</packaging>
 | 
			
		||||
 | 
			
		||||
    <name>ThingsBoard Microservices</name>
 | 
			
		||||
    <url>https://thingsboard.io</url>
 | 
			
		||||
 | 
			
		||||
    <properties>
 | 
			
		||||
        <main.dir>${basedir}/..</main.dir>
 | 
			
		||||
    </properties>
 | 
			
		||||
 | 
			
		||||
    <modules>
 | 
			
		||||
        <module>js-executor</module>
 | 
			
		||||
    </modules>
 | 
			
		||||
 | 
			
		||||
</project>
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user