Browse Source

Added system and demo data

Added docker file for postgres db  schema
pull/158/head
volodymyr-babak 9 years ago
parent
commit
533a5d004d
  1. 6
      application/src/main/resources/thingsboard.yml
  2. 4
      application/src/test/java/org/thingsboard/server/controller/ControllerTestSuite.java
  3. 6
      application/src/test/java/org/thingsboard/server/mqtt/MqttSuite.java
  4. 4
      application/src/test/java/org/thingsboard/server/system/SystemTestSuite.java
  5. 3
      dao/src/main/java/org/thingsboard/server/dao/model/sql/DeviceEntity.java
  6. 4
      dao/src/main/java/org/thingsboard/server/dao/sql/component/JpaBaseComponentDescriptorDao.java
  7. 6
      dao/src/main/java/org/thingsboard/server/dao/sql/event/JpaBaseEventDao.java
  8. 0
      dao/src/main/resources/cassandra/demo-data.cql
  9. 0
      dao/src/main/resources/cassandra/schema.cql
  10. 0
      dao/src/main/resources/cassandra/system-data.cql
  11. 445
      dao/src/main/resources/postgres/demo-data.sql
  12. 221
      dao/src/main/resources/postgres/schema.sql
  13. 302
      dao/src/main/resources/postgres/system-data.sql
  14. 4
      dao/src/test/java/org/thingsboard/server/dao/DaoTestSuite.java
  15. 15
      docker/.env
  16. 17
      docker/docker-compose.yml
  17. 10
      docker/postgres/Makefile
  18. 22
      docker/postgres/init-user-db.sh
  19. 5
      docker/tb-cassandra-schema/Dockerfile
  20. 6
      docker/tb-cassandra-schema/Makefile
  21. 10
      docker/tb-postgres-schema/Dockerfile
  22. 14
      docker/tb-postgres-schema/Makefile
  23. 52
      docker/tb-postgres-schema/install-schema.sh

6
application/src/main/resources/thingsboard.yml

@ -107,7 +107,7 @@ coap:
# Cassandra driver configuration parameters
cassandra:
enabled: "${CASSANDRA_ENABLED:true}"
enabled: "${CASSANDRA_ENABLED:false}"
# Thingsboard cluster name
cluster_name: "${CASSANDRA_CLUSTER_NAME:Thingsboard Cluster}"
# Thingsboard keyspace name
@ -226,7 +226,7 @@ spring.mvc.cors:
# SQL DAO Configuration
sql:
enabled: "${SQL_ENABLED:false}"
enabled: "${SQL_ENABLED:true}"
spring:
data:
@ -238,7 +238,7 @@ spring:
generate-ddl: "true"
database-platform: "org.hibernate.dialect.PostgreSQLDialect"
hibernate:
ddl-auto: "create"
ddl-auto: "validate"
datasource:
driverClassName: "${SPRING_DRIVER_CLASS_NAME:org.postgresql.Driver}"
url: "${SPRING_DATASOURCE_URL:jdbc:postgresql://localhost:5432/thingsboard}"

4
application/src/test/java/org/thingsboard/server/controller/ControllerTestSuite.java

@ -31,8 +31,8 @@ public class ControllerTestSuite {
@ClassRule
public static CustomCassandraCQLUnit cassandraUnit =
new CustomCassandraCQLUnit(Arrays.asList(
new ClassPathCQLDataSet("schema.cql", false, false),
new ClassPathCQLDataSet("system-data.cql", false, false),
new ClassPathCQLDataSet("cassandra/schema.cql", false, false),
new ClassPathCQLDataSet("cassandra/system-data.cql", false, false),
new ClassPathCQLDataSet("system-test.cql", false, false)),
"cassandra-test.yaml", 30000l);

6
application/src/test/java/org/thingsboard/server/mqtt/MqttSuite.java

@ -33,9 +33,9 @@ public class MqttSuite {
@ClassRule
public static CustomCassandraCQLUnit cassandraUnit =
new CustomCassandraCQLUnit(
Arrays.asList(new ClassPathCQLDataSet("schema.cql", false, false),
new ClassPathCQLDataSet("system-data.cql", false, false),
new ClassPathCQLDataSet("demo-data.cql", false, false)),
Arrays.asList(new ClassPathCQLDataSet("cassandra/schema.cql", false, false),
new ClassPathCQLDataSet("cassandra/system-data.cql", false, false),
new ClassPathCQLDataSet("cassandra/demo-data.cql", false, false)),
"cassandra-test.yaml", 30000l);
}

4
application/src/test/java/org/thingsboard/server/system/SystemTestSuite.java

@ -33,7 +33,7 @@ public class SystemTestSuite {
@ClassRule
public static CustomCassandraCQLUnit cassandraUnit =
new CustomCassandraCQLUnit(Arrays.asList(
new ClassPathCQLDataSet("schema.cql", false, false),
new ClassPathCQLDataSet("system-data.cql", false, false)),
new ClassPathCQLDataSet("cassandra/schema.cql", false, false),
new ClassPathCQLDataSet("cassandra/system-data.cql", false, false)),
"cassandra-test.yaml", 30000l);
}

