From 10c741a8d8a16de9ee317887fcf90036fa0fd214 Mon Sep 17 00:00:00 2001 From: Chris Mark Date: Fri, 13 Dec 2019 10:16:56 +0200 Subject: [PATCH] [Metricbeat] Add STAN (NATS streaming) module (#14839) --- CHANGELOG.next.asciidoc | 1 + dev-tools/mage/gotest.go | 13 +- metricbeat/docs/fields.asciidoc | 256 +++ metricbeat/docs/modules/stan.asciidoc | 55 + .../docs/modules/stan/channels.asciidoc | 24 + metricbeat/docs/modules/stan/stats.asciidoc | 24 + .../docs/modules/stan/subscriptions.asciidoc | 24 + metricbeat/docs/modules_list.asciidoc | 5 + x-pack/metricbeat/include/list.go | 4 + x-pack/metricbeat/metricbeat.reference.yml | 9 + .../metricbeat/module/stan/_meta/Dockerfile | 21 + .../module/stan/_meta/config.reference.yml | 7 + .../metricbeat/module/stan/_meta/config.yml | 7 + .../module/stan/_meta/docs.asciidoc | 8 + .../metricbeat/module/stan/_meta/fields.yml | 19 + x-pack/metricbeat/module/stan/_meta/run.sh | 10 + .../module/stan/channels/_meta/data.json | 32 + .../module/stan/channels/_meta/docs.asciidoc | 1 + .../module/stan/channels/_meta/fields.yml | 30 + .../stan/channels/_meta/test/channels.json | 1965 +++++++++++++++++ .../module/stan/channels/channels.go | 78 + .../channels/channels_integration_test.go | 42 + .../module/stan/channels/channels_test.go | 84 + .../metricbeat/module/stan/channels/data.go | 121 + x-pack/metricbeat/module/stan/doc.go | 5 + .../metricbeat/module/stan/docker-compose.yml | 11 + x-pack/metricbeat/module/stan/fields.go | 23 + x-pack/metricbeat/module/stan/module.yml | 3 + .../module/stan/stats/_meta/data.json | 32 + .../module/stan/stats/_meta/docs.asciidoc | 1 + .../module/stan/stats/_meta/fields.yml | 35 + .../stan/stats/_meta/test/serversz.json | 15 + x-pack/metricbeat/module/stan/stats/data.go | 60 + .../module/stan/stats/docs.asciidoc | 1 + x-pack/metricbeat/module/stan/stats/stats.go | 77 + .../stan/stats/stats_integration_test.go | 43 + .../module/stan/stats/stats_test.go | 59 + .../module/stan/subscriptions/_meta/data.json | 32 + .../stan/subscriptions/_meta/docs.asciidoc | 1 + .../stan/subscriptions/_meta/fields.yml | 36 + .../_meta/test/subscriptions.json | 1965 +++++++++++++++++ .../module/stan/subscriptions/data.go | 112 + .../stan/subscriptions/subscriptions.go | 78 + .../subscriptions_integration_test.go | 42 + .../stan/subscriptions/subscriptions_test.go | 63 + x-pack/metricbeat/module/stan/test_stan.py | 26 + x-pack/metricbeat/modules.d/stan.yml.disabled | 10 + 47 files changed, 5564 insertions(+), 6 deletions(-) create mode 100644 metricbeat/docs/modules/stan.asciidoc create mode 100644 metricbeat/docs/modules/stan/channels.asciidoc create mode 100644 metricbeat/docs/modules/stan/stats.asciidoc create mode 100644 metricbeat/docs/modules/stan/subscriptions.asciidoc create mode 100644 x-pack/metricbeat/module/stan/_meta/Dockerfile create mode 100644 x-pack/metricbeat/module/stan/_meta/config.reference.yml create mode 100644 x-pack/metricbeat/module/stan/_meta/config.yml create mode 100644 x-pack/metricbeat/module/stan/_meta/docs.asciidoc create mode 100644 x-pack/metricbeat/module/stan/_meta/fields.yml create mode 100755 x-pack/metricbeat/module/stan/_meta/run.sh create mode 100644 x-pack/metricbeat/module/stan/channels/_meta/data.json create mode 100644 x-pack/metricbeat/module/stan/channels/_meta/docs.asciidoc create mode 100644 x-pack/metricbeat/module/stan/channels/_meta/fields.yml create mode 100644 x-pack/metricbeat/module/stan/channels/_meta/test/channels.json create mode 100644 x-pack/metricbeat/module/stan/channels/channels.go create mode 100644 x-pack/metricbeat/module/stan/channels/channels_integration_test.go create mode 100644 x-pack/metricbeat/module/stan/channels/channels_test.go create mode 100644 x-pack/metricbeat/module/stan/channels/data.go create mode 100644 x-pack/metricbeat/module/stan/doc.go create mode 100644 x-pack/metricbeat/module/stan/docker-compose.yml create mode 100644 x-pack/metricbeat/module/stan/fields.go create mode 100644 x-pack/metricbeat/module/stan/module.yml create mode 100644 x-pack/metricbeat/module/stan/stats/_meta/data.json create mode 100644 x-pack/metricbeat/module/stan/stats/_meta/docs.asciidoc create mode 100644 x-pack/metricbeat/module/stan/stats/_meta/fields.yml create mode 100644 x-pack/metricbeat/module/stan/stats/_meta/test/serversz.json create mode 100644 x-pack/metricbeat/module/stan/stats/data.go create mode 100644 x-pack/metricbeat/module/stan/stats/docs.asciidoc create mode 100644 x-pack/metricbeat/module/stan/stats/stats.go create mode 100644 x-pack/metricbeat/module/stan/stats/stats_integration_test.go create mode 100644 x-pack/metricbeat/module/stan/stats/stats_test.go create mode 100644 x-pack/metricbeat/module/stan/subscriptions/_meta/data.json create mode 100644 x-pack/metricbeat/module/stan/subscriptions/_meta/docs.asciidoc create mode 100644 x-pack/metricbeat/module/stan/subscriptions/_meta/fields.yml create mode 100644 x-pack/metricbeat/module/stan/subscriptions/_meta/test/subscriptions.json create mode 100644 x-pack/metricbeat/module/stan/subscriptions/data.go create mode 100644 x-pack/metricbeat/module/stan/subscriptions/subscriptions.go create mode 100644 x-pack/metricbeat/module/stan/subscriptions/subscriptions_integration_test.go create mode 100644 x-pack/metricbeat/module/stan/subscriptions/subscriptions_test.go create mode 100644 x-pack/metricbeat/module/stan/test_stan.py create mode 100644 x-pack/metricbeat/modules.d/stan.yml.disabled diff --git a/CHANGELOG.next.asciidoc b/CHANGELOG.next.asciidoc index 72bb8a57f47e..f95b81dca436 100644 --- a/CHANGELOG.next.asciidoc +++ b/CHANGELOG.next.asciidoc @@ -454,6 +454,7 @@ https://github.com/elastic/beats/compare/v7.0.0-alpha2...master[Check the HEAD d - Fix timezone parsing in haproxy pipeline. {pull}14755[14755] - Add module for ActiveMQ. {pull}14840[14840] - Add dashboards for the ActiveMQ Filebeat module. {pull}14880[14880] +- Add STAN Metricbeat module. {pull}14839[14839] *Heartbeat* - Add non-privileged icmp on linux and darwin(mac). {pull}13795[13795] {issue}11498[11498] diff --git a/dev-tools/mage/gotest.go b/dev-tools/mage/gotest.go index b0b65142f102..5d876dd208b4 100644 --- a/dev-tools/mage/gotest.go +++ b/dev-tools/mage/gotest.go @@ -101,7 +101,10 @@ func GoTest(ctx context.Context, params GoTestArgs) error { fmt.Println(">> go test:", params.TestName, "Testing") // Build args list to Go. - args := []string{"test", "-v"} + args := []string{"test"} + if mg.Verbose() { + args = append(args, "-v") + } if params.Race { args = append(args, "-race") } @@ -123,9 +126,7 @@ func GoTest(ctx context.Context, params GoTestArgs) error { // Wire up the outputs. bufferOutput := new(bytes.Buffer) outputs := []io.Writer{bufferOutput} - if mg.Verbose() { - outputs = append(outputs, os.Stdout) - } + if params.OutputFile != "" { fileOutput, err := os.Create(createDir(params.OutputFile)) if err != nil { @@ -135,8 +136,8 @@ func GoTest(ctx context.Context, params GoTestArgs) error { outputs = append(outputs, fileOutput) } output := io.MultiWriter(outputs...) - goTest.Stdout = output - goTest.Stderr = output + goTest.Stdout = io.MultiWriter(output, os.Stdout) + goTest.Stderr = io.MultiWriter(output, os.Stderr) // Execute 'go test' and measure duration. start := time.Now() diff --git a/metricbeat/docs/fields.asciidoc b/metricbeat/docs/fields.asciidoc index 4de57ad34fc0..9a56925639d9 100644 --- a/metricbeat/docs/fields.asciidoc +++ b/metricbeat/docs/fields.asciidoc @@ -63,6 +63,7 @@ grouped in the following categories: * <> * <> * <> +* <> * <> * <> * <> @@ -29518,6 +29519,261 @@ type: object -- +[[exported-fields-stan]] +== Stan fields + +stan Module + + + +[float] +=== stan + +`stan` contains statistics that were read from Nats Streaming server (STAN) + + + +*`stan.server.id`*:: ++ +-- +The server ID + + +type: keyword + +-- + +*`stan.cluster.id`*:: ++ +-- +The cluster ID + + +type: keyword + +-- + +[float] +=== channels + +Contains stan / nats streaming/serverz endpoint metrics + + + +*`stan.channels.name`*:: ++ +-- +The name of the STAN streaming channel + + +type: keyword + +-- + +*`stan.channels.messages`*:: ++ +-- +The number of STAN streaming messages + + +type: long + +-- + +*`stan.channels.bytes`*:: ++ +-- +The number of STAN bytes in the channel + + +type: long + +-- + +*`stan.channels.first_seq`*:: ++ +-- +First sequence number stored in the channel. If first_seq > min([seq in subscriptions]) data loss has possibly occurred + + +type: long + +-- + +*`stan.channels.last_seq`*:: ++ +-- +Last sequence number stored in the channel + + +type: long + +-- + +*`stan.channels.depth`*:: ++ +-- +Queue depth based upon current sequence number and highest reported subscriber sequence number + + +type: long + +-- + +[float] +=== stats + +Contains only high-level stan / nats streaming server related metrics + + + +*`stan.stats.state`*:: ++ +-- +The cluster / streaming configuration state (STANDALONE, CLUSTERED) + + +type: keyword + +-- + +*`stan.stats.role`*:: ++ +-- +If clustered, role of this node in the cluster (Leader, Follower, Candidate) + + +type: keyword + +-- + +*`stan.stats.clients`*:: ++ +-- +The number of STAN clients + + +type: integer + +-- + +*`stan.stats.subscriptions`*:: ++ +-- +The number of STAN streaming subscriptions + + +type: integer + +-- + +*`stan.stats.channels`*:: ++ +-- +The number of STAN channels + + +type: integer + +-- + +*`stan.stats.messages`*:: ++ +-- +Number of messages across all STAN queues + + +type: long + +-- + +*`stan.stats.bytes`*:: ++ +-- +Number of bytes consumed across all STAN queues + + +type: long + +-- + +[float] +=== subscriptions + +Contains stan / nats streaming/serverz endpoint subscription metrics + + + +*`stan.subscriptions.id`*:: ++ +-- +The name of the STAN channel subscription (client_id) + + +type: keyword + +-- + +*`stan.subscriptions.channel`*:: ++ +-- +The name of the STAN channel the subscription is associated with + + +type: keyword + +-- + +*`stan.subscriptions.queue`*:: ++ +-- +The name of the NATS queue that the STAN channel subscription is associated with, if any + + +type: keyword + +-- + +*`stan.subscriptions.last_sent`*:: ++ +-- +Last known sequence number of the subscription that was acked + + +type: long + +-- + +*`stan.subscriptions.pending`*:: ++ +-- +Number of pending messages from / to the subscriber + + +type: long + +-- + +*`stan.subscriptions.offline`*:: ++ +-- +Is the subscriber marked as offline? + + +type: boolean + +-- + +*`stan.subscriptions.stalled`*:: ++ +-- +Is the subscriber known to be stalled? + + +type: boolean + +-- + [[exported-fields-statsd]] == Statsd fields diff --git a/metricbeat/docs/modules/stan.asciidoc b/metricbeat/docs/modules/stan.asciidoc new file mode 100644 index 000000000000..3efe11c72e0b --- /dev/null +++ b/metricbeat/docs/modules/stan.asciidoc @@ -0,0 +1,55 @@ +//// +This file is generated! See scripts/mage/docs_collector.go +//// + +[[metricbeat-module-stan]] +[role="xpack"] +== Stan module + +beta[] + +This is the STAN module. The STAN module uses https://github.com/nats-io/nats-streaming-server/blob/master/server/monitor.go[STAN monitoring server APIs] to collect metrics. + +The default metricsets are `channels`, `stats` and `subscriptions`. + +[float] +=== Compatibility + +The STAN module is tested with STAN 0.15.1. + + +[float] +=== Example configuration + +The Stan module supports the standard configuration options that are described +in <>. Here is an example configuration: + +[source,yaml] +---- +metricbeat.modules: +- module: stan + metricsets: ["stats", "channels", "subscriptions"] + period: 60s + hosts: ["localhost:8222"] + #stats.metrics_path: "/streaming/serverz" + #channels.metrics_path: "/streaming/channelsz" + #subscriptions.metrics_path: "/streaming/channelsz" # we retrieve streaming subscriptions with a detailed query param to the channelsz endpoint +---- + +[float] +=== Metricsets + +The following metricsets are available: + +* <> + +* <> + +* <> + +include::stan/channels.asciidoc[] + +include::stan/stats.asciidoc[] + +include::stan/subscriptions.asciidoc[] + diff --git a/metricbeat/docs/modules/stan/channels.asciidoc b/metricbeat/docs/modules/stan/channels.asciidoc new file mode 100644 index 000000000000..797657f6c5e2 --- /dev/null +++ b/metricbeat/docs/modules/stan/channels.asciidoc @@ -0,0 +1,24 @@ +//// +This file is generated! See scripts/mage/docs_collector.go +//// + +[[metricbeat-metricset-stan-channels]] +=== Stan channels metricset + +beta[] + +include::../../../../x-pack/metricbeat/module/stan/channels/_meta/docs.asciidoc[] + +This is a default metricset. If the host module is unconfigured, this metricset is enabled by default. + +==== Fields + +For a description of each field in the metricset, see the +<> section. + +Here is an example document generated by this metricset: + +[source,json] +---- +include::../../../../x-pack/metricbeat/module/stan/channels/_meta/data.json[] +---- diff --git a/metricbeat/docs/modules/stan/stats.asciidoc b/metricbeat/docs/modules/stan/stats.asciidoc new file mode 100644 index 000000000000..1248d49c165a --- /dev/null +++ b/metricbeat/docs/modules/stan/stats.asciidoc @@ -0,0 +1,24 @@ +//// +This file is generated! See scripts/mage/docs_collector.go +//// + +[[metricbeat-metricset-stan-stats]] +=== Stan stats metricset + +beta[] + +include::../../../../x-pack/metricbeat/module/stan/stats/_meta/docs.asciidoc[] + +This is a default metricset. If the host module is unconfigured, this metricset is enabled by default. + +==== Fields + +For a description of each field in the metricset, see the +<> section. + +Here is an example document generated by this metricset: + +[source,json] +---- +include::../../../../x-pack/metricbeat/module/stan/stats/_meta/data.json[] +---- diff --git a/metricbeat/docs/modules/stan/subscriptions.asciidoc b/metricbeat/docs/modules/stan/subscriptions.asciidoc new file mode 100644 index 000000000000..df34fab9518a --- /dev/null +++ b/metricbeat/docs/modules/stan/subscriptions.asciidoc @@ -0,0 +1,24 @@ +//// +This file is generated! See scripts/mage/docs_collector.go +//// + +[[metricbeat-metricset-stan-subscriptions]] +=== Stan subscriptions metricset + +beta[] + +include::../../../../x-pack/metricbeat/module/stan/subscriptions/_meta/docs.asciidoc[] + +This is a default metricset. If the host module is unconfigured, this metricset is enabled by default. + +==== Fields + +For a description of each field in the metricset, see the +<> section. + +Here is an example document generated by this metricset: + +[source,json] +---- +include::../../../../x-pack/metricbeat/module/stan/subscriptions/_meta/data.json[] +---- diff --git a/metricbeat/docs/modules_list.asciidoc b/metricbeat/docs/modules_list.asciidoc index 01fc09e3d615..da3e9c1f5375 100644 --- a/metricbeat/docs/modules_list.asciidoc +++ b/metricbeat/docs/modules_list.asciidoc @@ -179,6 +179,10 @@ This file is generated! See scripts/mage/docs_collector.go |<> |<> beta[] |image:./images/icon-no.png[No prebuilt dashboards] | .1+| .1+| |<> beta[] +|<> beta[] |image:./images/icon-no.png[No prebuilt dashboards] | +.3+| .3+| |<> beta[] +|<> beta[] +|<> beta[] |<> beta[] |image:./images/icon-no.png[No prebuilt dashboards] | .1+| .1+| |<> beta[] |<> |image:./images/icon-yes.png[Prebuilt dashboards are available] | @@ -264,6 +268,7 @@ include::modules/prometheus.asciidoc[] include::modules/rabbitmq.asciidoc[] include::modules/redis.asciidoc[] include::modules/sql.asciidoc[] +include::modules/stan.asciidoc[] include::modules/statsd.asciidoc[] include::modules/system.asciidoc[] include::modules/tomcat.asciidoc[] diff --git a/x-pack/metricbeat/include/list.go b/x-pack/metricbeat/include/list.go index ea53c6e164c9..60714ac4bd90 100644 --- a/x-pack/metricbeat/include/list.go +++ b/x-pack/metricbeat/include/list.go @@ -33,6 +33,10 @@ import ( _ "github.com/elastic/beats/x-pack/metricbeat/module/oracle/tablespace" _ "github.com/elastic/beats/x-pack/metricbeat/module/sql" _ "github.com/elastic/beats/x-pack/metricbeat/module/sql/query" + _ "github.com/elastic/beats/x-pack/metricbeat/module/stan" + _ "github.com/elastic/beats/x-pack/metricbeat/module/stan/channels" + _ "github.com/elastic/beats/x-pack/metricbeat/module/stan/stats" + _ "github.com/elastic/beats/x-pack/metricbeat/module/stan/subscriptions" _ "github.com/elastic/beats/x-pack/metricbeat/module/statsd" _ "github.com/elastic/beats/x-pack/metricbeat/module/statsd/server" _ "github.com/elastic/beats/x-pack/metricbeat/module/tomcat" diff --git a/x-pack/metricbeat/metricbeat.reference.yml b/x-pack/metricbeat/metricbeat.reference.yml index cffedc82dd68..6c62e6d563ad 100644 --- a/x-pack/metricbeat/metricbeat.reference.yml +++ b/x-pack/metricbeat/metricbeat.reference.yml @@ -918,6 +918,15 @@ metricbeat.modules: sql_query: "select now()" +#--------------------------------- Stan Module --------------------------------- +- module: stan + metricsets: ["stats", "channels", "subscriptions"] + period: 60s + hosts: ["localhost:8222"] + #stats.metrics_path: "/streaming/serverz" + #channels.metrics_path: "/streaming/channelsz" + #subscriptions.metrics_path: "/streaming/channelsz" # we retrieve streaming subscriptions with a detailed query param to the channelsz endpoint + #-------------------------------- Statsd Module -------------------------------- - module: statsd host: "localhost" diff --git a/x-pack/metricbeat/module/stan/_meta/Dockerfile b/x-pack/metricbeat/module/stan/_meta/Dockerfile new file mode 100644 index 000000000000..12450435f0f2 --- /dev/null +++ b/x-pack/metricbeat/module/stan/_meta/Dockerfile @@ -0,0 +1,21 @@ +ARG STAN_VERSION=0.15.1 +FROM nats-streaming:$STAN_VERSION + +# build stage +FROM golang:1.13-alpine AS build-env +RUN apk --no-cache add build-base git bzr mercurial gcc +RUN cd src && go get github.com/nats-io/stan.go/ +RUN cd src/github.com/nats-io/stan.go/examples/stan-bench && git checkout tags/v0.5.2 && go build . + +# create an enhanced container with nc command available since nats is based +# on scratch image making healthcheck impossible +FROM alpine:latest +RUN apk add --no-cache --upgrade bash +COPY --from=0 nats-streaming-server /nats-streaming-server +COPY --from=build-env /go/src/github.com/nats-io/stan.go/examples/stan-bench/stan-bench /stan-bench +# Expose client, management, and cluster ports +EXPOSE 4222 8222 +HEALTHCHECK --interval=1s --retries=10 CMD nc -w 1 0.0.0.0 8222 + stan Module + release: beta + fields: + - name: stan + type: group + description: > + `stan` contains statistics that were read from Nats Streaming server (STAN) + fields: + - name: server.id + type: keyword + description: > + The server ID + - name: cluster.id + type: keyword + description: > + The cluster ID diff --git a/x-pack/metricbeat/module/stan/_meta/run.sh b/x-pack/metricbeat/module/stan/_meta/run.sh new file mode 100755 index 000000000000..c36aa1edda91 --- /dev/null +++ b/x-pack/metricbeat/module/stan/_meta/run.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +/nats-streaming-server -m 8222 & +sleep 2 +/stan-bench -np 0 -ns 100 -qgroup T -n 100000000 -ms 1024 foo & +/stan-bench -np 10 -ns 10 -n 1000000000 -ms 1024 bar & + +# Make sure the container keeps running +tail -f /dev/null + diff --git a/x-pack/metricbeat/module/stan/channels/_meta/data.json b/x-pack/metricbeat/module/stan/channels/_meta/data.json new file mode 100644 index 000000000000..030b6b747bb0 --- /dev/null +++ b/x-pack/metricbeat/module/stan/channels/_meta/data.json @@ -0,0 +1,32 @@ +{ + "@timestamp": "2017-10-12T08:05:34.853Z", + "event": { + "dataset": "stan.channels", + "duration": 115000, + "module": "stan" + }, + "metricset": { + "name": "channels", + "period": 10000 + }, + "service": { + "address": "localhost:32770", + "type": "stan" + }, + "stan": { + "channels": { + "bytes": 1023999504, + "depth": 977951, + "first_seq": 6166399, + "last_seq": 7144430, + "messages": 978032, + "name": "bar" + }, + "cluster": { + "id": "test-cluster" + }, + "server": { + "id": "mNKuLCRmOZD79arLFAXiaJ" + } + } +} \ No newline at end of file diff --git a/x-pack/metricbeat/module/stan/channels/_meta/docs.asciidoc b/x-pack/metricbeat/module/stan/channels/_meta/docs.asciidoc new file mode 100644 index 000000000000..16149e39da0b --- /dev/null +++ b/x-pack/metricbeat/module/stan/channels/_meta/docs.asciidoc @@ -0,0 +1 @@ +Top-level streaming server (STAN) channel statistics \ No newline at end of file diff --git a/x-pack/metricbeat/module/stan/channels/_meta/fields.yml b/x-pack/metricbeat/module/stan/channels/_meta/fields.yml new file mode 100644 index 000000000000..aa0dc557761e --- /dev/null +++ b/x-pack/metricbeat/module/stan/channels/_meta/fields.yml @@ -0,0 +1,30 @@ +- name: channels + type: group + description: > + Contains stan / nats streaming/serverz endpoint metrics + release: beta + fields: + - name: name + type: keyword + description: > + The name of the STAN streaming channel + - name: messages + type: long + description: > + The number of STAN streaming messages + - name: bytes + type: long + description: > + The number of STAN bytes in the channel + - name: first_seq + type: long + description: > + First sequence number stored in the channel. If first_seq > min([seq in subscriptions]) data loss has possibly occurred + - name: last_seq + type: long + description: > + Last sequence number stored in the channel + - name: depth + type: long + description: > + Queue depth based upon current sequence number and highest reported subscriber sequence number diff --git a/x-pack/metricbeat/module/stan/channels/_meta/test/channels.json b/x-pack/metricbeat/module/stan/channels/_meta/test/channels.json new file mode 100644 index 000000000000..b7522cdc1b2c --- /dev/null +++ b/x-pack/metricbeat/module/stan/channels/_meta/test/channels.json @@ -0,0 +1,1965 @@ +{ + "cluster_id": "nats-smp", + "server_id": "drE5wVcRP3jvBrUbu2i48E", + "now": "2019-07-28T14:39:53.765831341Z", + "offset": 0, + "limit": 1024, + "count": 55, + "total": 55, + "channels": [ + { + "name": "evmon.sync", + "msgs": 4, + "bytes": 2606, + "first_seq": 1, + "last_seq": 4, + "subscriptions": [ + { + "client_id": "PolicySync_19978", + "inbox": "_INBOX.aATevIULHA7Va0i0slElun", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i6Ia", + "is_durable": false, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 4, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "feedback.alerts", + "msgs": 0, + "bytes": 0, + "first_seq": 0, + "last_seq": 0, + "subscriptions": [ + { + "client_id": "jetstream", + "inbox": "_INBOX.hFr9qdcbbz7uAVmOvUvMcd", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2iAFa", + "queue_name": "jetstream:jetstream", + "is_durable": true, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "feedback.artemis", + "msgs": 0, + "bytes": 0, + "first_seq": 0, + "last_seq": 0, + "subscriptions": [ + { + "client_id": "jetstream", + "inbox": "_INBOX.hFr9qdcbbz7uAVmOvUvMeN", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2iAHA", + "queue_name": "jetstream:jetstream", + "is_durable": true, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "feedback.census-policy.1c0d2330-4f16-454f-b818-246c6f14ae32", + "msgs": 10, + "bytes": 2654, + "first_seq": 1, + "last_seq": 10, + "subscriptions": [ + { + "client_id": "jetstream", + "inbox": "_INBOX.hFr9qdcbbz7uAVmOvUvMxX", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2iAYY", + "queue_name": "jetstream:jetstream", + "is_durable": true, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 10, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "feedback.census-sensor.1c0d2330-4f16-454f-b818-246c6f14ae32", + "msgs": 117, + "bytes": 40874, + "first_seq": 1, + "last_seq": 117, + "subscriptions": [ + { + "client_id": "jetstream", + "inbox": "_INBOX.hFr9qdcbbz7uAVmOvUvMzH", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2iAa8", + "queue_name": "jetstream:jetstream", + "is_durable": true, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 117, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "feedback.endpoint-health", + "msgs": 0, + "bytes": 0, + "first_seq": 0, + "last_seq": 0, + "subscriptions": [ + { + "client_id": "jetstream", + "inbox": "_INBOX.hFr9qdcbbz7uAVmOvUvMsJ", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2iATo", + "queue_name": "jetstream:jetstream", + "is_durable": true, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "feedback.events-collection", + "msgs": 0, + "bytes": 0, + "first_seq": 0, + "last_seq": 0, + "subscriptions": [ + { + "client_id": "jetstream", + "inbox": "_INBOX.hFr9qdcbbz7uAVmOvUvMvn", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2iAWy", + "queue_name": "jetstream:jetstream", + "is_durable": true, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "feedback.events-stats", + "msgs": 0, + "bytes": 0, + "first_seq": 0, + "last_seq": 0, + "subscriptions": [ + { + "client_id": "jetstream", + "inbox": "_INBOX.hFr9qdcbbz7uAVmOvUvMop", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2iAQe", + "queue_name": "jetstream:jetstream", + "is_durable": true, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "feedback.generic-response", + "msgs": 0, + "bytes": 0, + "first_seq": 0, + "last_seq": 0, + "subscriptions": [ + { + "client_id": "jetstream", + "inbox": "_INBOX.hFr9qdcbbz7uAVmOvUvMn5", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2iAP4", + "queue_name": "jetstream:jetstream", + "is_durable": true, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "feedback.login", + "msgs": 0, + "bytes": 0, + "first_seq": 0, + "last_seq": 0, + "subscriptions": [ + { + "client_id": "jetstream", + "inbox": "_INBOX.hFr9qdcbbz7uAVmOvUvMg7", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2iAIk", + "queue_name": "jetstream:jetstream", + "is_durable": true, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "feedback.rules", + "msgs": 0, + "bytes": 0, + "first_seq": 0, + "last_seq": 0, + "subscriptions": [ + { + "client_id": "jetstream", + "inbox": "_INBOX.hFr9qdcbbz7uAVmOvUvMu3", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2iAVO", + "queue_name": "jetstream:jetstream", + "is_durable": true, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "feedback.sensor-statistics-v2", + "msgs": 0, + "bytes": 0, + "first_seq": 0, + "last_seq": 0, + "subscriptions": [ + { + "client_id": "jetstream", + "inbox": "_INBOX.hFr9qdcbbz7uAVmOvUvMqZ", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2iASE", + "queue_name": "jetstream:jetstream", + "is_durable": true, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "feedback.stats", + "msgs": 0, + "bytes": 0, + "first_seq": 0, + "last_seq": 0, + "subscriptions": [ + { + "client_id": "jetstream", + "inbox": "_INBOX.hFr9qdcbbz7uAVmOvUvMat", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2iAE0", + "queue_name": "jetstream:jetstream", + "is_durable": true, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "feedback.system-survey", + "msgs": 0, + "bytes": 0, + "first_seq": 0, + "last_seq": 0, + "subscriptions": [ + { + "client_id": "jetstream", + "inbox": "_INBOX.hFr9qdcbbz7uAVmOvUvMlL", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2iANU", + "queue_name": "jetstream:jetstream", + "is_durable": true, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "feedback.timeline", + "msgs": 0, + "bytes": 0, + "first_seq": 0, + "last_seq": 0, + "subscriptions": [ + { + "client_id": "jetstream", + "inbox": "_INBOX.hFr9qdcbbz7uAVmOvUvMjb", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2iALu", + "queue_name": "jetstream:jetstream", + "is_durable": true, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "feedback.whitelist", + "msgs": 0, + "bytes": 0, + "first_seq": 0, + "last_seq": 0, + "subscriptions": [ + { + "client_id": "jetstream", + "inbox": "_INBOX.hFr9qdcbbz7uAVmOvUvMhr", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2iAKK", + "queue_name": "jetstream:jetstream", + "is_durable": true, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "iris.task", + "msgs": 0, + "bytes": 0, + "first_seq": 0, + "last_seq": 0, + "subscriptions": [ + { + "client_id": "iris_19969_JnN-xUioKE4_task", + "inbox": "_INBOX.CfWNB5a9Wrf903aa4AbbJL", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i5dU", + "is_durable": false, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "iris_19973_KWCkEsBYMCA_task", + "inbox": "_INBOX.EzsKP1uRLXk7zxxyaaK6OS", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i5us", + "is_durable": false, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "iris_19974_pUlU4pDZP5o_task", + "inbox": "_INBOX.LNMD0LZzTt54evuJvlScGC", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i62m", + "is_durable": false, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "iris_19972_6ATU0b_x4GA_task", + "inbox": "_INBOX.rmaZd2U8Zg5TuTNaE8dNLJ", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i6Ag", + "is_durable": false, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "policy.sync", + "msgs": 5, + "bytes": 865, + "first_seq": 1, + "last_seq": 5, + "subscriptions": [ + { + "client_id": "EvmonSync_18597", + "inbox": "_INBOX.Gew6Kgyo267QciQcrXYGI1", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i4Vw", + "is_durable": false, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 5, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "sensor.alert", + "msgs": 0, + "bytes": 0, + "first_seq": 0, + "last_seq": 0, + "subscriptions": [ + { + "client_id": "packrat_consumer_19854", + "inbox": "37e5e4faff53c7a17e31c6", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i5B2", + "queue_name": "packrat:packrat_alert_qg", + "is_durable": true, + "is_offline": false, + "max_inflight": 128, + "ack_wait": 128, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "packrat_consumer_19853", + "inbox": "d0be381d44197f5e3679d", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i5KW", + "queue_name": "packrat:packrat_alert_qg", + "is_durable": true, + "is_offline": false, + "max_inflight": 128, + "ack_wait": 128, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "packrat_consumer_19855", + "inbox": "6860a88df228e1c8a6d076", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i5U0", + "queue_name": "packrat:packrat_alert_qg", + "is_durable": true, + "is_offline": false, + "max_inflight": 128, + "ack_wait": 128, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "cargoplane", + "inbox": "_INBOX.dKNSAXz01qhTUI8ie3qtEE", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i5my", + "queue_name": "cargoplane", + "is_durable": false, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "sensor.feedback.endpoint-health", + "msgs": 0, + "bytes": 0, + "first_seq": 0, + "last_seq": 0, + "subscriptions": [ + { + "client_id": "cargoplane", + "inbox": "_INBOX.dKNSAXz01qhTUI8ie3qtqI", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i5tI", + "queue_name": "cargoplane", + "is_durable": false, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "sensor.feedback.sensor-statistics", + "msgs": 0, + "bytes": 0, + "first_seq": 0, + "last_seq": 0, + "subscriptions": [ + { + "client_id": "cargoplane", + "inbox": "_INBOX.dKNSAXz01qhTUI8ie3qtgm", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i5ri", + "queue_name": "cargoplane", + "is_durable": false, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "sensor.file", + "msgs": 0, + "bytes": 0, + "first_seq": 0, + "last_seq": 0, + "subscriptions": [ + { + "client_id": "kratos_consumer_18602", + "inbox": "22fa46f205f94a6befe1a5", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i4nK", + "queue_name": "krotos_sensor.file_qg:krotos_sensor.file_qg", + "is_durable": true, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "sensor.fraggo", + "msgs": 0, + "bytes": 0, + "first_seq": 0, + "last_seq": 0, + "subscriptions": [ + { + "client_id": "fraggo_bkrku0dklpukhg54ofqg_3", + "inbox": "_INBOX.NM8SUzN1Wxanob4pCWeZT4", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i4G8", + "queue_name": "fraggo_qg:qconsume", + "is_durable": true, + "is_offline": false, + "max_inflight": 256, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "fraggo_bkrku0dklpukhg54ofqg_4", + "inbox": "_INBOX.NM8SUzN1Wxanob4pCWeZwU", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i4Hi", + "queue_name": "fraggo_qg:qconsume", + "is_durable": true, + "is_offline": false, + "max_inflight": 256, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "fraggo_bkrku0dklpukhg54ofqg_5", + "inbox": "_INBOX.NM8SUzN1Wxanob4pCWeaPu", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i4JI", + "queue_name": "fraggo_qg:qconsume", + "is_durable": true, + "is_offline": false, + "max_inflight": 256, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "fraggo_bkrku0dklpukhg54ofqg_6", + "inbox": "_INBOX.NM8SUzN1Wxanob4pCWeatK", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i4Ks", + "queue_name": "fraggo_qg:qconsume", + "is_durable": true, + "is_offline": false, + "max_inflight": 256, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "sensor.message", + "msgs": 0, + "bytes": 0, + "first_seq": 0, + "last_seq": 0, + "subscriptions": [ + { + "client_id": "packrat_consumer_19854", + "inbox": "bd5cd5be5c4b71a1828a40", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i5Iw", + "queue_name": "packrat:packrat_message_qg", + "is_durable": true, + "is_offline": false, + "max_inflight": 128, + "ack_wait": 128, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "packrat_consumer_19853", + "inbox": "ab4f18095efc9c36e694e7", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i5SQ", + "queue_name": "packrat:packrat_message_qg", + "is_durable": true, + "is_offline": false, + "max_inflight": 128, + "ack_wait": 128, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "packrat_consumer_19855", + "inbox": "5405be5a758c5ae8763ce5", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i5bu", + "queue_name": "packrat:packrat_message_qg", + "is_durable": true, + "is_offline": false, + "max_inflight": 128, + "ack_wait": 128, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "cargoplane", + "inbox": "_INBOX.dKNSAXz01qhTUI8ie3qtNk", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i5oY", + "queue_name": "cargoplane", + "is_durable": false, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "sensor.message.policyResponse", + "msgs": 0, + "bytes": 0, + "first_seq": 0, + "last_seq": 0, + "subscriptions": [ + { + "client_id": "packrat_consumer_19854", + "inbox": "7b6061e5f3b8d818c7db57", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i5EC", + "queue_name": "packrat:packrat_policyResponse_qg", + "is_durable": true, + "is_offline": false, + "max_inflight": 128, + "ack_wait": 128, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "packrat_consumer_19853", + "inbox": "4c2e54659b9b8464c1181", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i5Ng", + "queue_name": "packrat:packrat_policyResponse_qg", + "is_durable": true, + "is_offline": false, + "max_inflight": 128, + "ack_wait": 128, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "packrat_consumer_19855", + "inbox": "b76e072a562ee3ef8e35c4", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i5XA", + "queue_name": "packrat:packrat_policyResponse_qg", + "is_durable": true, + "is_offline": false, + "max_inflight": 128, + "ack_wait": 128, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "PolicyStatus_19978", + "inbox": "_INBOX.aATevIULHA7Va0i0slEnLd", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i6S4", + "queue_name": "sensor.message.policyResponse:sensor.message.policyResponse.group", + "is_durable": true, + "is_offline": false, + "max_inflight": 8192, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "sensor.message.shutdownResponse", + "msgs": 0, + "bytes": 0, + "first_seq": 0, + "last_seq": 0, + "subscriptions": [ + { + "client_id": "packrat_consumer_19854", + "inbox": "67d4a14b449ef135ee8d86", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i5Fm", + "queue_name": "packrat:packrat_shutdownResponse_qg", + "is_durable": true, + "is_offline": false, + "max_inflight": 128, + "ack_wait": 128, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "packrat_consumer_19853", + "inbox": "eba867033c5a24d50fe33a", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i5PG", + "queue_name": "packrat:packrat_shutdownResponse_qg", + "is_durable": true, + "is_offline": false, + "max_inflight": 128, + "ack_wait": 128, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "packrat_consumer_19855", + "inbox": "668d672fc35fdeef08739a", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i5Yk", + "queue_name": "packrat:packrat_shutdownResponse_qg", + "is_durable": true, + "is_offline": false, + "max_inflight": 128, + "ack_wait": 128, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "assets_consumer_18646", + "inbox": "9c2b7d2e3e8d0c7d443490", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i4s4", + "queue_name": "assets_sensor.message.shutdownResponse_qg:assets_sensor.message.shutdownResponse_qg", + "is_durable": true, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "sensor.message.systemNetworkSurveyResponse", + "msgs": 0, + "bytes": 0, + "first_seq": 0, + "last_seq": 0, + "subscriptions": [ + { + "client_id": "packrat_consumer_19854", + "inbox": "152fac7b57ff5403f79aa0", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i5Cc", + "queue_name": "packrat:packrat_systemNetworkSurveyResponse_qg", + "is_durable": true, + "is_offline": false, + "max_inflight": 128, + "ack_wait": 128, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "packrat_consumer_19853", + "inbox": "8ca6551be87c3e15de0529", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i5M6", + "queue_name": "packrat:packrat_systemNetworkSurveyResponse_qg", + "is_durable": true, + "is_offline": false, + "max_inflight": 128, + "ack_wait": 128, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "packrat_consumer_19855", + "inbox": "de18cad520f4dc5363c1af", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i5Va", + "queue_name": "packrat:packrat_systemNetworkSurveyResponse_qg", + "is_durable": true, + "is_offline": false, + "max_inflight": 128, + "ack_wait": 128, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "assets_consumer_18646", + "inbox": "1fe98d38982bc66fd7613c", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i4qU", + "queue_name": "assets_sensor.message.systemNetworkSurveyResponse_qg:assets_sensor.message.systemNetworkSurveyResponse_qg", + "is_durable": true, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "sensor.message.systemSurveyResponse", + "msgs": 0, + "bytes": 0, + "first_seq": 0, + "last_seq": 0, + "subscriptions": [ + { + "client_id": "assets_consumer_18646", + "inbox": "deca00d0dc0ab84879b4d8", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i4ou", + "queue_name": "assets_sensor.message.systemSurveyResponse_qg:assets_sensor.message.systemSurveyResponse_qg", + "is_durable": true, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "packrat_consumer_19854", + "inbox": "d07b52e1f109675f59f598", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i5HM", + "queue_name": "packrat:packrat_systemSurveyResponse_qg", + "is_durable": true, + "is_offline": false, + "max_inflight": 128, + "ack_wait": 128, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "packrat_consumer_19853", + "inbox": "321a353199867a3e478f91", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i5Qq", + "queue_name": "packrat:packrat_systemSurveyResponse_qg", + "is_durable": true, + "is_offline": false, + "max_inflight": 128, + "ack_wait": 128, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "packrat_consumer_19855", + "inbox": "a2627ef32aa6ea9d197c22", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i5aK", + "queue_name": "packrat:packrat_systemSurveyResponse_qg", + "is_durable": true, + "is_offline": false, + "max_inflight": 128, + "ack_wait": 128, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "cargoplane", + "inbox": "_INBOX.dKNSAXz01qhTUI8ie3qtXG", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i5q8", + "queue_name": "cargoplane", + "is_durable": false, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "sensor.out.dead", + "msgs": 0, + "bytes": 0, + "first_seq": 0, + "last_seq": 0, + "subscriptions": [ + { + "client_id": "iris_19969_JnN-xUioKE4_task", + "inbox": "_INBOX.CfWNB5a9Wrf903aa4AbbLH", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i5f4", + "is_durable": false, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "iris_19973_KWCkEsBYMCA_task", + "inbox": "_INBOX.EzsKP1uRLXk7zxxyaaK6SU", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i5wS", + "is_durable": false, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "iris_19974_pUlU4pDZP5o_task", + "inbox": "_INBOX.LNMD0LZzTt54evuJvlScM4", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i64M", + "is_durable": false, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "iris_19972_6ATU0b_x4GA_task", + "inbox": "_INBOX.rmaZd2U8Zg5TuTNaE8dNOX", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i6CG", + "is_durable": false, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "sensor.session.ack", + "msgs": 0, + "bytes": 0, + "first_seq": 0, + "last_seq": 0, + "subscriptions": [ + { + "client_id": "AckBot_19683_12eae663", + "inbox": "_INBOX.r5KNLGpTn5GybqLGJbTGRe", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i4yO", + "queue_name": "sensor.session.ack:sensor.session.ack.qg", + "is_durable": true, + "is_offline": false, + "max_inflight": 8192, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "AckBot_19683_5f59b864", + "inbox": "_INBOX.r5KNLGpTn5GybqLGJbTGtQ", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i4zy", + "queue_name": "sensor.session.ack:sensor.session.ack.qg", + "is_durable": true, + "is_offline": false, + "max_inflight": 8192, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "sensor.session.close", + "msgs": 0, + "bytes": 0, + "first_seq": 0, + "last_seq": 0, + "subscriptions": [ + { + "client_id": "SessBotClose_19683_109cb6db", + "inbox": "_INBOX.r5KNLGpTn5GybqLGJbTH1M", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i538", + "queue_name": "sensor.session.close:sensor.session.closeSessBotClose.qg", + "is_durable": true, + "is_offline": false, + "max_inflight": 8192, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "sensor.session.open", + "msgs": 0, + "bytes": 0, + "first_seq": 0, + "last_seq": 0, + "subscriptions": [ + { + "client_id": "ActiveMon_18597", + "inbox": "_INBOX.Gew6Kgyo267QciQcrXYFF1", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i4O2", + "is_durable": false, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "HiggoBot_19445_2d574335", + "inbox": "_INBOX.4cX5QV4YzWusN2hoe6j7uH", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i4te", + "queue_name": "sensor.session.open:sensor.session.openhiggo.qg", + "is_durable": true, + "is_offline": false, + "max_inflight": 8192, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "SessBotOpen_19683_7e937fb5", + "inbox": "_INBOX.r5KNLGpTn5GybqLGJbTHHE", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i51Y", + "queue_name": "sensor.session.open:sensor.session.openSessBotOpen.qg", + "is_durable": true, + "is_offline": false, + "max_inflight": 64, + "ack_wait": 60, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "stan.alertDismiss", + "msgs": 0, + "bytes": 0, + "first_seq": 0, + "last_seq": 0, + "subscriptions": [ + { + "client_id": "alert_dismisser_18605", + "inbox": "_INBOX.MIZc6DRAvPEvZO76HAIXTz", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i4dq", + "queue_name": "alertDismisser:stan.alertDismiss.group", + "is_durable": true, + "is_offline": false, + "max_inflight": 4, + "ack_wait": 120, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "stan.artifact.default-whitelist-macos", + "msgs": 1, + "bytes": 46869, + "first_seq": 1, + "last_seq": 1, + "subscriptions": [ + { + "client_id": "smeagol_connector_19734", + "inbox": "9b45e0f79cf60c1a981a71", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i6NK", + "is_durable": false, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 1, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "stan.artifact.default-whitelist-win", + "msgs": 1, + "bytes": 468380, + "first_seq": 2, + "last_seq": 2, + "subscriptions": [ + { + "client_id": "smeagol_connector_19734", + "inbox": "a585d6b05cf852210377df", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i6l2", + "is_durable": false, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 2, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "stan.artifact.endpointmacho", + "msgs": 1, + "bytes": 1679250, + "first_seq": 2, + "last_seq": 2, + "subscriptions": [ + { + "client_id": "smeagol_connector_19734", + "inbox": "ee2f6aa8c92b1f26bf4731", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i6QU", + "is_durable": false, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 2, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "stan.artifact.endpointmacho-whitelist", + "msgs": 1, + "bytes": 65106, + "first_seq": 2, + "last_seq": 2, + "subscriptions": [ + { + "client_id": "smeagol_connector_19734", + "inbox": "ab644250d31251a8c41ae3", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i6hs", + "is_durable": false, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 2, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "stan.artifact.endpointmacro", + "msgs": 1, + "bytes": 187130, + "first_seq": 2, + "last_seq": 2, + "subscriptions": [ + { + "client_id": "smeagol_connector_19734", + "inbox": "72ed357b7010f10ad7d530", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i6Lk", + "is_durable": false, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 2, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "stan.artifact.endpointmacro-whitelist", + "msgs": 1, + "bytes": 60852, + "first_seq": 2, + "last_seq": 2, + "subscriptions": [ + { + "client_id": "smeagol_connector_19734", + "inbox": "23455b15790f0fbc61f72e", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i6Ou", + "is_durable": false, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 2, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "stan.artifact.endpointpe", + "msgs": 1, + "bytes": 13400830, + "first_seq": 2, + "last_seq": 2, + "subscriptions": [ + { + "client_id": "smeagol_connector_19734", + "inbox": "4069ec27b679b6a2969851", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i7AK", + "is_durable": false, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 2, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "stan.artifact.endpointpe-blacklist", + "msgs": 1, + "bytes": 5243033, + "first_seq": 2, + "last_seq": 2, + "subscriptions": [ + { + "client_id": "rugo", + "inbox": "_INBOX.tuwUxYDi38CbqlJbn1NllX", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i4fQ", + "is_durable": false, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 2, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "stan.artifact.endpointpe-whitelist", + "msgs": 1, + "bytes": 5240348, + "first_seq": 2, + "last_seq": 2, + "subscriptions": [ + { + "client_id": "smeagol_connector_19734", + "inbox": "b0205277c87d5193600905", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i6jS", + "is_durable": false, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 2, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "stan.artifact.rules", + "msgs": 1, + "bytes": 1050028, + "first_seq": 2, + "last_seq": 2, + "subscriptions": [ + { + "client_id": "rugo", + "inbox": "_INBOX.tuwUxYDi38CbqlJbn1Nlqs", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i4lk", + "is_durable": false, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 2, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "stan.artifact.smp-policy-defaults", + "msgs": 1, + "bytes": 228, + "first_seq": 1, + "last_seq": 1, + "subscriptions": [ + { + "client_id": "SyncArbiter_19978", + "inbox": "_INBOX.aATevIULHA7Va0i0slEmi9", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i6KA", + "is_durable": false, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 1, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "stan.private.gorat.delete", + "msgs": 0, + "bytes": 0, + "first_seq": 0, + "last_seq": 0, + "subscriptions": [ + { + "client_id": "gorat_remover_18605", + "inbox": "_INBOX.MIZc6DRAvPEvZO76HAIWqN", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i4Z6", + "is_durable": false, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "stan.sensor.blacklist", + "msgs": 0, + "bytes": 0, + "first_seq": 0, + "last_seq": 0, + "subscriptions": [ + { + "client_id": "iris_19969_JnN-xUioKE4_task", + "inbox": "_INBOX.CfWNB5a9Wrf903aa4AbbND", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i5ge", + "is_durable": false, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "iris_19973_KWCkEsBYMCA_task", + "inbox": "_INBOX.EzsKP1uRLXk7zxxyaaK6WW", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i5y2", + "is_durable": false, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "iris_19974_pUlU4pDZP5o_task", + "inbox": "_INBOX.LNMD0LZzTt54evuJvlScRw", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i65w", + "is_durable": false, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "iris_19972_6ATU0b_x4GA_task", + "inbox": "_INBOX.rmaZd2U8Zg5TuTNaE8dNRl", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i6Dq", + "is_durable": false, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "stan.silent.alert", + "msgs": 0, + "bytes": 0, + "first_seq": 0, + "last_seq": 0, + "subscriptions": [ + { + "client_id": "cargoplane", + "inbox": "_INBOX.dKNSAXz01qhTUI8ie3qt4i", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i5lO", + "queue_name": "cargoplane", + "is_durable": false, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "stan.system.delete", + "msgs": 0, + "bytes": 0, + "first_seq": 0, + "last_seq": 0, + "subscriptions": [ + { + "client_id": "gorat_remover_18605", + "inbox": "_INBOX.MIZc6DRAvPEvZO76HAIWMf", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i4RC", + "is_durable": false, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "grouper_19756_1154ea", + "inbox": "_INBOX.Ixonb40xwWrjifYoJO8lbI", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i56I", + "durable_name": "stan.system.delete_grouper", + "is_durable": true, + "is_offline": false, + "max_inflight": 25, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "grouper_18612_5bc04c", + "inbox": "_INBOX.99otlg166ncFNmkGI7IfqZ", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i4MS", + "durable_name": "stan.system.delete_grouper", + "is_durable": true, + "is_offline": true, + "max_inflight": 25, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "grouper_19316_aeccf2", + "inbox": "_INBOX.OyibBHlBoNpd9R79RnZmeY", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i4h0", + "durable_name": "stan.system.delete_grouper", + "is_durable": true, + "is_offline": true, + "max_inflight": 25, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "system.endpoint", + "msgs": 0, + "bytes": 0, + "first_seq": 0, + "last_seq": 0, + "subscriptions": [ + { + "client_id": "grouper_19756_1154ea", + "inbox": "_INBOX.Ixonb40xwWrjifYoJO8luO", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i59S", + "durable_name": "system.endpoint_grouper", + "is_durable": true, + "is_offline": false, + "max_inflight": 25, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "grouper_18612_5bc04c", + "inbox": "_INBOX.99otlg166ncFNmkGI7IgB1", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i4XW", + "durable_name": "system.endpoint_grouper", + "is_durable": true, + "is_offline": true, + "max_inflight": 25, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "grouper_19316_aeccf2", + "inbox": "_INBOX.OyibBHlBoNpd9R79RnZmuE", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i4kA", + "durable_name": "system.endpoint_grouper", + "is_durable": true, + "is_offline": true, + "max_inflight": 25, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "system.endpoint_change", + "msgs": 0, + "bytes": 0, + "first_seq": 0, + "last_seq": 0, + "subscriptions": [ + { + "client_id": "grouper_19756_1154ea", + "inbox": "_INBOX.Ixonb40xwWrjifYoJO8lkq", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i57s", + "durable_name": "system.endpoint_change_grouper", + "is_durable": true, + "is_offline": false, + "max_inflight": 25, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "iris_19969_JnN-xUioKE4_task", + "inbox": "_INBOX.CfWNB5a9Wrf903aa4AbbR5", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i5jo", + "is_durable": false, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "iris_19973_KWCkEsBYMCA_task", + "inbox": "_INBOX.EzsKP1uRLXk7zxxyaaK6ea", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i61C", + "is_durable": false, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "iris_19974_pUlU4pDZP5o_task", + "inbox": "_INBOX.LNMD0LZzTt54evuJvlScdg", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i696", + "is_durable": false, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "iris_19972_6ATU0b_x4GA_task", + "inbox": "_INBOX.rmaZd2U8Zg5TuTNaE8dNYD", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i6H0", + "is_durable": false, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "grouper_18612_5bc04c", + "inbox": "_INBOX.99otlg166ncFNmkGI7Ig0n", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i4Pc", + "durable_name": "system.endpoint_change_grouper", + "is_durable": true, + "is_offline": true, + "max_inflight": 25, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "grouper_19316_aeccf2", + "inbox": "_INBOX.OyibBHlBoNpd9R79RnZmmO", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i4ia", + "durable_name": "system.endpoint_change_grouper", + "is_durable": true, + "is_offline": true, + "max_inflight": 25, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "system.hostIsolation", + "msgs": 0, + "bytes": 0, + "first_seq": 0, + "last_seq": 0, + "subscriptions": [ + { + "client_id": "PolicyStatus_19978", + "inbox": "_INBOX.aATevIULHA7Va0i0slEnVV", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i6Te", + "queue_name": "system.hostIsolation:system.hostIsolation.group", + "is_durable": true, + "is_offline": false, + "max_inflight": 8192, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "system.index", + "msgs": 1, + "bytes": 20, + "first_seq": 0, + "last_seq": 1, + "subscriptions": [ + { + "client_id": "gorat_1", + "inbox": "_INBOX.MIZc6DRAvPEvZO76HAIW7o", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i4Sm", + "queue_name": "gorat:system.index.group", + "is_durable": true, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 300, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "gorat_0", + "inbox": "_INBOX.MIZc6DRAvPEvZO76HAIVsx", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i4UM", + "queue_name": "gorat:system.index.group", + "is_durable": true, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 300, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "system.index.alert", + "msgs": 0, + "bytes": 0, + "first_seq": 0, + "last_seq": 0, + "subscriptions": [ + { + "client_id": "gorat_1", + "inbox": "_INBOX.MIZc6DRAvPEvZO76HAIWgT", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i4ag", + "queue_name": "gorat:system.index.alert.group", + "is_durable": true, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 300, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "gorat_0", + "inbox": "_INBOX.MIZc6DRAvPEvZO76HAIWWZ", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i4cG", + "queue_name": "gorat:system.index.alert.group", + "is_durable": true, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 300, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "system.sensor", + "msgs": 0, + "bytes": 0, + "first_seq": 0, + "last_seq": 0, + "subscriptions": [ + { + "client_id": "iris_19969_JnN-xUioKE4_task", + "inbox": "_INBOX.CfWNB5a9Wrf903aa4AbbP9", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i5iE", + "is_durable": false, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "iris_19973_KWCkEsBYMCA_task", + "inbox": "_INBOX.EzsKP1uRLXk7zxxyaaK6aY", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i5zc", + "is_durable": false, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "iris_19974_pUlU4pDZP5o_task", + "inbox": "_INBOX.LNMD0LZzTt54evuJvlScXo", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i67W", + "is_durable": false, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "iris_19972_6ATU0b_x4GA_task", + "inbox": "_INBOX.rmaZd2U8Zg5TuTNaE8dNUz", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i6FQ", + "is_durable": false, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "SirgoSysBot19683_8c7b9706", + "inbox": "_INBOX.r5KNLGpTn5GybqLGJbTGhW", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i54i", + "queue_name": "system.sensor:system.sensorSirgoSysBot.qg", + "is_durable": true, + "is_offline": false, + "max_inflight": 8192, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "SensorCtx_19978_iter_0", + "inbox": "_INBOX.aATevIULHA7Va0i0slEo8z", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i6VE", + "queue_name": "system.sensorGassitSensor.qg:system.sensorGassitSensor.qg", + "is_durable": true, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "SensorCtx_19978_iter_1", + "inbox": "_INBOX.aATevIULHA7Va0i0slEomT", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i6Wo", + "queue_name": "system.sensorGassitSensor.qg:system.sensorGassitSensor.qg", + "is_durable": true, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "SensorCtx_19978_iter_2", + "inbox": "_INBOX.aATevIULHA7Va0i0slEpPx", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i6YO", + "queue_name": "system.sensorGassitSensor.qg:system.sensorGassitSensor.qg", + "is_durable": true, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "SensorCtx_19978_iter_3", + "inbox": "_INBOX.aATevIULHA7Va0i0slEq3R", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i6Zy", + "queue_name": "system.sensorGassitSensor.qg:system.sensorGassitSensor.qg", + "is_durable": true, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "SensorCtx_19978_iter_4", + "inbox": "_INBOX.aATevIULHA7Va0i0slEqgv", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i6bY", + "queue_name": "system.sensorGassitSensor.qg:system.sensorGassitSensor.qg", + "is_durable": true, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "SensorCtx_19978_iter_5", + "inbox": "_INBOX.aATevIULHA7Va0i0slErKP", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i6d8", + "queue_name": "system.sensorGassitSensor.qg:system.sensorGassitSensor.qg", + "is_durable": true, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "SensorCtx_19978_iter_6", + "inbox": "_INBOX.aATevIULHA7Va0i0slErxt", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i6ei", + "queue_name": "system.sensorGassitSensor.qg:system.sensorGassitSensor.qg", + "is_durable": true, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "SensorCtx_19978_iter_7", + "inbox": "_INBOX.aATevIULHA7Va0i0slEsbN", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i6gI", + "queue_name": "system.sensorGassitSensor.qg:system.sensorGassitSensor.qg", + "is_durable": true, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "system.task.indexed", + "msgs": 0, + "bytes": 0, + "first_seq": 0, + "last_seq": 0, + "subscriptions": [ + { + "client_id": "IdxBot_19683_98975eae", + "inbox": "_INBOX.r5KNLGpTn5GybqLGJbTHPA", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i4vE", + "queue_name": "system.task.indexed:system.task.indexed.qg", + "is_durable": true, + "is_offline": false, + "max_inflight": 8192, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "IdxBot_19683_5651ebb7", + "inbox": "_INBOX.r5KNLGpTn5GybqLGJbTH9I", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i4wo", + "queue_name": "system.task.indexed:system.task.indexed.qg", + "is_durable": true, + "is_offline": false, + "max_inflight": 8192, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + } + ] + } + ] +} \ No newline at end of file diff --git a/x-pack/metricbeat/module/stan/channels/channels.go b/x-pack/metricbeat/module/stan/channels/channels.go new file mode 100644 index 000000000000..f7c5b9aef6fd --- /dev/null +++ b/x-pack/metricbeat/module/stan/channels/channels.go @@ -0,0 +1,78 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License; +// you may not use this file except in compliance with the Elastic License. + +package channels + +import ( + "github.com/pkg/errors" + + "github.com/elastic/beats/libbeat/logp" + "github.com/elastic/beats/metricbeat/helper" + "github.com/elastic/beats/metricbeat/mb" + "github.com/elastic/beats/metricbeat/mb/parse" +) + +const ( + defaultScheme = "http" + defaultPath = "/streaming/channelsz" + queryParams = "subs=1" +) + +var ( + hostParser = parse.URLHostParserBuilder{ + DefaultScheme: defaultScheme, + DefaultPath: defaultPath, + PathConfigKey: "channels.metrics_path", + QueryParams: queryParams, + }.Build() +) + +func init() { + mb.Registry.MustAddMetricSet("stan", "channels", New, + mb.WithHostParser(hostParser), + mb.DefaultMetricSet(), + ) +} + +// MetricSet holds any configuration or state information. It must implement +// the mb.MetricSet interface. And this is best achieved by embedding +// mb.BaseMetricSet because it implements all of the required mb.MetricSet +// interface methods except for Fetch. +type MetricSet struct { + mb.BaseMetricSet + http *helper.HTTP + Log *logp.Logger +} + +// New creates a new instance of the MetricSet. New is responsible for unpacking +// any MetricSet specific configuration options if there are any. +func New(base mb.BaseMetricSet) (mb.MetricSet, error) { + config := struct{}{} + if err := base.Module().UnpackConfig(&config); err != nil { + return nil, err + } + + http, err := helper.NewHTTP(base) + if err != nil { + return nil, err + } + return &MetricSet{ + base, + http, + logp.NewLogger("stan"), + }, nil +} + +// Fetch implements the data gathering and data conversion to the right format. +func (m *MetricSet) Fetch(r mb.ReporterV2) (err error) { + content, err := m.http.FetchContent() + if err != nil { + return errors.Wrap(err, "error in fetch") + } + if err = eventsMapping(content, r); err != nil { + return errors.Wrap(err, "error in mapping") + } + + return nil +} diff --git a/x-pack/metricbeat/module/stan/channels/channels_integration_test.go b/x-pack/metricbeat/module/stan/channels/channels_integration_test.go new file mode 100644 index 000000000000..bd83bbdea471 --- /dev/null +++ b/x-pack/metricbeat/module/stan/channels/channels_integration_test.go @@ -0,0 +1,42 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License; +// you may not use this file except in compliance with the Elastic License. + +// +build integration + +package channels + +import ( + "testing" + + "github.com/stretchr/testify/assert" + + "github.com/elastic/beats/libbeat/tests/compose" + mbtest "github.com/elastic/beats/metricbeat/mb/testing" +) + +func TestData(t *testing.T) { + service := compose.EnsureUp(t, "stan") + + m := mbtest.NewFetcher(t, getConfig(service.Host())) + m.WriteEvents(t, "") +} + +func TestFetch(t *testing.T) { + service := compose.EnsureUp(t, "stan") + + m := mbtest.NewFetcher(t, getConfig(service.Host())) + events, errs := m.FetchEvents() + if len(errs) > 0 { + t.Fatalf("Expected 0 error, had %d. %v\n", len(errs), errs) + } + assert.NotEmpty(t, events) +} + +func getConfig(host string) map[string]interface{} { + return map[string]interface{}{ + "module": "stan", + "metricsets": []string{"channels"}, + "hosts": []string{host}, + } +} diff --git a/x-pack/metricbeat/module/stan/channels/channels_test.go b/x-pack/metricbeat/module/stan/channels/channels_test.go new file mode 100644 index 000000000000..287b6f64f708 --- /dev/null +++ b/x-pack/metricbeat/module/stan/channels/channels_test.go @@ -0,0 +1,84 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License; +// you may not use this file except in compliance with the Elastic License. + +package channels + +import ( + "io/ioutil" + "net/http" + "net/http/httptest" + "path/filepath" + "testing" + + "github.com/stretchr/testify/assert" + + mbtest "github.com/elastic/beats/metricbeat/mb/testing" +) + +func TestEventMapping(t *testing.T) { + content, err := ioutil.ReadFile("./_meta/test/channels.json") + assert.NoError(t, err) + reporter := &mbtest.CapturingReporterV2{} + err = eventsMapping(content, reporter) + assert.NoError(t, err) + const total = 55 + // 55 per-channel events in the sample + assert.Equal(t, len(reporter.GetEvents()), total) + // the last one having non-zero bytes + bytes, _ := reporter.GetEvents()[0].MetricSetFields.GetValue("bytes") + assert.True(t, bytes.(int64) > 0) + // check for existence of any non-zero channel / queue depth on known entities + events := reporter.GetEvents() + var maxDepth int64 + for _, evt := range events { + fields := evt.MetricSetFields + name, nameErr := fields.GetValue("name") + assert.NoError(t, nameErr) + depthIfc, depthErr := evt.MetricSetFields.GetValue("depth") + depth := depthIfc.(int64) + if depth > maxDepth { + maxDepth = depth + } + assert.NoError(t, depthErr) + if name == "system.index" { + assert.Equal(t, depth, int64(1)) + } + + } + // hacked in ONE queue where depth was exactly one + // so maxDepth should be 1 as well + assert.Equal(t, maxDepth, int64(1)) +} + +func TestFetchEventContent(t *testing.T) { + server := initServer() + defer server.Close() + + config := map[string]interface{}{ + "module": "stan", + "metricsets": []string{"channels"}, + "hosts": []string{server.URL}, + } + reporter := &mbtest.CapturingReporterV2{} + + metricSet := mbtest.NewReportingMetricSetV2Error(t, config) + metricSet.Fetch(reporter) + + for _, evt := range reporter.GetEvents() { + mbtest.StandardizeEvent(metricSet, evt) + } + +} + +func initServer() *httptest.Server { + absPath, _ := filepath.Abs("./_meta/test/") + + response, _ := ioutil.ReadFile(absPath + "/channels.json") + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.WriteHeader(200) + w.Header().Set("Content-Type", "application/json;") + w.Write([]byte(response)) + })) + return server +} diff --git a/x-pack/metricbeat/module/stan/channels/data.go b/x-pack/metricbeat/module/stan/channels/data.go new file mode 100644 index 000000000000..1be2b651eb5c --- /dev/null +++ b/x-pack/metricbeat/module/stan/channels/data.go @@ -0,0 +1,121 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License; +// you may not use this file except in compliance with the Elastic License. + +package channels + +import ( + "encoding/json" + + "github.com/pkg/errors" + + s "github.com/elastic/beats/libbeat/common/schema" + c "github.com/elastic/beats/libbeat/common/schema/mapstriface" + "github.com/elastic/beats/metricbeat/mb" +) + +var ( + moduleSchema = s.Schema{ + "server": s.Object{ + "id": c.Str("server_id"), + }, + "cluster": s.Object{ + "id": c.Str("cluster_id"), + }, + } + channelSchema = s.Schema{ + "name": c.Str("name"), + "messages": c.Int("msgs"), + "bytes": c.Int("bytes"), + "first_seq": c.Int("first_seq"), + "last_seq": c.Int("last_seq"), + "depth": c.Int("depth", s.Optional), // aggregated by the module + } +) + +// Subscription stores subscription related information +type Subscription struct { + QueueName string `json:"queue_name"` + IsDurable bool `json:"is_durable"` + IsOffline bool `json:"is_offline"` + IsStalled bool `json:"is_stalled"` + PendingCount int64 `json:"pending_count"` + LastSent int64 `json:"last_sent"` +} + +// Channel stores channel related information +type Channel struct { + Name string `json:"name"` + Msgs int64 `json:"msgs"` + Bytes int64 `json:"bytes"` + FirstSeq int64 `json:"first_seq"` + LastSeq int64 `json:"last_seq"` + Subscriptions []Subscription `json:"subscriptions,omitempty"` +} + +// Channels stores channels related information +type Channels struct { + ClusterID string `json:"cluster_id"` + ServerID string `json:"server_id"` + Limit uint64 `json:"limit"` + Total uint64 `json:"total"` + Channels []Channel `json:"channels,omitempty"` +} + +// eventMapping maps a channel to a Metricbeat event +func eventMapping(content map[string]interface{}) (mb.Event, error) { + fields, err := channelSchema.Apply(content) + if err != nil { + return mb.Event{}, errors.Wrap(err, "error applying channels schema") + } + + moduleFields, err := moduleSchema.Apply(content) + if err != nil { + return mb.Event{}, errors.Wrap(err, "error applying module schema") + } + + event := mb.Event{ + MetricSetFields: fields, + ModuleFields: moduleFields, + } + return event, nil +} + +// eventsMapping maps the top-level channel metrics AND also per-channel metrics AND subscriptions +func eventsMapping(content []byte, r mb.ReporterV2) error { + channelsIn := Channels{} + if err := json.Unmarshal(content, &channelsIn); err != nil { + return errors.Wrap(err, "error unmarshaling Nats streaming channels response to JSON") + } + + for _, ch := range channelsIn.Channels { + var evt mb.Event + var err error + var maxSubSeq int64 + for _, sub := range ch.Subscriptions { + if sub.LastSent > maxSubSeq { + maxSubSeq = sub.LastSent + } + } + chWrapper := map[string]interface{}{ + "cluster_id": channelsIn.ClusterID, + "server_id": channelsIn.ServerID, + "name": ch.Name, + "msgs": ch.Msgs, + "bytes": ch.Bytes, + "first_seq": ch.FirstSeq, + "last_seq": ch.LastSeq, + "depth": ch.LastSeq - maxSubSeq, // queue depth is known channel seq number - maximum consumed by subscribers + } + + if evt, err = eventMapping(chWrapper); err != nil { + r.Error(errors.Wrap(err, "error mapping channel to its schema")) + continue + } + if !r.Event(evt) { + return nil + } + } + + return nil +} diff --git a/x-pack/metricbeat/module/stan/doc.go b/x-pack/metricbeat/module/stan/doc.go new file mode 100644 index 000000000000..23e599b1111f --- /dev/null +++ b/x-pack/metricbeat/module/stan/doc.go @@ -0,0 +1,5 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License; +// you may not use this file except in compliance with the Elastic License. + +package stan diff --git a/x-pack/metricbeat/module/stan/docker-compose.yml b/x-pack/metricbeat/module/stan/docker-compose.yml new file mode 100644 index 000000000000..de9a709d5ca6 --- /dev/null +++ b/x-pack/metricbeat/module/stan/docker-compose.yml @@ -0,0 +1,11 @@ +version: '2.3' + +services: + stan: + image: docker.elastic.co/observability-ci/beats-integration-stan:${STAN_VERSION:-0.15.1}-1 + build: + context: ./_meta + args: + STAN_VERSION: ${STAN_VERSION:-0.15.1} + ports: + - 8222 diff --git a/x-pack/metricbeat/module/stan/fields.go b/x-pack/metricbeat/module/stan/fields.go new file mode 100644 index 000000000000..84c15e23e8af --- /dev/null +++ b/x-pack/metricbeat/module/stan/fields.go @@ -0,0 +1,23 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License; +// you may not use this file except in compliance with the Elastic License. + +// Code generated by beats/dev-tools/cmd/asset/asset.go - DO NOT EDIT. + +package stan + +import ( + "github.com/elastic/beats/libbeat/asset" +) + +func init() { + if err := asset.SetFields("metricbeat", "stan", asset.ModuleFieldsPri, AssetStan); err != nil { + panic(err) + } +} + +// AssetStan returns asset data. +// This is the base64 encoded gzipped contents of module/stan. +func AssetStan() string { + return "eJy8l0Fv4zYQhe/+FYPtJQGSzd2HLYIkCwRIXbROT0WxS4kjmzA1VDijNdxfX1AyFVmik6CVqkNgyPK8j0+TN+Q17PCwBBZFCwAxYnEJn9ai6NMCQCPn3lRiHC3hywIAmifhF6driwsAjxYV4xIyFLUAKAxazcvmyWsgVWJXO1xyqHAJG+/q6ngnoRCu7+FH3yF3JMoQhxpiWEzOIFslsEeP4FFpKLwrYaWEYS0eVWloA4z+B3q4WD/fri6PNftkJ3TNs5+N7r6JmDs87J3v3z8DG67nLUbZx/uRSG5rlolUjrWSMltFhJZHIn3H35G461lOcAMUrOVo7U27xr8BSVfOkECJ4k3elxz2RLyGb6BPHv6efHHennf4o02hIrgCZIsQ+uB1DdGmJEiJzGqDnISxjjb/gqQuM/SBZcCR1Iog2UHmpGjKg6HGn7cMKYxn+cb4MhHL11APGF9qpLzDYnEe9YDnMzwWr/rwBUpDF3+Gj4aA66zT4b8uQStRYB0zbBVD5ZhNZg/g8rz2HnVybVZNurQn9dGVJWk0VrKdCOW3GmtsK0KmGDXUlSNovKAxpCINW7PZIgt4rJwX1NHhZhGnz49DVJRMkzqO7KFBubb4A206hWLSerQqkE6TQWERE4dQzOqbfvo4Ksym9ir8sBVtJ9X97dOvq4cruHv6Y/388PvD/WUS0zs7IeVjESFRXzW129A0DOQ0dn17XMjFEyqN/gq+OmvdPny6U6SNVoJp3NwaJEknmSHBTa+dPuzrIMxSGt1b7efErBS99jyr+caknsGWlMhMg27VScfCoHIf4lhZ2+K8hEyaf9i9krQzLnfEdYn6IzzjYDvzJmffVvWFJ8o3M4yGqXdYx347Zb9o/zm/GX0mHxITcT60cOMEzzAoZpebZpDszWACR8qmV+ZjXN0+r1uN9njztqVj5iswBSg6dEI//U9bJ5Ip9047cnsabU6OHp1Y0B4CVQiZ3RnCCkmbEcZ/T5Vj3deca06gNyCuj5kN8jtSuaKwhtKtlDlnsTsrfxDskQeyUCq/C3HHUeznc9sdazGdCRORtO9THGQY5U5ZFv8EAAD//z+0hbY=" +} diff --git a/x-pack/metricbeat/module/stan/module.yml b/x-pack/metricbeat/module/stan/module.yml new file mode 100644 index 000000000000..4a73fd825280 --- /dev/null +++ b/x-pack/metricbeat/module/stan/module.yml @@ -0,0 +1,3 @@ +dashboards: + - id: Metricbeat-STAN-Dashboard + file: Metricbeat-stan-overview.json diff --git a/x-pack/metricbeat/module/stan/stats/_meta/data.json b/x-pack/metricbeat/module/stan/stats/_meta/data.json new file mode 100644 index 000000000000..0d1c82bc628b --- /dev/null +++ b/x-pack/metricbeat/module/stan/stats/_meta/data.json @@ -0,0 +1,32 @@ +{ + "@timestamp": "2017-10-12T08:05:34.853Z", + "event": { + "dataset": "stan.stats", + "duration": 115000, + "module": "stan" + }, + "metricset": { + "name": "stats", + "period": 10000 + }, + "service": { + "address": "localhost:32768", + "type": "stan" + }, + "stan": { + "cluster": { + "id": "test-cluster" + }, + "server": { + "id": "IcYma3g7cxFU6AUhN9flMe" + }, + "stats": { + "bytes": 0, + "channels": 0, + "clients": 0, + "messages": 0, + "state": "STANDALONE", + "subscriptions": 0 + } + } +} \ No newline at end of file diff --git a/x-pack/metricbeat/module/stan/stats/_meta/docs.asciidoc b/x-pack/metricbeat/module/stan/stats/_meta/docs.asciidoc new file mode 100644 index 000000000000..8d1fc9549581 --- /dev/null +++ b/x-pack/metricbeat/module/stan/stats/_meta/docs.asciidoc @@ -0,0 +1 @@ +Streaming server statistics (STAN) diff --git a/x-pack/metricbeat/module/stan/stats/_meta/fields.yml b/x-pack/metricbeat/module/stan/stats/_meta/fields.yml new file mode 100644 index 000000000000..8dadcc13ff60 --- /dev/null +++ b/x-pack/metricbeat/module/stan/stats/_meta/fields.yml @@ -0,0 +1,35 @@ +- name: stats + type: group + description: > + Contains only high-level stan / nats streaming server related metrics + release: beta + fields: + - name: state + type: keyword + description: > + The cluster / streaming configuration state (STANDALONE, CLUSTERED) + - name: role + type: keyword + description: > + If clustered, role of this node in the cluster (Leader, Follower, Candidate) + - name: clients + type: integer + description: > + The number of STAN clients + - name: subscriptions + type: integer + description: > + The number of STAN streaming subscriptions + - name: channels + type: integer + description: > + The number of STAN channels + - name: messages + type: long + description: > + Number of messages across all STAN queues + - name: bytes + type: long + description: > + Number of bytes consumed across all STAN queues + diff --git a/x-pack/metricbeat/module/stan/stats/_meta/test/serversz.json b/x-pack/metricbeat/module/stan/stats/_meta/test/serversz.json new file mode 100644 index 000000000000..f6319ea45874 --- /dev/null +++ b/x-pack/metricbeat/module/stan/stats/_meta/test/serversz.json @@ -0,0 +1,15 @@ +{ + "cluster_id": "nats-smp", + "server_id": "drE5wVcRP3jvBrUbu2i48E", + "version": "0.11.2", + "go": "go1.11.1", + "state": "STANDALONE", + "now": "2019-07-26T21:04:58.54617639Z", + "start_time": "2019-07-23T18:14:58.113267661Z", + "uptime": "3d2h50m0s", + "clients": 52, + "subscriptions": 109, + "channels": 55, + "total_msgs": 101, + "total_bytes": 27473416 + } \ No newline at end of file diff --git a/x-pack/metricbeat/module/stan/stats/data.go b/x-pack/metricbeat/module/stan/stats/data.go new file mode 100644 index 000000000000..a28412f78d0f --- /dev/null +++ b/x-pack/metricbeat/module/stan/stats/data.go @@ -0,0 +1,60 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License; +// you may not use this file except in compliance with the Elastic License. + +package stats + +import ( + "encoding/json" + + "github.com/pkg/errors" + + s "github.com/elastic/beats/libbeat/common/schema" + c "github.com/elastic/beats/libbeat/common/schema/mapstriface" + "github.com/elastic/beats/metricbeat/mb" +) + +var ( + moduleSchema = s.Schema{ + "server": s.Object{ + "id": c.Str("server_id"), + }, + "cluster": s.Object{ + "id": c.Str("cluster_id"), + }, + } + clientsSchema = s.Schema{ + "state": c.Str("state"), + "role": c.Str("role", s.Optional), // cluster role is optional + "clients": c.Int("clients"), + "subscriptions": c.Int("subscriptions"), + "channels": c.Int("channels"), + "messages": c.Int("total_msgs"), + "bytes": c.Int("total_bytes"), + } +) + +func eventMapping(content []byte, r mb.ReporterV2) error { + var streaming = make(map[string]interface{}) + if err := json.Unmarshal(content, &streaming); err != nil { + return errors.Wrap(err, "error in streaming server mapping") + } + + fields, err := clientsSchema.Apply(streaming) + if err != nil { + return errors.Wrap(err, "error parsing Nats streaming server API response") + } + + moduleFields, err := moduleSchema.Apply(streaming) + if err != nil { + return errors.Wrap(err, "error applying module schema") + } + event := mb.Event{ + MetricSetFields: fields, + ModuleFields: moduleFields, + } + if !r.Event(event) { + return nil + } + return nil +} diff --git a/x-pack/metricbeat/module/stan/stats/docs.asciidoc b/x-pack/metricbeat/module/stan/stats/docs.asciidoc new file mode 100644 index 000000000000..8ae7b999aab2 --- /dev/null +++ b/x-pack/metricbeat/module/stan/stats/docs.asciidoc @@ -0,0 +1 @@ +This is the top-level streaming metricset of the nats module \ No newline at end of file diff --git a/x-pack/metricbeat/module/stan/stats/stats.go b/x-pack/metricbeat/module/stan/stats/stats.go new file mode 100644 index 000000000000..65b7fb9ec3e6 --- /dev/null +++ b/x-pack/metricbeat/module/stan/stats/stats.go @@ -0,0 +1,77 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License; +// you may not use this file except in compliance with the Elastic License. + +package stats + +import ( + "github.com/pkg/errors" + + "github.com/elastic/beats/libbeat/logp" + "github.com/elastic/beats/metricbeat/helper" + "github.com/elastic/beats/metricbeat/mb" + "github.com/elastic/beats/metricbeat/mb/parse" +) + +const ( + defaultScheme = "http" + defaultPath = "/streaming/serverz" +) + +var ( + hostParser = parse.URLHostParserBuilder{ + DefaultScheme: defaultScheme, + DefaultPath: defaultPath, + PathConfigKey: "stats.metrics_path", + }.Build() +) + +func init() { + mb.Registry.MustAddMetricSet("stan", "stats", New, + mb.WithHostParser(hostParser), + mb.DefaultMetricSet(), + ) +} + +// MetricSet holds any configuration or state information. It must implement +// the mb.MetricSet interface. And this is best achieved by embedding +// mb.BaseMetricSet because it implements all of the required mb.MetricSet +// interface methods except for Fetch. +type MetricSet struct { + mb.BaseMetricSet + http *helper.HTTP + Log *logp.Logger +} + +// New creates a new instance of the MetricSet. New is responsible for unpacking +// any MetricSet specific configuration options if there are any. +func New(base mb.BaseMetricSet) (mb.MetricSet, error) { + config := struct{}{} + if err := base.Module().UnpackConfig(&config); err != nil { + return nil, err + } + + http, err := helper.NewHTTP(base) + if err != nil { + return nil, err + } + return &MetricSet{ + base, + http, + logp.NewLogger("stan"), + }, nil +} + +// Fetch implements the data gathering and data conversion to the right format. +func (m *MetricSet) Fetch(r mb.ReporterV2) error { + content, err := m.http.FetchContent() + if err != nil { + return errors.Wrap(err, "error in fetch") + } + err = eventMapping(content, r) + if err != nil { + return errors.Wrap(err, "error in mapping") + } + + return nil +} diff --git a/x-pack/metricbeat/module/stan/stats/stats_integration_test.go b/x-pack/metricbeat/module/stan/stats/stats_integration_test.go new file mode 100644 index 000000000000..9a5a6cdc3792 --- /dev/null +++ b/x-pack/metricbeat/module/stan/stats/stats_integration_test.go @@ -0,0 +1,43 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License; +// you may not use this file except in compliance with the Elastic License. + +// +build integration + +package stats + +import ( + "testing" + + "github.com/stretchr/testify/assert" + + "github.com/elastic/beats/libbeat/tests/compose" + mbtest "github.com/elastic/beats/metricbeat/mb/testing" +) + +func TestData(t *testing.T) { + service := compose.EnsureUp(t, "stan") + + m := mbtest.NewFetcher(t, getConfig(service.Host())) + m.WriteEvents(t, "") +} + +func TestFetch(t *testing.T) { + service := compose.EnsureUp(t, "stan") + + m := mbtest.NewFetcher(t, getConfig(service.Host())) + events, errs := m.FetchEvents() + if len(errs) > 0 { + t.Fatalf("Expected 0 error, had %d. %v\n", len(errs), errs) + } + assert.NotEmpty(t, events) + t.Logf("%s/%s event: %+v", m.Module().Name(), m.Name(), events[0]) +} + +func getConfig(host string) map[string]interface{} { + return map[string]interface{}{ + "module": "stan", + "metricsets": []string{"stats"}, + "hosts": []string{host}, + } +} diff --git a/x-pack/metricbeat/module/stan/stats/stats_test.go b/x-pack/metricbeat/module/stan/stats/stats_test.go new file mode 100644 index 000000000000..b3a46e0c2c6e --- /dev/null +++ b/x-pack/metricbeat/module/stan/stats/stats_test.go @@ -0,0 +1,59 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License; +// you may not use this file except in compliance with the Elastic License. + +package stats + +import ( + "io/ioutil" + "net/http" + "net/http/httptest" + "path/filepath" + "testing" + + "github.com/stretchr/testify/assert" + + mbtest "github.com/elastic/beats/metricbeat/mb/testing" +) + +func TestEventMapping(t *testing.T) { + content, err := ioutil.ReadFile("./_meta/test/serversz.json") + assert.NoError(t, err) + reporter := &mbtest.CapturingReporterV2{} + err = eventMapping(content, reporter) + assert.NoError(t, err) + event := reporter.GetEvents()[0] + d, _ := event.MetricSetFields.GetValue("channels") + assert.Equal(t, d, int64(55)) +} + +func TestFetchEventContent(t *testing.T) { + server := initServer() + defer server.Close() + + config := map[string]interface{}{ + "module": "stan", + "metricsets": []string{"stats"}, + "hosts": []string{server.URL}, + } + reporter := &mbtest.CapturingReporterV2{} + + metricSet := mbtest.NewReportingMetricSetV2Error(t, config) + metricSet.Fetch(reporter) + + events := reporter.GetEvents() + e := mbtest.StandardizeEvent(metricSet, events[0]) + t.Logf("%s/%s event: %+v", metricSet.Module().Name(), metricSet.Name(), e.Fields.StringToPrint()) +} + +func initServer() *httptest.Server { + absPath, _ := filepath.Abs("./_meta/test/") + + response, _ := ioutil.ReadFile(absPath + "/serversz.json") + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.WriteHeader(200) + w.Header().Set("Content-Type", "application/json;") + w.Write([]byte(response)) + })) + return server +} diff --git a/x-pack/metricbeat/module/stan/subscriptions/_meta/data.json b/x-pack/metricbeat/module/stan/subscriptions/_meta/data.json new file mode 100644 index 000000000000..958a1f8e8d60 --- /dev/null +++ b/x-pack/metricbeat/module/stan/subscriptions/_meta/data.json @@ -0,0 +1,32 @@ +{ + "@timestamp": "2017-10-12T08:05:34.853Z", + "event": { + "dataset": "stan.subscriptions", + "duration": 115000, + "module": "stan" + }, + "metricset": { + "name": "subscriptions", + "period": 10000 + }, + "service": { + "address": "localhost:32770", + "type": "stan" + }, + "stan": { + "cluster": { + "id": "test-cluster" + }, + "server": { + "id": "mNKuLCRmOZD79arLFAXiaJ" + }, + "subscriptions": { + "channel": "bar", + "id": "benchmark-sub-2", + "last_sent": 7195645, + "offline": false, + "pending": 1024, + "stalled": true + } + } +} \ No newline at end of file diff --git a/x-pack/metricbeat/module/stan/subscriptions/_meta/docs.asciidoc b/x-pack/metricbeat/module/stan/subscriptions/_meta/docs.asciidoc new file mode 100644 index 000000000000..62b907290630 --- /dev/null +++ b/x-pack/metricbeat/module/stan/subscriptions/_meta/docs.asciidoc @@ -0,0 +1 @@ +NATS streaming server (STAN) subscription statistics \ No newline at end of file diff --git a/x-pack/metricbeat/module/stan/subscriptions/_meta/fields.yml b/x-pack/metricbeat/module/stan/subscriptions/_meta/fields.yml new file mode 100644 index 000000000000..536138f8c5fb --- /dev/null +++ b/x-pack/metricbeat/module/stan/subscriptions/_meta/fields.yml @@ -0,0 +1,36 @@ +- name: subscriptions + type: group + description: > + Contains stan / nats streaming/serverz endpoint subscription metrics + release: beta + fields: + - name: id + type: keyword + description: > + The name of the STAN channel subscription (client_id) + - name: channel + type: keyword + description: > + The name of the STAN channel the subscription is associated with + - name: queue + type: keyword + description: > + The name of the NATS queue that the STAN channel subscription is associated with, if any +# If first_seq > min([seq in subscriptions]) data loss has possibly occurred + - name: last_sent + type: long + description: > + Last known sequence number of the subscription that was acked + - name: pending + type: long + description: > + Number of pending messages from / to the subscriber + - name: offline + type: boolean + description: > + Is the subscriber marked as offline? + - name: stalled + type: boolean + description: > + Is the subscriber known to be stalled? + diff --git a/x-pack/metricbeat/module/stan/subscriptions/_meta/test/subscriptions.json b/x-pack/metricbeat/module/stan/subscriptions/_meta/test/subscriptions.json new file mode 100644 index 000000000000..9150207e8e92 --- /dev/null +++ b/x-pack/metricbeat/module/stan/subscriptions/_meta/test/subscriptions.json @@ -0,0 +1,1965 @@ +{ + "cluster_id": "nats-smp", + "server_id": "drE5wVcRP3jvBrUbu2i48E", + "now": "2019-07-28T14:39:53.765831341Z", + "offset": 0, + "limit": 1024, + "count": 55, + "total": 55, + "channels": [ + { + "name": "evmon.sync", + "msgs": 4, + "bytes": 2606, + "first_seq": 1, + "last_seq": 4, + "subscriptions": [ + { + "client_id": "PolicySync_19978", + "inbox": "_INBOX.aATevIULHA7Va0i0slElun", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i6Ia", + "is_durable": false, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 4, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "feedback.alerts", + "msgs": 0, + "bytes": 0, + "first_seq": 0, + "last_seq": 0, + "subscriptions": [ + { + "client_id": "jetstream", + "inbox": "_INBOX.hFr9qdcbbz7uAVmOvUvMcd", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2iAFa", + "queue_name": "jetstream:jetstream", + "is_durable": true, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "feedback.artemis", + "msgs": 0, + "bytes": 0, + "first_seq": 0, + "last_seq": 0, + "subscriptions": [ + { + "client_id": "jetstream", + "inbox": "_INBOX.hFr9qdcbbz7uAVmOvUvMeN", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2iAHA", + "queue_name": "jetstream:jetstream", + "is_durable": true, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "feedback.census-policy.1c0d2330-4f16-454f-b818-246c6f14ae32", + "msgs": 10, + "bytes": 2654, + "first_seq": 1, + "last_seq": 10, + "subscriptions": [ + { + "client_id": "jetstream", + "inbox": "_INBOX.hFr9qdcbbz7uAVmOvUvMxX", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2iAYY", + "queue_name": "jetstream:jetstream", + "is_durable": true, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 10, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "feedback.census-sensor.1c0d2330-4f16-454f-b818-246c6f14ae32", + "msgs": 117, + "bytes": 40874, + "first_seq": 1, + "last_seq": 117, + "subscriptions": [ + { + "client_id": "jetstream", + "inbox": "_INBOX.hFr9qdcbbz7uAVmOvUvMzH", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2iAa8", + "queue_name": "jetstream:jetstream", + "is_durable": true, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 117, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "feedback.endpoint-health", + "msgs": 0, + "bytes": 0, + "first_seq": 0, + "last_seq": 0, + "subscriptions": [ + { + "client_id": "jetstream", + "inbox": "_INBOX.hFr9qdcbbz7uAVmOvUvMsJ", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2iATo", + "queue_name": "jetstream:jetstream", + "is_durable": true, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "feedback.events-collection", + "msgs": 0, + "bytes": 0, + "first_seq": 0, + "last_seq": 0, + "subscriptions": [ + { + "client_id": "jetstream", + "inbox": "_INBOX.hFr9qdcbbz7uAVmOvUvMvn", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2iAWy", + "queue_name": "jetstream:jetstream", + "is_durable": true, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "feedback.events-stats", + "msgs": 0, + "bytes": 0, + "first_seq": 0, + "last_seq": 0, + "subscriptions": [ + { + "client_id": "jetstream", + "inbox": "_INBOX.hFr9qdcbbz7uAVmOvUvMop", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2iAQe", + "queue_name": "jetstream:jetstream", + "is_durable": true, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "feedback.generic-response", + "msgs": 0, + "bytes": 0, + "first_seq": 0, + "last_seq": 0, + "subscriptions": [ + { + "client_id": "jetstream", + "inbox": "_INBOX.hFr9qdcbbz7uAVmOvUvMn5", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2iAP4", + "queue_name": "jetstream:jetstream", + "is_durable": true, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "feedback.login", + "msgs": 0, + "bytes": 0, + "first_seq": 0, + "last_seq": 0, + "subscriptions": [ + { + "client_id": "jetstream", + "inbox": "_INBOX.hFr9qdcbbz7uAVmOvUvMg7", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2iAIk", + "queue_name": "jetstream:jetstream", + "is_durable": true, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "feedback.rules", + "msgs": 0, + "bytes": 0, + "first_seq": 0, + "last_seq": 0, + "subscriptions": [ + { + "client_id": "jetstream", + "inbox": "_INBOX.hFr9qdcbbz7uAVmOvUvMu3", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2iAVO", + "queue_name": "jetstream:jetstream", + "is_durable": true, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "feedback.sensor-statistics-v2", + "msgs": 0, + "bytes": 0, + "first_seq": 0, + "last_seq": 0, + "subscriptions": [ + { + "client_id": "jetstream", + "inbox": "_INBOX.hFr9qdcbbz7uAVmOvUvMqZ", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2iASE", + "queue_name": "jetstream:jetstream", + "is_durable": true, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "feedback.stats", + "msgs": 0, + "bytes": 0, + "first_seq": 0, + "last_seq": 0, + "subscriptions": [ + { + "client_id": "jetstream", + "inbox": "_INBOX.hFr9qdcbbz7uAVmOvUvMat", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2iAE0", + "queue_name": "jetstream:jetstream", + "is_durable": true, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "feedback.system-survey", + "msgs": 0, + "bytes": 0, + "first_seq": 0, + "last_seq": 0, + "subscriptions": [ + { + "client_id": "jetstream", + "inbox": "_INBOX.hFr9qdcbbz7uAVmOvUvMlL", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2iANU", + "queue_name": "jetstream:jetstream", + "is_durable": true, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "feedback.timeline", + "msgs": 0, + "bytes": 0, + "first_seq": 0, + "last_seq": 0, + "subscriptions": [ + { + "client_id": "jetstream", + "inbox": "_INBOX.hFr9qdcbbz7uAVmOvUvMjb", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2iALu", + "queue_name": "jetstream:jetstream", + "is_durable": true, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "feedback.whitelist", + "msgs": 0, + "bytes": 0, + "first_seq": 0, + "last_seq": 0, + "subscriptions": [ + { + "client_id": "jetstream", + "inbox": "_INBOX.hFr9qdcbbz7uAVmOvUvMhr", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2iAKK", + "queue_name": "jetstream:jetstream", + "is_durable": true, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "iris.task", + "msgs": 0, + "bytes": 0, + "first_seq": 0, + "last_seq": 0, + "subscriptions": [ + { + "client_id": "iris_19969_JnN-xUioKE4_task", + "inbox": "_INBOX.CfWNB5a9Wrf903aa4AbbJL", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i5dU", + "is_durable": false, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "iris_19973_KWCkEsBYMCA_task", + "inbox": "_INBOX.EzsKP1uRLXk7zxxyaaK6OS", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i5us", + "is_durable": false, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "iris_19974_pUlU4pDZP5o_task", + "inbox": "_INBOX.LNMD0LZzTt54evuJvlScGC", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i62m", + "is_durable": false, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "iris_19972_6ATU0b_x4GA_task", + "inbox": "_INBOX.rmaZd2U8Zg5TuTNaE8dNLJ", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i6Ag", + "is_durable": false, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "policy.sync", + "msgs": 5, + "bytes": 865, + "first_seq": 1, + "last_seq": 5, + "subscriptions": [ + { + "client_id": "EvmonSync_18597", + "inbox": "_INBOX.Gew6Kgyo267QciQcrXYGI1", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i4Vw", + "is_durable": false, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 5, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "sensor.alert", + "msgs": 0, + "bytes": 0, + "first_seq": 0, + "last_seq": 0, + "subscriptions": [ + { + "client_id": "packrat_consumer_19854", + "inbox": "37e5e4faff53c7a17e31c6", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i5B2", + "queue_name": "packrat:packrat_alert_qg", + "is_durable": true, + "is_offline": false, + "max_inflight": 128, + "ack_wait": 128, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "packrat_consumer_19853", + "inbox": "d0be381d44197f5e3679d", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i5KW", + "queue_name": "packrat:packrat_alert_qg", + "is_durable": true, + "is_offline": false, + "max_inflight": 128, + "ack_wait": 128, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "packrat_consumer_19855", + "inbox": "6860a88df228e1c8a6d076", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i5U0", + "queue_name": "packrat:packrat_alert_qg", + "is_durable": true, + "is_offline": false, + "max_inflight": 128, + "ack_wait": 128, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "cargoplane", + "inbox": "_INBOX.dKNSAXz01qhTUI8ie3qtEE", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i5my", + "queue_name": "cargoplane", + "is_durable": false, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "sensor.feedback.endpoint-health", + "msgs": 0, + "bytes": 0, + "first_seq": 0, + "last_seq": 0, + "subscriptions": [ + { + "client_id": "cargoplane", + "inbox": "_INBOX.dKNSAXz01qhTUI8ie3qtqI", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i5tI", + "queue_name": "cargoplane", + "is_durable": false, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "sensor.feedback.sensor-statistics", + "msgs": 0, + "bytes": 0, + "first_seq": 0, + "last_seq": 0, + "subscriptions": [ + { + "client_id": "cargoplane", + "inbox": "_INBOX.dKNSAXz01qhTUI8ie3qtgm", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i5ri", + "queue_name": "cargoplane", + "is_durable": false, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "sensor.file", + "msgs": 0, + "bytes": 0, + "first_seq": 0, + "last_seq": 0, + "subscriptions": [ + { + "client_id": "kratos_consumer_18602", + "inbox": "22fa46f205f94a6befe1a5", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i4nK", + "queue_name": "krotos_sensor.file_qg:krotos_sensor.file_qg", + "is_durable": true, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "sensor.fraggo", + "msgs": 0, + "bytes": 0, + "first_seq": 0, + "last_seq": 0, + "subscriptions": [ + { + "client_id": "fraggo_bkrku0dklpukhg54ofqg_3", + "inbox": "_INBOX.NM8SUzN1Wxanob4pCWeZT4", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i4G8", + "queue_name": "fraggo_qg:qconsume", + "is_durable": true, + "is_offline": false, + "max_inflight": 256, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "fraggo_bkrku0dklpukhg54ofqg_4", + "inbox": "_INBOX.NM8SUzN1Wxanob4pCWeZwU", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i4Hi", + "queue_name": "fraggo_qg:qconsume", + "is_durable": true, + "is_offline": false, + "max_inflight": 256, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "fraggo_bkrku0dklpukhg54ofqg_5", + "inbox": "_INBOX.NM8SUzN1Wxanob4pCWeaPu", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i4JI", + "queue_name": "fraggo_qg:qconsume", + "is_durable": true, + "is_offline": false, + "max_inflight": 256, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "fraggo_bkrku0dklpukhg54ofqg_6", + "inbox": "_INBOX.NM8SUzN1Wxanob4pCWeatK", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i4Ks", + "queue_name": "fraggo_qg:qconsume", + "is_durable": true, + "is_offline": false, + "max_inflight": 256, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "sensor.message", + "msgs": 0, + "bytes": 0, + "first_seq": 0, + "last_seq": 0, + "subscriptions": [ + { + "client_id": "packrat_consumer_19854", + "inbox": "bd5cd5be5c4b71a1828a40", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i5Iw", + "queue_name": "packrat:packrat_message_qg", + "is_durable": true, + "is_offline": false, + "max_inflight": 128, + "ack_wait": 128, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "packrat_consumer_19853", + "inbox": "ab4f18095efc9c36e694e7", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i5SQ", + "queue_name": "packrat:packrat_message_qg", + "is_durable": true, + "is_offline": false, + "max_inflight": 128, + "ack_wait": 128, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "packrat_consumer_19855", + "inbox": "5405be5a758c5ae8763ce5", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i5bu", + "queue_name": "packrat:packrat_message_qg", + "is_durable": true, + "is_offline": false, + "max_inflight": 128, + "ack_wait": 128, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "cargoplane", + "inbox": "_INBOX.dKNSAXz01qhTUI8ie3qtNk", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i5oY", + "queue_name": "cargoplane", + "is_durable": false, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "sensor.message.policyResponse", + "msgs": 0, + "bytes": 0, + "first_seq": 0, + "last_seq": 0, + "subscriptions": [ + { + "client_id": "packrat_consumer_19854", + "inbox": "7b6061e5f3b8d818c7db57", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i5EC", + "queue_name": "packrat:packrat_policyResponse_qg", + "is_durable": true, + "is_offline": false, + "max_inflight": 128, + "ack_wait": 128, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "packrat_consumer_19853", + "inbox": "4c2e54659b9b8464c1181", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i5Ng", + "queue_name": "packrat:packrat_policyResponse_qg", + "is_durable": true, + "is_offline": false, + "max_inflight": 128, + "ack_wait": 128, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "packrat_consumer_19855", + "inbox": "b76e072a562ee3ef8e35c4", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i5XA", + "queue_name": "packrat:packrat_policyResponse_qg", + "is_durable": true, + "is_offline": false, + "max_inflight": 128, + "ack_wait": 128, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "PolicyStatus_19978", + "inbox": "_INBOX.aATevIULHA7Va0i0slEnLd", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i6S4", + "queue_name": "sensor.message.policyResponse:sensor.message.policyResponse.group", + "is_durable": true, + "is_offline": false, + "max_inflight": 8192, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "sensor.message.shutdownResponse", + "msgs": 0, + "bytes": 0, + "first_seq": 0, + "last_seq": 0, + "subscriptions": [ + { + "client_id": "packrat_consumer_19854", + "inbox": "67d4a14b449ef135ee8d86", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i5Fm", + "queue_name": "packrat:packrat_shutdownResponse_qg", + "is_durable": true, + "is_offline": false, + "max_inflight": 128, + "ack_wait": 128, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "packrat_consumer_19853", + "inbox": "eba867033c5a24d50fe33a", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i5PG", + "queue_name": "packrat:packrat_shutdownResponse_qg", + "is_durable": true, + "is_offline": false, + "max_inflight": 128, + "ack_wait": 128, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "packrat_consumer_19855", + "inbox": "668d672fc35fdeef08739a", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i5Yk", + "queue_name": "packrat:packrat_shutdownResponse_qg", + "is_durable": true, + "is_offline": false, + "max_inflight": 128, + "ack_wait": 128, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "assets_consumer_18646", + "inbox": "9c2b7d2e3e8d0c7d443490", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i4s4", + "queue_name": "assets_sensor.message.shutdownResponse_qg:assets_sensor.message.shutdownResponse_qg", + "is_durable": true, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "sensor.message.systemNetworkSurveyResponse", + "msgs": 0, + "bytes": 0, + "first_seq": 0, + "last_seq": 0, + "subscriptions": [ + { + "client_id": "packrat_consumer_19854", + "inbox": "152fac7b57ff5403f79aa0", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i5Cc", + "queue_name": "packrat:packrat_systemNetworkSurveyResponse_qg", + "is_durable": true, + "is_offline": false, + "max_inflight": 128, + "ack_wait": 128, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "packrat_consumer_19853", + "inbox": "8ca6551be87c3e15de0529", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i5M6", + "queue_name": "packrat:packrat_systemNetworkSurveyResponse_qg", + "is_durable": true, + "is_offline": false, + "max_inflight": 128, + "ack_wait": 128, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "packrat_consumer_19855", + "inbox": "de18cad520f4dc5363c1af", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i5Va", + "queue_name": "packrat:packrat_systemNetworkSurveyResponse_qg", + "is_durable": true, + "is_offline": false, + "max_inflight": 128, + "ack_wait": 128, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "assets_consumer_18646", + "inbox": "1fe98d38982bc66fd7613c", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i4qU", + "queue_name": "assets_sensor.message.systemNetworkSurveyResponse_qg:assets_sensor.message.systemNetworkSurveyResponse_qg", + "is_durable": true, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "sensor.message.systemSurveyResponse", + "msgs": 0, + "bytes": 0, + "first_seq": 0, + "last_seq": 0, + "subscriptions": [ + { + "client_id": "assets_consumer_18646", + "inbox": "deca00d0dc0ab84879b4d8", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i4ou", + "queue_name": "assets_sensor.message.systemSurveyResponse_qg:assets_sensor.message.systemSurveyResponse_qg", + "is_durable": true, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "packrat_consumer_19854", + "inbox": "d07b52e1f109675f59f598", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i5HM", + "queue_name": "packrat:packrat_systemSurveyResponse_qg", + "is_durable": true, + "is_offline": false, + "max_inflight": 128, + "ack_wait": 128, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "packrat_consumer_19853", + "inbox": "321a353199867a3e478f91", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i5Qq", + "queue_name": "packrat:packrat_systemSurveyResponse_qg", + "is_durable": true, + "is_offline": false, + "max_inflight": 128, + "ack_wait": 128, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "packrat_consumer_19855", + "inbox": "a2627ef32aa6ea9d197c22", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i5aK", + "queue_name": "packrat:packrat_systemSurveyResponse_qg", + "is_durable": true, + "is_offline": false, + "max_inflight": 128, + "ack_wait": 128, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "cargoplane", + "inbox": "_INBOX.dKNSAXz01qhTUI8ie3qtXG", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i5q8", + "queue_name": "cargoplane", + "is_durable": false, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "sensor.out.dead", + "msgs": 0, + "bytes": 0, + "first_seq": 0, + "last_seq": 0, + "subscriptions": [ + { + "client_id": "iris_19969_JnN-xUioKE4_task", + "inbox": "_INBOX.CfWNB5a9Wrf903aa4AbbLH", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i5f4", + "is_durable": false, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "iris_19973_KWCkEsBYMCA_task", + "inbox": "_INBOX.EzsKP1uRLXk7zxxyaaK6SU", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i5wS", + "is_durable": false, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "iris_19974_pUlU4pDZP5o_task", + "inbox": "_INBOX.LNMD0LZzTt54evuJvlScM4", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i64M", + "is_durable": false, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "iris_19972_6ATU0b_x4GA_task", + "inbox": "_INBOX.rmaZd2U8Zg5TuTNaE8dNOX", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i6CG", + "is_durable": false, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "sensor.session.ack", + "msgs": 0, + "bytes": 0, + "first_seq": 0, + "last_seq": 0, + "subscriptions": [ + { + "client_id": "AckBot_19683_12eae663", + "inbox": "_INBOX.r5KNLGpTn5GybqLGJbTGRe", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i4yO", + "queue_name": "sensor.session.ack:sensor.session.ack.qg", + "is_durable": true, + "is_offline": false, + "max_inflight": 8192, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "AckBot_19683_5f59b864", + "inbox": "_INBOX.r5KNLGpTn5GybqLGJbTGtQ", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i4zy", + "queue_name": "sensor.session.ack:sensor.session.ack.qg", + "is_durable": true, + "is_offline": false, + "max_inflight": 8192, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "sensor.session.close", + "msgs": 0, + "bytes": 0, + "first_seq": 0, + "last_seq": 0, + "subscriptions": [ + { + "client_id": "SessBotClose_19683_109cb6db", + "inbox": "_INBOX.r5KNLGpTn5GybqLGJbTH1M", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i538", + "queue_name": "sensor.session.close:sensor.session.closeSessBotClose.qg", + "is_durable": true, + "is_offline": false, + "max_inflight": 8192, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "sensor.session.open", + "msgs": 0, + "bytes": 0, + "first_seq": 0, + "last_seq": 0, + "subscriptions": [ + { + "client_id": "ActiveMon_18597", + "inbox": "_INBOX.Gew6Kgyo267QciQcrXYFF1", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i4O2", + "is_durable": false, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "HiggoBot_19445_2d574335", + "inbox": "_INBOX.4cX5QV4YzWusN2hoe6j7uH", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i4te", + "queue_name": "sensor.session.open:sensor.session.openhiggo.qg", + "is_durable": true, + "is_offline": false, + "max_inflight": 8192, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "SessBotOpen_19683_7e937fb5", + "inbox": "_INBOX.r5KNLGpTn5GybqLGJbTHHE", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i51Y", + "queue_name": "sensor.session.open:sensor.session.openSessBotOpen.qg", + "is_durable": true, + "is_offline": false, + "max_inflight": 64, + "ack_wait": 60, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "stan.alertDismiss", + "msgs": 0, + "bytes": 0, + "first_seq": 0, + "last_seq": 0, + "subscriptions": [ + { + "client_id": "alert_dismisser_18605", + "inbox": "_INBOX.MIZc6DRAvPEvZO76HAIXTz", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i4dq", + "queue_name": "alertDismisser:stan.alertDismiss.group", + "is_durable": true, + "is_offline": false, + "max_inflight": 4, + "ack_wait": 120, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "stan.artifact.default-whitelist-macos", + "msgs": 1, + "bytes": 46869, + "first_seq": 1, + "last_seq": 1, + "subscriptions": [ + { + "client_id": "smeagol_connector_19734", + "inbox": "9b45e0f79cf60c1a981a71", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i6NK", + "is_durable": false, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 1, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "stan.artifact.default-whitelist-win", + "msgs": 1, + "bytes": 468380, + "first_seq": 2, + "last_seq": 2, + "subscriptions": [ + { + "client_id": "smeagol_connector_19734", + "inbox": "a585d6b05cf852210377df", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i6l2", + "is_durable": false, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 2, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "stan.artifact.endpointmacho", + "msgs": 1, + "bytes": 1679250, + "first_seq": 2, + "last_seq": 2, + "subscriptions": [ + { + "client_id": "smeagol_connector_19734", + "inbox": "ee2f6aa8c92b1f26bf4731", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i6QU", + "is_durable": false, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 2, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "stan.artifact.endpointmacho-whitelist", + "msgs": 1, + "bytes": 65106, + "first_seq": 2, + "last_seq": 2, + "subscriptions": [ + { + "client_id": "smeagol_connector_19734", + "inbox": "ab644250d31251a8c41ae3", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i6hs", + "is_durable": false, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 2, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "stan.artifact.endpointmacro", + "msgs": 1, + "bytes": 187130, + "first_seq": 2, + "last_seq": 2, + "subscriptions": [ + { + "client_id": "smeagol_connector_19734", + "inbox": "72ed357b7010f10ad7d530", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i6Lk", + "is_durable": false, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 2, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "stan.artifact.endpointmacro-whitelist", + "msgs": 1, + "bytes": 60852, + "first_seq": 2, + "last_seq": 2, + "subscriptions": [ + { + "client_id": "smeagol_connector_19734", + "inbox": "23455b15790f0fbc61f72e", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i6Ou", + "is_durable": false, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 2, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "stan.artifact.endpointpe", + "msgs": 1, + "bytes": 13400830, + "first_seq": 2, + "last_seq": 2, + "subscriptions": [ + { + "client_id": "smeagol_connector_19734", + "inbox": "4069ec27b679b6a2969851", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i7AK", + "is_durable": false, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 2, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "stan.artifact.endpointpe-blacklist", + "msgs": 1, + "bytes": 5243033, + "first_seq": 2, + "last_seq": 2, + "subscriptions": [ + { + "client_id": "rugo", + "inbox": "_INBOX.tuwUxYDi38CbqlJbn1NllX", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i4fQ", + "is_durable": false, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 2, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "stan.artifact.endpointpe-whitelist", + "msgs": 1, + "bytes": 5240348, + "first_seq": 2, + "last_seq": 2, + "subscriptions": [ + { + "client_id": "smeagol_connector_19734", + "inbox": "b0205277c87d5193600905", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i6jS", + "is_durable": false, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 2, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "stan.artifact.rules", + "msgs": 1, + "bytes": 1050028, + "first_seq": 2, + "last_seq": 2, + "subscriptions": [ + { + "client_id": "rugo", + "inbox": "_INBOX.tuwUxYDi38CbqlJbn1Nlqs", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i4lk", + "is_durable": false, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 2, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "stan.artifact.smp-policy-defaults", + "msgs": 1, + "bytes": 228, + "first_seq": 1, + "last_seq": 1, + "subscriptions": [ + { + "client_id": "SyncArbiter_19978", + "inbox": "_INBOX.aATevIULHA7Va0i0slEmi9", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i6KA", + "is_durable": false, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 1, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "stan.private.gorat.delete", + "msgs": 0, + "bytes": 0, + "first_seq": 0, + "last_seq": 0, + "subscriptions": [ + { + "client_id": "gorat_remover_18605", + "inbox": "_INBOX.MIZc6DRAvPEvZO76HAIWqN", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i4Z6", + "is_durable": false, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "stan.sensor.blacklist", + "msgs": 0, + "bytes": 0, + "first_seq": 0, + "last_seq": 0, + "subscriptions": [ + { + "client_id": "iris_19969_JnN-xUioKE4_task", + "inbox": "_INBOX.CfWNB5a9Wrf903aa4AbbND", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i5ge", + "is_durable": false, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "iris_19973_KWCkEsBYMCA_task", + "inbox": "_INBOX.EzsKP1uRLXk7zxxyaaK6WW", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i5y2", + "is_durable": false, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "iris_19974_pUlU4pDZP5o_task", + "inbox": "_INBOX.LNMD0LZzTt54evuJvlScRw", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i65w", + "is_durable": false, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "iris_19972_6ATU0b_x4GA_task", + "inbox": "_INBOX.rmaZd2U8Zg5TuTNaE8dNRl", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i6Dq", + "is_durable": false, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "stan.silent.alert", + "msgs": 0, + "bytes": 0, + "first_seq": 0, + "last_seq": 0, + "subscriptions": [ + { + "client_id": "cargoplane", + "inbox": "_INBOX.dKNSAXz01qhTUI8ie3qt4i", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i5lO", + "queue_name": "cargoplane", + "is_durable": false, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "stan.system.delete", + "msgs": 0, + "bytes": 0, + "first_seq": 0, + "last_seq": 0, + "subscriptions": [ + { + "client_id": "gorat_remover_18605", + "inbox": "_INBOX.MIZc6DRAvPEvZO76HAIWMf", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i4RC", + "is_durable": false, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "grouper_19756_1154ea", + "inbox": "_INBOX.Ixonb40xwWrjifYoJO8lbI", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i56I", + "durable_name": "stan.system.delete_grouper", + "is_durable": true, + "is_offline": false, + "max_inflight": 25, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "grouper_18612_5bc04c", + "inbox": "_INBOX.99otlg166ncFNmkGI7IfqZ", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i4MS", + "durable_name": "stan.system.delete_grouper", + "is_durable": true, + "is_offline": true, + "max_inflight": 25, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "grouper_19316_aeccf2", + "inbox": "_INBOX.OyibBHlBoNpd9R79RnZmeY", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i4h0", + "durable_name": "stan.system.delete_grouper", + "is_durable": true, + "is_offline": true, + "max_inflight": 25, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "system.endpoint", + "msgs": 0, + "bytes": 0, + "first_seq": 0, + "last_seq": 0, + "subscriptions": [ + { + "client_id": "grouper_19756_1154ea", + "inbox": "_INBOX.Ixonb40xwWrjifYoJO8luO", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i59S", + "durable_name": "system.endpoint_grouper", + "is_durable": true, + "is_offline": false, + "max_inflight": 25, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "grouper_18612_5bc04c", + "inbox": "_INBOX.99otlg166ncFNmkGI7IgB1", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i4XW", + "durable_name": "system.endpoint_grouper", + "is_durable": true, + "is_offline": true, + "max_inflight": 25, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "grouper_19316_aeccf2", + "inbox": "_INBOX.OyibBHlBoNpd9R79RnZmuE", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i4kA", + "durable_name": "system.endpoint_grouper", + "is_durable": true, + "is_offline": true, + "max_inflight": 25, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "system.endpoint_change", + "msgs": 0, + "bytes": 0, + "first_seq": 0, + "last_seq": 0, + "subscriptions": [ + { + "client_id": "grouper_19756_1154ea", + "inbox": "_INBOX.Ixonb40xwWrjifYoJO8lkq", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i57s", + "durable_name": "system.endpoint_change_grouper", + "is_durable": true, + "is_offline": false, + "max_inflight": 25, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "iris_19969_JnN-xUioKE4_task", + "inbox": "_INBOX.CfWNB5a9Wrf903aa4AbbR5", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i5jo", + "is_durable": false, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "iris_19973_KWCkEsBYMCA_task", + "inbox": "_INBOX.EzsKP1uRLXk7zxxyaaK6ea", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i61C", + "is_durable": false, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "iris_19974_pUlU4pDZP5o_task", + "inbox": "_INBOX.LNMD0LZzTt54evuJvlScdg", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i696", + "is_durable": false, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "iris_19972_6ATU0b_x4GA_task", + "inbox": "_INBOX.rmaZd2U8Zg5TuTNaE8dNYD", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i6H0", + "is_durable": false, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "grouper_18612_5bc04c", + "inbox": "_INBOX.99otlg166ncFNmkGI7Ig0n", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i4Pc", + "durable_name": "system.endpoint_change_grouper", + "is_durable": true, + "is_offline": true, + "max_inflight": 25, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "grouper_19316_aeccf2", + "inbox": "_INBOX.OyibBHlBoNpd9R79RnZmmO", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i4ia", + "durable_name": "system.endpoint_change_grouper", + "is_durable": true, + "is_offline": true, + "max_inflight": 25, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "system.hostIsolation", + "msgs": 0, + "bytes": 0, + "first_seq": 0, + "last_seq": 0, + "subscriptions": [ + { + "client_id": "PolicyStatus_19978", + "inbox": "_INBOX.aATevIULHA7Va0i0slEnVV", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i6Te", + "queue_name": "system.hostIsolation:system.hostIsolation.group", + "is_durable": true, + "is_offline": false, + "max_inflight": 8192, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "system.index", + "msgs": 1, + "bytes": 20, + "first_seq": 0, + "last_seq": 1, + "subscriptions": [ + { + "client_id": "gorat_1", + "inbox": "_INBOX.MIZc6DRAvPEvZO76HAIW7o", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i4Sm", + "queue_name": "gorat:system.index.group", + "is_durable": true, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 300, + "last_sent": 1, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "gorat_0", + "inbox": "_INBOX.MIZc6DRAvPEvZO76HAIVsx", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i4UM", + "queue_name": "gorat:system.index.group", + "is_durable": true, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 300, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "system.index.alert", + "msgs": 0, + "bytes": 0, + "first_seq": 0, + "last_seq": 0, + "subscriptions": [ + { + "client_id": "gorat_1", + "inbox": "_INBOX.MIZc6DRAvPEvZO76HAIWgT", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i4ag", + "queue_name": "gorat:system.index.alert.group", + "is_durable": true, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 300, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "gorat_0", + "inbox": "_INBOX.MIZc6DRAvPEvZO76HAIWWZ", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i4cG", + "queue_name": "gorat:system.index.alert.group", + "is_durable": true, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 300, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "system.sensor", + "msgs": 0, + "bytes": 0, + "first_seq": 0, + "last_seq": 0, + "subscriptions": [ + { + "client_id": "iris_19969_JnN-xUioKE4_task", + "inbox": "_INBOX.CfWNB5a9Wrf903aa4AbbP9", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i5iE", + "is_durable": false, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "iris_19973_KWCkEsBYMCA_task", + "inbox": "_INBOX.EzsKP1uRLXk7zxxyaaK6aY", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i5zc", + "is_durable": false, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "iris_19974_pUlU4pDZP5o_task", + "inbox": "_INBOX.LNMD0LZzTt54evuJvlScXo", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i67W", + "is_durable": false, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "iris_19972_6ATU0b_x4GA_task", + "inbox": "_INBOX.rmaZd2U8Zg5TuTNaE8dNUz", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i6FQ", + "is_durable": false, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "SirgoSysBot19683_8c7b9706", + "inbox": "_INBOX.r5KNLGpTn5GybqLGJbTGhW", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i54i", + "queue_name": "system.sensor:system.sensorSirgoSysBot.qg", + "is_durable": true, + "is_offline": false, + "max_inflight": 8192, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "SensorCtx_19978_iter_0", + "inbox": "_INBOX.aATevIULHA7Va0i0slEo8z", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i6VE", + "queue_name": "system.sensorGassitSensor.qg:system.sensorGassitSensor.qg", + "is_durable": true, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "SensorCtx_19978_iter_1", + "inbox": "_INBOX.aATevIULHA7Va0i0slEomT", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i6Wo", + "queue_name": "system.sensorGassitSensor.qg:system.sensorGassitSensor.qg", + "is_durable": true, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "SensorCtx_19978_iter_2", + "inbox": "_INBOX.aATevIULHA7Va0i0slEpPx", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i6YO", + "queue_name": "system.sensorGassitSensor.qg:system.sensorGassitSensor.qg", + "is_durable": true, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "SensorCtx_19978_iter_3", + "inbox": "_INBOX.aATevIULHA7Va0i0slEq3R", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i6Zy", + "queue_name": "system.sensorGassitSensor.qg:system.sensorGassitSensor.qg", + "is_durable": true, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "SensorCtx_19978_iter_4", + "inbox": "_INBOX.aATevIULHA7Va0i0slEqgv", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i6bY", + "queue_name": "system.sensorGassitSensor.qg:system.sensorGassitSensor.qg", + "is_durable": true, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "SensorCtx_19978_iter_5", + "inbox": "_INBOX.aATevIULHA7Va0i0slErKP", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i6d8", + "queue_name": "system.sensorGassitSensor.qg:system.sensorGassitSensor.qg", + "is_durable": true, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "SensorCtx_19978_iter_6", + "inbox": "_INBOX.aATevIULHA7Va0i0slErxt", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i6ei", + "queue_name": "system.sensorGassitSensor.qg:system.sensorGassitSensor.qg", + "is_durable": true, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "SensorCtx_19978_iter_7", + "inbox": "_INBOX.aATevIULHA7Va0i0slEsbN", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i6gI", + "queue_name": "system.sensorGassitSensor.qg:system.sensorGassitSensor.qg", + "is_durable": true, + "is_offline": false, + "max_inflight": 1024, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + } + ] + }, + { + "name": "system.task.indexed", + "msgs": 0, + "bytes": 0, + "first_seq": 0, + "last_seq": 0, + "subscriptions": [ + { + "client_id": "IdxBot_19683_98975eae", + "inbox": "_INBOX.r5KNLGpTn5GybqLGJbTHPA", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i4vE", + "queue_name": "system.task.indexed:system.task.indexed.qg", + "is_durable": true, + "is_offline": false, + "max_inflight": 8192, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + }, + { + "client_id": "IdxBot_19683_5651ebb7", + "inbox": "_INBOX.r5KNLGpTn5GybqLGJbTH9I", + "ack_inbox": "_INBOX.drE5wVcRP3jvBrUbu2i4wo", + "queue_name": "system.task.indexed:system.task.indexed.qg", + "is_durable": true, + "is_offline": false, + "max_inflight": 8192, + "ack_wait": 30, + "last_sent": 0, + "pending_count": 0, + "is_stalled": false + } + ] + } + ] +} \ No newline at end of file diff --git a/x-pack/metricbeat/module/stan/subscriptions/data.go b/x-pack/metricbeat/module/stan/subscriptions/data.go new file mode 100644 index 000000000000..cec4a71474c3 --- /dev/null +++ b/x-pack/metricbeat/module/stan/subscriptions/data.go @@ -0,0 +1,112 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License; +// you may not use this file except in compliance with the Elastic License. + +package subscriptions + +import ( + "encoding/json" + + "github.com/pkg/errors" + + s "github.com/elastic/beats/libbeat/common/schema" + c "github.com/elastic/beats/libbeat/common/schema/mapstriface" + "github.com/elastic/beats/metricbeat/mb" +) + +var ( + moduleSchema = s.Schema{ + "server": s.Object{ + "id": c.Str("server_id"), + }, + "cluster": s.Object{ + "id": c.Str("cluster_id"), + }, + } + subscriptionsSchema = s.Schema{ + "id": c.Str("client_id"), + "channel": c.Str("channel"), // this is a computed field added AFTER schema.Apply + "queue": c.Str("queue_name", s.Optional), // not all STAN channels report as NATS queue associated + "last_sent": c.Int("last_sent"), + "offline": c.Bool("is_offline"), + "stalled": c.Bool("is_stalled"), + "pending": c.Int("pending_count"), + } +) + +// eventMapping maps a subscription to a Metricbeat event using subscriptionsSchema +// to parse through each subscription under a presumed channel +func eventMapping(content map[string]interface{}) (mb.Event, error) { + fields, err := subscriptionsSchema.Apply(content) + if err != nil { + return mb.Event{}, errors.Wrap(err, "error applying subscription schema") + } + + moduleFields, err := moduleSchema.Apply(content) + if err != nil { + return mb.Event{}, errors.Wrap(err, "error applying module schema") + } + + event := mb.Event{ + MetricSetFields: fields, + ModuleFields: moduleFields, + } + return event, nil +} + +// Subscription stores subscription related information +type Subscription struct { + QueueName string `json:"queue_name"` + IsDurable bool `json:"is_durable"` + IsOffline bool `json:"is_offline"` + IsStalled bool `json:"is_stalled"` + PendingCount int64 `json:"pending_count"` + LastSent int64 `json:"last_sent"` +} + +// Channel stores channel related information +type Channel struct { + Name string `json:"name"` + Msgs int64 `json:"msgs"` + Bytes int64 `json:"bytes"` + LastSeq int64 `json:"last_seq"` + // Subscriptions []Subscription `json:"subscriptions,omitempty"` + Subscriptions []map[string]interface{} `json:"subscriptions,omitempty"` +} + +// Channels stores channels related information +type Channels struct { + ClusterID string `json:"cluster_id"` + ServerID string `json:"server_id"` + Limit uint64 `json:"limit"` + Total uint64 `json:"total"` + Channels []Channel `json:"channels,omitempty"` +} + +// eventsMapping maps the top-level channel metrics AND also per-channel metrics AND subscriptions +func eventsMapping(content []byte, r mb.ReporterV2) error { + var err error + channels := Channels{} + if err = json.Unmarshal(content, &channels); err != nil { + return errors.Wrap(err, "error unmarshaling Nats streaming channels detailed response to JSON") + } + + for _, ch := range channels.Channels { + for _, sub := range ch.Subscriptions { + var evt mb.Event + sub["channel"] = ch.Name + sub["server_id"] = channels.ServerID + sub["cluster_id"] = channels.ClusterID + evt, err = eventMapping(sub) + if err != nil { + r.Error(errors.Wrap(err, "error mapping subscription event")) + continue + } + + if !r.Event(evt) { + return nil + } + } + } + return nil +} diff --git a/x-pack/metricbeat/module/stan/subscriptions/subscriptions.go b/x-pack/metricbeat/module/stan/subscriptions/subscriptions.go new file mode 100644 index 000000000000..5449add589ec --- /dev/null +++ b/x-pack/metricbeat/module/stan/subscriptions/subscriptions.go @@ -0,0 +1,78 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License; +// you may not use this file except in compliance with the Elastic License. + +package subscriptions + +import ( + "github.com/pkg/errors" + + "github.com/elastic/beats/libbeat/logp" + "github.com/elastic/beats/metricbeat/helper" + "github.com/elastic/beats/metricbeat/mb" + "github.com/elastic/beats/metricbeat/mb/parse" +) + +const ( + defaultScheme = "http" + defaultPath = "/streaming/channelsz" + queryParams = "subs=1" +) + +var ( + hostParser = parse.URLHostParserBuilder{ + DefaultScheme: defaultScheme, + DefaultPath: defaultPath, + PathConfigKey: "subscriptions.metrics_path", + QueryParams: queryParams, + }.Build() +) + +func init() { + mb.Registry.MustAddMetricSet("stan", "subscriptions", New, + mb.WithHostParser(hostParser), + mb.DefaultMetricSet(), + ) +} + +// MetricSet holds any configuration or state information. It must implement +// the mb.MetricSet interface. And this is best achieved by embedding +// mb.BaseMetricSet because it implements all of the required mb.MetricSet +// interface methods except for Fetch. +type MetricSet struct { + mb.BaseMetricSet + http *helper.HTTP + Log *logp.Logger +} + +// New creates a new instance of the MetricSet. New is responsible for unpacking +// any MetricSet specific configuration options if there are any. +func New(base mb.BaseMetricSet) (mb.MetricSet, error) { + config := struct{}{} + if err := base.Module().UnpackConfig(&config); err != nil { + return nil, err + } + + http, err := helper.NewHTTP(base) + if err != nil { + return nil, err + } + return &MetricSet{ + base, + http, + logp.NewLogger("stan"), + }, nil +} + +// Fetch implements the data gathering and data conversion to the right format. +func (m *MetricSet) Fetch(r mb.ReporterV2) (err error) { + content, err := m.http.FetchContent() + if err != nil { + return errors.Wrap(err, "error in fetch") + } + if err = eventsMapping(content, r); err != nil { + return errors.Wrap(err, "error in mapping") + } + + return nil +} diff --git a/x-pack/metricbeat/module/stan/subscriptions/subscriptions_integration_test.go b/x-pack/metricbeat/module/stan/subscriptions/subscriptions_integration_test.go new file mode 100644 index 000000000000..058fd2ada863 --- /dev/null +++ b/x-pack/metricbeat/module/stan/subscriptions/subscriptions_integration_test.go @@ -0,0 +1,42 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License; +// you may not use this file except in compliance with the Elastic License. + +// +build integration + +package subscriptions + +import ( + "testing" + + "github.com/stretchr/testify/assert" + + "github.com/elastic/beats/libbeat/tests/compose" + mbtest "github.com/elastic/beats/metricbeat/mb/testing" +) + +func TestData(t *testing.T) { + service := compose.EnsureUp(t, "stan") + + m := mbtest.NewFetcher(t, getConfig(service.Host())) + m.WriteEvents(t, "") +} + +func TestFetch(t *testing.T) { + service := compose.EnsureUp(t, "stan") + + m := mbtest.NewFetcher(t, getConfig(service.Host())) + events, errs := m.FetchEvents() + if len(errs) > 0 { + t.Fatalf("Expected 0 error, had %d. %v\n", len(errs), errs) + } + assert.NotEmpty(t, events) +} + +func getConfig(host string) map[string]interface{} { + return map[string]interface{}{ + "module": "stan", + "metricsets": []string{"subscriptions"}, + "hosts": []string{host}, + } +} diff --git a/x-pack/metricbeat/module/stan/subscriptions/subscriptions_test.go b/x-pack/metricbeat/module/stan/subscriptions/subscriptions_test.go new file mode 100644 index 000000000000..cd49b3a1c894 --- /dev/null +++ b/x-pack/metricbeat/module/stan/subscriptions/subscriptions_test.go @@ -0,0 +1,63 @@ +// Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one +// or more contributor license agreements. Licensed under the Elastic License; +// you may not use this file except in compliance with the Elastic License. + +package subscriptions + +import ( + "io/ioutil" + "net/http" + "net/http/httptest" + "path/filepath" + "testing" + + "github.com/stretchr/testify/assert" + + mbtest "github.com/elastic/beats/metricbeat/mb/testing" +) + +func TestEventMapping(t *testing.T) { + content, err := ioutil.ReadFile("./_meta/test/subscriptions.json") + assert.NoError(t, err) + reporter := &mbtest.CapturingReporterV2{} + err = eventsMapping(content, reporter) + assert.NoError(t, err) + evts := reporter.GetEvents() + + // 115 subscribers + assert.Equal(t, len(evts), 115) + errErrs := reporter.GetErrors() + assert.Equal(t, len(errErrs), 0) +} + +func TestFetchEventContent(t *testing.T) { + server := initServer() + defer server.Close() + + config := map[string]interface{}{ + "module": "stan", + "metricsets": []string{"subscriptions"}, + "hosts": []string{server.URL}, + } + reporter := &mbtest.CapturingReporterV2{} + + metricSet := mbtest.NewReportingMetricSetV2Error(t, config) + metricSet.Fetch(reporter) + + for _, evt := range reporter.GetEvents() { + mbtest.StandardizeEvent(metricSet, evt) + } + +} + +func initServer() *httptest.Server { + absPath, _ := filepath.Abs("./_meta/test/") + + response, _ := ioutil.ReadFile(absPath + "/subscriptions.json") + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.WriteHeader(200) + w.Header().Set("Content-Type", "application/json;") + w.Write([]byte(response)) + })) + return server +} diff --git a/x-pack/metricbeat/module/stan/test_stan.py b/x-pack/metricbeat/module/stan/test_stan.py new file mode 100644 index 000000000000..8acd47984f91 --- /dev/null +++ b/x-pack/metricbeat/module/stan/test_stan.py @@ -0,0 +1,26 @@ +import os +import sys +import unittest +from parameterized import parameterized + +sys.path.append(os.path.join(os.path.dirname(__file__), '../../tests/system')) +from xpack_metricbeat import XPackTest, metricbeat + +STAN_FIELDS = metricbeat.COMMON_FIELDS + ["stan"] + + +class TestStan(XPackTest): + + COMPOSE_SERVICES = ['stan'] + + @parameterized.expand([ + "stats", + "channels", + "subscriptions", + ]) + @unittest.skipUnless(metricbeat.INTEGRATION_TESTS, "integration test") + def test_metricset(self, metricset): + """ + stan metricset tests + """ + self.check_metricset("stan", metricset, self.get_hosts(), STAN_FIELDS) diff --git a/x-pack/metricbeat/modules.d/stan.yml.disabled b/x-pack/metricbeat/modules.d/stan.yml.disabled new file mode 100644 index 000000000000..0f93c0f5a0c2 --- /dev/null +++ b/x-pack/metricbeat/modules.d/stan.yml.disabled @@ -0,0 +1,10 @@ +# Module: stan +# Docs: https://www.elastic.co/guide/en/beats/metricbeat/master/metricbeat-module-stan.html + +- module: stan + metricsets: ["stats", "subscriptions", "channels"] + period: 60s + hosts: ["localhost:8222"] + #stats.metrics_path: "/streaming/serverz" + #channels.metrics_path: "/streaming/channelsz" + #subscriptions.metrics_path: "/streaming/channelsz" # we retrieve streaming subscriptions with a detailed query param to the channelsz endpoint