thingsboard-memoizeit

Details

diff --git a/application/build.gradle b/application/build.gradle
index 25ad51d..1d8a526 100644
--- a/application/build.gradle
+++ b/application/build.gradle
@@ -57,6 +57,21 @@ ospackage {
         into "bin"
     }
 
+    // Copy the install files
+    from("target/bin/install/install.sh") {
+        fileMode 0775
+        into "bin/install"
+    }
+
+    from("target/bin/install/upgrade.sh") {
+        fileMode 0775
+        into "bin/install"
+    }
+
+    from("target/bin/install/logback.xml") {
+        into "bin/install"
+    }
+
     // Copy the config files
     from("target/conf") {
         exclude "${pkgName}.conf"

application/pom.xml 29(+28 -1)

diff --git a/application/pom.xml b/application/pom.xml
index 7465109..4241b66 100644
--- a/application/pom.xml
+++ b/application/pom.xml
@@ -376,6 +376,29 @@
                         </configuration>
                     </execution>
                     <execution>
+                        <id>copy-install</id>
+                        <phase>process-resources</phase>
+                        <goals>
+                            <goal>copy-resources</goal>
+                        </goals>
+                        <configuration>
+                            <outputDirectory>${project.build.directory}/bin/install</outputDirectory>
+                            <resources>
+                                <resource>
+                                    <directory>src/main/scripts/install</directory>
+                                    <includes>
+                                        <include>**/*.sh</include>
+                                        <include>**/*.xml</include>
+                                    </includes>
+                                    <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>
@@ -395,7 +418,7 @@
                         </configuration>
                     </execution>
                     <execution>
-                        <id>copy-data-cql</id>
+                        <id>copy-data</id>
                         <phase>process-resources</phase>
                         <goals>
                             <goal>copy-resources</goal>
@@ -404,9 +427,13 @@
                             <outputDirectory>${project.build.directory}/data</outputDirectory>
                             <resources>
                                 <resource>
+                                    <directory>src/main/data</directory>
+                                </resource>
+                                <resource>
                                     <directory>../dao/src/main/resources</directory>
                                     <includes>
                                         <include>**/*.cql</include>
+                                        <include>**/*.sql</include>
                                     </includes>
                                     <filtering>false</filtering>
                                 </resource>
diff --git a/application/src/main/data/upgrade/1.3.0/schema_update.cql b/application/src/main/data/upgrade/1.3.0/schema_update.cql
index 4e59577..4070614 100644
--- a/application/src/main/data/upgrade/1.3.0/schema_update.cql
+++ b/application/src/main/data/upgrade/1.3.0/schema_update.cql
@@ -1,3 +1,19 @@
+--
+-- Copyright © 2016-2017 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.
+--
+
 DROP MATERIALIZED VIEW IF EXISTS thingsboard.device_by_tenant_and_name;
 DROP MATERIALIZED VIEW IF EXISTS thingsboard.device_by_tenant_and_search_text;
 DROP MATERIALIZED VIEW IF EXISTS thingsboard.device_by_tenant_by_type_and_search_text;
diff --git a/application/src/main/java/org/thingsboard/server/install/ThingsboardInstallService.java b/application/src/main/java/org/thingsboard/server/install/ThingsboardInstallService.java
index 52d5998..61b3e8a 100644
--- a/application/src/main/java/org/thingsboard/server/install/ThingsboardInstallService.java
+++ b/application/src/main/java/org/thingsboard/server/install/ThingsboardInstallService.java
@@ -39,7 +39,7 @@ public class ThingsboardInstallService {
     @Value("${install.upgrade:false}")
     private Boolean isUpgrade;
 
-    @Value("${install.upgrade.form_version:1.2.3}")
+    @Value("${install.upgrade.from_version:1.2.3}")
     private String upgradeFromVersion;
 
     @Value("${install.data_dir}")
diff --git a/application/src/main/java/org/thingsboard/server/service/install/CassandraDatabaseSchemaService.java b/application/src/main/java/org/thingsboard/server/service/install/CassandraDatabaseSchemaService.java
index ea18b92..eaef0e4 100644
--- a/application/src/main/java/org/thingsboard/server/service/install/CassandraDatabaseSchemaService.java
+++ b/application/src/main/java/org/thingsboard/server/service/install/CassandraDatabaseSchemaService.java
@@ -35,6 +35,7 @@ import java.util.List;
 @Slf4j
 public class CassandraDatabaseSchemaService implements DatabaseSchemaService {
 
+    private static final String CASSANDRA_DIR = "cassandra";
     private static final String SCHEMA_CQL = "schema.cql";
 
     @Value("${install.data_dir}")
@@ -47,7 +48,7 @@ public class CassandraDatabaseSchemaService implements DatabaseSchemaService {
     public void createDatabaseSchema() throws Exception {
         log.info("Installing Cassandra DataBase schema...");
 
-        Path schemaFile = Paths.get(this.dataDir, SCHEMA_CQL);
+        Path schemaFile = Paths.get(this.dataDir, CASSANDRA_DIR, SCHEMA_CQL);
         loadCql(schemaFile);
 
     }
diff --git a/application/src/main/java/org/thingsboard/server/service/install/SqlDatabaseSchemaService.java b/application/src/main/java/org/thingsboard/server/service/install/SqlDatabaseSchemaService.java
index fc92de8..9d22776 100644
--- a/application/src/main/java/org/thingsboard/server/service/install/SqlDatabaseSchemaService.java
+++ b/application/src/main/java/org/thingsboard/server/service/install/SqlDatabaseSchemaService.java
@@ -22,20 +22,44 @@ import org.springframework.context.annotation.Profile;
 import org.springframework.stereotype.Service;
 import org.thingsboard.server.dao.util.SqlDao;
 
+import java.nio.charset.Charset;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.sql.Connection;
+import java.sql.DriverManager;
+
 @Service
 @Profile("install")
 @Slf4j
 @SqlDao
 public class SqlDatabaseSchemaService implements DatabaseSchemaService {
 
+    private static final String SQL_DIR = "sql";
+    private static final String SCHEMA_SQL = "schema.sql";
+
     @Value("${install.data_dir}")
     private String dataDir;
 
+    @Value("${spring.datasource.url}")
+    private String dbUrl;
+
+    @Value("${spring.datasource.username}")
+    private String dbUserName;
+
+    @Value("${spring.datasource.password}")
+    private String dbPassword;
+
     @Override
     public void createDatabaseSchema() throws Exception {
 
         log.info("Installing SQL DataBase schema...");
-        //TODO:
+
+        Path schemaFile = Paths.get(this.dataDir, SQL_DIR, SCHEMA_SQL);
+        try (Connection conn = DriverManager.getConnection(dbUrl, dbUserName, dbPassword)) {
+            String sql = new String(Files.readAllBytes(schemaFile), Charset.forName("UTF-8"));
+            conn.createStatement().execute(sql);
+        }
 
     }
 
diff --git a/application/src/main/scripts/install/install.sh b/application/src/main/scripts/install/install.sh
new file mode 100755
index 0000000..be96363
--- /dev/null
+++ b/application/src/main/scripts/install/install.sh
@@ -0,0 +1,63 @@
+#!/bin/bash
+#
+# Copyright © 2016-2017 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.
+#
+
+while [[ $# -gt 0 ]]
+do
+key="$1"
+
+case $key in
+    --loadDemo)
+    LOAD_DEMO=true
+    shift # past argument
+    ;;
+    *)
+            # unknown option
+    ;;
+esac
+shift # past argument or value
+done
+
+if [ "$LOAD_DEMO" == "true" ]; then
+    loadDemo=true
+else
+    loadDemo=false
+fi
+
+CONF_FOLDER=${pkg.installFolder}/conf
+configfile=${pkg.name}.conf
+jarfile=${pkg.installFolder}/bin/${pkg.name}.jar
+installDir=${pkg.installFolder}/data
+
+source "${CONF_FOLDER}/${configfile}"
+
+run_user=${pkg.name}
+
+su -s /bin/sh -c "java -cp ${jarfile} $JAVA_OPTS -Dloader.main=org.thingsboard.server.ThingsboardInstallApplication \
+                    -Dinstall.data_dir=${installDir} \
+                    -Dinstall.load_demo=${loadDemo} \
+                    -Dspring.jpa.hibernate.ddl-auto=none \
+                    -Dinstall.upgrade=false \
+                    -Dlogging.config=${pkg.installFolder}/bin/install/logback.xml \
+                    org.springframework.boot.loader.PropertiesLauncher" "$run_user"
+
+if [ $? -ne 0 ]; then
+    echo "ThingsBoard installation failed!"
+else
+    echo "ThingsBoard installed successfully!"
+fi
+
+exit $?
diff --git a/application/src/main/scripts/install/logback.xml b/application/src/main/scripts/install/logback.xml
new file mode 100644
index 0000000..aadd92f
--- /dev/null
+++ b/application/src/main/scripts/install/logback.xml
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+
+    Copyright © 2016-2017 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}/install.log</file>
+        <rollingPolicy
+                class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+            <fileNamePattern>${pkg.logFolder}/install.%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>
+
+    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+        <encoder>
+            <pattern>%msg%n</pattern>
+        </encoder>
+    </appender>
+
+    <logger name="org.thingsboard.server.install" level="INFO">
+        <appender-ref ref="STDOUT" />
+    </logger>
+
+    <logger name="org.thingsboard.server.service.install" level="INFO">
+        <appender-ref ref="STDOUT" />
+    </logger>
+
+    <logger name="org.thingsboard.server" level="INFO" />
+    <logger name="akka" level="INFO" />
+
+    <root level="INFO">
+        <appender-ref ref="fileLogAppender"/>
+    </root>
+
+</configuration>
diff --git a/application/src/main/scripts/install/upgrade.sh b/application/src/main/scripts/install/upgrade.sh
new file mode 100755
index 0000000..b40c3bb
--- /dev/null
+++ b/application/src/main/scripts/install/upgrade.sh
@@ -0,0 +1,62 @@
+#!/bin/bash
+#
+# Copyright © 2016-2017 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.
+#
+
+for i in "$@"
+do
+case $i in
+    --fromVersion=*)
+    FROM_VERSION="${i#*=}"
+    shift
+    ;;
+    *)
+            # unknown option
+    ;;
+esac
+done
+
+if [[ -z "${FROM_VERSION// }" ]]; then
+    echo "--fromVersion parameter is invalid or unspecified!"
+    echo "Usage: upgrade.sh --fromVersion={VERSION}"
+    exit 1
+else
+    fromVersion="${FROM_VERSION// }"
+fi
+
+CONF_FOLDER=${pkg.installFolder}/conf
+configfile=${pkg.name}.conf
+jarfile=${pkg.installFolder}/bin/${pkg.name}.jar
+installDir=${pkg.installFolder}/data
+
+source "${CONF_FOLDER}/${configfile}"
+
+run_user=${pkg.name}
+
+su -s /bin/sh -c "java -cp ${jarfile} $JAVA_OPTS -Dloader.main=org.thingsboard.server.ThingsboardInstallApplication \
+                    -Dinstall.data_dir=${installDir} \
+                    -Dspring.jpa.hibernate.ddl-auto=none \
+                    -Dinstall.upgrade=true \
+                    -Dinstall.upgrade.from_version=${fromVersion} \
+                    -Dlogging.config=${pkg.installFolder}/bin/install/logback.xml \
+                    org.springframework.boot.loader.PropertiesLauncher" "$run_user"
+
+if [ $? -ne 0 ]; then
+    echo "ThingsBoard upgrade failed!"
+else
+    echo "ThingsBoard upgraded successfully!"
+fi
+
+exit $?