3
dao/src/main/java/org/thingsboard/server/dao/model/sql/DeviceEntity.java

@ -57,6 +57,9 @@ public final class DeviceEntity implements SearchTextEntity<Device> {
@Column(name = ModelConstants.DEVICE_CUSTOMER_ID_PROPERTY)
private UUID customerId;
@Column(name = ModelConstants.DEVICE_TYPE_PROPERTY)
private String type;
@Column(name = ModelConstants.DEVICE_NAME_PROPERTY)
private String name;

4
dao/src/main/java/org/thingsboard/server/dao/sql/component/JpaBaseComponentDescriptorDao.java

@ -15,6 +15,7 @@
*/
package org.thingsboard.server.dao.sql.component;
import com.datastax.driver.core.utils.UUIDs;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.data.repository.CrudRepository;
@ -26,7 +27,6 @@ import org.thingsboard.server.common.data.plugin.ComponentScope;
import org.thingsboard.server.common.data.plugin.ComponentType;
import org.thingsboard.server.dao.DaoUtil;
import org.thingsboard.server.dao.component.ComponentDescriptorDao;
import org.thingsboard.server.dao.model.ModelConstants;
import org.thingsboard.server.dao.model.sql.ComponentDescriptorEntity;
import org.thingsboard.server.dao.sql.JpaAbstractSearchTextDao;
@ -58,7 +58,7 @@ public class JpaBaseComponentDescriptorDao extends JpaAbstractSearchTextDao<Comp
@Override
public Optional<ComponentDescriptor> saveIfNotExist(ComponentDescriptor component) {
if (component.getId() == null) {
component.setId(new ComponentDescriptorId(UUID.randomUUID()));
component.setId(new ComponentDescriptorId(UUIDs.timeBased()));
}
boolean exists = componentDescriptorRepository.findOne(component.getId().getId()) != null;
if (!exists) {

6
dao/src/main/java/org/thingsboard/server/dao/sql/event/JpaBaseEventDao.java

@ -28,6 +28,7 @@ import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Component;
import org.thingsboard.server.common.data.Event;
import org.thingsboard.server.common.data.id.EntityId;
import org.thingsboard.server.common.data.id.EventId;
import org.thingsboard.server.common.data.page.TimePageLink;
import org.thingsboard.server.dao.DaoUtil;
import org.thingsboard.server.dao.event.EventDao;
@ -44,7 +45,6 @@ import java.util.Optional;
import java.util.UUID;
import static org.springframework.data.jpa.domain.Specifications.where;
import static org.thingsboard.server.dao.model.ModelConstants.EVENT_COLUMN_FAMILY_NAME;
import static org.thingsboard.server.dao.model.ModelConstants.ID_PROPERTY;
import static org.thingsboard.server.dao.model.ModelConstants.NULL_UUID;
@ -73,6 +73,10 @@ public class JpaBaseEventDao extends JpaAbstractSearchTimeDao<EventEntity, Event
@Override
public Event save(Event event) {
log.debug("Save event [{}] ", event);
if (event.getId() == null) {
event.setId(new EventId(UUIDs.timeBased()));
}
if (StringUtils.isEmpty(event.getUid())) {
event.setUid(event.getId().toString());
}

0
dao/src/main/resources/demo-data.cql → dao/src/main/resources/cassandra/demo-data.cql

0
dao/src/main/resources/schema.cql → dao/src/main/resources/cassandra/schema.cql

0
dao/src/main/resources/system-data.cql → dao/src/main/resources/cassandra/system-data.cql

445
dao/src/main/resources/postgres/demo-data.sql

File diff suppressed because one or more lines are too long

221
dao/src/main/resources/postgres/schema.sql

@ -0,0 +1,221 @@
--
-- 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.
--
SET statement_timeout = 0;
SET lock_timeout = 0;
SET idle_in_transaction_session_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SET check_function_bodies = false;
SET client_min_messages = warning;
SET row_security = off;
SET search_path = public, pg_catalog;
SET default_tablespace = '';
SET default_with_oids = false;
CREATE TABLE IF NOT EXISTS admin_settings (
id uuid NOT NULL CONSTRAINT admin_settings_pkey PRIMARY KEY,
json_value jsonb,
key character varying(255)
);
ALTER TABLE admin_settings OWNER TO postgres;
CREATE TABLE IF NOT EXISTS alarm (
id uuid NOT NULL CONSTRAINT alarm_pkey PRIMARY KEY,
ack_ts bigint,
clear_ts bigint,
additional_info jsonb,
end_ts bigint,
originator_id uuid,
originator_type integer,
propagate boolean,
severity character varying(255),
start_ts bigint,
status character varying(255),
tenant_id uuid,
type character varying(255)
);
ALTER TABLE alarm OWNER TO postgres;
CREATE TABLE IF NOT EXISTS asset (
id uuid NOT NULL CONSTRAINT asset_pkey PRIMARY KEY,
additional_info jsonb,
customer_id uuid,
name character varying(255),
search_text character varying(255),
tenant_id uuid,
type character varying(255)
);
ALTER TABLE asset OWNER TO postgres;
CREATE TABLE IF NOT EXISTS component_descriptor (
id uuid NOT NULL CONSTRAINT component_descriptor_pkey PRIMARY KEY,
actions character varying(255),
clazz character varying(255),
configuration_descriptor jsonb,
name character varying(255),
scope character varying(255),
search_text character varying(255),
type character varying(255)
);
ALTER TABLE component_descriptor OWNER TO postgres;
CREATE TABLE IF NOT EXISTS customer (
id uuid NOT NULL CONSTRAINT customer_pkey PRIMARY KEY,
additional_info jsonb,
address character varying(255),
address2 character varying(255),
city character varying(255),
country character varying(255),
email character varying(255),
phone character varying(255),
search_text character varying(255),
state character varying(255),
tenant_id uuid,
title character varying(255),
zip character varying(255)
);
ALTER TABLE customer OWNER TO postgres;
CREATE TABLE IF NOT EXISTS dashboard (
id uuid NOT NULL CONSTRAINT dashboard_pkey PRIMARY KEY,
configuration jsonb,
customer_id uuid,
search_text character varying(255),
tenant_id uuid,
title character varying(255)
);
ALTER TABLE dashboard OWNER TO postgres;
CREATE TABLE IF NOT EXISTS device (
id uuid NOT NULL CONSTRAINT device_pkey PRIMARY KEY,
additional_info jsonb,
customer_id uuid,
type character varying(255),
name character varying(255),
search_text character varying(255),
tenant_id uuid
);
ALTER TABLE device OWNER TO postgres;
CREATE TABLE IF NOT EXISTS device_credentials (
id uuid NOT NULL CONSTRAINT device_credentials_pkey PRIMARY KEY,
credentials_id character varying(255),
credentials_type character varying(255),
credentials_value character varying(255),
device_id uuid
);
ALTER TABLE device_credentials OWNER TO postgres;
CREATE TABLE IF NOT EXISTS event (
id uuid NOT NULL CONSTRAINT event_pkey PRIMARY KEY,
body jsonb,
entity_id uuid,
entity_type character varying(255),
event_type character varying(255),
event_uid character varying(255),
tenant_id uuid
);
ALTER TABLE event OWNER TO postgres;
CREATE TABLE IF NOT EXISTS plugin (
id uuid NOT NULL CONSTRAINT plugin_pkey PRIMARY KEY,
additional_info jsonb,
api_token character varying(255),
plugin_class character varying(255),
configuration jsonb,
name character varying(255),
public_access boolean,
search_text character varying(255),
state character varying(255),
tenant_id uuid
);
ALTER TABLE plugin OWNER TO postgres;
CREATE TABLE IF NOT EXISTS rule (
id uuid NOT NULL CONSTRAINT rule_pkey PRIMARY KEY,
action jsonb,
additional_info jsonb,
filters jsonb,
name character varying(255),
plugin_token character varying(255),
processor jsonb,
search_text character varying(255),
state character varying(255),
tenant_id uuid,
weight integer
);
ALTER TABLE rule OWNER TO postgres;
CREATE TABLE IF NOT EXISTS tb_user (
id uuid NOT NULL CONSTRAINT tb_user_pkey PRIMARY KEY,
additional_info jsonb,
authority character varying(255),
customer_id uuid,
email character varying(255) UNIQUE,
first_name character varying(255),
last_name character varying(255),
search_text character varying(255),
tenant_id uuid
);
ALTER TABLE tb_user OWNER TO postgres;
CREATE TABLE IF NOT EXISTS tenant (
id uuid NOT NULL CONSTRAINT tenant_pkey PRIMARY KEY,
additional_info jsonb,
address character varying(255),
address2 character varying(255),
city character varying(255),
country character varying(255),
email character varying(255),
phone character varying(255),
region character varying(255),
search_text character varying(255),
state character varying(255),
title character varying(255),
zip character varying(255)
);
ALTER TABLE tenant OWNER TO postgres;
CREATE TABLE IF NOT EXISTS user_credentials (
id uuid NOT NULL CONSTRAINT user_credentials_pkey PRIMARY KEY,
activate_token character varying(255) UNIQUE,
enabled boolean,
password character varying(255),
reset_token character varying(255) UNIQUE,
user_id uuid UNIQUE
);
ALTER TABLE user_credentials OWNER TO postgres;
CREATE TABLE IF NOT EXISTS widget_type (
id uuid NOT NULL CONSTRAINT widget_type_pkey PRIMARY KEY,
alias character varying(255),
bundle_alias character varying(255),
descriptor jsonb,
name character varying(255),
tenant_id uuid
);
ALTER TABLE widget_type OWNER TO postgres;
CREATE TABLE IF NOT EXISTS widgets_bundle (
id uuid NOT NULL CONSTRAINT widgets_bundle_pkey PRIMARY KEY,
alias character varying(255),
image bytea,
search_text character varying(255),
tenant_id uuid,
title character varying(255)
);
ALTER TABLE widgets_bundle OWNER TO postgres;

302
dao/src/main/resources/postgres/system-data.sql

File diff suppressed because one or more lines are too long

4
dao/src/test/java/org/thingsboard/server/dao/DaoTestSuite.java

@ -37,8 +37,8 @@ public class DaoTestSuite {
@ClassRule
public static CustomCassandraCQLUnit cassandraUnit =
new CustomCassandraCQLUnit(
Arrays.asList(new ClassPathCQLDataSet("schema.cql", false, false),
new ClassPathCQLDataSet("system-data.cql", false, false),
Arrays.asList(new ClassPathCQLDataSet("cassandra/schema.cql", false, false),
new ClassPathCQLDataSet("cassandra/system-data.cql", false, false),
new ClassPathCQLDataSet("system-test.cql", false, false)),
"cassandra-test.yaml", 30000l);

15
docker/.env

@ -1,12 +1,15 @@
# cassandra environment variables
CASSANDRA_DATA_DIR=/home/docker/cassandra_volume
# cassandra schema environment variables
CREATE_SCHEMA=true
ADD_SYSTEM_DATA=false
ADD_DEMO_DATA=false
CASSANDRA_URL=cassandra
# postgres environment variables
POSTGRES_DATA_DIR=/home/docker/postgres_volume
POSTGRES_PASSWORD=postgres
POSTGRES_DB=thingsboard
POSTGRES_USER=postgres
POSTGRES_PASSWORD=postgres
POSTGRES_URL=postgres
# environment variables for schema init and insert system and demo data
CREATE_SCHEMA=true
ADD_SYSTEM_DATA=true
ADD_DEMO_DATA=true

17
docker/docker-compose.yml

@ -47,10 +47,23 @@ services:
- "2181"
restart: always
postgres:
image: "thingsboard/postgres:1.2.4"
image: "postgres:9.6"
ports:
- "5432"
environment:
- POSTGRES_DB=${POSTGRES_DB}
- POSTGRES_USER=${POSTGRES_USER}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
volumes:
- "${POSTGRES_DATA_DIR}:/var/lib/postgresql/data"
- "${POSTGRES_DATA_DIR}:/var/lib/postgresql/data"
tb-postgres-schema:
image: "thingsboard/tb-postgres-schema:1.2.4"
environment:
- POSTGRES_URL=${POSTGRES_URL}
- POSTGRES_DB=${POSTGRES_DB}
- POSTGRES_USER=${POSTGRES_USER}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
- CREATE_SCHEMA=${CREATE_SCHEMA}
- ADD_SYSTEM_DATA=${ADD_SYSTEM_DATA}
- ADD_DEMO_DATA=${ADD_DEMO_DATA}
entrypoint: /install-schema.sh

10
docker/postgres/Makefile

@ -1,10 +0,0 @@
VERSION=1.2.4
PROJECT=thingsboard
APP=postgres
build:
docker build --pull -t ${PROJECT}/${APP}:${VERSION} -t ${PROJECT}/${APP}:latest .
push: build
docker push ${PROJECT}/${APP}:${VERSION}
docker push ${PROJECT}/${APP}:latest

22
docker/postgres/init-user-db.sh

@ -1,22 +0,0 @@
#!/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.
#
set -e
psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" <<-EOSQL
CREATE DATABASE thingsboard;
EOSQL

5
docker/tb-cassandra-schema/Dockerfile

@ -19,9 +19,8 @@ FROM cassandra:3.9
ADD install-schema.sh /root/install-schema.sh
RUN apt-get update \
&& apt-get install -y nmap
RUN chmod +x /root/install-schema.sh
&& apt-get install -y nmap \
&& chmod +x /root/install-schema.sh
ADD schema.cql /root/schema.cql
ADD demo-data.cql /root/demo-data.cql

6
docker/tb-cassandra-schema/Makefile

@ -3,9 +3,9 @@ PROJECT=thingsboard
APP=tb-cassandra-schema
build:
cp ../../dao/src/main/resources/schema.cql .
cp ../../dao/src/main/resources/demo-data.cql .
cp ../../dao/src/main/resources/system-data.cql .
cp ../../dao/src/main/resources/cassandra/schema.cql .
cp ../../dao/src/main/resources/cassandra/demo-data.cql .
cp ../../dao/src/main/resources/cassandra/system-data.cql .
docker build --pull -t ${PROJECT}/${APP}:${VERSION} -t ${PROJECT}/${APP}:latest .
rm schema.cql demo-data.cql system-data.cql

10
docker/postgres/Dockerfile → docker/tb-postgres-schema/Dockerfile

@ -16,6 +16,12 @@
FROM postgres:9.6
ADD init-user-db.sh /docker-entrypoint-initdb.d/init-user-db.sh
ADD install-schema.sh /install-schema.sh
CMD ["postgres"]
RUN apt-get update \
&& apt-get install -y nmap \
&& chmod +x /install-schema.sh
ADD schema.sql /schema.sql
ADD system-data.sql /system-data.sql
ADD demo-data.sql /demo-data.sql

14
docker/tb-postgres-schema/Makefile

@ -0,0 +1,14 @@
VERSION=1.2.4
PROJECT=thingsboard
APP=tb-postgres-schema
build:
cp ../../dao/src/main/resources/postgres/schema.sql .
cp ../../dao/src/main/resources/postgres/demo-data.sql .
cp ../../dao/src/main/resources/postgres/system-data.sql .
docker build --pull -t ${PROJECT}/${APP}:${VERSION} -t ${PROJECT}/${APP}:latest .
rm schema.sql demo-data.sql system-data.sql
push: build
docker push ${PROJECT}/${APP}:${VERSION}
docker push ${PROJECT}/${APP}:latest

52
docker/tb-postgres-schema/install-schema.sh

@ -0,0 +1,52 @@
#!/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.
#
until nmap $POSTGRES_URL -p 5432 | grep "5432/tcp open"
do
echo "Waiting for $POSTGRES_URL..."
sleep 10
done
if [ "$CREATE_SCHEMA" == "true" ]; then
echo "Creating 'Thingsboard' database schema..."
PGPASSWORD="$POSTGRES_PASSWORD" psql -h "$POSTGRES_URL" -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" -f /schema.sql
if [ "$?" -eq 0 ]; then
echo "'Thingsboard' database schema was successfully created!"
else
echo "There were issues while creating 'Thingsboard' database schema!"
fi
fi
if [ "$ADD_SYSTEM_DATA" == "true" ]; then
echo "Adding system data..."
PGPASSWORD="$POSTGRES_PASSWORD" psql -h "$POSTGRES_URL" -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" -f /system-data.sql
if [ "$?" -eq 0 ]; then
echo "System data was successfully added!"
else
echo "There were issues while adding System data!"
fi
fi
if [ "$ADD_DEMO_DATA" == "true" ]; then
echo "Adding demo data..."
PGPASSWORD="$POSTGRES_PASSWORD" psql -h "$POSTGRES_URL" -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" -f /demo-data.sql
if [ "$?" -eq 0 ]; then
echo "Demo data was successfully added!"
else
echo "There were issues while adding Demo data!"
fi
fi
Loading…
Cancel
Save