This is an automated email from the ASF dual-hosted git repository. btellier pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git
The following commit(s) were added to refs/heads/master by this push: new 8fefca2226 JAMES-4052 Document OpenSearch dashboard set up (#2360) 8fefca2226 is described below commit 8fefca2226fdd1843eb7f84477430249568c563f Author: Benoit TELLIER <btell...@linagora.com> AuthorDate: Thu Jul 25 23:42:49 2024 +0200 JAMES-4052 Document OpenSearch dashboard set up (#2360) --- .../servers/pages/distributed/operate/index.adoc | 2 + examples/README.md | 6 +- examples/opensearch-dahsboard/README.md | 129 +++++++++++++++++++++ examples/opensearch-dahsboard/docker-compose.yml | 15 +++ examples/opensearch-dahsboard/img.png | Bin 0 -> 35390 bytes examples/opensearch-dahsboard/img_1.png | Bin 0 -> 26465 bytes examples/opensearch-dahsboard/img_10.png | Bin 0 -> 29796 bytes examples/opensearch-dahsboard/img_11.png | Bin 0 -> 18361 bytes examples/opensearch-dahsboard/img_12.png | Bin 0 -> 33262 bytes examples/opensearch-dahsboard/img_13.png | Bin 0 -> 38839 bytes examples/opensearch-dahsboard/img_14.png | Bin 0 -> 44316 bytes examples/opensearch-dahsboard/img_15.png | Bin 0 -> 15756 bytes examples/opensearch-dahsboard/img_2.png | Bin 0 -> 30891 bytes examples/opensearch-dahsboard/img_3.png | Bin 0 -> 30498 bytes examples/opensearch-dahsboard/img_4.png | Bin 0 -> 20059 bytes examples/opensearch-dahsboard/img_5.png | Bin 0 -> 14701 bytes examples/opensearch-dahsboard/img_6.png | Bin 0 -> 9261 bytes examples/opensearch-dahsboard/img_7.png | Bin 0 -> 10371 bytes examples/opensearch-dahsboard/img_8.png | Bin 0 -> 14871 bytes examples/opensearch-dahsboard/img_9.png | Bin 0 -> 14786 bytes .../opensearch-dahsboard/james-dashboard.ndjson | 26 +++++ 21 files changed, 177 insertions(+), 1 deletion(-) diff --git a/docs/modules/servers/pages/distributed/operate/index.adoc b/docs/modules/servers/pages/distributed/operate/index.adoc index 5f73eaa7c3..bcad596cde 100644 --- a/docs/modules/servers/pages/distributed/operate/index.adoc +++ b/docs/modules/servers/pages/distributed/operate/index.adoc @@ -26,6 +26,8 @@ We also included a guide for xref:distributed/operate/migrating.adoc[migrating e Read more about xref:distributed/operate/cassandra-migration.adoc[Cassandra data migration]. +Additional functional visualisations can be set up using OpenSearch dashboards as documented in link:https://github.com/apache/james-project/tree/master/examples/opensearch-dahsboard[this example]. + == Upgrading This section sums up and links upgrade instructions for people willing to upgrade their Distributed server to newer versions. diff --git a/examples/README.md b/examples/README.md index 484dcfa76d..bf087fdaf9 100644 --- a/examples/README.md +++ b/examples/README.md @@ -92,4 +92,8 @@ Of course alternative technologies can be used. ## HAProxy set up example [This example](proxy-smtp) demonstrate how to set up the proxy protocol to preserve client origin IP address despite the use -of a proxy. \ No newline at end of file +of a proxy. + +## OpenSearch dashboards + +[This example](opensearch-dahsboard) demonstrate how to set up interesting visualizations using [OpenSearch dashboard](https://opensearch.org/docs/latest/dashboards/). \ No newline at end of file diff --git a/examples/opensearch-dahsboard/README.md b/examples/opensearch-dahsboard/README.md new file mode 100644 index 0000000000..8feeb07403 --- /dev/null +++ b/examples/opensearch-dahsboard/README.md @@ -0,0 +1,129 @@ +# OpenSearch dashboard for Apache James + +[OpenSearch dashboard](https://opensearch.org/docs/latest/dashboards/) is a solution allowing data visualization on top of an existing OpenSearch cluster. + +It can be used to create interesting visualizations when used on top of Apache James OpenSearch indexes. + +## Set up + +1. Adapt the `docker-compose.yml` file to your needs (IP address & credentials) +2. Start it with `docker compose up` +3. Login in your browser: `http://127.0.0.1:5601` with the credential documented in the `docker-compose.yml` file +4. In `Dashboard Management > Index pattern` import the `mailbox_v2` (using date as a date field) and `quota_ratio_v1` +5. In `Dashboard Management > Saved objects` import `james-dashboard.ndjson` + +## Supported visualizations + + - Quota usage + + + + - New mails timeline + + + + - Top senders + + + + - Top recipients + + + + - Email size distribution + + + + - Attachment usage report + + + + - Total email created during the period + + + + - Unique email (by message-id) + + + + - Read / unread ratio + + + + - has attachment ratio + + + + - user flag heatmap + + + + - People that reads the more mails + + + + - People that answers the more mails + + + + - People that generates the most data (by size) + + + + - Recipient count analysis + + + + - Estimated delivery times in second (differences between sentDate and savedDate) + + + +## Scripted fields + +Some of the above visualizations relies on scripted fields. + +In order to create them navigate the following menus: + +> Dashboard management +> Index pattern +> mailbox_v2 +> scripted field + +Then create the following scripted fields: + +``` +language: painless +type: number +format: numer +name: recipientCount +Script: + +int count = 0; + + for (nested in params._source.to) { + count += 1; + } + +return count; +``` + +and + +``` +> Dashboard management +> Index pattern +> mailbox_v2 +> scripted field + +language: painless +type: number +format: numer +name: deliveryTime +Script: + +if (doc.containsKey('saveDate') && doc.containsKey('sentDate')) { + return (doc['saveDate'].value.getMillis() - doc['sentDate'].value.getMillis()) / 1000; +} else { + return 0; +} +``` \ No newline at end of file diff --git a/examples/opensearch-dahsboard/docker-compose.yml b/examples/opensearch-dahsboard/docker-compose.yml new file mode 100644 index 0000000000..7be63b069d --- /dev/null +++ b/examples/opensearch-dahsboard/docker-compose.yml @@ -0,0 +1,15 @@ +version: '3' +services: + opensearch-dashboards: + image: opensearchproject/opensearch-dashboards:2.11.1 + container_name: opensearch-dashboards + ports: + - 5601:5601 + expose: + - "5601" + environment: + OPENSEARCH_HOSTS: '["https://xxxx:9200"]' + OPENSEARCH_USERNAME: username + OPENSEARCH_PASSWORD: xxxxx + OPENSEARCH_DASHBOARDS_OPENSEARCH_SSL_VERIFICATIONMODE: none + OPENSEARCH_DASHBOARD_PASSWORD: xxxxx \ No newline at end of file diff --git a/examples/opensearch-dahsboard/img.png b/examples/opensearch-dahsboard/img.png new file mode 100644 index 0000000000..e369355dd2 Binary files /dev/null and b/examples/opensearch-dahsboard/img.png differ diff --git a/examples/opensearch-dahsboard/img_1.png b/examples/opensearch-dahsboard/img_1.png new file mode 100644 index 0000000000..5a5a9bd815 Binary files /dev/null and b/examples/opensearch-dahsboard/img_1.png differ diff --git a/examples/opensearch-dahsboard/img_10.png b/examples/opensearch-dahsboard/img_10.png new file mode 100644 index 0000000000..ada71e962c Binary files /dev/null and b/examples/opensearch-dahsboard/img_10.png differ diff --git a/examples/opensearch-dahsboard/img_11.png b/examples/opensearch-dahsboard/img_11.png new file mode 100644 index 0000000000..3ba6daa15f Binary files /dev/null and b/examples/opensearch-dahsboard/img_11.png differ diff --git a/examples/opensearch-dahsboard/img_12.png b/examples/opensearch-dahsboard/img_12.png new file mode 100644 index 0000000000..c5d880ecfb Binary files /dev/null and b/examples/opensearch-dahsboard/img_12.png differ diff --git a/examples/opensearch-dahsboard/img_13.png b/examples/opensearch-dahsboard/img_13.png new file mode 100644 index 0000000000..c987ac8450 Binary files /dev/null and b/examples/opensearch-dahsboard/img_13.png differ diff --git a/examples/opensearch-dahsboard/img_14.png b/examples/opensearch-dahsboard/img_14.png new file mode 100644 index 0000000000..da08518d70 Binary files /dev/null and b/examples/opensearch-dahsboard/img_14.png differ diff --git a/examples/opensearch-dahsboard/img_15.png b/examples/opensearch-dahsboard/img_15.png new file mode 100644 index 0000000000..8ef5dee596 Binary files /dev/null and b/examples/opensearch-dahsboard/img_15.png differ diff --git a/examples/opensearch-dahsboard/img_2.png b/examples/opensearch-dahsboard/img_2.png new file mode 100644 index 0000000000..545d3f20e8 Binary files /dev/null and b/examples/opensearch-dahsboard/img_2.png differ diff --git a/examples/opensearch-dahsboard/img_3.png b/examples/opensearch-dahsboard/img_3.png new file mode 100644 index 0000000000..f602dbcb92 Binary files /dev/null and b/examples/opensearch-dahsboard/img_3.png differ diff --git a/examples/opensearch-dahsboard/img_4.png b/examples/opensearch-dahsboard/img_4.png new file mode 100644 index 0000000000..585cb3b334 Binary files /dev/null and b/examples/opensearch-dahsboard/img_4.png differ diff --git a/examples/opensearch-dahsboard/img_5.png b/examples/opensearch-dahsboard/img_5.png new file mode 100644 index 0000000000..0c8210a6ee Binary files /dev/null and b/examples/opensearch-dahsboard/img_5.png differ diff --git a/examples/opensearch-dahsboard/img_6.png b/examples/opensearch-dahsboard/img_6.png new file mode 100644 index 0000000000..3991d4b924 Binary files /dev/null and b/examples/opensearch-dahsboard/img_6.png differ diff --git a/examples/opensearch-dahsboard/img_7.png b/examples/opensearch-dahsboard/img_7.png new file mode 100644 index 0000000000..4f50bdea75 Binary files /dev/null and b/examples/opensearch-dahsboard/img_7.png differ diff --git a/examples/opensearch-dahsboard/img_8.png b/examples/opensearch-dahsboard/img_8.png new file mode 100644 index 0000000000..b0a795caf0 Binary files /dev/null and b/examples/opensearch-dahsboard/img_8.png differ diff --git a/examples/opensearch-dahsboard/img_9.png b/examples/opensearch-dahsboard/img_9.png new file mode 100644 index 0000000000..dc99115464 Binary files /dev/null and b/examples/opensearch-dahsboard/img_9.png differ diff --git a/examples/opensearch-dahsboard/james-dashboard.ndjson b/examples/opensearch-dahsboard/james-dashboard.ndjson new file mode 100644 index 0000000000..a65feed040 --- /dev/null +++ b/examples/opensearch-dahsboard/james-dashboard.ndjson @@ -0,0 +1,26 @@ +{"attributes":{"fieldFormatMap":"{\"deliveryTime2\":{\"id\":\"number\",\"params\":{\"parsedUrl\":{\"origin\":\"http://127.0.0.1:5601\",\"pathname\":\"/app/opensearch_index_management_dashboards\",\"basePath\":\"\"}}},\"recipientCount\":{\"id\":\"number\",\"params\":{\"parsedUrl\":{\"origin\":\"http://127.0.0.1:5601\",\"pathname\":\"/app/management\",\"basePath\":\"\"}}}}","fields":"[{\"count\":0,\"name\":\"_id\",\"type\":\"string\",\"esTypes\":[\"_id\"],\"scripted\":false,\"searchable\": [...] +{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}"},"title":"Unique mails","uiStateJSON":"{}","version":1,"visState":"{\"title\":\"Unique mails\",\"type\":\"metric\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"cardinality\",\"params\":{\"field\":\"mimeMessageID\"},\"schema\":\"metric\"}],\"params\":{\"addTooltip\":true,\"ad [...] +{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[{\"meta\":{\"type\":\"phrases\",\"key\":\"to.address\",\"value\":\"linagora.com\",\"params\":[\"linagora.com\"],\"alias\":null,\"negate\":false,\"disabled\":false,\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index\"},\"query\":{\"bool\":{\"should\":[{\"match_phrase\":{\"to.address\":\"linagora.com\"}}],\"minimum_should_mat [...] +{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}"},"title":"New mails in mailbox","uiStateJSON":"{}","version":1,"visState":"{\"title\":\"New mails in mailbox\",\"type\":\"area\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"params\":{},\"schema\":\"metric\"},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram [...] +{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}"},"title":"Attachment ratio","uiStateJSON":"{}","version":1,"visState":"{\"title\":\"Attachment ratio\",\"type\":\"pie\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"params\":{},\"schema\":\"metric\"},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"params\":{\"f [...] +{"attributes":{"buildNum":6867,"defaultIndex":"a22e0e70-4822-11ef-be61-a96ec0360231"},"id":"2.11.1","migrationVersion":{"config":"7.9.0"},"references":[],"type":"config","updated_at":"2024-07-24T08:29:32.345Z","version":"WzEwMywxXQ=="} +{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}"},"title":"Attachment by file extension","uiStateJSON":"{}","version":1,"visState":"{\"title\":\"Attachment by file extension\",\"type\":\"table\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"params\":{},\"schema\":\"metric\"},{\"id\":\"2\",\"enabled\":true,\"type\" [...] +{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}"},"title":"Total mails","uiStateJSON":"{}","version":1,"visState":"{\"title\":\"Total mails\",\"type\":\"metric\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"params\":{},\"schema\":\"metric\"}],\"params\":{\"addTooltip\":true,\"addLegend\":false,\"type\":\"metric\" [...] +{"attributes":{"description":"Difference between the saveDate and the sentDate.\n\nIncludes third party delays. Take it as indicative, as sentDate can be crafter by the user.","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"key\":\"from.domain\",\"negate\":false,\"params\":{\"query\":\"linagora\"},\"type\":\"phrase\",\"indexRefName\":\"kibanaSaved [...] +{"attributes":{"fields":"[{\"count\":0,\"name\":\"_id\",\"type\":\"string\",\"esTypes\":[\"_id\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":false},{\"count\":0,\"name\":\"_index\",\"type\":\"string\",\"esTypes\":[\"_index\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":false},{\"count\":0,\"name\":\"_score\",\"type\":\"number\",\"scripted\":false,\"searchable\":false,\"aggregatable\":false,\"readFromDocValues\ [...] +{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}"},"title":"Email by size over the week","uiStateJSON":"{}","version":1,"visState":"{\"title\":\"Email by size over the week\",\"type\":\"histogram\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"params\":{},\"schema\":\"metric\"},{\"id\":\"3\",\"enabled\":true,\"type [...] +{"attributes":{"fields":"[{\"count\":0,\"name\":\"_id\",\"type\":\"string\",\"esTypes\":[\"_id\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":false},{\"count\":0,\"name\":\"_index\",\"type\":\"string\",\"esTypes\":[\"_index\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":false},{\"count\":0,\"name\":\"_score\",\"type\":\"number\",\"scripted\":false,\"searchable\":false,\"aggregatable\":false,\"readFromDocValues\ [...] +{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}"},"title":"New mails","uiStateJSON":"{}","version":1,"visState":"{\"title\":\"New mails\",\"type\":\"line\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"params\":{},\"schema\":\"metric\"},{\"id\":\"2\",\"enabled\":true,\"type\":\"date_histogram\",\"params\":{\"field [...] +{"attributes":{"fields":"[{\"count\":0,\"name\":\"_id\",\"type\":\"string\",\"esTypes\":[\"_id\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":false},{\"count\":0,\"name\":\"_index\",\"type\":\"string\",\"esTypes\":[\"_index\"],\"scripted\":false,\"searchable\":true,\"aggregatable\":true,\"readFromDocValues\":false},{\"count\":0,\"name\":\"_score\",\"type\":\"number\",\"scripted\":false,\"searchable\":false,\"aggregatable\":false,\"readFromDocValues\ [...] +{"attributes":{"description":"Current mail quota usage","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}"},"title":"Quota usage","uiStateJSON":"{}","version":1,"visState":"{\"title\":\"Quota usage\",\"type\":\"table\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"max\",\"params\":{\"field\":\"quotaRatio\"},\"schema\":\"metric\"},{\"id\":\"2\",\"enabled\":t [...] +{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}"},"title":"Top senders","uiStateJSON":"{}","version":1,"visState":"{\"title\":\"Top senders\",\"type\":\"table\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"params\":{},\"schema\":\"metric\"},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"params\":{\"field\":\ [...] +{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"key\":\"to.domain\",\"negate\":false,\"params\":{\"query\":\"linagora\"},\"type\":\"phrase\",\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index\"},\"query\":{\"match_phrase\":{\"to.domain\":\"linagora\"}}},{\"$state\":{\"store\":\"appState\" [...] +{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"key\":\"to.domain\",\"negate\":false,\"params\":{\"query\":\"linagora\"},\"type\":\"phrase\",\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index\"},\"query\":{\"match_phrase\":{\"to.domain\":\"linagora\"}}},{\"$state\":{\"store\":\"appState\" [...] +{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"key\":\"from.domain\",\"negate\":false,\"params\":{\"query\":\"linagora\"},\"type\":\"phrase\",\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index\"},\"query\":{\"match_phrase\":{\"from.domain\":\"linagora\"}}}],\"indexRefName\":\"kibanaSaved [...] +{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}"},"title":"IsUnread ratio","uiStateJSON":"{}","version":1,"visState":"{\"title\":\"IsUnread ratio\",\"type\":\"pie\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"params\":{},\"schema\":\"metric\"},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"params\":{\"field [...] +{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}"},"title":"User flags","uiStateJSON":"{}","version":1,"visState":"{\"title\":\"User flags\",\"type\":\"tagcloud\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"params\":{},\"schema\":\"metric\"},{\"id\":\"2\",\"enabled\":true,\"type\":\"terms\",\"params\":{\"field\": [...] +{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"key\":\"from.domain\",\"negate\":false,\"params\":{\"query\":\"linagora\"},\"type\":\"phrase\",\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.filter[0].meta.index\"},\"query\":{\"match_phrase\":{\"from.domain\":\"linagora\"}}}],\"indexRefName\":\"kibanaSaved [...] +{"attributes":{"description":"","hits":0,"kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"language\":\"kuery\",\"query\":\"\"},\"filter\":[]}"},"optionsJSON":"{\"hidePanelTitles\":false,\"useMargins\":true}","panelsJSON":"[{\"embeddableConfig\":{},\"gridData\":{\"h\":15,\"i\":\"c7b5858e-01b8-42be-83a0-c6e73c4cacf1\",\"w\":24,\"x\":0,\"y\":0},\"panelIndex\":\"c7b5858e-01b8-42be-83a0-c6e73c4cacf1\",\"version\":\"2.11.1\",\"panelRefName\":\"panel_0\"},{\"embeddableConfig\":{},\"gr [...] +{"attributes":{"description":"Difference between the saveDate and the sentDate.\n\nIncludes third party delays. Take it as indicative, as sentDate can be crafter by the user.","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[{\"$state\":{\"store\":\"appState\"},\"meta\":{\"alias\":null,\"disabled\":false,\"key\":\"from.domain\",\"negate\":false,\"params\":{\"query\":\"linagora\"},\"type\":\"phrase\",\"indexRefName\":\"kibanaSaved [...] +{"attributes":{"description":"","kibanaSavedObjectMeta":{"searchSourceJSON":"{\"query\":{\"query\":\"\",\"language\":\"kuery\"},\"filter\":[],\"indexRefName\":\"kibanaSavedObjectMeta.searchSourceJSON.index\"}"},"title":"Active users","uiStateJSON":"{}","version":1,"visState":"{\"title\":\"Active users\",\"type\":\"metric\",\"aggs\":[{\"id\":\"1\",\"enabled\":true,\"type\":\"count\",\"params\":{},\"schema\":\"metric\"}],\"params\":{\"addTooltip\":true,\"addLegend\":false,\"type\":\"metric [...] +{"exportedCount":25,"missingRefCount":0,"missingReferences":[]} \ No newline at end of file --------------------------------------------------------------------- To unsubscribe, e-mail: notifications-unsubscr...@james.apache.org For additional commands, e-mail: notifications-h...@james.apache.org