This is an automated email from the ASF dual-hosted git repository. poorejc pushed a commit to branch SENSSOFT-332 in repository https://gitbox.apache.org/repos/asf/incubator-senssoft.git
commit fdf2d5441a2ae340f6bd88ea2765585f590cba43 Author: poorejc <poor...@apache.org> AuthorDate: Fri Mar 22 15:42:45 2019 -0400 [SENSSOFT-332]Upgrade to Elastic 6.6 --- ...docker-compose.yml => docker-compose-6.5.4.yml} | 0 docker/docker-compose.yml | 12 +- docker/elasticsearch/6.6.2/Dockerfile | 30 ++ .../elasticsearch/6.6.2/config/elasticsearch.yml | 51 +++ .../elasticsearch/6.6.2/config/log4j2.properties | 24 ++ docker/kibana/6.6.2/Dockerfile | 20 ++ ...ache SensSoft Business Analytics Dashboard.json | 18 ++ .../Apache SensSoft Page Usage Dashboard.json | 18 ++ .../Apache SensSoft User Access Dashboard.json | 18 ++ .../Apache SensSoft Visualizations.json | 359 +++++++++++++++++++++ .../6.6.2/Saved Objects/Drill-Down Search.json | 22 ++ docker/kibana/6.6.2/config/kibana.yml | 18 ++ docker/logstash/6.6.2/Dockerfile | 31 ++ .../logstash/6.6.2/pipeline/logstash-userale.conf | 52 +++ docker/logstash/6.6.2/templates/userale.json | 143 ++++++++ 15 files changed, 810 insertions(+), 6 deletions(-) diff --git a/docker/docker-compose.yml b/docker/docker-compose-6.5.4.yml similarity index 100% copy from docker/docker-compose.yml copy to docker/docker-compose-6.5.4.yml diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index 594e5c4..390fb30 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -36,7 +36,7 @@ services: # Elasticsearch elasticsearch: - build: ./elasticsearch/6.5.4 + build: ./elasticsearch/6.6.2 environment: - NODE_MASTER=true - NUMBER_OF_MASTERS=1 @@ -66,7 +66,7 @@ services: # Kibana kibana: - build: ./kibana/6.5.4 + build: ./kibana/6.6.2 environment: - "ES_JAVA_OPTS=-Xms512m -Xmx512m" - "ELASTICSEARCH_URL=http://elasticsearch:9200" @@ -79,14 +79,14 @@ services: # Logstash logstash: - build: ./logstash/6.5.4 + build: ./logstash/6.6.2 environment: - "ELASTICSEARCH_URL=elasticsearch:9200" ports: - 8100:8100 volumes: - - ./logstash/6.5.4/pipeline/logstash-userale.conf:/usr/share/logstash/pipeline/logstash-userale.conf - - ./logstash/6.5.4/templates/userale.json:/usr/share/logstash/templates/userale.json + - ./logstash/6.6.2/pipeline/logstash-userale.conf:/usr/share/logstash/pipeline/logstash-userale.conf + - ./logstash/6.6.2/templates/userale.json:/usr/share/logstash/templates/userale.json depends_on: - "elasticsearch" networks: @@ -122,7 +122,7 @@ services: # Specific container and configuration to monitor the HOST (filesystem, memory, processes,...) metricbeat: - image: docker.elastic.co/beats/metricbeat:6.5.4 + image: docker.elastic.co/beats/metricbeat-oss:6.6.2 # restart: unless-stopped user: root pid: host diff --git a/docker/elasticsearch/6.6.2/Dockerfile b/docker/elasticsearch/6.6.2/Dockerfile new file mode 100644 index 0000000..b6cba8c --- /dev/null +++ b/docker/elasticsearch/6.6.2/Dockerfile @@ -0,0 +1,30 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You 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. + +FROM docker.elastic.co/elasticsearch/elasticsearch-oss:6.6.2 + +MAINTAINER Joshua Poore <poor...@apache.org> + +# Override config +COPY config /usr/share/elasticsearch/config +RUN chown -R elasticsearch:elasticsearch /usr/share/elasticsearch/config + +# Set environment +ENV CLUSTER_NAME SensSoft + +# Kubernetes requires swap is turned off +ENV MEMORY_LOCK false + +EXPOSE 9200 \ No newline at end of file diff --git a/docker/elasticsearch/6.6.2/config/elasticsearch.yml b/docker/elasticsearch/6.6.2/config/elasticsearch.yml new file mode 100644 index 0000000..5525441 --- /dev/null +++ b/docker/elasticsearch/6.6.2/config/elasticsearch.yml @@ -0,0 +1,51 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You 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. + +# Custom config borrowed from Pires: https://github.com/pires/docker-elasticsearch-kubernetes + +cluster: + name: ${CLUSTER_NAME:SensSoft} + +node: + master: ${NODE_MASTER:true} + data: ${NODE_DATA:true} + name: ${NODE_NAME:${HOSTNAME}} + ingest: ${NODE_INGEST:true} + max_local_storage_nodes: ${MAX_LOCAL_STORAGE_NODES:1} + +network.host: ${NETWORK_HOST:0.0.0.0} + +search.remote.connect: ${NODE_COORDINATE:true} + +path: + data: /usr/share/elasticsearch/data + logs: /usr/share/elasticsearch/log + +bootstrap: + memory_lock: ${MEMORY_LOCK} + +http: + enabled: ${HTTP_ENABLE:true} + compression: true + cors: + enabled: ${HTTP_CORS_ENABLE:true} + allow-origin: ${HTTP_CORS_ALLOW_ORIGIN:"*"} + +# Prevent the "split brain" by configuring the majority of nodes (total number of nodes / 2 + 1): +discovery: + zen: + ping.unicast.hosts: ${DISCOVERY_SERVICE:127.0.0.1, [::1]} + ping.unicast.hosts.resolve_timeout: ${DISCOVERY_TIMEOUT:5s} + minimum_master_nodes: ${NUMBER_OF_MASTERS:1} diff --git a/docker/elasticsearch/6.6.2/config/log4j2.properties b/docker/elasticsearch/6.6.2/config/log4j2.properties new file mode 100644 index 0000000..c86c995 --- /dev/null +++ b/docker/elasticsearch/6.6.2/config/log4j2.properties @@ -0,0 +1,24 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You 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. + +status = error + +appender.console.type = Console +appender.console.name = console +appender.console.layout.type = PatternLayout +appender.console.layout.pattern = [%d{ISO8601}][%-5p][%-25c{1.}] [%node_name] %marker%m%n + +rootLogger.level = info +rootLogger.appenderRef.console.ref = console \ No newline at end of file diff --git a/docker/kibana/6.6.2/Dockerfile b/docker/kibana/6.6.2/Dockerfile new file mode 100644 index 0000000..53108fc --- /dev/null +++ b/docker/kibana/6.6.2/Dockerfile @@ -0,0 +1,20 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You 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. + +FROM docker.elastic.co/kibana/kibana-oss:6.6.2 + +MAINTAINER Joshua Poore <poor...@apache.org> + +EXPOSE 5601 diff --git a/docker/kibana/6.6.2/Saved Objects/Apache SensSoft Business Analytics Dashboard.json b/docker/kibana/6.6.2/Saved Objects/Apache SensSoft Business Analytics Dashboard.json new file mode 100644 index 0000000..eb2f22d --- /dev/null +++ b/docker/kibana/6.6.2/Saved Objects/Apache SensSoft Business Analytics Dashboard.json @@ -0,0 +1,18 @@ +[ + { + "_id": "90b264d0-2cd4-11e9-9b9a-95b7b006b436", + "_type": "dashboard", + "_source": { + "title": "Apache SensSoft Business Analytics Dashboard", + "hits": 0, + "description": "Abstracts Multi-User Interaction with Single Pages/Apps", + "panelsJSON": "[{\"embeddableConfig\":{\"vis\":{\"defaultColors\":{\"0 - 400\":\"rgb(255,245,240)\",\"1,200 - 1,600\":\"rgb(203,24,29)\",\"400 - 800\":\"rgb(252,187,161)\",\"800 - 1,200\":\"rgb(251,106,74)\"},\"legendOpen\":false}},\"gridData\":{\"h\":21,\"i\":\"5\",\"w\":48,\"x\":0,\"y\":84},\"id\":\"429c0940-fce6-11e8-a156-87bcaf41506e\",\"panelIndex\":\"5\",\"title\":\"Unique User Activity by Day\",\"type\":\"visualization\",\"version\":\"6.5.4\"},{\"gridData\":{\"h\":15,\"i\":\ [...] + "optionsJSON": "{\"darkTheme\":true,\"useMargins\":false}", + "version": 1, + "timeRestore": false, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":\"UserID Search\",\"disabled\":true,\"index\":\"bdce0520-06df-11e9-8c58-f38cfff498f6\",\"key\":\"userId\",\"negate\":false,\"params\":{\"query\":\"nobody\",\"type\":\"phrase\"},\"type\":\"phrase\",\"value\":\"nobody\"},\"query\":{\"match\":{\"userId\":{\"query\":\"nobody\",\"type\":\"phrase\"}}}},{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":\"Host Search\",\"disabled\":true,\"in [...] + } + } + } +] \ No newline at end of file diff --git a/docker/kibana/6.6.2/Saved Objects/Apache SensSoft Page Usage Dashboard.json b/docker/kibana/6.6.2/Saved Objects/Apache SensSoft Page Usage Dashboard.json new file mode 100644 index 0000000..c9e569e --- /dev/null +++ b/docker/kibana/6.6.2/Saved Objects/Apache SensSoft Page Usage Dashboard.json @@ -0,0 +1,18 @@ +[ + { + "_id": "3f02bf70-12eb-11e9-a1e0-631cf5fb9335", + "_type": "dashboard", + "_source": { + "title": "Apache SensSoft Page Usage Dashboard", + "hits": 0, + "description": "Abstracts Multi-User Interaction with Single Pages/Apps. Ideal for script-tag, page-level UserALE.js deployments.", + "panelsJSON": "[{\"gridData\":{\"h\":15,\"i\":\"2\",\"w\":32,\"x\":16,\"y\":0},\"id\":\"f7ca4560-be7c-11e7-8adf-fd0a12531eca\",\"panelIndex\":\"2\",\"type\":\"visualization\",\"version\":\"6.5.4\"},{\"embeddableConfig\":{\"vis\":{\"defaultColors\":{\"0 - 400\":\"rgb(255,245,240)\",\"1,200 - 1,600\":\"rgb(203,24,29)\",\"400 - 800\":\"rgb(252,187,161)\",\"800 - 1,200\":\"rgb(251,106,74)\"},\"legendOpen\":false}},\"gridData\":{\"h\":15,\"i\":\"5\",\"w\":20,\"x\":12,\"y\":15},\"id\":\" [...] + "optionsJSON": "{\"darkTheme\":true,\"useMargins\":false}", + "version": 1, + "timeRestore": false, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":\"UserID Search\",\"disabled\":true,\"index\":\"bdce0520-06df-11e9-8c58-f38cfff498f6\",\"key\":\"userId\",\"negate\":false,\"params\":{\"query\":\"nobody\",\"type\":\"phrase\"},\"type\":\"phrase\",\"value\":\"nobody\"},\"query\":{\"match\":{\"userId\":{\"query\":\"nobody\",\"type\":\"phrase\"}}}},{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":\"Host Search\",\"disabled\":true,\"in [...] + } + } + } +] \ No newline at end of file diff --git a/docker/kibana/6.6.2/Saved Objects/Apache SensSoft User Access Dashboard.json b/docker/kibana/6.6.2/Saved Objects/Apache SensSoft User Access Dashboard.json new file mode 100644 index 0000000..cf34ced --- /dev/null +++ b/docker/kibana/6.6.2/Saved Objects/Apache SensSoft User Access Dashboard.json @@ -0,0 +1,18 @@ +[ + { + "_id": "ab9f1f90-fce6-11e8-a156-87bcaf41506e", + "_type": "dashboard", + "_source": { + "title": "Apache SensSoft User Access Dashboard", + "hits": 0, + "description": "Abstracts Multi-User Utilization of IT Assets (and Web Usage). Ideal for UserALE.js Web Extension deployments.", + "panelsJSON": "[{\"gridData\":{\"h\":15,\"i\":\"2\",\"w\":32,\"x\":16,\"y\":0},\"id\":\"f7ca4560-be7c-11e7-8adf-fd0a12531eca\",\"panelIndex\":\"2\",\"type\":\"visualization\",\"version\":\"6.5.4\"},{\"embeddableConfig\":{\"spy\":null},\"gridData\":{\"h\":15,\"i\":\"4\",\"w\":16,\"x\":0,\"y\":0},\"id\":\"e36b1f40-be7c-11e7-8adf-fd0a12531eca\",\"panelIndex\":\"4\",\"type\":\"visualization\",\"version\":\"6.5.4\"},{\"gridData\":{\"h\":15,\"i\":\"5\",\"w\":36,\"x\":12,\"y\":15},\"id\": [...] + "optionsJSON": "{\"darkTheme\":true,\"useMargins\":false}", + "version": 1, + "timeRestore": false, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"filter\":[{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":\"UserID Search\",\"disabled\":true,\"index\":\"bdce0520-06df-11e9-8c58-f38cfff498f6\",\"key\":\"userId\",\"negate\":false,\"params\":{\"query\":\"nobody\",\"type\":\"phrase\"},\"type\":\"phrase\",\"value\":\"nobody\"},\"query\":{\"match\":{\"userId\":{\"query\":\"nobody\",\"type\":\"phrase\"}}}},{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":\"Host Search\",\"disabled\":true,\"in [...] + } + } + } +] \ No newline at end of file diff --git a/docker/kibana/6.6.2/Saved Objects/Apache SensSoft Visualizations.json b/docker/kibana/6.6.2/Saved Objects/Apache SensSoft Visualizations.json new file mode 100644 index 0000000..95fc985 --- /dev/null +++ b/docker/kibana/6.6.2/Saved Objects/Apache SensSoft Visualizations.json @@ -0,0 +1,359 @@ +[ + { + "_id": "28070240-2d12-11e9-9b9a-95b7b006b436", + "_type": "visualization", + "_source": { + "title": "Activity by SessionID", + "visState": "{\"type\":\"timelion\",\"title\":\"Activity by SessionID\",\"params\":{\"expression\":\".es(*,split=sessionID:10)\",\"interval\":\"auto\"}}", + "uiStateJSON": "{}", + "description": "", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "36a0eb90-2cd6-11e9-9b9a-95b7b006b436", + "_type": "visualization", + "_source": { + "title": "Time-Series Unique Hosts", + "visState": "{\"title\":\"Time-Series Unique Hosts\",\"type\":\"timelion\",\"params\":{\"expression\":\".es(metric=cardinality:host).label('Unique Users (Hosts)')\",\"interval\":\"auto\"},\"aggs\":[]}", + "uiStateJSON": "{}", + "description": "", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"language\":\"lucene\",\"query\":\"\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "f7ca4560-be7c-11e7-8adf-fd0a12531eca", + "_type": "visualization", + "_source": { + "title": "Time Series", + "visState": "{\"title\":\"Time Series\",\"type\":\"timelion\",\"params\":{\"expression\":\".es(*)\",\"interval\":\"auto\"},\"aggs\":[],\"listeners\":{}}", + "uiStateJSON": "{}", + "description": "", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"query\":{\"query\":{\"query_string\":{\"query\":\"*\"}},\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "f7c690a0-12ef-11e9-a1e0-631cf5fb9335", + "_type": "visualization", + "_source": { + "title": "Top UI Elements Used", + "visState": "{\"title\":\"Top UI Elements Used\",\"type\":\"pie\",\"params\":{\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"isDonut\":false,\"type\":\"pie\",\"labels\":{\"show\":false,\"values\":true,\"last_level\":true,\"truncate\":100}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Element Interactions\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\ [...] + "uiStateJSON": "{}", + "description": "", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"index\":\"7fed1930-2cd2-11e9-9b9a-95b7b006b436\",\"query\":{\"query\":{\"query_string\":{\"query\":\"*\",\"analyze_wildcard\":true,\"default_field\":\"*\"}},\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "ba30fd80-12ee-11e9-a1e0-631cf5fb9335", + "_type": "visualization", + "_source": { + "title": "Number of User Events", + "visState": "{\"title\":\"Number of User Events\",\"type\":\"metric\",\"params\":{\"handleNoResults\":true,\"fontSize\":60,\"addTooltip\":true,\"addLegend\":false,\"type\":\"metric\",\"metric\":{\"percentageMode\":false,\"useRanges\":false,\"colorSchema\":\"Green to Red\",\"metricColorMode\":\"None\",\"colorsRange\":[{\"from\":0,\"to\":10000}],\"labels\":{\"show\":true},\"invertColors\":false,\"style\":{\"bgFill\":\"#000\",\"bgColor\":false,\"labelColor\":false,\"subText\":\"\",\"f [...] + "uiStateJSON": "{}", + "description": "", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"index\":\"7fed1930-2cd2-11e9-9b9a-95b7b006b436\",\"query\":{\"query\":{\"query_string\":{\"query\":\"*\",\"analyze_wildcard\":true,\"default_field\":\"*\"}},\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "20b291b0-12f2-11e9-a1e0-631cf5fb9335", + "_type": "visualization", + "_source": { + "title": "Most Active Users by Host", + "visState": "{\"aggs\":[{\"enabled\":true,\"id\":\"1\",\"params\":{\"customLabel\":\"Number of User Events\"},\"schema\":\"metric\",\"type\":\"count\"},{\"enabled\":true,\"id\":\"2\",\"params\":{\"customLabel\":\"Host\",\"field\":\"host\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"order\":\"desc\",\"orderBy\":\"_term\",\"otherBucket\":false,\"otherBucketLabel\":\"Other\",\"size\":5},\"schema\":\"segment\",\"type\":\"terms\"}],\"params\":{\"addLegend\":true,\"addTi [...] + "uiStateJSON": "{}", + "description": "", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"index\":\"7fed1930-2cd2-11e9-9b9a-95b7b006b436\",\"filter\":[],\"query\":{\"language\":\"lucene\",\"query\":\"\"}}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "bf327a20-12f3-11e9-a1e0-631cf5fb9335", + "_type": "visualization", + "_source": { + "title": "Top Target UI Element Cloud", + "visState": "{\"title\":\"Top Target UI Element Cloud\",\"type\":\"tagcloud\",\"params\":{\"scale\":\"linear\",\"orientation\":\"single\",\"minFontSize\":8,\"maxFontSize\":29,\"hideLabel\":false},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Count of User Events\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"target\",\"otherBucket\":false,\"otherBucketLabel\":\"Ot [...] + "uiStateJSON": "{}", + "description": "", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"index\":\"7fed1930-2cd2-11e9-9b9a-95b7b006b436\",\"filter\":[],\"query\":{\"query\":\"\",\"language\":\"lucene\"}}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "887fec40-1886-11e9-bdac-e790c2bff4d4", + "_type": "visualization", + "_source": { + "title": "A/B Test", + "visState": "{\"title\":\"A/B Test\",\"type\":\"histogram\",\"params\":{\"addLegend\":true,\"addTimeMarker\":false,\"addTooltip\":true,\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"labels\":{\"show\":true,\"truncate\":100},\"position\":\"bottom\",\"scale\":{\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"HTML Tags\"},\"type\":\"category\"}],\"defaultYExtents\":false,\"drawLinesBetweenPoints\":true,\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\ [...] + "uiStateJSON": "{}", + "description": "", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"index\":\"7fed1930-2cd2-11e9-9b9a-95b7b006b436\",\"query\":{\"language\":\"lucene\",\"query\":{\"query_string\":{\"analyze_wildcard\":true,\"default_field\":\"*\",\"query\":\"*\"}}},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "bcd7c950-be7c-11e7-8adf-fd0a12531eca", + "_type": "visualization", + "_source": { + "title": "Top Event Types", + "visState": "{\"title\":\"Top Event Types\",\"type\":\"pie\",\"params\":{\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"isDonut\":false},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Top Event Types\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"field\":\"type\",\"size\":100,\"order\":\"desc\",\"orderBy\":\"1\",\"customLabel\":\"Event types\"}}],\"lis [...] + "uiStateJSON": "{}", + "description": "", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"index\":\"7fed1930-2cd2-11e9-9b9a-95b7b006b436\",\"query\":{\"query\":{\"query_string\":{\"query\":\"*\",\"analyze_wildcard\":true}},\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "e36b1f40-be7c-11e7-8adf-fd0a12531eca", + "_type": "visualization", + "_source": { + "title": "Total Number of Logs", + "visState": "{\"title\":\"Total Number of Logs\",\"type\":\"metric\",\"params\":{\"handleNoResults\":true,\"fontSize\":60},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Total number of logs\"}}],\"listeners\":{}}", + "uiStateJSON": "{}", + "description": "", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"index\":\"7fed1930-2cd2-11e9-9b9a-95b7b006b436\",\"query\":{\"query\":{\"query_string\":{\"query\":\"*\",\"analyze_wildcard\":true}},\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "2bf40010-be7d-11e7-8adf-fd0a12531eca", + "_type": "visualization", + "_source": { + "title": "Events by Targets", + "visState": "{\"title\":\"Events by Targets\",\"type\":\"histogram\",\"params\":{\"addLegend\":true,\"addTimeMarker\":false,\"addTooltip\":true,\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"labels\":{\"show\":true,\"truncate\":100},\"position\":\"bottom\",\"scale\":{\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{\"text\":\"HTML Tags\"},\"type\":\"category\"}],\"defaultYExtents\":false,\"drawLinesBetweenPoints\":true,\"grid\":{\"categoryLines\":false,\"style\":{\"color\ [...] + "uiStateJSON": "{}", + "description": "", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"index\":\"7fed1930-2cd2-11e9-9b9a-95b7b006b436\",\"query\":{\"query\":{\"query_string\":{\"query\":\"*\",\"analyze_wildcard\":true}},\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "64045a30-fce4-11e8-a156-87bcaf41506e", + "_type": "visualization", + "_source": { + "title": "Total Logs by Unique Hosts", + "visState": "{\"title\":\"Total Logs by Unique Hosts\",\"type\":\"horizontal_bar\",\"params\":{\"addLegend\":true,\"addTimeMarker\":false,\"addTooltip\":true,\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"labels\":{\"filter\":false,\"rotate\":0,\"show\":true,\"truncate\":200},\"position\":\"left\",\"scale\":{\"type\":\"linear\"},\"show\":true,\"style\":{},\"title\":{},\"type\":\"category\"}],\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"legendPosition\":\"righ [...] + "uiStateJSON": "{}", + "description": "", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"index\":\"7fed1930-2cd2-11e9-9b9a-95b7b006b436\",\"filter\":[],\"query\":{\"language\":\"lucene\",\"query\":\"\"}}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "429c0940-fce6-11e8-a156-87bcaf41506e", + "_type": "visualization", + "_source": { + "title": "Host Activity By Day", + "visState": "{\"title\":\"Host Activity By Day\",\"type\":\"heatmap\",\"params\":{\"type\":\"heatmap\",\"addTooltip\":true,\"addLegend\":true,\"enableHover\":false,\"legendPosition\":\"right\",\"times\":[],\"colorsNumber\":4,\"colorSchema\":\"Reds\",\"setColorRange\":false,\"colorsRange\":[],\"invertColors\":false,\"percentageMode\":false,\"valueAxes\":[{\"show\":false,\"id\":\"ValueAxis-1\",\"type\":\"value\",\"scale\":{\"type\":\"linear\",\"defaultYExtents\":false},\"labels\":{\" [...] + "uiStateJSON": "{\"vis\":{\"defaultColors\":{\"0 - 500\":\"rgb(255,245,240)\",\"500 - 1,000\":\"rgb(252,187,161)\",\"1,000 - 1,500\":\"rgb(251,106,74)\",\"1,500 - 2,000\":\"rgb(203,24,29)\"}}}", + "description": "", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"index\":\"7fed1930-2cd2-11e9-9b9a-95b7b006b436\",\"filter\":[],\"query\":{\"query\":\"\",\"language\":\"lucene\"}}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "5eeda1e0-06e5-11e9-8c58-f38cfff498f6", + "_type": "visualization", + "_source": { + "title": "Number of Unique Pages Visited", + "visState": "{\"title\":\"Number of Unique Pages Visited\",\"type\":\"metric\",\"params\":{\"handleNoResults\":true,\"fontSize\":60,\"addTooltip\":true,\"addLegend\":false,\"type\":\"metric\",\"metric\":{\"percentageMode\":false,\"useRanges\":false,\"colorSchema\":\"Green to Red\",\"metricColorMode\":\"None\",\"colorsRange\":[{\"from\":0,\"to\":10000}],\"labels\":{\"show\":true},\"invertColors\":false,\"style\":{\"bgFill\":\"#000\",\"bgColor\":false,\"labelColor\":false,\"subText\" [...] + "uiStateJSON": "{}", + "description": "", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"index\":\"7fed1930-2cd2-11e9-9b9a-95b7b006b436\",\"query\":{\"query\":{\"query_string\":{\"query\":\"*\",\"analyze_wildcard\":true,\"default_field\":\"*\"}},\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "b7324e60-12ec-11e9-a1e0-631cf5fb9335", + "_type": "visualization", + "_source": { + "title": "Top URL Visits By Day", + "visState": "{\"title\":\"Top URL Visits By Day\",\"type\":\"heatmap\",\"params\":{\"type\":\"heatmap\",\"addTooltip\":true,\"addLegend\":true,\"enableHover\":false,\"legendPosition\":\"right\",\"times\":[],\"colorsNumber\":4,\"colorSchema\":\"Reds\",\"setColorRange\":false,\"colorsRange\":[],\"invertColors\":false,\"percentageMode\":false,\"valueAxes\":[{\"show\":false,\"id\":\"ValueAxis-1\",\"type\":\"value\",\"scale\":{\"type\":\"linear\",\"defaultYExtents\":false},\"labels\":{\ [...] + "uiStateJSON": "{\"vis\":{\"defaultColors\":{\"0 - 400\":\"rgb(255,245,240)\",\"400 - 800\":\"rgb(252,187,161)\",\"800 - 1,200\":\"rgb(251,106,74)\",\"1,200 - 1,600\":\"rgb(203,24,29)\"}}}", + "description": "", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"index\":\"7fed1930-2cd2-11e9-9b9a-95b7b006b436\",\"filter\":[],\"query\":{\"query\":\"\",\"language\":\"lucene\"}}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "d1ba2560-2d03-11e9-9b9a-95b7b006b436", + "_type": "visualization", + "_source": { + "title": "Average Number of Events per Unique Users (Hosts)", + "visState": "{\"aggs\":[{\"enabled\":true,\"id\":\"1\",\"params\":{\"customBucket\":{\"enabled\":true,\"id\":\"1-bucket\",\"params\":{\"field\":\"host\",\"missingBucket\":false,\"missingBucketLabel\":\"Missing\",\"order\":\"desc\",\"orderAgg\":{\"enabled\":true,\"id\":\"1-bucket-orderAgg\",\"params\":{},\"schema\":{\"aggFilter\":[\"!top_hits\",\"!percentiles\",\"!median\",\"!std_dev\",\"!derivative\",\"!moving_avg\",\"!serial_diff\",\"!cumulative_sum\",\"!avg_bucket\",\"!max_bucket [...] + "uiStateJSON": "{}", + "description": "", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"index\":\"7fed1930-2cd2-11e9-9b9a-95b7b006b436\",\"query\":{\"query\":{\"query_string\":{\"query\":\"*\",\"analyze_wildcard\":true,\"default_field\":\"*\"}},\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "822808b0-2d0c-11e9-9b9a-95b7b006b436", + "_type": "visualization", + "_source": { + "title": "Top Web Pages by Unique Visitors", + "visState": "{\"title\":\"Top Web Pages by Unique Visitors\",\"type\":\"table\",\"params\":{\"perPage\":10,\"showPartialRows\":false,\"showMetricsAtAllLevels\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"cardinality\",\"schema\":\"metric\",\"params\":{\"field\":\"host\",\"customLabel\":\"Unique Visitors\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket [...] + "uiStateJSON": "{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}", + "description": "", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"index\":\"7fed1930-2cd2-11e9-9b9a-95b7b006b436\",\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "5b467330-06e2-11e9-8c58-f38cfff498f6", + "_type": "visualization", + "_source": { + "title": "Number of Unique Users (Hosts)", + "visState": "{\"title\":\"Number of Unique Users (Hosts)\",\"type\":\"metric\",\"params\":{\"handleNoResults\":true,\"fontSize\":60,\"addTooltip\":true,\"addLegend\":false,\"type\":\"metric\",\"metric\":{\"percentageMode\":false,\"useRanges\":false,\"colorSchema\":\"Green to Red\",\"metricColorMode\":\"None\",\"colorsRange\":[{\"from\":0,\"to\":10000}],\"labels\":{\"show\":true},\"invertColors\":false,\"style\":{\"bgFill\":\"#000\",\"bgColor\":false,\"labelColor\":false,\"subText\" [...] + "uiStateJSON": "{}", + "description": "", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"index\":\"7fed1930-2cd2-11e9-9b9a-95b7b006b436\",\"query\":{\"query\":{\"query_string\":{\"query\":\"*\",\"analyze_wildcard\":true,\"default_field\":\"*\"}},\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "33e09c60-2ff2-11e9-be20-a737e788a0aa", + "_type": "visualization", + "_source": { + "title": "Funnel", + "visState": "{\"title\":\"Funnel\",\"type\":\"histogram\",\"params\":{\"type\":\"histogram\",\"grid\":{\"categoryLines\":false,\"style\":{\"color\":\"#eee\"}},\"categoryAxes\":[{\"id\":\"CategoryAxis-1\",\"type\":\"category\",\"position\":\"bottom\",\"show\":true,\"style\":{},\"scale\":{\"type\":\"linear\"},\"labels\":{\"show\":true,\"truncate\":100},\"title\":{}}],\"valueAxes\":[{\"id\":\"ValueAxis-1\",\"name\":\"LeftAxis-1\",\"type\":\"value\",\"position\":\"left\",\"show\":true, [...] + "uiStateJSON": "{}", + "description": "", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"index\":\"7fed1930-2cd2-11e9-9b9a-95b7b006b436\",\"query\":{\"query\":\"\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "d5a95ce0-06e3-11e9-8c58-f38cfff498f6", + "_type": "visualization", + "_source": { + "title": "Page Activity By Day", + "visState": "{\"title\":\"Page Activity By Day\",\"type\":\"heatmap\",\"params\":{\"type\":\"heatmap\",\"addTooltip\":true,\"addLegend\":true,\"enableHover\":false,\"legendPosition\":\"right\",\"times\":[],\"colorsNumber\":4,\"colorSchema\":\"Reds\",\"setColorRange\":false,\"colorsRange\":[],\"invertColors\":false,\"percentageMode\":false,\"valueAxes\":[{\"show\":false,\"id\":\"ValueAxis-1\",\"type\":\"value\",\"scale\":{\"type\":\"linear\",\"defaultYExtents\":false},\"labels\":{\" [...] + "uiStateJSON": "{\"vis\":{\"defaultColors\":{\"0 - 125\":\"rgb(255,245,240)\",\"125 - 250\":\"rgb(252,187,161)\",\"250 - 375\":\"rgb(251,106,74)\",\"375 - 500\":\"rgb(203,24,29)\"}}}", + "description": "", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"index\":\"7fed1930-2cd2-11e9-9b9a-95b7b006b436\",\"filter\":[],\"query\":{\"query\":\"\",\"language\":\"lucene\"}}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + }, + { + "_id": "e1b6c290-06e1-11e9-8c58-f38cfff498f6", + "_type": "visualization", + "_source": { + "title": "Top Pages by Activity", + "visState": "{\"title\":\"Top Pages by Activity\",\"type\":\"pie\",\"params\":{\"addTooltip\":true,\"addLegend\":true,\"legendPosition\":\"right\",\"isDonut\":false,\"type\":\"pie\",\"labels\":{\"show\":false,\"values\":true,\"last_level\":true,\"truncate\":100}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{\"customLabel\":\"Top Event Types\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"segment\",\"params\":{\"fie [...] + "uiStateJSON": "{}", + "description": "", + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"index\":\"7fed1930-2cd2-11e9-9b9a-95b7b006b436\",\"query\":{\"query\":\"*\",\"language\":\"lucene\"},\"filter\":[]}" + } + }, + "_meta": { + "savedObjectVersion": 2 + } + } +] \ No newline at end of file diff --git a/docker/kibana/6.6.2/Saved Objects/Drill-Down Search.json b/docker/kibana/6.6.2/Saved Objects/Drill-Down Search.json new file mode 100644 index 0000000..749609b --- /dev/null +++ b/docker/kibana/6.6.2/Saved Objects/Drill-Down Search.json @@ -0,0 +1,22 @@ +[ + { + "_id": "67105880-06e6-11e9-8c58-f38cfff498f6", + "_type": "search", + "_source": { + "title": "Drill-Down Search", + "description": "", + "hits": 0, + "columns": [ + "_source" + ], + "sort": [ + "clientTime", + "desc" + ], + "version": 1, + "kibanaSavedObjectMeta": { + "searchSourceJSON": "{\"index\":\"bdce0520-06df-11e9-8c58-f38cfff498f6\",\"highlightAll\":true,\"version\":true,\"query\":{\"language\":\"lucene\",\"query\":\"\"},\"filter\":[{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":\"URL Search\",\"disabled\":false,\"index\":\"bdce0520-06df-11e9-8c58-f38cfff498f6\",\"key\":\"pageUrl\",\"negate\":false,\"params\":{\"query\":\"http://senssoft.incubator.apache.org/\",\"type\":\"phrase\"},\"type\":\"phrase\",\"value\":\"http://sensso [...] + } + } + } +] \ No newline at end of file diff --git a/docker/kibana/6.6.2/config/kibana.yml b/docker/kibana/6.6.2/config/kibana.yml new file mode 100644 index 0000000..cc93fed --- /dev/null +++ b/docker/kibana/6.6.2/config/kibana.yml @@ -0,0 +1,18 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +server.name: kibana +server.host: "0" +elasticsearch.url: http://localhost:9200 diff --git a/docker/logstash/6.6.2/Dockerfile b/docker/logstash/6.6.2/Dockerfile new file mode 100644 index 0000000..c733fa5 --- /dev/null +++ b/docker/logstash/6.6.2/Dockerfile @@ -0,0 +1,31 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You 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. + +FROM docker.elastic.co/logstash/logstash-oss:6.6.2 +MAINTAINER Joshua Poore <poor...@apache.org> + +# Ensure default logstash configuration is removed +RUN rm -f /usr/share/logstash/pipeline/logstash.conf + +# Copy Pipeline files over +ADD pipeline/ /usr/share/logstash/pipeline/ + +# Copy templates over +RUN mkdir /usr/share/logstash/templates +COPY templates/userale.json /usr/share/logstash/templates/userale.json + +EXPOSE 8100 + +CMD ["logstash"] \ No newline at end of file diff --git a/docker/logstash/6.6.2/pipeline/logstash-userale.conf b/docker/logstash/6.6.2/pipeline/logstash-userale.conf new file mode 100644 index 0000000..8b4313f --- /dev/null +++ b/docker/logstash/6.6.2/pipeline/logstash-userale.conf @@ -0,0 +1,52 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You 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. + +input { + http { + codec => "json" + port => 8100 + response_headers => { + "Access-Control-Allow-Origin" => "*" + "Access-Control-Allow-Headers" => "Origin, X-Requested-With, Content-Type, Accept" + } + } +} + +## Add your filters / logstash plugins configuration here +filter { + mutate { + remove_field => [ "message", "@version", "headers"] + } + + grok { + match => [ "useraleVersion", "(?<major_ver>\d+).(?<minor_ver>\d+)(.(?<patch_ver>\d+))?" ] + match => [ "toolVersion", "(?<tool_major_ver>\d+).(?<tool_minor_ver>\d+)(.(?<tool_patch_ver>\d+))?" ] + } +} + +output { + # Output data to Elasticsearch instance + elasticsearch { + hosts => "${ELASTICSEARCH_URL}" + index => "userale" + manage_template => true + template_overwrite => true + template => "/usr/share/logstash/templates/userale.json" + template_name => "userale" + } + + # Debug + stdout { codec => rubydebug } +} diff --git a/docker/logstash/6.6.2/templates/userale.json b/docker/logstash/6.6.2/templates/userale.json new file mode 100644 index 0000000..5aa92d0 --- /dev/null +++ b/docker/logstash/6.6.2/templates/userale.json @@ -0,0 +1,143 @@ +{ + "index_patterns": "userale", + "order": 1, + "settings": + { + "number_of_shards": 1, + "number_of_replicas": 0, + "index.refresh_interval": "5s", + "analysis": { + "analyzer": { + "my_analyzer": { + "tokenizer": "my_tokenizer" + } + }, + "tokenizer": { + "my_tokenizer": { + "type": "path_hierarchy" + } + } + } + }, + "mappings": + { + "doc": + { + "dynamic_templates": [ + { + "strings_as_keywords": { + "match_mapping_type": "string", + "mapping": { + "type": "keyword" + } + } + } + ], + "dynamic": "true", + "properties": + { + "userAction": + { + "type": "boolean" + }, + "clientTime": + { + "type": "date", + "format": "strict_date_optional_time||epoch_millis" + }, + "count": + { + "type": "integer" + }, + "targetChange": + { + "type": "boolean" + }, + "typeChange": + { + "type": "boolean" + }, + "details": + { + "properties": + { + "alt": + { + "type": "boolean" + }, + "clicks": + { + "type": "integer" + }, + "ctrl": + { + "type": "boolean" + }, + "meta": + { + "type": "boolean" + }, + "shift": + { + "type": "boolean" + }, + "window": + { + "type": "boolean" + }, + "x": + { + "type": "integer" + }, + "y": + { + "type": "integer" + }, + "z": + { + "type": "integer" + } + } + }, + "location": + { + "properties": + { + "x": + { + "type": "integer" + }, + "y": + { + "type": "integer" + } + } + }, + "major_ver": + { + "type": "integer" + }, + "minor_ver": + { + "type": "integer" + }, + "patch_ver": + { + "type": "integer" + }, + "tool_major_ver": + { + "type": "integer" + }, + "tool_minor_ver": + { + "type": "integer" + }, + "tool_patch_ver": + { + "type": "integer" + } + } + } + } +} \ No newline at end of file