Adding CLAMP Dashboard 71/37071/2
authorac2550 <ac2550@intl.att.com>
Tue, 20 Mar 2018 11:35:48 +0000 (12:35 +0100)
committerac2550 <ac2550@intl.att.com>
Tue, 20 Mar 2018 12:13:38 +0000 (13:13 +0100)
Change-Id: I0496fa7303dbeaf72b00e4382f71bdb0069abb9a
Issue-ID: CLAMP-77
Signed-off-by: ac2550 <ac2550@intl.att.com>
20 files changed:
extra/docker/elk/.env [new file with mode: 0644]
extra/docker/elk/README.md [new file with mode: 0644]
extra/docker/elk/docker-compose.yml [new file with mode: 0644]
extra/docker/elk/es_backup/default.json [new file with mode: 0644]
extra/docker/elk/logstash-conf/logstash.conf [new file with mode: 0644]
extra/docker/elk/tools/DMaaPServiceMocker/ds_mocker.py [new file with mode: 0755]
extra/docker/elk/tools/DMaaPServiceMocker/event_abated.json [new file with mode: 0644]
extra/docker/elk/tools/DMaaPServiceMocker/event_onset.json [new file with mode: 0644]
extra/docker/elk/tools/DMaaPServiceMocker/notification_active.json [new file with mode: 0644]
extra/docker/elk/tools/DMaaPServiceMocker/notification_final_failed.json [new file with mode: 0644]
extra/docker/elk/tools/DMaaPServiceMocker/notification_final_open.json [new file with mode: 0644]
extra/docker/elk/tools/DMaaPServiceMocker/notification_final_success.json [new file with mode: 0644]
extra/docker/elk/tools/DMaaPServiceMocker/notification_operation.json [new file with mode: 0644]
extra/docker/elk/tools/DMaaPServiceMocker/notification_operation_failure.json [new file with mode: 0644]
extra/docker/elk/tools/DMaaPServiceMocker/notification_operation_success.json [new file with mode: 0644]
extra/docker/elk/tools/DMaaPServiceMocker/notification_rejected_disabled.json [new file with mode: 0644]
extra/docker/elk/tools/DMaaPServiceMocker/notification_rejected_missing.json [new file with mode: 0644]
extra/docker/elk/tools/EsAutoQuery/autoQueryLoop.sh [new file with mode: 0755]
extra/docker/elk/tools/EsAutoQuery/closedLoopAlarmDuration.json [new file with mode: 0644]
extra/docker/elk/tools/EsAutoQuery/timeSince.json [new file with mode: 0644]

diff --git a/extra/docker/elk/.env b/extra/docker/elk/.env
new file mode 100644 (file)
index 0000000..4f1781d
--- /dev/null
@@ -0,0 +1,13 @@
+# docker compose related
+COMPOSE_PROJECT_NAME=clamp_elk
+
+# dmaap configuration for logstash
+dmaap_base_url=http://localhost:3904/
+dmaap_user=user
+dmaap_password=password
+dmaap_consumer_group=CG42
+dmaap_consumer_id=C42
+
+event_topic=EVENT_TOPIC
+notification_topic=NOTIFICATION_TOPIC
+request_topic=REQUEST_TOPIC
diff --git a/extra/docker/elk/README.md b/extra/docker/elk/README.md
new file mode 100644 (file)
index 0000000..04c2439
--- /dev/null
@@ -0,0 +1,32 @@
+CLAMP Dashboard
+===============
+
+ELK stack for CLAMP : Logstash is used to retrieve events and notifications from DMaaP and pushes them into Elasticsearch.
+Kibana is then used to extract statistics.
+
+
+Deployment instructions
+-----------------------
+
+Requirements: docker-compose
+
+1. Update configuration in docker-compose file
+2. `docker-compose up -d logstash kibana`
+3. `docker-compose run default`  # loads the dashboard configuration for Kibana
+
+
+Tools
+-----
+
+The following tools are available in the 'tools/' folder.
+
+
+### EsAutoQuery
+
+Small script ease Elasticsearch /painless/ field development.
+It reads a json file as a query for Elasticsearch, pushes it on the ES server, and display back the answer in a loop, each time the file is modified.
+
+
+### DMaaP Service Mocker
+
+Script that simulates control loop DMaaP services to provide sample data to logstash through DMaaP.
diff --git a/extra/docker/elk/docker-compose.yml b/extra/docker/elk/docker-compose.yml
new file mode 100644 (file)
index 0000000..ded2c6b
--- /dev/null
@@ -0,0 +1,74 @@
+version: '3.1'
+
+services:
+  elasticsearch:
+    image: elasticsearch
+    ports:
+      - 9200:9200
+    networks:
+      es_net:
+        aliases:
+          - elasticsearch
+
+  logstash:
+    image: logstash
+    volumes:
+      - ./logstash-conf:/config-dir
+    command: logstash -f /config-dir/logstash.conf
+    depends_on:
+      - elasticsearch
+    networks:
+      es_net:
+    environment:
+
+  kibana:
+    image: kibana
+    ports:
+      - 5601:5601
+    depends_on:
+      - elasticsearch
+    networks:
+      es_net:
+
+  backup:
+    image: taskrabbit/elasticsearch-dump
+    depends_on:
+      - elasticsearch
+    command:
+      - --input=http://elasticsearch:9200/.kibana
+      - --output=/backups/backup.json
+      - --type=data
+    volumes:
+      - ./es_backup/:/backups/
+    networks:
+      es_net:
+
+  restore:
+    image: taskrabbit/elasticsearch-dump
+    depends_on:
+      - elasticsearch
+    command:
+      - --output=http://elasticsearch:9200/.kibana
+      - --input=/backups/backup.json
+      - --type=data
+    volumes:
+      - ./es_backup/:/backups/
+    networks:
+      es_net:
+
+  default:
+    image: taskrabbit/elasticsearch-dump
+    depends_on:
+      - elasticsearch
+    command:
+      - --output=http://elasticsearch:9200/.kibana
+      - --input=/backups/default.json
+      - --type=data
+    volumes:
+      - ./es_backup/:/backups/
+    networks:
+      es_net:
+
+
+networks:
+  es_net:
diff --git a/extra/docker/elk/es_backup/default.json b/extra/docker/elk/es_backup/default.json
new file mode 100644 (file)
index 0000000..135cad0
--- /dev/null
@@ -0,0 +1,14 @@
+{"_index":".kibana","_type":"visualization","_id":"AWI967sW8kHy-lwNJZrR","_score":1,"_source":{"title":"TotalEventDurationTable","visState":"{\"title\":\"TotalEventDurationTable\",\"type\":\"table\",\"params\":{\"perPage\":10,\"showPartialRows\":false,\"showMeticsAtAllLevels\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\",\"type\":\"table\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"sum\",\"schema\":\"metric\",\"params\":{\"field\":\"eventDuration\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"closedLoopControlName.keyword\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"1\"}}],\"listeners\":{}}","uiStateJSON":"{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}","description":"","savedSearchId":"AWIk9P-qDjJ4k3sPXRcQ","version":1,"kibanaSavedObjectMeta":{"searchSourceJSON":"{\"filter\":[]}"}}}
+{"_index":".kibana","_type":"visualization","_id":"AWI922pp8kHy-lwNJZrP","_score":1,"_source":{"title":"CLEventDurationTables","visState":"{\"title\":\"CLEventDurationTables\",\"type\":\"table\",\"params\":{\"perPage\":10,\"showPartialRows\":false,\"showMeticsAtAllLevels\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\",\"type\":\"table\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"max\",\"schema\":\"metric\",\"params\":{\"field\":\"eventDuration\",\"customLabel\":\"Event Duration\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"split\",\"params\":{\"field\":\"closedLoopControlName.keyword\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"_term\",\"row\":true}},{\"id\":\"3\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"requestID.keyword\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"_term\"}}],\"listeners\":{}}","uiStateJSON":"{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}","description":"","savedSearchId":"AWIk9P-qDjJ4k3sPXRcQ","version":1,"kibanaSavedObjectMeta":{"searchSourceJSON":"{\"filter\":[]}"}}}
+{"_index":".kibana","_type":"visualization","_id":"AWI91Rvl8kHy-lwNJZrN","_score":1,"_source":{"title":"AverageEventDurationTable","visState":"{\"title\":\"AverageEventDurationTable\",\"type\":\"table\",\"params\":{\"perPage\":10,\"showPartialRows\":false,\"showMeticsAtAllLevels\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\",\"type\":\"table\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"avg\",\"schema\":\"metric\",\"params\":{\"field\":\"eventDuration\"}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"closedLoopControlName.keyword\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"1\"}}],\"listeners\":{}}","uiStateJSON":"{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}","description":"","savedSearchId":"AWIk9P-qDjJ4k3sPXRcQ","version":1,"kibanaSavedObjectMeta":{"searchSourceJSON":"{\"filter\":[]}"}}}
+{"_index":".kibana","_type":"index-pattern","_id":"AWIk7j2UDjJ4k3sPXRaY","_score":1,"_source":{"title":"logstash-*","timeFieldName":"closedLoopAlarmStart","notExpandable":true,"fields":"[{\"name\":\"@timestamp\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"@version\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"AAI.cloud-region.identity-url\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"AAI.cloud-region.identity-url.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"AAI.complex.physical-location-id\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"AAI.complex.physical-location-id.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"AAI.generic-vnf.service-id\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"AAI.generic-vnf.service-id.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"AAI.generic-vnf.vnf-name\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"AAI.generic-vnf.vnf-name.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"AAI.tenant.tenant-id\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"AAI.tenant.tenant-id.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"AAI.vserver.in-maint\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"AAI.vserver.in-maint.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"AAI.vserver.is-closed-loop-disabled\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"AAI.vserver.is-closed-loop-disabled.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"AAI.vserver.l-interface(network like '%oam%').l3-interface-ipv6-address-list.l3-inteface-ipv6-address\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"AAI.vserver.l-interface(network like '%oam%').l3-interface-ipv6-address-list.l3-inteface-ipv6-address.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"AAI.vserver.l-interface(nework like '%oam%').l3-interface-ipv4-address-list.l3-inteface-ipv4-address\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"AAI.vserver.l-interface(nework like '%oam%').l3-interface-ipv4-address-list.l3-inteface-ipv4-address.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"AAI.vserver.prov-status\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"AAI.vserver.prov-status.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"AAI.vserver.selflink\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"AAI.vserver.selflink.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"AAI.vserver.vserver-id\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"AAI.vserver.vserver-id.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"AAI.vserver.vserver-name\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"AAI.vserver.vserver-name.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"OPS_CL_timer\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"_id\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"_index\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":false},{\"name\":\"_score\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":false,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"_source\",\"type\":\"_source\",\"count\":0,\"scripted\":false,\"searchable\":false,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"_type\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":false},{\"name\":\"closedLoopAlarmEnd\",\"type\":\"date\",\"count\":1,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"closedLoopAlarmStart\",\"type\":\"date\",\"count\":1,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"closedLoopControlName\",\"type\":\"string\",\"count\":1,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"closedLoopControlName.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"closedLoopEventClient\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"closedLoopEventClient.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"closedLoopEventStatus\",\"type\":\"string\",\"count\":1,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"closedLoopEventStatus.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"from\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"from.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"geoip.ip\",\"type\":\"ip\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"geoip.latitude\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"geoip.location\",\"type\":\"geo_point\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"geoip.longitude\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"history.actor\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"history.actor.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"history.end\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"history.operation\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"history.operation.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"history.start\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"history.subRequestId\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"history.subRequestId.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"history.target\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"history.target.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"notification\",\"type\":\"string\",\"count\":1,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"notification.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"notificationTime\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"notificationTime.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"policyName\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"policyName.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"policyScope\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"policyScope.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"policyVersion\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"policyVersion.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"requestID\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"requestID.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"target\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"target.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"target_type\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"target_type.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"triggerID\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"triggerID.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"triggerSourceName\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"triggerSourceName.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"version\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"version.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"eventDuration\",\"type\":\"number\",\"count\":0,\"scripted\":true,\"script\":\"if (doc.get('closedLoopEventStatus.keyword').value == 'ABATED') {                                                                                            \\n   return doc.get('closedLoopAlarmEnd').value- doc.get('closedLoopAlarmStart').value;                                                                        \\n}                                                                                                                                                            \\nreturn null\",\"lang\":\"painless\",\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":false}]","fieldFormatMap":"{\"eventDuration\":{\"id\":\"duration\",\"params\":{\"inputFormat\":\"milliseconds\"}}}"}}
+{"_index":".kibana","_type":"config","_id":"5.6.7","_score":1,"_source":{"buildNum":15610,"defaultIndex":"AWIk7j2UDjJ4k3sPXRaY"}}
+{"_index":".kibana","_type":"search","_id":"AWIk8yDIDjJ4k3sPXRbu","_score":1,"_source":{"title":"ONSET","description":"","hits":0,"columns":["closedLoopAlarmStart","closedLoopAlarmEnd","closedLoopControlName","closedLoopEventStatus","notification"],"sort":["closedLoopAlarmStart","desc"],"version":1,"kibanaSavedObjectMeta":{"searchSourceJSON":"{\"index\":\"AWIk7j2UDjJ4k3sPXRaY\",\"highlightAll\":true,\"version\":true,\"query\":{\"match_all\":{}},\"filter\":[{\"meta\":{\"index\":\"AWIk7j2UDjJ4k3sPXRaY\",\"negate\":false,\"disabled\":false,\"alias\":null,\"type\":\"phrase\",\"key\":\"closedLoopEventStatus.keyword\",\"value\":\"ONSET\"},\"query\":{\"match\":{\"closedLoopEventStatus.keyword\":{\"query\":\"ONSET\",\"type\":\"phrase\"}}},\"$state\":{\"store\":\"appState\"}}]}"}}}
+{"_index":".kibana","_type":"search","_id":"AWIk9P-qDjJ4k3sPXRcQ","_score":1,"_source":{"title":"ABATED","description":"","hits":0,"columns":["closedLoopAlarmStart","closedLoopAlarmEnd","closedLoopControlName","closedLoopEventStatus","notification"],"sort":["closedLoopAlarmStart","desc"],"version":1,"kibanaSavedObjectMeta":{"searchSourceJSON":"{\"index\":\"AWIk7j2UDjJ4k3sPXRaY\",\"highlightAll\":true,\"version\":true,\"query\":{\"query_string\":{\"query\":\"closedLoopEventStatus: \\\"ABATED\\\"\",\"analyze_wildcard\":true}},\"filter\":[{\"meta\":{\"index\":\"AWIk7j2UDjJ4k3sPXRaY\",\"negate\":false,\"disabled\":false,\"alias\":\"ABATED\",\"type\":\"phrase\",\"key\":\"closedLoopEventStatus.keyword\",\"value\":\"ABATED\"},\"query\":{\"match\":{\"closedLoopEventStatus.keyword\":{\"query\":\"ABATED\",\"type\":\"phrase\"}}},\"$state\":{\"store\":\"appState\"}},{\"meta\":{\"index\":\"AWIk7j2UDjJ4k3sPXRaY\",\"negate\":false,\"disabled\":true,\"alias\":\"ONSET\",\"type\":\"phrase\",\"key\":\"closedLoopEventStatus.keyword\",\"value\":\"ONSET\"},\"query\":{\"match\":{\"closedLoopEventStatus.keyword\":{\"query\":\"ONSET\",\"type\":\"phrase\"}}},\"$state\":{\"store\":\"appState\"}}]}"}}}
+{"_index":".kibana","_type":"visualization","_id":"AWIk-IFsDjJ4k3sPXRdD","_score":1,"_source":{"title":"ClosedLoopActivations","visState":"{\"title\":\"ClosedLoopActivations\",\"type\":\"metric\",\"params\":{\"addTooltip\":true,\"addLegend\":false,\"type\":\"gauge\",\"gauge\":{\"verticalSplit\":false,\"autoExtend\":false,\"percentageMode\":false,\"gaugeType\":\"Metric\",\"gaugeStyle\":\"Full\",\"backStyle\":\"Full\",\"orientation\":\"vertical\",\"colorSchema\":\"Green to Red\",\"gaugeColorMode\":\"None\",\"useRange\":false,\"colorsRange\":[{\"from\":0,\"to\":100}],\"invertColors\":false,\"labels\":{\"show\":true,\"color\":\"black\"},\"scale\":{\"show\":false,\"labels\":false,\"color\":\"#333\",\"width\":2},\"type\":\"simple\",\"style\":{\"fontSize\":60,\"bgColor\":false,\"labelColor\":false,\"subText\":\"\"}}},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"group\",\"params\":{\"field\":\"closedLoopControlName.keyword\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"1\"}}],\"listeners\":{}}","uiStateJSON":"{\"vis\":{\"defaultColors\":{\"0 - 100\":\"rgb(0,104,55)\"},\"legendOpen\":false},\"spy\":{\"mode\":{\"name\":null,\"fill\":false}}}","description":"","version":1,"kibanaSavedObjectMeta":{"searchSourceJSON":"{\"index\":\"AWIk7j2UDjJ4k3sPXRaY\",\"query\":{\"match_all\":{}},\"filter\":[{\"meta\":{\"index\":\"AWIk7j2UDjJ4k3sPXRaY\",\"negate\":false,\"disabled\":false,\"alias\":null,\"type\":\"phrase\",\"key\":\"closedLoopEventStatus.keyword\",\"value\":\"ONSET\"},\"query\":{\"match\":{\"closedLoopEventStatus.keyword\":{\"query\":\"ONSET\",\"type\":\"phrase\"}}},\"$state\":{\"store\":\"appState\"}}]}"}}}
+{"_index":".kibana","_type":"visualization","_id":"AWIk-5O-DjJ4k3sPXRd1","_score":1,"_source":{"title":"ClosedLoopActivationsTable","visState":"{\"title\":\"ClosedLoopActivationsTable\",\"type\":\"table\",\"params\":{\"perPage\":10,\"showPartialRows\":false,\"showMeticsAtAllLevels\":true,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":false,\"totalFunc\":\"sum\",\"type\":\"table\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"closedLoopControlName.keyword\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"1\"}}],\"listeners\":{}}","uiStateJSON":"{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}","description":"","savedSearchId":"AWIk8yDIDjJ4k3sPXRbu","version":1,"kibanaSavedObjectMeta":{"searchSourceJSON":"{\"filter\":[]}"}}}
+{"_index":".kibana","_type":"visualization","_id":"AWIk_VLEDjJ4k3sPXReS","_score":1,"_source":{"title":"SuccessfulRestartsTable","visState":"{\"title\":\"SuccessfulRestartsTable\",\"type\":\"table\",\"params\":{\"perPage\":10,\"showPartialRows\":false,\"showMeticsAtAllLevels\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"showTotal\":true,\"totalFunc\":\"sum\",\"type\":\"table\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"closedLoopControlName.keyword\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"1\"}}],\"listeners\":{}}","uiStateJSON":"{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}","description":"","savedSearchId":"AWIk9P-qDjJ4k3sPXRcQ","version":1,"kibanaSavedObjectMeta":{"searchSourceJSON":"{\"filter\":[]}"}}}
+{"_index":".kibana","_type":"search","_id":"AWIlAjTaDjJ4k3sPXRe1","_score":1,"_source":{"title":"FAILURE NOTIFICATION","description":"","hits":0,"columns":["closedLoopAlarmStart","closedLoopAlarmEnd","closedLoopControlName","closedLoopEventStatus","notification"],"sort":["closedLoopAlarmStart","desc"],"version":1,"kibanaSavedObjectMeta":{"searchSourceJSON":"{\"index\":\"AWIk7j2UDjJ4k3sPXRaY\",\"highlightAll\":true,\"version\":true,\"query\":{\"match_all\":{}},\"filter\":[{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":\"ABATED\",\"disabled\":true,\"index\":\"AWIk7j2UDjJ4k3sPXRaY\",\"key\":\"closedLoopEventStatus.keyword\",\"negate\":false,\"type\":\"phrase\",\"value\":\"ABATED\"},\"query\":{\"match\":{\"closedLoopEventStatus.keyword\":{\"query\":\"ABATED\",\"type\":\"phrase\"}}}},{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":\"ONSET\",\"disabled\":true,\"index\":\"AWIk7j2UDjJ4k3sPXRaY\",\"key\":\"closedLoopEventStatus.keyword\",\"negate\":false,\"type\":\"phrase\",\"value\":\"ONSET\"},\"query\":{\"match\":{\"closedLoopEventStatus.keyword\":{\"query\":\"ONSET\",\"type\":\"phrase\"}}}},{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":\"FAILURE NOTIFICATION\",\"disabled\":false,\"index\":\"AWIk7j2UDjJ4k3sPXRaY\",\"key\":\"notification.keyword\",\"negate\":false,\"type\":\"phrase\",\"value\":\"FINAL: FAILURE\"},\"query\":{\"match\":{\"notification.keyword\":{\"query\":\"FINAL: FAILURE\",\"type\":\"phrase\"}}}}]}"}}}
+{"_index":".kibana","_type":"visualization","_id":"AWIlBLT7DjJ4k3sPXRe7","_score":1,"_source":{"title":"FailedRestartTable","visState":"{\"title\":\"FailedRestartTable\",\"type\":\"table\",\"params\":{\"perPage\":10,\"showMeticsAtAllLevels\":false,\"showPartialRows\":false,\"showTotal\":false,\"sort\":{\"columnIndex\":null,\"direction\":null},\"totalFunc\":\"sum\",\"type\":\"table\"},\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"schema\":\"metric\",\"params\":{}},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"schema\":\"bucket\",\"params\":{\"field\":\"closedLoopControlName.keyword\",\"size\":5,\"order\":\"desc\",\"orderBy\":\"1\"}}],\"listeners\":{}}","uiStateJSON":"{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}","description":"","savedSearchId":"AWIlAjTaDjJ4k3sPXRe1","version":1,"kibanaSavedObjectMeta":{"searchSourceJSON":"{\"filter\":[]}"}}}
+{"_index":".kibana","_type":"index-pattern","_id":"AWIqPamARYxwAnBQhbeU","_score":1,"_source":{"title":"logstash-*","timeFieldName":"@timestamp","notExpandable":true,"fields":"[{\"name\":\"@timestamp\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"@version\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"AAI.cloud-region.identity-url\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"AAI.cloud-region.identity-url.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"AAI.complex.physical-location-id\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"AAI.complex.physical-location-id.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"AAI.generic-vnf.service-id\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"AAI.generic-vnf.service-id.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"AAI.generic-vnf.vnf-name\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"AAI.generic-vnf.vnf-name.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"AAI.tenant.tenant-id\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"AAI.tenant.tenant-id.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"AAI.vserver.in-maint\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"AAI.vserver.in-maint.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"AAI.vserver.is-closed-loop-disabled\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"AAI.vserver.is-closed-loop-disabled.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"AAI.vserver.l-interface(network like '%oam%').l3-interface-ipv6-address-list.l3-inteface-ipv6-address\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"AAI.vserver.l-interface(network like '%oam%').l3-interface-ipv6-address-list.l3-inteface-ipv6-address.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"AAI.vserver.l-interface(nework like '%oam%').l3-interface-ipv4-address-list.l3-inteface-ipv4-address\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"AAI.vserver.l-interface(nework like '%oam%').l3-interface-ipv4-address-list.l3-inteface-ipv4-address.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"AAI.vserver.prov-status\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"AAI.vserver.prov-status.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"AAI.vserver.selflink\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"AAI.vserver.selflink.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"AAI.vserver.vserver-id\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"AAI.vserver.vserver-id.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"AAI.vserver.vserver-name\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"AAI.vserver.vserver-name.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"OPS_CL_timer\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"_id\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"_index\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":false},{\"name\":\"_score\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":false,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"_source\",\"type\":\"_source\",\"count\":0,\"scripted\":false,\"searchable\":false,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"_type\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":false},{\"name\":\"closedLoopAlarmEnd\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"closedLoopAlarmStart\",\"type\":\"date\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"closedLoopControlName\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"closedLoopControlName.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"closedLoopEventClient\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"closedLoopEventClient.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"closedLoopEventStatus\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"closedLoopEventStatus.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"from\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"from.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"geoip.ip\",\"type\":\"ip\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"geoip.latitude\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"geoip.location\",\"type\":\"geo_point\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"geoip.longitude\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"history.actor\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"history.actor.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"history.end\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"history.message\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"history.message.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"history.operation\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"history.operation.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"history.outcome\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"history.outcome.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"history.start\",\"type\":\"number\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"history.subRequestId\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"history.subRequestId.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"history.target\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"history.target.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"notification\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"notification.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"notificationTime\",\"type\":\"date\",\"count\":1,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"policyName\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"policyName.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"policyScope\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"policyScope.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"policyVersion\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"policyVersion.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"requestID\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"requestID.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"target\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"target.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"target_type\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"target_type.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"triggerID\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"triggerID.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"triggerSourceName\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"triggerSourceName.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"version\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":false,\"readFromDocValues\":false},{\"name\":\"version.keyword\",\"type\":\"string\",\"count\":0,\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":true},{\"name\":\"When\",\"type\":\"number\",\"count\":1,\"scripted\":true,\"script\":\"long now = System.currentTimeMillis();                                                                                                                       \\nif (doc.get('closedLoopEventStatus.keyword').value == 'ABATED') {                                                                                            \\n   return now - doc.get('closedLoopAlarmEnd').value;                                                                                                         \\n}                                                                                                                                                            \\nif (doc.get('closedLoopEventStatus.keyword').value == 'ONSET') {                                                                                             \\n   return now - doc.get('closedLoopAlarmStart').value;                                                                                                       \\n}                                                                                                                                                            \\nif (doc.containsKey('notification.keyword')) {                                                                                                               \\n   return now - doc.get('notificationTime').value;                                                                                                           \\n}                                                                                                                                                            \\n                                                                                                                                                             \\nreturn null\",\"lang\":\"painless\",\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":false}]","fieldFormatMap":"{\"When\":{\"id\":\"duration\",\"params\":{\"inputFormat\":\"milliseconds\"}}}"}}
+{"_index":".kibana","_type":"dashboard","_id":"AWI-9KyytmDBG_mksMZL","_score":1,"_source":{"title":"CLAMP Dashboard","hits":0,"description":"","panelsJSON":"[{\"size_x\":4,\"size_y\":3,\"panelIndex\":1,\"type\":\"visualization\",\"id\":\"AWIk_VLEDjJ4k3sPXReS\",\"col\":5,\"row\":1},{\"size_x\":4,\"size_y\":3,\"panelIndex\":2,\"type\":\"visualization\",\"id\":\"AWIlBLT7DjJ4k3sPXRe7\",\"col\":9,\"row\":1},{\"size_x\":6,\"size_y\":3,\"panelIndex\":3,\"type\":\"visualization\",\"id\":\"AWI967sW8kHy-lwNJZrR\",\"col\":1,\"row\":4},{\"size_x\":6,\"size_y\":3,\"panelIndex\":4,\"type\":\"visualization\",\"id\":\"AWI91Rvl8kHy-lwNJZrN\",\"col\":7,\"row\":4},{\"size_x\":4,\"size_y\":3,\"panelIndex\":5,\"type\":\"visualization\",\"id\":\"AWIk-IFsDjJ4k3sPXRdD\",\"col\":1,\"row\":1}]","optionsJSON":"{\"darkTheme\":false}","uiStateJSON":"{\"P-1\":{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}},\"P-2\":{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}},\"P-3\":{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}},\"P-4\":{\"vis\":{\"params\":{\"sort\":{\"columnIndex\":null,\"direction\":null}}}}}","version":1,"timeRestore":false,"kibanaSavedObjectMeta":{"searchSourceJSON":"{\"filter\":[{\"query\":{\"match_all\":{}}}],\"highlightAll\":true,\"version\":true}"}}}
diff --git a/extra/docker/elk/logstash-conf/logstash.conf b/extra/docker/elk/logstash-conf/logstash.conf
new file mode 100644 (file)
index 0000000..2b5a24e
--- /dev/null
@@ -0,0 +1,99 @@
+input {
+  http_poller {
+        urls => {
+            event_queue => {
+                method => get
+                url => "${dmaap_base_url}/events/${event_topic}/${dmaap_consumer_group}/${dmaap_consumer_id}?timeout=15000"
+                headers => {
+                    Accept => "application/json"
+                }
+                add_field => { "topic" => "${event_topic}" }
+            }
+            notification_queue => {
+                method => get
+                url => "${dmaap_base_url}/events/${notification_topic}/${dmaap_consumer_group}/${dmaap_consumer_id}?timeout=15000"
+                headers => {
+                    Accept => "application/json"
+                }
+                add_field => { "topic" => "${notification_topic}" }
+            }
+            request_queue => {
+                method => get
+                url => "${dmaap_base_url}/events/${request_topic}/${dmaap_consumer_group}/${dmaap_consumer_id}?timeout=15000"
+                headers => {
+                    Accept => "application/json"
+                }
+                add_field => { "topic" => "${request_topic}" }
+            }
+        }
+        socket_timeout => 30
+        request_timeout => 30
+        interval => 15
+        codec => "plain"
+  }
+}
+
+filter {
+    # avoid noise if no entry in the list
+    if [message] == "[]" {
+       drop { }
+    }
+
+    # parse json, split  the list into multiple events, and parse each event
+    json {
+         source => "[message]"
+         target => "message"
+    }
+    split {
+          field => "message"
+    }
+    json {
+         source => "message"
+    }
+    mutate { remove_field => [ "message" ] }
+    # express timestamps in milliseconds instead of microseconds
+    ruby {
+        code => "event.set('closedLoopAlarmStart', Integer(event.get('closedLoopAlarmStart')))"
+    }
+    date {
+        match => [ "closedLoopAlarmStart", UNIX_MS ]
+        target => "closedLoopAlarmStart"
+    }
+
+    if [closedLoopAlarmEnd] {
+        ruby {
+            code => "event.set('closedLoopAlarmEnd', Integer(event.get('closedLoopAlarmEnd')))"
+        }
+        date {
+            match => [ "closedLoopAlarmEnd", UNIX_MS ]
+            target => "closedLoopAlarmEnd"
+        }
+
+    }
+    #"yyyy-MM-dd HH:mm:ss"
+    if [notificationTime] {
+       mutate {
+              gsub => [
+                   "notificationTime", " ", "T"
+              ]
+       }
+       date {
+            match => [ "notificationTime", ISO8601 ]
+            target => "notificationTime"
+       }
+    }
+}
+output {
+    stdout {
+        codec => rubydebug
+    }
+
+    elasticsearch {
+        codec => "json"
+        hosts => [elasticsearch]
+        index => "logstash-%{+YYYY.MM.DD}" # creates daily indexes
+        doc_as_upsert => true
+
+    }
+
+}
diff --git a/extra/docker/elk/tools/DMaaPServiceMocker/ds_mocker.py b/extra/docker/elk/tools/DMaaPServiceMocker/ds_mocker.py
new file mode 100755 (executable)
index 0000000..9891b8e
--- /dev/null
@@ -0,0 +1,218 @@
+#!/usr/bin/env python3
+import os
+import json
+import copy
+import random
+import requests
+import uuid
+import time
+from datetime import datetime
+
+def luck(n=2):
+    """ gives 1 chance out of n (default: 2) to return True """
+    assert n > 1
+    return bool(random.randint(0, n-1))
+def now_dmaap_timestamp():
+    return str(datetime.now().timestamp()).replace(".","")[:13]
+def now_notification_time():
+    return datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f+00:00")
+
+CONTROL_LOOP_NAMES = [
+    'ClosedLoop-vUSP-SIG-d925ed73-8231-4d02-9545-db4e101f88f8',
+    'ClosedLoop-vUSP-SIG-37b1c91e-fd6b-4abd-af15-771902d5fdb1',
+    'ClosedLoop-vUSP-SIG-c2597657-7113-4efb-a1f9-397a7a24c3e1',
+    'ClosedLoop-vUSP-SIG-a11318ba-4c61-46b8-a9da-bd40bec11d45',
+    'ClosedLoop-vUSP-SIG-5321c558-2254-4efb-ac24-99dd54edc94f',
+]
+
+TEMPLATES = {
+    'event_abated'                   :'event_abated.json',
+    'event_onset'                    :'event_onset.json',
+    'notification_active'            :'notification_active.json',
+    'notification_final_failed'      :'notification_final_failed.json',
+    'notification_final_open'        :'notification_final_open.json',
+    'notification_final_success'     :'notification_final_success.json',
+    'notification_operation_failure' :'notification_operation_failure.json',
+    'notification_operation'         :'notification_operation.json',
+    'notification_operation_success' :'notification_operation_success.json',
+    'notification_rejected_disabled' :'notification_rejected_disabled.json',
+    'notification_rejected_missing'  :'notification_rejected_missing.json',
+}
+
+for key in TEMPLATES:
+    with open(TEMPLATES[key]) as f:
+        content = f.read()
+    TEMPLATES[key] = json.loads(content)
+
+
+class DMaaPMessage(dict):
+
+    dmaap_host_url = "http://dmaap.host.url:9200/"
+    dmaap_username = None
+    dmaap_password = None
+
+    @classmethod
+    def from_template(cls, tmpl, **kwargs):
+        obj = cls()
+        obj.update(copy.deepcopy(TEMPLATES[tmpl]))
+        for keys,value in kwargs.items():
+            current_node = obj
+            keys = keys.split(".")
+            key = keys[0]
+            for i in range(len(keys) - 1):
+                current_node = current_node[keys[i]]
+                key = keys[i]
+            current_node[key] = value
+        return obj
+
+    def publish(self, topic):
+        url = "%s/events/%s" % (self.dmaap_host_url, topic)
+        auth = None
+        if self.dmaap_username and self.dmaap_password:
+            auth = (self.dmaap_username, self.dmaap_password)
+        response = requests.post(url, data=json.dumps(self), auth=auth)
+        return response.status_code
+
+class Event(DMaaPMessage):
+
+    topic = "DCAE-CL-EVENT"
+
+    @staticmethod
+    def abated(**kwargs):
+        return Event.from_template('event_abated', **kwargs)
+
+    @staticmethod
+    def onset(**kwargs):
+        return Event.from_template('event_onset', **kwargs)
+
+    def publish(self):
+        return super().publish(self.topic)
+
+
+class Notification(DMaaPMessage):
+
+    topic = "POLICY-CL-MGT"
+
+    @classmethod
+    def from_template(cls, tmpl, **kwargs):
+        kwargs['notificationTime'] = now_notification_time()
+        return super().from_template(tmpl, **kwargs)
+
+    @staticmethod
+    def active(**kwargs):
+        return Notification.from_template('notification_active', **kwargs)
+
+    @staticmethod
+    def final(**kwargs):
+        class FinalNotification(Notification):
+            @staticmethod
+            def success(**kwargs):
+                return FinalNotification.from_template('notification_final_success', **kwargs)
+            @staticmethod
+            def failed(**kwargs):
+                return FinalNotification.from_template('notification_final_failed', **kwargs)
+            @staticmethod
+            def open(**kwargs):
+                return FinalNotification.from_template('notification_final_open', **kwargs)
+        return FinalNotification
+
+    @staticmethod
+    def operation(**kwargs):
+        class OperationNotification(Notification):
+            @staticmethod
+            def success(**kwargs):
+                return OperationNotification.from_template('notification_operation_success', **kwargs)
+            @staticmethod
+            def failure(**kwargs):
+                return OperationNotification.from_template('notification_operation_failure', **kwargs)
+        return OperationNotification.from_template('notification_operation', **kwargs)
+
+    @staticmethod
+    def rejected(**kwargs):
+        class RejectedNotification(Notification):
+            @staticmethod
+            def disabled(**kwargs):
+                return RejectedNotification.from_template('notification_rejected_disabled', **kwargs)
+            @staticmethod
+            def missing_fields(**kwargs):
+                return RejectedNotification.from_template('notification_rejected_missing', **kwargs)
+
+        return RejectedNotification
+
+    def publish(self):
+        return super().publish(self.topic)
+
+
+
+class CLStatus(object):
+
+    def __init__(self, dmaap_url=None,
+                 missing=None, disabled=None, op_failure=None):
+        self._stopped = False
+        def maybe(thing):
+            if thing is None:
+                thing = not luck(10)
+            return thing
+        self._missing = maybe(missing)
+        self._disabled = maybe(disabled)
+        self._op_failure = maybe(op_failure)
+        self._config = dict(
+            requestID=str(uuid.uuid4()),
+            closedLoopControlName=CONTROL_LOOP_NAMES[random.randint(0, len(CONTROL_LOOP_NAMES) - 1)]
+        )
+
+    def __iter__(self):
+        return next(self)
+
+    def __next__(self):
+        if self._stopped:
+            raise StopIteration()
+        config = self._config
+        config.update(dict(closedLoopAlarmStart=now_dmaap_timestamp()))
+        yield Event.onset(**config)
+        if self._missing:
+            self._stopped = True
+            yield Notification.rejected().missing_fields(**config)
+            raise StopIteration()
+        elif self._disabled:
+            self._stopped = True
+            yield Notification.rejected().disabled(**config)
+            raise StopIteration()
+
+        yield Notification.active(**config)
+        yield Notification.operation(**config)
+
+        config['closedLoopAlarmEnd'] = now_dmaap_timestamp()
+        if self._op_failure:
+            yield Notification.operation().failure(**config)
+            self._stopped = True
+            yield Notification.final().failed(**config)
+        else:
+            yield Notification.operation().success(**config)
+            yield Event.abated(**config)
+            self._stopped = True
+            yield Notification.final().success(**config)
+        raise StopIteration()
+
+DMaaPMessage.dmaap_host_url = "http://uebsb93kcdc.it.att.com:3904"
+Event.topic = "APPC-TEST-AMDOCS1-1607-E2E"
+Notification.topic = "APPC-TEST-AMDOCS1-1607-IST"
+# Request.topic = "APPC-TEST-AMDOCS1-1607-RY303T"
+
+test_datas = [CLStatus(missing=False, disabled=False, op_failure=False) for i in range(45)]  \
+             + [CLStatus(missing=True, disabled=False, op_failure=False) for i in range(5)]  \
+             + [CLStatus(missing=False, disabled=True, op_failure=False) for i in range(6)]  \
+             + [CLStatus(missing=False, disabled=False, op_failure=True) for i in range(7)]
+random.shuffle(test_datas)
+random.shuffle(test_datas)
+
+for current_i, status in enumerate(test_datas):
+    time.sleep(random.randint(0,6))
+    for s in status:
+        # print(s)
+        status_code = s.publish()
+        if status_code != 200:
+            print("Error when publishing : status_code={}".format(status_code))
+            exit(1)
+        time.sleep(random.randint(0,3))
+    print("%03d,missing:%5s,disabled:%5s,op_failure:%5s - %s" % (current_i, status._missing, status._disabled, status._op_failure, status._config))
diff --git a/extra/docker/elk/tools/DMaaPServiceMocker/event_abated.json b/extra/docker/elk/tools/DMaaPServiceMocker/event_abated.json
new file mode 100644 (file)
index 0000000..ae0d4b7
--- /dev/null
@@ -0,0 +1,27 @@
+{
+  "AAI": {
+    "cloud-region.identity-url": "http://1.2.3.4:5000/v2.0",
+    "complex.physical-location-id": "SNYSCA12",
+    "generic-vnf.service-id": "eb477a13-f380-401e-b2bd-f2d444c63e54",
+    "generic-vnf.vnf-name": "gupi1337p",
+    "tenant.tenant-id": "8f7b9a8a-8607-4a01-a5ef-0b26f569dcbb",
+    "vserver.is-closed-loop-disabled": "false",
+    "vserver.prov-status": "PROV",
+    "vserver.vserver-selflink": "https//2.3.4.5:1234/d5a992de-8a70-4d7d-b382-2bc6eea52317",
+    "vserver.vserver-id": "08f6c1f9-99e7-49f3-a662-c62b9f200d79",
+    "vserver.vserver-name": "gupi1337pm004"
+  },
+  "closedLoopAlarmEnd": 1478710227625,
+  "closedLoopAlarmStart": 1478709727496,
+  "closedLoopControlName": "ClosedLoop-3ffd062d-7589-43b2-865a-139b64e2d402",
+  "closedLoopEventClient": "DCAE_INSTANCE_ID.dcae-tca",
+  "closedLoopEventStatus": "ABATED",
+  "from": "DCAE",
+  "policyName": "vFirewall",
+  "policyScope": "resource=SampleResource,service=SampleService,type=SampleType,closedLoopControlName=SampleClosedLoop",
+  "policyVersion": "v0.0.1",
+  "requestID": "f889f60c-a715-48c0-801e-26428f6176b9",
+  "target": "vserver.vserver-name",
+  "target_type": "VM",
+  "version": "1.0.2"
+}
diff --git a/extra/docker/elk/tools/DMaaPServiceMocker/event_onset.json b/extra/docker/elk/tools/DMaaPServiceMocker/event_onset.json
new file mode 100644 (file)
index 0000000..223f096
--- /dev/null
@@ -0,0 +1,26 @@
+{
+  "AAI": {
+    "cloud-region.identity-url": "http://1.2.3.4:5000/v2.0",
+    "complex.physical-location-id": "SNYSCA12",
+    "generic-vnf.service-id": "eb477a13-f380-401e-b2bd-f2d444c63e54",
+    "generic-vnf.vnf-name": "gupi1337p",
+    "tenant.tenant-id": "8f7b9a8a-8607-4a01-a5ef-0b26f569dcbb",
+    "vserver.is-closed-loop-disabled": "false",
+    "vserver.prov-status": "PROV",
+    "vserver.vserver-selflink": "https//2.3.4.5:1234/d5a992de-8a70-4d7d-b382-2bc6eea52317",
+    "vserver.vserver-id": "08f6c1f9-99e7-49f3-a662-c62b9f200d79",
+    "vserver.vserver-name": "gupi1337pm004"
+  },
+  "closedLoopAlarmStart": 1478709385444,
+  "closedLoopControlName": "ClosedLoop-3ffd062d-7589-43b2-865a-139b64e2d402",
+  "closedLoopEventClient": "DCAE_INSTANCE_ID.dcae-tca",
+  "closedLoopEventStatus": "ONSET",
+  "from": "DCAE",
+  "policyName": "vFirewall",
+  "policyScope": "resource=SampleResource,service=SampleService,type=SampleType,closedLoopControlName=SampleClosedLoop",
+  "policyVersion": "v0.0.1",
+  "requestID": "88e951ad-a07c-4748-9cef-34f32851a527",
+  "target": "vserver.vserver-name",
+  "target_type": "VM",
+  "version": "1.0.2"
+}
diff --git a/extra/docker/elk/tools/DMaaPServiceMocker/notification_active.json b/extra/docker/elk/tools/DMaaPServiceMocker/notification_active.json
new file mode 100644 (file)
index 0000000..341a249
--- /dev/null
@@ -0,0 +1,28 @@
+{
+  "AAI": {
+    "cloud-region.identity-url": "http://1.2.3.4:5000/v2.0",
+    "complex.physical-location-id": "SNYSCA12",
+    "generic-vnf.service-id": "eb477a13-f380-401e-b2bd-f2d444c63e54",
+    "generic-vnf.vnf-name": "gupi1337p",
+    "tenant.tenant-id": "8f7b9a8a-8607-4a01-a5ef-0b26f569dcbb",
+    "vserver.is-closed-loop-disabled": "false",
+    "vserver.prov-status": "PROV",
+    "vserver.vserver-selflink": "https//2.3.4.5:1234/d5a992de-8a70-4d7d-b382-2bc6eea52317",
+    "vserver.vserver-id": "08f6c1f9-99e7-49f3-a662-c62b9f200d79",
+    "vserver.vserver-name": "gupi1337pm004"
+  },
+  "OPS_CL_timer": 600,
+  "closedLoopAlarmStart": 1478709989621,
+  "closedLoopControlName": "ClosedLoop-3ffd062d-7589-43b2-865a-139b64e2d402",
+  "closedLoopEventClient": "DCAE_INSTANCE_ID.dcae-tca",
+  "from": "Policy",
+  "notification": "ACTIVE",
+  "notificationTime": "2016-11-09 16:46:29.721000+00:00",
+  "policyName": "ClosedLoop.vUSP",
+  "policyScope": "resource=SampleResource,service=SampleService,type=SampleType,closedLoopControlName=SampleClosedLoop",
+  "policyVersion": "v0.0.1",
+  "requestID": "f889f60c-a715-48c0-801e-26428f6176b9",
+  "target": "vserver.vserver-name",
+  "target_type": "VM",
+  "version": "1.0.2"
+}
diff --git a/extra/docker/elk/tools/DMaaPServiceMocker/notification_final_failed.json b/extra/docker/elk/tools/DMaaPServiceMocker/notification_final_failed.json
new file mode 100644 (file)
index 0000000..4891c7e
--- /dev/null
@@ -0,0 +1,42 @@
+{
+  "AAI": {
+    "cloud-region.identity-url": "http://1.2.3.4:5000/v2.0",
+    "complex.physical-location-id": "SNYSCA12",
+    "generic-vnf.service-id": "eb477a13-f380-401e-b2bd-f2d444c63e54",
+    "generic-vnf.vnf-name": "gupi1337p",
+    "tenant.tenant-id": "8f7b9a8a-8607-4a01-a5ef-0b26f569dcbb",
+    "vserver.is-closed-loop-disabled": "false",
+    "vserver.prov-status": "PROV",
+    "vserver.vserver-selflink": "https//2.3.4.5:1234/d5a992de-8a70-4d7d-b382-2bc6eea52317",
+    "vserver.vserver-id": "08f6c1f9-99e7-49f3-a662-c62b9f200d79",
+    "vserver.vserver-name": "gupi1337pm004"
+  },
+  "OPS_CL_timer": 600,
+  "closedLoopAlarmEnd": 1478710489739,
+  "closedLoopAlarmStart": 1478709989621,
+  "closedLoopControlName": "ClosedLoop-3ffd062d-7589-43b2-865a-139b64e2d402",
+  "closedLoopEventClient": "DCAE_INSTANCE_ID.dcae-tca",
+  "from": "Policy",
+  "history": [
+    {
+      "actor": "APPC",
+      "end": 1478637014434,
+      "message": "<APPC ERROR code/description>",
+      "operation": "RESTART",
+      "outcome": "FAILED",
+      "start": 1478637014430,
+      "subRequestId": "1",
+      "target": "vserver.vserver-name"
+    }
+  ],
+  "message": "actor=APPC,operation=RESTART,target=vserver.vserver-name,subRequestId=1,outcome=FAILED",
+  "notification": "FINAL: FAILURE",
+  "notificationTime": "2016-11-08 15:30:14.434000-05:00",
+  "policyName": "ClosedLoop.vUSP",
+  "policyScope": "resource=SampleResource,service=SampleService,type=SampleType,closedLoopControlName=SampleClosedLoop",
+  "policyVersion": "v0.0.1",
+  "requestID": "f889f60c-a715-48c0-801e-26428f6176b9",
+  "target": "vserver.vserver-name",
+  "target_type": "VM",
+  "version": "1.0.2"
+}
diff --git a/extra/docker/elk/tools/DMaaPServiceMocker/notification_final_open.json b/extra/docker/elk/tools/DMaaPServiceMocker/notification_final_open.json
new file mode 100644 (file)
index 0000000..da9e6e1
--- /dev/null
@@ -0,0 +1,28 @@
+{
+  "AAI": {
+    "cloud-region.identity-url": "http://1.2.3.4:5000/v2.0",
+    "complex.physical-location-id": "SNYSCA12",
+    "generic-vnf.service-id": "eb477a13-f380-401e-b2bd-f2d444c63e54",
+    "generic-vnf.vnf-name": "gupi1337p",
+    "tenant.tenant-id": "8f7b9a8a-8607-4a01-a5ef-0b26f569dcbb",
+    "vserver.is-closed-loop-disabled": "false",
+    "vserver.prov-status": "PROV",
+    "vserver.vserver-selflink": "https//2.3.4.5:1234/d5a992de-8a70-4d7d-b382-2bc6eea52317",
+    "vserver.vserver-id": "08f6c1f9-99e7-49f3-a662-c62b9f200d79",
+    "vserver.vserver-name": "gupi1337pm004"
+  },
+  "closedLoopAlarmEnd": 1478710489739,
+  "closedLoopAlarmStart": 1478709989621,
+  "closedLoopControlName": "ClosedLoop-3ffd062d-7589-43b2-865a-139b64e2d402",
+  "closedLoopEventClient": "DCAE_INSTANCE_ID.dcae-tca",
+  "from": "Policy",
+  "notification": "FINAL: OPEN",
+  "notificationTime": "2016-11-08 15:30:14.434000-05:00",
+  "policyName": "ClosedLoop.vUSP",
+  "policyScope": "resource=SampleResource,service=SampleService,type=SampleType,closedLoopControlName=SampleClosedLoop",
+  "policyVersion": "v0.0.1",
+  "requestID": "f889f60c-a715-48c0-801e-26428f6176b9",
+  "target": "vserver.vserver-name",
+  "target_type": "VM",
+  "version": "1.0.2"
+}
diff --git a/extra/docker/elk/tools/DMaaPServiceMocker/notification_final_success.json b/extra/docker/elk/tools/DMaaPServiceMocker/notification_final_success.json
new file mode 100644 (file)
index 0000000..3d027eb
--- /dev/null
@@ -0,0 +1,40 @@
+{
+  "AAI": {
+    "cloud-region.identity-url": "http://1.2.3.4:5000/v2.0",
+    "complex.physical-location-id": "SNYSCA12",
+    "generic-vnf.service-id": "eb477a13-f380-401e-b2bd-f2d444c63e54",
+    "generic-vnf.vnf-name": "gupi1337p",
+    "tenant.tenant-id": "8f7b9a8a-8607-4a01-a5ef-0b26f569dcbb",
+    "vserver.is-closed-loop-disabled": "false",
+    "vserver.prov-status": "PROV",
+    "vserver.vserver-selflink": "https//2.3.4.5:1234/d5a992de-8a70-4d7d-b382-2bc6eea52317",
+    "vserver.vserver-id": "08f6c1f9-99e7-49f3-a662-c62b9f200d79",
+    "vserver.vserver-name": "gupi1337pm004"
+  },
+  "OPS_CL_timer": 600,
+  "closedLoopAlarmEnd": 1478710489739,
+  "closedLoopAlarmStart": 1478709989621,
+  "closedLoopControlName": "ClosedLoop-3ffd062d-7589-43b2-865a-139b64e2d402",
+  "closedLoopEventClient": "DCAE_INSTANCE_ID.dcae-tca",
+  "from": "Policy",
+  "history": [
+    {
+      "actor": "APPC",
+      "end": 1478709989738,
+      "operation": "RESTART",
+      "start": 1478709989734,
+      "subRequestId": "1",
+      "target": "vserver.vserver-name"
+    }
+  ],
+  "message": "actor=APPC,operation=RESTART,target=vserver.vserver-name,subRequestId=1",
+  "notification": "FINAL: SUCCESS",
+  "notificationTime": "2016-11-09 11:46:29.738000-05:00",
+  "policyName": "ClosedLoop.vUSP",
+  "policyScope": "resource=SampleResource,service=SampleService,type=SampleType,closedLoopControlName=SampleClosedLoop",
+  "policyVersion": "v0.0.1",
+  "requestID": "f889f60c-a715-48c0-801e-26428f6176b9",
+  "target": "vserver.vserver-name",
+  "target_type": "VM",
+  "version": "1.0.2"
+}
diff --git a/extra/docker/elk/tools/DMaaPServiceMocker/notification_operation.json b/extra/docker/elk/tools/DMaaPServiceMocker/notification_operation.json
new file mode 100644 (file)
index 0000000..341a249
--- /dev/null
@@ -0,0 +1,28 @@
+{
+  "AAI": {
+    "cloud-region.identity-url": "http://1.2.3.4:5000/v2.0",
+    "complex.physical-location-id": "SNYSCA12",
+    "generic-vnf.service-id": "eb477a13-f380-401e-b2bd-f2d444c63e54",
+    "generic-vnf.vnf-name": "gupi1337p",
+    "tenant.tenant-id": "8f7b9a8a-8607-4a01-a5ef-0b26f569dcbb",
+    "vserver.is-closed-loop-disabled": "false",
+    "vserver.prov-status": "PROV",
+    "vserver.vserver-selflink": "https//2.3.4.5:1234/d5a992de-8a70-4d7d-b382-2bc6eea52317",
+    "vserver.vserver-id": "08f6c1f9-99e7-49f3-a662-c62b9f200d79",
+    "vserver.vserver-name": "gupi1337pm004"
+  },
+  "OPS_CL_timer": 600,
+  "closedLoopAlarmStart": 1478709989621,
+  "closedLoopControlName": "ClosedLoop-3ffd062d-7589-43b2-865a-139b64e2d402",
+  "closedLoopEventClient": "DCAE_INSTANCE_ID.dcae-tca",
+  "from": "Policy",
+  "notification": "ACTIVE",
+  "notificationTime": "2016-11-09 16:46:29.721000+00:00",
+  "policyName": "ClosedLoop.vUSP",
+  "policyScope": "resource=SampleResource,service=SampleService,type=SampleType,closedLoopControlName=SampleClosedLoop",
+  "policyVersion": "v0.0.1",
+  "requestID": "f889f60c-a715-48c0-801e-26428f6176b9",
+  "target": "vserver.vserver-name",
+  "target_type": "VM",
+  "version": "1.0.2"
+}
diff --git a/extra/docker/elk/tools/DMaaPServiceMocker/notification_operation_failure.json b/extra/docker/elk/tools/DMaaPServiceMocker/notification_operation_failure.json
new file mode 100644 (file)
index 0000000..5dbe33c
--- /dev/null
@@ -0,0 +1,29 @@
+{
+  "AAI": {
+    "cloud-region.identity-url": "http://1.2.3.4:5000/v2.0",
+    "complex.physical-location-id": "SNYSCA12",
+    "generic-vnf.service-id": "eb477a13-f380-401e-b2bd-f2d444c63e54",
+    "generic-vnf.vnf-name": "gupi1337p",
+    "tenant.tenant-id": "8f7b9a8a-8607-4a01-a5ef-0b26f569dcbb",
+    "vserver.is-closed-loop-disabled": "false",
+    "vserver.prov-status": "PROV",
+    "vserver.vserver-selflink": "https//2.3.4.5:1234/d5a992de-8a70-4d7d-b382-2bc6eea52317",
+    "vserver.vserver-id": "08f6c1f9-99e7-49f3-a662-c62b9f200d79",
+    "vserver.vserver-name": "gupi1337pm004"
+  },
+  "OPS_CL_timer": 600,
+  "closedLoopAlarmStart": 1478709989621,
+  "closedLoopControlName": "ClosedLoop-3ffd062d-7589-43b2-865a-139b64e2d402",
+  "closedLoopEventClient": "DCAE_INSTANCE_ID.dcae-tca",
+  "from": "Policy",
+  "message": "<APPC ERROR code and/or message>",
+  "notification": "OPERATION: FAILURE",
+  "notificationTime": "2016-11-08 15:30:14.434000-05:00",
+  "policyName": "ClosedLoop.vUSP",
+  "policyScope": "resource=SampleResource,service=SampleService,type=SampleType,closedLoopControlName=SampleClosedLoop",
+  "policyVersion": "v0.0.1",
+  "requestID": "f889f60c-a715-48c0-801e-26428f6176b9",
+  "target": "vserver.vserver-name",
+  "target_type": "VM",
+  "version": "1.0.2"
+}
diff --git a/extra/docker/elk/tools/DMaaPServiceMocker/notification_operation_success.json b/extra/docker/elk/tools/DMaaPServiceMocker/notification_operation_success.json
new file mode 100644 (file)
index 0000000..9e18b97
--- /dev/null
@@ -0,0 +1,29 @@
+{
+  "AAI": {
+    "cloud-region.identity-url": "http://1.2.3.4:5000/v2.0",
+    "complex.physical-location-id": "SNYSCA12",
+    "generic-vnf.service-id": "eb477a13-f380-401e-b2bd-f2d444c63e54",
+    "generic-vnf.vnf-name": "gupi1337p",
+    "tenant.tenant-id": "8f7b9a8a-8607-4a01-a5ef-0b26f569dcbb",
+    "vserver.is-closed-loop-disabled": "false",
+    "vserver.prov-status": "PROV",
+    "vserver.vserver-selflink": "https//2.3.4.5:1234/d5a992de-8a70-4d7d-b382-2bc6eea52317",
+    "vserver.vserver-id": "08f6c1f9-99e7-49f3-a662-c62b9f200d79",
+    "vserver.vserver-name": "gupi1337pm004"
+  },
+  "OPS_CL_timer": 600,
+  "closedLoopAlarmStart": 1478709989621,
+  "closedLoopControlName": "ClosedLoop-3ffd062d-7589-43b2-865a-139b64e2d402",
+  "closedLoopEventClient": "DCAE_INSTANCE_ID.dcae-tca",
+  "from": "Policy",
+  "message": "actor=APPC,operation=RESTART,target=vserver.vserver-name,subRequestId=1",
+  "notification": "OPERATION: SUCCESS",
+  "notificationTime": "2016-11-09 11:46:29.738000-05:00",
+  "policyName": "ClosedLoop.vUSP",
+  "policyScope": "resource=SampleResource,service=SampleService,type=SampleType,closedLoopControlName=SampleClosedLoop",
+  "policyVersion": "v0.0.1",
+  "requestID": "f889f60c-a715-48c0-801e-26428f6176b9",
+  "target": "vserver.vserver-name",
+  "target_type": "VM",
+  "version": "1.0.2"
+}
diff --git a/extra/docker/elk/tools/DMaaPServiceMocker/notification_rejected_disabled.json b/extra/docker/elk/tools/DMaaPServiceMocker/notification_rejected_disabled.json
new file mode 100644 (file)
index 0000000..3d94987
--- /dev/null
@@ -0,0 +1,29 @@
+{
+  "AAI": {
+    "cloud-region.identity-url": "http://1.2.3.4:5000/v2.0",
+    "complex.physical-location-id": "SNYSCA12",
+    "generic-vnf.service-id": "eb477a13-f380-401e-b2bd-f2d444c63e54",
+    "generic-vnf.vnf-name": "gupi1337p",
+    "tenant.tenant-id": "8f7b9a8a-8607-4a01-a5ef-0b26f569dcbb",
+    "vserver.is-closed-loop-disabled": "true",
+    "vserver.prov-status": "PROV",
+    "vserver.vserver-selflink": "https//2.3.4.5:1234/d5a992de-8a70-4d7d-b382-2bc6eea52317",
+    "vserver.vserver-id": "08f6c1f9-99e7-49f3-a662-c62b9f200d79",
+    "vserver.vserver-name": "gupi1337pm004"
+  },
+  "OPS_CL_timer": 600,
+  "closedLoopAlarmStart": 1478709989621,
+  "closedLoopControlName": "ClosedLoop-3ffd062d-7589-43b2-865a-139b64e2d402",
+  "closedLoopEventClient": "DCAE_INSTANCE_ID.dcae-tca",
+  "from": "Policy",
+  "message": "Closed Loop Disabled",
+  "notification": "REJECTED",
+  "notificationTime": "2016-05-11 15:09:23.896000+00:00",
+  "policyName": "ClosedLoop.vUSP",
+  "policyScope": "resource=SampleResource,service=SampleService,type=SampleType,closedLoopControlName=SampleClosedLoop",
+  "policyVersion": "v0.0.1",
+  "requestID": "f889f60c-a715-48c0-801e-26428f6176b9",
+  "target": "vserver.vserver-name",
+  "target_type": "VM",
+  "version": "1.0.2"
+}
diff --git a/extra/docker/elk/tools/DMaaPServiceMocker/notification_rejected_missing.json b/extra/docker/elk/tools/DMaaPServiceMocker/notification_rejected_missing.json
new file mode 100644 (file)
index 0000000..c901401
--- /dev/null
@@ -0,0 +1,18 @@
+{
+  "AAI": {},
+  "OPS_CL_timer": 600,
+  "closedLoopAlarmStart": 1478709989621,
+  "closedLoopControlName": "ClosedLoop-3ffd062d-7589-43b2-865a-139b64e2d402",
+  "closedLoopEventClient": "DCAE_INSTANCE_ID.dcae-tca",
+  "from": "Policy",
+  "message": "Missing AAI tag",
+  "notification": "REJECTED",
+  "notificationTime": "2016-05-11 14:42:23.629000+00:00",
+  "policyName": "ClosedLoop.vUSP",
+  "policyScope": "resource=SampleResource,service=SampleService,type=SampleType,closedLoopControlName=SampleClosedLoop",
+  "policyVersion": "v0.0.1",
+  "requestID": "f889f60c-a715-48c0-801e-26428f6176b9",
+  "target": "vserver.vserver-name",
+  "target_type": "VM",
+  "version": "1.0.2"
+}
diff --git a/extra/docker/elk/tools/EsAutoQuery/autoQueryLoop.sh b/extra/docker/elk/tools/EsAutoQuery/autoQueryLoop.sh
new file mode 100755 (executable)
index 0000000..4929412
--- /dev/null
@@ -0,0 +1,27 @@
+#!/bin/bash
+
+QUERY_FILE=${1:-query.json}
+INDEX=${2:-logstash-*}
+HOST_URL=${3:-http://localhost:9200}
+URL=$HOST_URL/$INDEX/_search
+
+function usage() {
+    echo "Usage: $0 [QUERY_FILE [INDEX [HOST_URL]]]"
+    echo
+    echo "This script automatically sends the query file to elasticsearch"
+    echo "each time it's modified."
+}
+
+if [ "${1}" == "--help" ];
+then
+    usage
+    exit 0
+fi
+
+echo "Querying '$URL' with '$QUERY_FILE'"
+while [ 1 ];
+do
+    curl -XGET "$URL" -H 'Content-Type: application/json' -d"@$QUERY_FILE" | js-beautify
+    echo
+    inotifywait -e modify query.json
+done
diff --git a/extra/docker/elk/tools/EsAutoQuery/closedLoopAlarmDuration.json b/extra/docker/elk/tools/EsAutoQuery/closedLoopAlarmDuration.json
new file mode 100644 (file)
index 0000000..5a29545
--- /dev/null
@@ -0,0 +1,34 @@
+{
+    "query" : {
+        "bool": {
+            "must": [
+                { "match": { "closedLoopEventStatus": "ABATED" } }
+            ]
+        }
+    },
+    "script_fields" : {
+        "closedLoopAlarmDuration" : {
+            "script" : {
+                "lang": "painless",
+                "source": "
+if (doc.get('closedLoopEventStatus.keyword').value == 'ABATED') {
+   return doc.get('closedLoopAlarmEnd').value - doc.get('closedLoopAlarmStart').value;
+}
+return null
+"
+            }
+        }
+        , "closedLoopAlarmStart" : {
+            "script" : {
+                "lang": "painless",
+                "source": "doc['closedLoopAlarmStart']"
+            }
+        }
+        , "closedLoopAlarmEnd" : {
+            "script" : {
+                "lang": "painless",
+                "source": "doc['closedLoopAlarmEnd']"
+            }
+        }
+    }
+}
diff --git a/extra/docker/elk/tools/EsAutoQuery/timeSince.json b/extra/docker/elk/tools/EsAutoQuery/timeSince.json
new file mode 100644 (file)
index 0000000..6ee1493
--- /dev/null
@@ -0,0 +1,51 @@
+{
+    "query" : {
+        "match_all": {}
+    },
+    "script_fields" : {
+        "timeSince" : {
+            "script" : {
+                "lang": "painless",
+                "source": "
+long now = System.currentTimeMillis();
+if (doc.get('closedLoopEventStatus.keyword').value == 'ABATED') {
+   return now - doc.get('closedLoopAlarmEnd').value;
+}
+if (doc.get('closedLoopEventStatus.keyword').value == 'ONSET') {
+   return now - doc.get('closedLoopAlarmStart').value;
+}
+if (doc.containsKey('notification.keyword')) {
+   return now - doc.get('notificationTime').value;
+}
+
+return null
+"
+            }
+        }
+        , "closedLoopAlarmStart" : {
+            "script" : {
+                "lang": "painless",
+                "source": "doc['closedLoopAlarmStart']"
+            }
+        }
+        , "closedLoopEventStatus" : {
+            "script" : {
+                "lang": "painless",
+                "source": "doc['closedLoopEventStatus.keyword']"
+            }
+        }
+        , "notification" : {
+            "script" : {
+                "lang": "painless",
+                "source": "doc['notification.keyword']"
+            }
+        }
+        , "notificationTime" : {
+            "script" : {
+                "lang": "painless",
+                "source": "doc['notificationTime'].value"
+            }
+        }
+
+    }
+}