Events
In order to be easily integratable system, SuperMQ is using Redis Streams as an event log for event sourcing. Services that are publishing events to Redis Streams are users service, clients service, bootstrap service and mqtt adapter.
Users Service
For every operation users service will generate new event and publish it to Redis Stream called supermq.users. Every event has its own event ID that is automatically generated and operation field that can have one of the following values:
user.createfor user creationuser.updatefor user updateuser.removefor user change of stateuser.viewfor user viewuser.view_profilefor user profile viewuser.listfor listing usersuser.list_by_groupfor listing users by groupuser.identifyfor user identificationuser.generate_reset_tokenfor generating reset tokenuser.issue_tokenfor issuing tokenuser.refresh_tokenfor refreshing tokenuser.reset_secretfor resetting secretuser.send_password_resetfor sending password resetgroup.createfor group creationgroup.updatefor group updategroup.removefor group change of stategroup.viewfor group viewgroup.listfor listing groupsgroup.list_by_userfor listing groups by userpolicy.authorizefor policy authorizationpolicy.addfor policy creationpolicy.updatefor policy updatepolicy.removefor policy deletionpolicy.listfor listing policies
By fetching and processing these events you can reconstruct users service state. If you store some of your custom data in metadata field, this is the perfect way to fetch it and process it. If you want to integrate through docker-compose.yml you can use supermq-es-redis service. Just connect to it and consume events from Redis Stream named supermq.users.
User create event
Whenever user is created, users service will generate new create event. This event will have the following format:
-
In Redis Streams
1) "1693307171926-0"
2) 1) "occurred_at"
2) "1693307171925834295"
3) "operation"
4) "user.create"
5) "id"
6) "e1b982d8-a332-4bc2-aaff-4bbaa86880fc"
7) "status"
8) "enabled"
9) "created_at"
10) "2023-08-29T11:06:11.914074Z"
11) "name"
12) "-dry-sun"
13) "metadata"
14) "{}"
15) "identity"
16) "[email protected]"As you can see from this example, every odd field represents field name while every even field represents field value. This is standard event format for Redis Streams. If you want to extract
metadatafield from this event, you'll have to read it as string first and then you can deserialize it to some structured format. -
In Nats JetStream
Subject: events.supermq.users Received: 2023-10-05T15:41:04+03:00
{"created_at":"2023-10-05T12:41:04.743529Z","id":"0a5f2e21-1a8b-460e-bfa9-732e570df095","identity":"[email protected]","metadata":"e30=","name":"wizardly_hopper","occurred_at":1696509664755440542,"operation":"user.create","status":"enabled"} -
In RabbitMQ Streams
{
"created_at": "2023-10-17T08:43:52.329385Z",
"id": "b2941bd6-ca98-4c56-8d94-05fbf6a967c4",
"identity": "[email protected]",
"metadata": "e30=",
"name": "-Skurka-Brule",
"occurred_at": 1697532232341083347,
"operation": "user.create",
"status": "enabled"
}
User view event
Whenever user is viewed, users service will generate new view event. This event will have the following format:
-
In Redis Streams
1) "1693307172248-0"
2) 1) "name"
2) "-holy-pond"
3) "owner"
4) "e1b982d8-a332-4bc2-aaff-4bbaa86880fc"
5) "created_at"
6) "2023-08-29T11:06:12.032254Z"
7) "status"
8) "enabled"
9) "operation"
10) "user.view"
11) "id"
12) "56d2a797-dcb9-4fab-baf9-7c75e707b2c0"
13) "identity"
14) "[email protected]"
15) "metadata"
16) "{}"
17) "occurred_at"
18) "1693307172247989798" -
In Nats JetStreams
Subject: events.supermq.users Received: 2023-10-05T18:38:40+03:00
{"created_at":"2023-10-05T15:38:40.219889Z","id":"d4baecb8-adfa-4c7c-8257-deea5d7f9dba","identity":"[email protected]","metadata":"e30=","name":"-Doud-Varley","occurred_at":1696520320355145103,"operation":"user.view","owner":"3264e965-3fe5-4d4e-a857-48de43551d2e","status":"enabled"} -
In rabbitmq streams
{
"created_at": "2023-10-17T08:43:52.441962Z",
"id": "00397996-f7e0-4035-9271-3e48ee66d525",
"identity": "[email protected]",
"metadata": "e30=",
"name": "-Busbey-Vadala",
"occurred_at": 1697532237472321186,
"operation": "user.view",
"owner": "b2941bd6-ca98-4c56-8d94-05fbf6a967c4",
"status": "enabled"
}
User view profile event
Whenever user profile is viewed, users service will generate new view_profile event. This event will have the following format:
-
In Redis
1) "1693308867001-0"
2) 1) "id"
2) "64fd20bf-e8fb-46bf-9b64-2a6572eda21b"
3) "name"
4) "admin"
5) "identity"
6) "[email protected]"
7) "metadata"
8) "{\"role\":\"admin\"}"
9) "created_at"
10) "2023-08-29T10:55:23.048948Z"
11) "status"
12) "enabled"
13) "occurred_at"
14) "1693308867001792403"
15) "operation"
16) "user.view_profile" -
In Nats JetStreams
Subject: events.supermq.users Received: 2023-10-05T19:41:01+03:00
{"created_at":"2023-10-05T11:59:02.029606Z","id":"97466511-6317-4c98-8d58-7bd78bcaf587","identity":"[email protected]","metadata":"eyJyb2xlIjoiYWRtaW4ifQ==","name":"admin","occurred_at":1696524061363472648,"operation":"user.view_profile","status":"enabled"}
User list event
Whenever user list is fetched, users service will generate new list event. This event will have the following format:
-
In Redis Streams
1) "1693307172254-0"
2) 1) "status"
2) "enabled"
3) "occurred_at"
4) "1693307172254687479"
5) "operation"
6) "user.list"
7) "total"
8) "0"
9) "offset"
10) "0"
11) "limit"
12) "10" -
In Nats JetStreams
Subject: events.supermq.users Received: 2023-10-05T18:38:40+03:00
{"limit":10,"occurred_at":1696520320382884278,"offset":0,"operation":"user.list","status":"enabled","total":0} -
In rabbitmq streams
{
"limit": 10,
"occurred_at": 1697532237475179227,
"offset": 0,
"operation": "user.list",
"status": "enabled",
"total": 0
}
User list by group event
Whenever user list by group is fetched, users service will generate new list_by_group event. This event will have the following format:
1) "1693308952544-0"
2) 1) "operation"
2) "user.list_by_group"
3) "total"
4) "0"
5) "offset"
6) "0"
7) "limit"
8) "10"
9) "group_id"
10) "bc7fb023-70d5-41aa-bf73-3eab1cf001c9"
11) "status"
12) "enabled"
13) "occurred_at"
14) "1693308952544612677"
User identify event
Whenever user is identified, users service will generate new identify event. This event will have the following format:
-
In Redis Streams
1) "1693307172168-0"
2) 1) "operation"
2) "user.identify"
3) "user_id"
4) "e1b982d8-a332-4bc2-aaff-4bbaa86880fc"
5) "occurred_at"
6) "1693307172167980303" -
In Nats JetStreams
Subject: events.supermq.users Received: 2023-10-05T15:11:22+03:00
{"occurred_at":1696507882455392181,"operation":"user.identify","user_id":"733005f5-7a69-4da3-adac-1ac3bd6fdedf"} -
In rabbitmq streams
{
"occurred_at": 1697532232453091076,
"operation": "user.identify",
"user_id": "b2941bd6-ca98-4c56-8d94-05fbf6a967c4"
}
User generate reset token event
Whenever user reset token is generated, users service will generate new generate_reset_token event. This event will have the following format:
1) "1693310458376-0"
2) 1) "operation"
2) "user.generate_reset_token"
3) "email"
4) "[email protected]"
5) "host"
6) "http://localhost"
7) "occurred_at"
8) "1693310458376066097"
User issue token event
Whenever user token is issued, users service will generate new issue_token event. This event will have the following format:
-
In Redis Streams
1) "1693307171987-0"
2) 1) "operation"
2) "user.issue_token"
3) "identity"
4) "[email protected]"
5) "occurred_at"
6) "1693307171987023095" -
In Nats JetStreams
Subject: events.supermq.users Received: 2023-10-05T14:59:02+03:00
{"identity":"[email protected]","occurred_at":1696507142218064965,"operation":"user.issue_token"} -
In rabbitmq streams
{
"identity": "[email protected]",
"occurred_at": 1697532232391996417,
"operation": "user.issue_token"
}
User refresh token event
Whenever user token is refreshed, users service will generate new refresh_token event. This event will have the following format:
1) "1693309886622-0"
2) 1) "operation"
2) "user.refresh_token"
3) "occurred_at"
4) "1693309886622414715"
User reset secret event
Whenever user secret is reset, users service will generate new reset_secret event. This event will have the following format:
1) "1693311075789-0"
2) 1) "operation"
2) "user.update_secret"
3) "updated_by"
4) "34591d29-13eb-49f8-995b-e474911eeb8a"
5) "name"
6) "rodney"
7) "created_at"
8) "2023-08-29T11:59:51.456429Z"
9) "status"
10) "enabled"
11) "occurred_at"
12) "1693311075789446621"
13) "updated_at"
14) "2023-08-29T12:11:15.785039Z"
15) "id"
16) "34591d29-13eb-49f8-995b-e474911eeb8a"
17) "identity"
18) "[email protected]"
19) "metadata"
20) "{}"
User update event
Whenever user instance is updated, users service will generate new update event. This event will have the following format:
-
In Redis
1) "1693307172308-0"
2) 1) "operation"
2) "user.update"
3) "updated_by"
4) "e1b982d8-a332-4bc2-aaff-4bbaa86880fc"
5) "id"
6) "56d2a797-dcb9-4fab-baf9-7c75e707b2c0"
7) "metadata"
8) "{\"Update\":\"rough-leaf\"}"
9) "updated_at"
10) "2023-08-29T11:06:12.294444Z"
11) "name"
12) "fragrant-voice"
13) "identity"
14) "[email protected]"
15) "created_at"
16) "2023-08-29T11:06:12.032254Z"
17) "status"
18) "enabled"
19) "occurred_at"
20) "1693307172308305030" -
In Nats JetStreams
Subject: events.supermq.users Received: 2023-10-05T18:38:40+03:00
{"created_at":"2023-10-05T15:38:40.219889Z","id":"d4baecb8-adfa-4c7c-8257-deea5d7f9dba","identity":"[email protected]","metadata":"eyJVcGRhdGUiOiJBbGVncmlhLVdvbGwifQ==","name":"Rhude-Parrillo","occurred_at":1696520320510448519,"operation":"user.update","status":"enabled","updated_at":"2023-10-05T15:38:40.500637Z","updated_by":"3264e965-3fe5-4d4e-a857-48de43551d2e"} -
In rabbitmq streams
{
"created_at": "2023-10-17T08:43:52.441962Z",
"id": "00397996-f7e0-4035-9271-3e48ee66d525",
"identity": "[email protected]",
"metadata": "eyJVcGRhdGUiOiJWZW5hYmxlcy1IeW1hbiJ9",
"name": "Eicholtz-Stallabrass",
"occurred_at": 1697532242530064639,
"operation": "user.update",
"status": "enabled",
"updated_at": "2023-10-17T08:44:02.519652Z",
"updated_by": "b2941bd6-ca98-4c56-8d94-05fbf6a967c4"
}
User update identity event
Whenever user identity is updated, users service will generate new update_identity event. This event will have the following format:
-
In Redis
1) "1693307172321-0"
2) 1) "metadata"
2) "{\"Update\":\"rough-leaf\"}"
3) "created_at"
4) "2023-08-29T11:06:12.032254Z"
5) "status"
6) "enabled"
7) "updated_at"
8) "2023-08-29T11:06:12.310276Z"
9) "updated_by"
10) "e1b982d8-a332-4bc2-aaff-4bbaa86880fc"
11) "id"
12) "56d2a797-dcb9-4fab-baf9-7c75e707b2c0"
13) "name"
14) "fragrant-voice"
15) "operation"
16) "user.update_identity"
17) "identity"
18) "wandering-brook"
19) "occurred_at"
20) "1693307172320906479" -
In Nats JetStream
Subject: events.supermq.users Received: 2023-10-05T18:38:40+03:00
{"created_at":"2023-10-05T15:38:40.219889Z","id":"d4baecb8-adfa-4c7c-8257-deea5d7f9dba","identity":"Andes-Bahgat","metadata":"eyJVcGRhdGUiOiJBbGVncmlhLVdvbGwifQ==","name":"Rhude-Parrillo","occurred_at":1696520320527730565,"operation":"user.update_identity","status":"enabled","updated_at":"2023-10-05T15:38:40.518477Z","updated_by":"3264e965-3fe5-4d4e-a857-48de43551d2e"} -
In rabbitmq streams
{
"created_at": "2023-10-17T08:43:52.441962Z",
"id": "00397996-f7e0-4035-9271-3e48ee66d525",
"identity": "Cris-Unkles",
"metadata": "eyJVcGRhdGUiOiJWZW5hYmxlcy1IeW1hbiJ9",
"name": "Eicholtz-Stallabrass",
"occurred_at": 1697532242534643742,
"operation": "user.update_identity",
"status": "enabled",
"updated_at": "2023-10-17T08:44:02.532198Z",
"updated_by": "b2941bd6-ca98-4c56-8d94-05fbf6a967c4"
}
User update tags event
Whenever user tags are updated, users service will generate new update_tags event. This event will have the following format:
-
In Redis
1) "1693307172332-0"
2) 1) "name"
2) "fragrant-voice"
3) "identity"
4) "wandering-brook"
5) "metadata"
6) "{\"Update\":\"rough-leaf\"}"
7) "status"
8) "enabled"
9) "updated_at"
10) "2023-08-29T11:06:12.323039Z"
11) "updated_by"
12) "e1b982d8-a332-4bc2-aaff-4bbaa86880fc"
13) "id"
14) "56d2a797-dcb9-4fab-baf9-7c75e707b2c0"
15) "occurred_at"
16) "1693307172332766275"
17) "operation"
18) "user.update_tags"
19) "tags"
20) "[patient-thunder]"
21) "created_at"
22) "2023-08-29T11:06:12.032254Z" -
In Nats JetStreams
Subject: events.supermq.users Received: 2023-10-05T18:38:40+03:00
{"created_at":"2023-10-05T15:38:40.219889Z","id":"d4baecb8-adfa-4c7c-8257-deea5d7f9dba","identity":"Andes-Bahgat","metadata":"eyJVcGRhdGUiOiJBbGVncmlhLVdvbGwifQ==","name":"Rhude-Parrillo","occurred_at":1696520320537588492,"operation":"user.update_tags","status":"enabled","tags":"[Tischler-Persechino]","updated_at":"2023-10-05T15:38:40.533159Z","updated_by":"3264e965-3fe5-4d4e-a857-48de43551d2e"} -
In rabbitmq streams
{
"created_at": "2023-10-17T08:43:52.441962Z",
"id": "00397996-f7e0-4035-9271-3e48ee66d525",
"identity": "Cris-Unkles",
"metadata": "eyJVcGRhdGUiOiJWZW5hYmxlcy1IeW1hbiJ9",
"name": "Eicholtz-Stallabrass",
"occurred_at": 1697532242539607155,
"operation": "user.update_tags",
"status": "enabled",
"tags": "[Jagdish-Daneshzadeh]",
"updated_at": "2023-10-17T08:44:02.536891Z",
"updated_by": "b2941bd6-ca98-4c56-8d94-05fbf6a967c4"
}
User remove event
Whenever user instance changes state in the system, users service will generate and publish new remove event. This event will have the following format:
-
In Redis Streams
1) "1693307172345-0"
2) 1) "operation"
2) "user.remove"
3) "id"
4) "56d2a797-dcb9-4fab-baf9-7c75e707b2c0"
5) "status"
6) "disabled"
7) "updated_at"
8) "2023-08-29T11:06:12.323039Z"
9) "updated_by"
10) "e1b982d8-a332-4bc2-aaff-4bbaa86880fc"
11) "occurred_at"
12) "1693307172345419824"
1) "1693307172359-0"
2) 1) "id"
2) "56d2a797-dcb9-4fab-baf9-7c75e707b2c0"
3) "status"
4) "enabled"
5) "updated_at"
6) "2023-08-29T11:06:12.323039Z"
7) "updated_by"
8) "e1b982d8-a332-4bc2-aaff-4bbaa86880fc"
9) "occurred_at"
10) "1693307172359445655"
11) "operation"
12) "user.remove" -
In Nats JetStream
Subject: events.supermq.users Received: 2023-10-05T17:59:29+03:00
{"id":"0a5f2e21-1a8b-460e-bfa9-732e570df095","occurred_at":1696517969187562377,"operation":"user.remove","status":"disabled","updated_at":"0001-01-01T00:00:00Z","updated_by":""} -
In rabbitmq streams
{
"id": "00397996-f7e0-4035-9271-3e48ee66d525",
"occurred_at": 1697532242544658933,
"operation": "user.remove",
"status": "disabled",
"updated_at": "2023-10-17T08:44:02.536891Z",
"updated_by": "b2941bd6-ca98-4c56-8d94-05fbf6a967c4"
}
Group create event
Whenever group is created, users service will generate new create event. This event will have the following format:
-
In Redis Streams
1) "1693307172153-0"
2) 1) "name"
2) "-fragrant-resonance"
3) "metadata"
4) "{}"
5) "occurred_at"
6) "1693307172152850138"
7) "operation"
8) "group.create"
9) "id"
10) "bc7fb023-70d5-41aa-bf73-3eab1cf001c9"
11) "status"
12) "enabled"
13) "created_at"
14) "2023-08-29T11:06:12.129484Z"
15) "owner"
16) "e1b982d8-a332-4bc2-aaff-4bbaa86880fc"As you can see from this example, every odd field represents field name while every even field represents field value. This is standard event format for Redis Streams. If you want to extract
metadatafield from this event, you'll have to read it as string first and then you can deserialize it to some structured format. -
In Nats JetStream
Subject: events.supermq.users Received: 2023-10-05T16:12:00+03:00
{"created_at":"2023-10-05T13:12:00.88713Z","id":"f565885c-826d-4c4c-9277-a3c8537aadff","metadata":"e30=","name":"cyclopes","occurred_at":1696511520897093737,"operation":"group.create","owner":"97466511-6317-4c98-8d58-7bd78bcaf587","status":"enabled"} -
In rabbitmq streams
{
"created_at": "2023-10-17T08:43:52.447093Z",
"id": "d9c550f9-e644-453b-af5b-1ab7e9a99d9d",
"metadata": "e30=",
"name": "-Zarella-Knobeloch",
"occurred_at": 1697532232450859819,
"operation": "group.create",
"owner": "b2941bd6-ca98-4c56-8d94-05fbf6a967c4",
"status": "enabled"
}
Group update event
Whenever group instance is updated, users service will generate new update event. This event will have the following format:
-
In Redis
1) "1693307172445-0"
2) 1) "operation"
2) "group.update"
3) "owner"
4) "e1b982d8-a332-4bc2-aaff-4bbaa86880fc"
5) "name"
6) "young-paper"
7) "occurred_at"
8) "1693307172445370750"
9) "updated_at"
10) "2023-08-29T11:06:12.429555Z"
11) "updated_by"
12) "e1b982d8-a332-4bc2-aaff-4bbaa86880fc"
13) "id"
14) "bc7fb023-70d5-41aa-bf73-3eab1cf001c9"
15) "metadata"
16) "{\"Update\":\"spring-wood\"}"
17) "created_at"
18) "2023-08-29T11:06:12.129484Z"
19) "status"
20) "enabled" -
In Nats JetStreams
Subject: events.supermq.users Received: 2023-10-05T18:38:40+03:00
{"created_at":"2023-10-05T15:38:40.22859Z","id":"cabccc8d-937b-4d92-832b-48d7a466e19e","metadata":"eyJVcGRhdGUiOiJSZWdvLVJlZHdheSJ9","name":"Reiger-Cheal","occurred_at":1696520320573615888,"operation":"group.update","owner":"3264e965-3fe5-4d4e-a857-48de43551d2e","status":"enabled","updated_at":"2023-10-05T15:38:40.56848Z","updated_by":"3264e965-3fe5-4d4e-a857-48de43551d2e"} -
In rabbitmq streams
{
"created_at": "2023-10-17T08:43:52.447093Z",
"id": "d9c550f9-e644-453b-af5b-1ab7e9a99d9d",
"metadata": "eyJVcGRhdGUiOiJCaW5ueS1TYXZhZGtvdWhpIn0=",
"name": "Knick-Doskas",
"occurred_at": 1697532242554817001,
"operation": "group.update",
"owner": "b2941bd6-ca98-4c56-8d94-05fbf6a967c4",
"status": "enabled",
"updated_at": "2023-10-17T08:44:02.552421Z",
"updated_by": "b2941bd6-ca98-4c56-8d94-05fbf6a967c4"
}
Group view event
Whenever group is viewed, users service will generate new view event. This event will have the following format:
-
In Redis Streams
1) "1693307172257-0"
2) 1) "occurred_at"
2) "1693307172257041358"
3) "operation"
4) "group.view"
5) "id"
6) "bc7fb023-70d5-41aa-bf73-3eab1cf001c9"
7) "owner"
8) "e1b982d8-a332-4bc2-aaff-4bbaa86880fc"
9) "name"
10) "-fragrant-resonance"
11) "metadata"
12) "{}"
13) "created_at"
14) "2023-08-29T11:06:12.129484Z"
15) "status"
16) "enabled" -
In Nats JetStream
Subject: events.supermq.users Received: 2023-10-05T18:38:40+03:00
{"created_at":"2023-10-05T15:38:40.22859Z","id":"cabccc8d-937b-4d92-832b-48d7a466e19e","metadata":"e30=","name":"-Conneely-Chiang","occurred_at":1696520320392002702,"operation":"group.view","owner":"3264e965-3fe5-4d4e-a857-48de43551d2e","status":"enabled"} -
In rabbitmq streams
{
"created_at": "2023-10-17T08:43:52.447093Z",
"id": "d9c550f9-e644-453b-af5b-1ab7e9a99d9d",
"metadata": "e30=",
"name": "-Zarella-Knobeloch",
"occurred_at": 1697532237477518526,
"operation": "group.view",
"owner": "b2941bd6-ca98-4c56-8d94-05fbf6a967c4",
"status": "enabled"
}
Group list event
Whenever group list is fetched, users service will generate new list event. This event will have the following format:
-
In Redis
1) "1693307172264-0"
2) 1) "occurred_at"
2) "1693307172264183217"
3) "operation"
4) "group.list"
5) "total"
6) "0"
7) "offset"
8) "0"
9) "limit"
10) "10"
11) "status"
12) "enabled" -
In Nats JetStreams
Subject: events.supermq.users Received: 2023-10-05T19:41:01+03:00
{"limit":100,"occurred_at":1696524061330756963,"offset":0,"operation":"group.list","status":"all","total":0} -
In rabbitmq streams
{
"limit": 10,
"occurred_at": 1697532237481188226,
"offset": 0,
"operation": "group.list",
"status": "enabled",
"total": 0
}
Group list by user event
Whenever group list by user is fetched, users service will generate new list_by_user event. This event will have the following format:
-
In Redis
1) "1693308937283-0"
2) 1) "limit"
2) "10"
3) "channel_id"
4) "bb1a7b38-cd79-410d-aca7-e744decd7b8e"
5) "status"
6) "enabled"
7) "occurred_at"
8) "1693308937282933017"
9) "operation"
10) "group.list_by_user"
11) "total"
12) "0"
13) "offset"
14) "0" -
In Nats JetStreams
Subject: events.supermq.users Received: 2023-10-05T19:41:01+03:00
{"limit":100,"occurred_at":1696524061330756963,"offset":0,"operation":"group.list","status":"all","total":0}
Group remove event
Whenever group instance changes state in the system, users service will generate and publish new remove event. This event will have the following format:
-
In Redis
1) "1693307172460-0"
2) 1) "updated_by"
2) "e1b982d8-a332-4bc2-aaff-4bbaa86880fc"
3) "occurred_at"
4) "1693307172459828786"
5) "operation"
6) "group.remove"
7) "id"
8) "bc7fb023-70d5-41aa-bf73-3eab1cf001c9"
9) "status"
10) "disabled"
11) "updated_at"
12) "2023-08-29T11:06:12.429555Z"
1) "1693307172473-0"
2) 1) "id"
2) "bc7fb023-70d5-41aa-bf73-3eab1cf001c9"
3) "status"
4) "enabled"
5) "updated_at"
6) "2023-08-29T11:06:12.429555Z"
7) "updated_by"
8) "e1b982d8-a332-4bc2-aaff-4bbaa86880fc"
9) "occurred_at"
10) "1693307172473661564"
11) "operation"
12) "group.remove" -
In Nats JetStreams
Subject: events.supermq.users Received: 2023-10-05T18:38:40+03:00
{"id":"cabccc8d-937b-4d92-832b-48d7a466e19e","occurred_at":1696520320583695115,"operation":"group.remove","status":"disabled","updated_at":"2023-10-05T15:38:40.56848Z","updated_by":"3264e965-3fe5-4d4e-a857-48de43551d2e"}
Subject: events.supermq.users Received: 2023-10-05T18:38:40+03:00
{"id":"cabccc8d-937b-4d92-832b-48d7a466e19e","occurred_at":1696520320592509139,"operation":"group.remove","status":"enabled","updated_at":"2023-10-05T15:38:40.56848Z","updated_by":"3264e965-3fe5-4d4e-a857-48de43551d2e"} -
In rabbitmq streams
{
"id": "d9c550f9-e644-453b-af5b-1ab7e9a99d9d",
"occurred_at": 1697532242559729288,
"operation": "group.remove",
"status": "disabled",
"updated_at": "2023-10-17T08:44:02.552421Z",
"updated_by": "b2941bd6-ca98-4c56-8d94-05fbf6a967c4"
}
Policy authorize event
Whenever policy is authorized, users service will generate new authorize event. This event will have the following format:
-
In Redis Streams
1) "1693311470724-0"
2) 1) "entity_type"
2) "client"
3) "object"
4) "8a85e2d5-e783-43ee-8bea-d6d0f8039e78"
5) "actions"
6) "c_list"
7) "occurred_at"
8) "1693311470724174126"
9) "operation"
10) "policies.authorize" -
In Nats JetStreams
Subject: events.supermq.users Received: 2023-10-05T15:12:07+03:00
{"action":"c_list","entity_type":"client","object":"clients","occurred_at":1696507927648459930,"operation":"policies.authorize"} -
In rabbitmq streams
{
"action": "g_list",
"entity_type": "group",
"object": "clients",
"occurred_at": 1697536686571995884,
"operation": "policies.authorize"
}
Policy add event
Whenever policy is added, users service will generate new add event. This event will have the following format:
-
In Redis Streams
1) "1693311470721-0"
2) 1) "operation"
2) "policies.add"
3) "owner_id"
4) "fe2e5de0-9900-4ac5-b364-eae0c35777fb"
5) "subject"
6) "12510af8-b6a7-410d-944c-9feded199d6d"
7) "object"
8) "8a85e2d5-e783-43ee-8bea-d6d0f8039e78"
9) "actions"
10) "[g_add,c_list]"
11) "created_at"
12) "2023-08-29T12:17:50.715541Z"
13) "occurred_at"
14) "1693311470721394773" -
In Nats JetStreams
Subject: events.supermq.users Received: 2023-10-05T16:13:21+03:00
{"actions":"[m_read]","object":"f565885c-826d-4c4c-9277-a3c8537aadff","occurred_at":1696511601827118557,"operation":"policies.add","subject":"0a5f2e21-1a8b-460e-bfa9-732e570df095"} -
In rabbitmq streams
{
"actions": "[c_list,c_update,c_delete]",
"object": "d9c550f9-e644-453b-af5b-1ab7e9a99d9d",
"occurred_at": 1697538038965204061,
"operation": "policies.add",
"subject": "df0a29f6-df00-46e8-bde5-cbdf418510da"
}
Policy update event
Whenever policy is updated, users service will generate new update event. This event will have the following format:
-
In Redis Streams
1) "1693312500101-0"
2) 1) "updated_at"
2) "2023-08-29T12:35:00.095028Z"
3) "occurred_at"
4) "1693312500101367995"
5) "operation"
6) "policies.update"
7) "owner_id"
8) "fe2e5de0-9900-4ac5-b364-eae0c35777fb"
9) "subject"
10) "12510af8-b6a7-410d-944c-9feded199d6d"
11) "object"
12) "8a85e2d5-e783-43ee-8bea-d6d0f8039e78"
13) "actions"
14) "[g_add,c_list]"
15) "created_at"
16) "2023-08-29T12:17:50.715541Z" -
In rabbitmq streams
{
"actions": "[g_list]",
"object": "0f551d14-0efe-4b5e-bc96-b9cd834e91d1",
"occurred_at": 1697538056924321702,
"operation": "policies.update",
"subject": "bd3f51f6-d84e-41d9-8205-f725c6b5e774"
}
Policy remove event
Whenever policy is removed, users service will generate new remove event. This event will have the following format:
-
In Redis Streams
1) "1693312590631-0"
2) 1) "occurred_at"
2) "1693312590631691388"
3) "operation"
4) "policies.delete"
5) "subject"
6) "12510af8-b6a7-410d-944c-9feded199d6d"
7) "object"
8) "8a85e2d5-e783-43ee-8bea-d6d0f8039e78"
9) "actions"
10) "[g_add,c_list]" -
In rabbitmq streams
{
"object": "0f551d14-0efe-4b5e-bc96-b9cd834e91d1",
"occurred_at": 1697538064359063507,
"operation": "policies.delete",
"subject": "bd3f51f6-d84e-41d9-8205-f725c6b5e774"
}
Policy list event
Whenever policy list is fetched, clients service will generate new list event. This event will have the following format:
-
In Redis Streams
1) "1693312633649-0"
2) 1) "operation"
2) "policies.list"
3) "total"
4) "0"
5) "limit"
6) "10"
7) "offset"
8) "0"
9) "occurred_at"
10) "1693312633649171129" -
In rabbitmq streams
{
"limit": 10,
"occurred_at": 1697536690236286573,
"offset": 0,
"operation": "policies.list",
"total": 0
}
Clients Service
For every operation that has side effects (that is changing service state) clients service will generate new event and publish it to Redis Stream called supermq.clients. Every event has its own event ID that is automatically generated and operation field that can have one of the following values:
client.createfor client creationclient.updatefor client updateclient.removefor client change of stateclient.viewfor client viewclient.listfor listing clientsclient.list_by_channelfor listing clients by channelclient.identifyfor client identificationchannel.createfor channel creationchannel.updatefor channel updatechannel.removefor channel change of statechannel.viewfor channel viewchannel.listfor listing channelschannel.list_by_clientfor listing channels by clientpolicy.authorizefor policy authorizationpolicy.addfor policy creationpolicy.updatefor policy updatepolicy.removefor policy deletionpolicy.listfor listing policies
By fetching and processing these events you can reconstruct clients service state. If you store some of your custom data in metadata field, this is the perfect way to fetch it and process it. If you want to integrate through docker-compose.yml you can use supermq-es-redis service. Just connect to it and consume events from Redis Stream named supermq.clients.
Client create event
Whenever client is created, clients service will generate new create event. This event will have the following format:
-
In Redis Streams
1) 1) "1693311470576-0"
2) 1) "operation"
2) "client.create"
3) "id"
4) "12510af8-b6a7-410d-944c-9feded199d6d"
5) "status"
6) "enabled"
7) "created_at"
8) "2023-08-29T12:17:50.566453Z"
9) "name"
10) "-broken-cloud"
11) "owner"
12) "fe2e5de0-9900-4ac5-b364-eae0c35777fb"
13) "metadata"
14) "{}"
15) "occurred_at"
16) "1693311470576589894"As you can see from this example, every odd field represents field name while every even field represents field value. This is standard event format for Redis Streams. If you want to extract
metadatafield from this event, you'll have to read it as string first and then you can deserialize it to some structured format. -
In Nats JetStreams
Subject: events.supermq.clients Received: 2023-10-05T15:41:04+03:00
{"created_at":"2023-10-05T12:41:04.833207Z","id":"9745f2ea-f776-46b1-9b44-1cfd1ad4c6f1","metadata":"e30=","name":"d0","occurred_at":1696509664860397827,"operation":"client.create","owner":"0a5f2e21-1a8b-460e-bfa9-732e570df095","status":"enabled"} -
In rabbitmq streams
{
"created_at": "2023-10-17T08:43:52.453621Z",
"id": "83c884cc-51b7-40ab-a98f-83ea93f4cdd6",
"metadata": "e30=",
"name": "-Maune-Tuttle",
"occurred_at": 1697532232459167722,
"operation": "client.create",
"owner": "b2941bd6-ca98-4c56-8d94-05fbf6a967c4",
"status": "enabled"
}
client update event
Whenever client instance is updated, clients service will generate new update event. This event will have the following format:
-
In Redis
1) "1693311470669-0"
2) 1) "operation"
2) "client.update"
3) "updated_at"
4) "2023-08-29T12:17:50.665752Z"
5) "updated_by"
6) "fe2e5de0-9900-4ac5-b364-eae0c35777fb"
7) "owner"
8) "fe2e5de0-9900-4ac5-b364-eae0c35777fb"
9) "created_at"
10) "2023-08-29T12:17:50.566453Z"
11) "status"
12) "enabled"
13) "id"
14) "12510af8-b6a7-410d-944c-9feded199d6d"
15) "name"
16) "lingering-sea"
17) "metadata"
18) "{\"Update\":\"nameless-glitter\"}"
19) "occurred_at"
20) "1693311470669567023" -
In Nats JetStreams
Subject: events.supermq.clients Received: 2023-10-05T18:38:40+03:00
{"created_at":"2023-10-05T15:38:40.264564Z","id":"47540f84-029b-436f-89b5-3c10f87e302b","metadata":"eyJVcGRhdGUiOiJCZXJuYXJkLUJyaWNrZXkifQ==","name":"Bence-Jefferson","occurred_at":1696520320614766498,"operation":"client.update","owner":"3264e965-3fe5-4d4e-a857-48de43551d2e","status":"enabled","updated_at":"2023-10-05T15:38:40.606662Z","updated_by":"3264e965-3fe5-4d4e-a857-48de43551d2e"} -
In rabbitmq streams
{
"created_at": "2023-10-17T08:43:52.453621Z",
"id": "83c884cc-51b7-40ab-a98f-83ea93f4cdd6",
"metadata": "eyJVcGRhdGUiOiJTdGV2ZW5zb24tTW9udHNpb24ifQ==",
"name": "Marner-Shapiro",
"occurred_at": 1697532242575070481,
"operation": "client.update",
"owner": "b2941bd6-ca98-4c56-8d94-05fbf6a967c4",
"status": "enabled",
"updated_at": "2023-10-17T08:44:02.571677Z",
"updated_by": "b2941bd6-ca98-4c56-8d94-05fbf6a967c4"
}
client update secret event
Whenever client secret is updated, clients service will generate new update_secret event. This event will have the following format:
-
In Redis
1) "1693311470676-0"
2) 1) "id"
2) "12510af8-b6a7-410d-944c-9feded199d6d"
3) "name"
4) "lingering-sea"
5) "metadata"
6) "{\"Update\":\"nameless-glitter\"}"
7) "status"
8) "enabled"
9) "occurred_at"
10) "1693311470676563107"
11) "operation"
12) "client.update_secret"
13) "updated_at"
14) "2023-08-29T12:17:50.672865Z"
15) "updated_by"
16) "fe2e5de0-9900-4ac5-b364-eae0c35777fb"
17) "owner"
18) "fe2e5de0-9900-4ac5-b364-eae0c35777fb"
19) "created_at"
20) "2023-08-29T12:17:50.566453Z" -
In Nats JetStreams
Subject: events.supermq.clients Received: 2023-10-05T18:38:40+03:00
{"created_at":"2023-10-05T15:38:40.264564Z","id":"47540f84-029b-436f-89b5-3c10f87e302b","metadata":"eyJVcGRhdGUiOiJCZXJuYXJkLUJyaWNrZXkifQ==","name":"Bence-Jefferson","occurred_at":1696520320633637049,"operation":"client.update_secret","owner":"3264e965-3fe5-4d4e-a857-48de43551d2e","status":"enabled","updated_at":"2023-10-05T15:38:40.625663Z","updated_by":"3264e965-3fe5-4d4e-a857-48de43551d2e"} -
In rabbitmq streams
{
"created_at": "2023-10-17T08:43:52.453621Z",
"id": "83c884cc-51b7-40ab-a98f-83ea93f4cdd6",
"metadata": "eyJVcGRhdGUiOiJTdGV2ZW5zb24tTW9udHNpb24ifQ==",
"name": "Marner-Shapiro",
"occurred_at": 1697532242583980252,
"operation": "client.update_secret",
"owner": "b2941bd6-ca98-4c56-8d94-05fbf6a967c4",
"status": "enabled",
"updated_at": "2023-10-17T08:44:02.580896Z",
"updated_by": "b2941bd6-ca98-4c56-8d94-05fbf6a967c4"
}
client update tags event
Whenever client tags are updated, clients service will generate new update_tags event. This event will have the following format:
-
In Redis
1) "1693311470682-0"
2) 1) "operation"
2) "client.update_tags"
3) "owner"
4) "fe2e5de0-9900-4ac5-b364-eae0c35777fb"
5) "metadata"
6) "{\"Update\":\"nameless-glitter\"}"
7) "status"
8) "enabled"
9) "occurred_at"
10) "1693311470682522926"
11) "updated_at"
12) "2023-08-29T12:17:50.679301Z"
13) "updated_by"
14) "fe2e5de0-9900-4ac5-b364-eae0c35777fb"
15) "id"
16) "12510af8-b6a7-410d-944c-9feded199d6d"
17) "name"
18) "lingering-sea"
19) "tags"
20) "[morning-pine]"
21) "created_at"
22) "2023-08-29T12:17:50.566453Z" -
In Nats JetStreams
Subject: events.supermq.clients Received: 2023-10-05T18:38:40+03:00
{"created_at":"2023-10-05T15:38:40.264564Z","id":"47540f84-029b-436f-89b5-3c10f87e302b","metadata":"eyJVcGRhdGUiOiJCZXJuYXJkLUJyaWNrZXkifQ==","name":"Bence-Jefferson","occurred_at":1696520320651750298,"operation":"client.update_tags","owner":"3264e965-3fe5-4d4e-a857-48de43551d2e","status":"enabled","tags":"[Kac-Kimma]","updated_at":"2023-10-05T15:38:40.643285Z","updated_by":"3264e965-3fe5-4d4e-a857-48de43551d2e"} -
In rabbitmq streams
{
"created_at": "2023-10-17T08:43:52.453621Z",
"id": "83c884cc-51b7-40ab-a98f-83ea93f4cdd6",
"metadata": "eyJVcGRhdGUiOiJTdGV2ZW5zb24tTW9udHNpb24ifQ==",
"name": "Marner-Shapiro",
"occurred_at": 1697532242593091501,
"operation": "client.update_tags",
"owner": "b2941bd6-ca98-4c56-8d94-05fbf6a967c4",
"status": "enabled",
"tags": "[Donni-Planting]",
"updated_at": "2023-10-17T08:44:02.589939Z",
"updated_by": "b2941bd6-ca98-4c56-8d94-05fbf6a967c4"
}
client remove event
Whenever client instance is removed from the system, clients service will generate and publish new remove event. This event will have the following format:
-
In Redis Streams
1) "1693311470689-0"
2) 1) "updated_by"
2) "fe2e5de0-9900-4ac5-b364-eae0c35777fb"
3) "occurred_at"
4) "1693311470688911826"
5) "operation"
6) "client.remove"
7) "id"
8) "12510af8-b6a7-410d-944c-9feded199d6d"
9) "status"
10) "disabled"
11) "updated_at"
12) "2023-08-29T12:17:50.679301Z"
1) "1693311470695-0"
2) 1) "operation"
2) "client.remove"
3) "id"
4) "12510af8-b6a7-410d-944c-9feded199d6d"
5) "status"
6) "enabled"
7) "updated_at"
8) "2023-08-29T12:17:50.679301Z"
9) "updated_by"
10) "fe2e5de0-9900-4ac5-b364-eae0c35777fb"
11) "occurred_at"
12) "1693311470695446948" -
In Nats JetsStreams
Subject: events.supermq.clients Received: 2023-10-05T18:38:40+03:00
{"id":"47540f84-029b-436f-89b5-3c10f87e302b","occurred_at":1696520320674227458,"operation":"client.remove","status":"disabled","updated_at":"2023-10-05T15:38:40.643285Z","updated_by":"3264e965-3fe5-4d4e-a857-48de43551d2e"}
Subject: events.supermq.clients Received: 2023-10-05T18:38:40+03:00
{"id":"47540f84-029b-436f-89b5-3c10f87e302b","occurred_at":1696520320692289306,"operation":"client.remove","status":"enabled","updated_at":"2023-10-05T15:38:40.643285Z","updated_by":"3264e965-3fe5-4d4e-a857-48de43551d2e"} -
In rabbitmq streams
{
"id": "83c884cc-51b7-40ab-a98f-83ea93f4cdd6",
"occurred_at": 1697532242603326333,
"operation": "client.remove",
"status": "disabled",
"updated_at": "2023-10-17T08:44:02.589939Z",
"updated_by": "b2941bd6-ca98-4c56-8d94-05fbf6a967c4"
}
client view event
Whenever client is viewed, clients service will generate new view event. This event will have the following format:
-
In Redis Streams
1) "1693311470608-0"
2) 1) "operation"
2) "client.view"
3) "id"
4) "12510af8-b6a7-410d-944c-9feded199d6d"
5) "name"
6) "-broken-cloud"
7) "owner"
8) "fe2e5de0-9900-4ac5-b364-eae0c35777fb"
9) "metadata"
10) "{}"
11) "created_at"
12) "2023-08-29T12:17:50.566453Z"
13) "status"
14) "enabled"
15) "occurred_at"
16) "1693311470608701504" -
In Nats JetStreams
Subject: events.supermq.clients Received: 2023-10-05T15:42:00+03:00
{"created_at":"2023-10-05T12:41:04.833207Z","id":"9745f2ea-f776-46b1-9b44-1cfd1ad4c6f1","metadata":"e30=","name":"d0","occurred_at":1696509720925490970,"operation":"client.view","owner":"0a5f2e21-1a8b-460e-bfa9-732e570df095","status":"enabled"} -
In rabbitmq streams
{
"created_at": "2023-10-17T08:43:52.453621Z",
"id": "83c884cc-51b7-40ab-a98f-83ea93f4cdd6",
"metadata": "e30=",
"name": "-Maune-Tuttle",
"occurred_at": 1697532237490995357,
"operation": "client.view",
"owner": "b2941bd6-ca98-4c56-8d94-05fbf6a967c4",
"status": "enabled"
}
client list event
Whenever client list is fetched, clients service will generate new list event. This event will have the following format:
-
In Redis Streams
1) "1693311470613-0"
2) 1) "occurred_at"
2) "1693311470613173088"
3) "operation"
4) "client.list"
5) "total"
6) "0"
7) "offset"
8) "0"
9) "limit"
10) "10"
11) "status"
12) "enabled" -
In Nats JetStreams
Subject: events.supermq.clients Received: 2023-10-05T18:38:40+03:00
{"limit":10,"occurred_at":1696520320459999484,"offset":0,"operation":"client.list","status":"enabled","total":0} -
In rabbitmq streams
{
"limit": 10,
"occurred_at": 1697532237496534968,
"offset": 0,
"operation": "client.list",
"status": "enabled",
"total": 0
}
client list by channel event
Whenever client list by channel is fetched, clients service will generate new list_by_channel event. This event will have the following format:
1) "1693312322620-0"
2) 1) "operation"
2) "client.list_by_channel"
3) "total"
4) "0"
5) "offset"
6) "0"
7) "limit"
8) "10"
9) "channel_id"
10) "8d77099e-4911-4140-8555-7d3be65a1694"
11) "status"
12) "enabled"
13) "occurred_at"
14) "1693312322620481072"
client identify event
Whenever client is identified, clients service will generate new identify event. This event will have the following format:
-
In Redis Streams
1) "1693312391155-0"
2) 1) "operation"
2) "client.identify"
3) "client_id"
4) "dc82d6bf-973b-4582-9806-0230cee11c20"
5) "occurred_at"
6) "1693312391155123548" -
In Nats JetStreams
Subject: events.supermq.clients Received: 2023-10-05T18:38:40+03:00
{"occurred_at":1696520320934964056,"operation":"client.identify","client_id":"47540f84-029b-436f-89b5-3c10f87e302b"}
Channel create event
Whenever channel instance is created, clients service will generate and publish new create event. This event will have the following format:
-
In Redis Streams
1) 1) "1693311470584-0"
2) 1) "owner"
2) "fe2e5de0-9900-4ac5-b364-eae0c35777fb"
3) "name"
4) "-frosty-moon"
5) "metadata"
6) "{}"
7) "occurred_at"
8) "1693311470584416323"
9) "operation"
10) "channel.create"
11) "id"
12) "8a85e2d5-e783-43ee-8bea-d6d0f8039e78"
13) "status"
14) "enabled"
15) "created_at"
16) "2023-08-29T12:17:50.57866Z" -
In Nats JetStreams
Subject: events.supermq.clients Received: 2023-10-05T15:55:39+03:00
{"created_at":"2023-10-05T12:55:39.175568Z","id":"45eb9f35-1360-4051-81e2-9582433a6607","metadata":"e30=","name":"hephaestus","occurred_at":1696510539182201160,"operation":"channel.create","owner":"97466511-6317-4c98-8d58-7bd78bcaf587","status":"enabled"} -
In rabbitmq streams
{
"created_at": "2023-10-17T08:43:52.461635Z",
"id": "b9ae027e-9068-4bff-9ced-45a28351a1ce",
"metadata": "e30=",
"name": "-Dortch-Peckett",
"occurred_at": 1697532232464401399,
"operation": "channel.create",
"owner": "b2941bd6-ca98-4c56-8d94-05fbf6a967c4",
"status": "enabled"
}
Channel update event
Whenever channel instance is updated, clients service will generate and publish new update event. This event will have the following format:
-
In Redis Streams
1) "1693311470701-0"
2) 1) "updated_by"
2) "fe2e5de0-9900-4ac5-b364-eae0c35777fb"
3) "owner"
4) "fe2e5de0-9900-4ac5-b364-eae0c35777fb"
5) "created_at"
6) "2023-08-29T12:17:50.57866Z"
7) "status"
8) "enabled"
9) "operation"
10) "channel.update"
11) "updated_at"
12) "2023-08-29T12:17:50.698278Z"
13) "metadata"
14) "{\"Update\":\"silent-hill\"}"
15) "occurred_at"
16) "1693311470701812291"
17) "id"
18) "8a85e2d5-e783-43ee-8bea-d6d0f8039e78"
19) "name"
20) "morning-forest" -
In Nats JetStreams
Subject: events.supermq.clients Received: 2023-10-05T16:00:29+03:00
{"created_at":"2023-10-05T12:41:04.87198Z","id":"5f9d4b76-0717-4859-8ef8-6fcfb81f44d5","metadata":"e30=","name":"hestia","occurred_at":1696510829837578155,"operation":"channel.update","owner":"0a5f2e21-1a8b-460e-bfa9-732e570df095","status":"enabled","updated_at":"2023-10-05T13:00:29.828132Z","updated_by":"97466511-6317-4c98-8d58-7bd78bcaf587"} -
In rabbitmq streams
{
"created_at": "2023-10-17T08:43:52.461635Z",
"id": "b9ae027e-9068-4bff-9ced-45a28351a1ce",
"metadata": "eyJVcGRhdGUiOiJTaXNuZXktS29ra2F0In0=",
"name": "Pelley-Staffing",
"occurred_at": 1697532242622549294,
"operation": "channel.update",
"owner": "b2941bd6-ca98-4c56-8d94-05fbf6a967c4",
"status": "enabled",
"updated_at": "2023-10-17T08:44:02.619432Z",
"updated_by": "b2941bd6-ca98-4c56-8d94-05fbf6a967c4"
}
Note that update channel event will contain only those fields that were updated using update channel endpoint.
Channel remove event
Whenever channel instance is removed from the system, clients service will generate and publish new remove event. This event will have the following format:
-
In Redis Streams
1) "1693311470708-0"
2) 1) "status"
2) "disabled"
3) "updated_at"
4) "2023-08-29T12:17:50.698278Z"
5) "updated_by"
6) "fe2e5de0-9900-4ac5-b364-eae0c35777fb"
7) "occurred_at"
8) "1693311470708219296"
9) "operation"
10) "channel.remove"
11) "id"
12) "8a85e2d5-e783-43ee-8bea-d6d0f8039e78"
1) "1693311470714-0"
2) 1) "occurred_at"
2) "1693311470714118979"
3) "operation"
4) "channel.remove"
5) "id"
6) "8a85e2d5-e783-43ee-8bea-d6d0f8039e78"
7) "status"
8) "enabled"
9) "updated_at"
10) "2023-08-29T12:17:50.698278Z"
11) "updated_by"
12) "fe2e5de0-9900-4ac5-b364-eae0c35777fb" -
In Nats JetStreams
Subject: events.supermq.clients Received: 2023-10-05T18:38:40+03:00
{"id":"e4fa015f-bfad-4f41-bebe-142d3e938d3a","occurred_at":1696520320726205997,"operation":"channel.remove","status":"disabled","updated_at":"2023-10-05T15:38:40.702159Z","updated_by":"3264e965-3fe5-4d4e-a857-48de43551d2e"}
Subject: events.supermq.clients Received: 2023-10-05T18:38:40+03:00
{"id":"e4fa015f-bfad-4f41-bebe-142d3e938d3a","occurred_at":1696520320786154457,"operation":"channel.remove","status":"enabled","updated_at":"2023-10-05T15:38:40.702159Z","updated_by":"3264e965-3fe5-4d4e-a857-48de43551d2e"} -
In rabbitmq streams
{
"id": "b9ae027e-9068-4bff-9ced-45a28351a1ce",
"occurred_at": 1697532242632439430,
"operation": "channel.remove",
"status": "disabled",
"updated_at": "2023-10-17T08:44:02.619432Z",
"updated_by": "b2941bd6-ca98-4c56-8d94-05fbf6a967c4"
}
Channel view event
Whenever channel is viewed, clients service will generate new view event. This event will have the following format:
-
In Redis Streams
1) "1693311470615-0"
2) 1) "id"
2) "8a85e2d5-e783-43ee-8bea-d6d0f8039e78"
3) "owner"
4) "fe2e5de0-9900-4ac5-b364-eae0c35777fb"
5) "name"
6) "-frosty-moon"
7) "metadata"
8) "{}"
9) "created_at"
10) "2023-08-29T12:17:50.57866Z"
11) "status"
12) "enabled"
13) "occurred_at"
14) "1693311470615693019"
15) "operation"
16) "channel.view" -
In Nats JetStream
Subject: events.supermq.clients Received: 2023-10-05T18:38:40+03:00
{"created_at":"2023-10-05T15:38:40.31444Z","id":"e4fa015f-bfad-4f41-bebe-142d3e938d3a","metadata":"e30=","name":"-Cech-Hargreaves","occurred_at":1696520320475816826,"operation":"channel.view","owner":"3264e965-3fe5-4d4e-a857-48de43551d2e","status":"enabled"} -
In rabbitmq streams
{
"created_at": "2023-10-17T08:43:52.461635Z",
"id": "b9ae027e-9068-4bff-9ced-45a28351a1ce",
"metadata": "e30=",
"name": "-Dortch-Peckett",
"occurred_at": 1697532237504403729,
"operation": "channel.view",
"owner": "b2941bd6-ca98-4c56-8d94-05fbf6a967c4",
"status": "enabled"
}
Channel list event
Whenever channel list is fetched, clients service will generate new list event. This event will have the following format:
-
In Redis
1) "1693311470619-0"
2) 1) "limit"
2) "10"
3) "status"
4) "enabled"
5) "occurred_at"
6) "1693311470619194337"
7) "operation"
8) "channel.list"
9) "total"
10) "0"
11) "offset"
12) "0" -
In Nats JetStreams
Subject: events.supermq.clients Received: 2023-10-05T18:38:40+03:00
{"limit":10,"occurred_at":1696520320495779280,"offset":0,"operation":"channel.list","status":"enabled","total":0} -
In rabbitmq streams
{
"limit": 10,
"occurred_at": 1697532237512138449,
"offset": 0,
"operation": "channel.list",
"status": "enabled",
"total": 0
}
Channel list by client event
Whenever channel list by client is fetched, clients service will generate new list_by_client event. This event will have the following format:
1) "1693312299484-0"
2) 1) "occurred_at"
2) "1693312299484000183"
3) "operation"
4) "channel.list_by_client"
5) "total"
6) "0"
7) "offset"
8) "0"
9) "limit"
10) "10"
11) "client_id"
12) "dc82d6bf-973b-4582-9806-0230cee11c20"
13) "status"
14) "enabled"
client Policy authorize event
Whenever policy is authorized, clients service will generate new authorize event. This event will have the following format:
-
In Redis Streams
1) "1693311470724-0"
2) 1) "entity_type"
2) "client"
3) "object"
4) "8a85e2d5-e783-43ee-8bea-d6d0f8039e78"
5) "actions"
6) "m_read"
7) "occurred_at"
8) "1693311470724174126"
9) "operation"
10) "policies.authorize" -
In Nats JetStreams
Subject: events.supermq.clients Received: 2023-10-05T18:38:40+03:00
{"actions":"m_write","entity_type":"client","object":"e4fa015f-bfad-4f41-bebe-142d3e938d3a","occurred_at":1696520320938561965,"operation":"policies.authorize"} -
In Rabbitmq streams
{
"action": "c_list",
"entity_type": "client",
"object": "clients",
"occurred_at": 1697536682155214702,
"operation": "policies.authorize"
}
client Policy add event
Whenever policy is added, clients service will generate new add event. This event will have the following format:
-
In Redis Streams
1) "1693311470721-0"
2) 1) "operation"
2) "policies.add"
3) "owner_id"
4) "fe2e5de0-9900-4ac5-b364-eae0c35777fb"
5) "subject"
6) "12510af8-b6a7-410d-944c-9feded199d6d"
7) "object"
8) "8a85e2d5-e783-43ee-8bea-d6d0f8039e78"
9) "actions"
10) "[m_write,m_read]"
11) "created_at"
12) "2023-08-29T12:17:50.715541Z"
13) "occurred_at"
14) "1693311470721394773" -
In Nats JetStreams
Subject: events.supermq.clients Received: 2023-10-05T15:41:04+03:00
{"actions":"[m_write,m_read]","created_at":"2023-10-05T12:41:04.901355Z","object":"5f9d4b76-0717-4859-8ef8-6fcfb81f44d5","occurred_at":1696509664928590911,"operation":"policies.add","owner_id":"0a5f2e21-1a8b-460e-bfa9-732e570df095","subject":"9745f2ea-f776-46b1-9b44-1cfd1ad4c6f1"} -
In rabbitmq streams
{
"actions": "[m_read]",
"created_at": "2023-10-17T10:19:44.704766Z",
"object": "b9ae027e-9068-4bff-9ced-45a28351a1ce",
"occurred_at": 1697537984720752374,
"operation": "policies.add",
"owner_id": "9eef7587-fb81-4db9-bedd-2ccc4f680532",
"subject": "87b6a3c2-e498-477f-813e-102a97ae0141"
}
client Policy update event
Whenever policy is updated, clients service will generate new update event. This event will have the following format:
-
In Redis Streams
1) "1693312500101-0"
2) 1) "updated_at"
2) "2023-08-29T12:35:00.095028Z"
3) "occurred_at"
4) "1693312500101367995"
5) "operation"
6) "policies.update"
7) "owner_id"
8) "fe2e5de0-9900-4ac5-b364-eae0c35777fb"
9) "subject"
10) "12510af8-b6a7-410d-944c-9feded199d6d"
11) "object"
12) "8a85e2d5-e783-43ee-8bea-d6d0f8039e78"
13) "actions"
14) "[m_write,m_read]"
15) "created_at"
16) "2023-08-29T12:17:50.715541Z" -
In rabbitmq streams
{
"actions": "[m_read,m_write]",
"created_at": "2023-10-17T10:19:44.704766Z",
"object": "b9ae027e-9068-4bff-9ced-45a28351a1ce",
"occurred_at": 1697537993401523330,
"operation": "policies.update",
"owner_id": "9eef7587-fb81-4db9-bedd-2ccc4f680532",
"subject": "87b6a3c2-e498-477f-813e-102a97ae0141",
"updated_at": "2023-10-17T10:19:53.388419Z"
}
client Policy remove event
Whenever policy is removed, clients service will generate new remove event. This event will have the following format:
-
In Redis Streams
1) "1693312590631-0"
2) 1) "occurred_at"
2) "1693312590631691388"
3) "operation"
4) "policies.delete"
5) "subject"
6) "12510af8-b6a7-410d-944c-9feded199d6d"
7) "object"
8) "8a85e2d5-e783-43ee-8bea-d6d0f8039e78"
9) "actions"
10) "[m_write,m_read]" -
In Nats JetStreams
Subject: events.supermq.clients Received: 2023-10-05T16:05:15+03:00
{"actions":"[m_write,m_read]","object":"5f9d4b76-0717-4859-8ef8-6fcfb81f44d5","occurred_at":1696511115507500254,"operation":"policies.delete","subject":"9745f2ea-f776-46b1-9b44-1cfd1ad4c6f1"} -
In rabbitmq streams
{
"actions": "[m_write,m_read]",
"object": "053a122e-ea3b-42de-9f5f-9eef7e19491c",
"occurred_at": 1697537995704396106,
"operation": "policies.delete",
"subject": "323a1297-5ca3-425e-b08f-b4bdf0925f10"
}
client Policy list event
Whenever policy list is fetched, clients service will generate new list event. This event will have the following format:
-
In Redis Streams
1) "1693312633649-0"
2) 1) "operation"
2) "policies.list"
3) "total"
4) "0"
5) "limit"
6) "10"
7) "offset"
8) "0"
9) "occurred_at"
10) "1693312633649171129" -
In rabbitmq streams
{
"limit": 10,
"occurred_at": 1697536686568649276,
"offset": 0,
"operation": "policies.list",
"total": 0
}
Note: Every one of these events will omit fields that were not used or are not relevant for specific operation. Also, field ordering is not guaranteed, so DO NOT rely on it.
Bootstrap Service
Bootstrap service publishes events to Redis Stream called supermq.bootstrap. Every event from this service contains operation field which indicates one of the following event types:
config.createfor configuration creation,config.updatefor configuration update,config.removefor configuration removal,client.bootstrapfor device bootstrap,client.state_changefor device state change,client.update_connectionsfor device connection update.
If you want to integrate through docker-compose.yml you can use supermq-es-redis service. Just connect to it and consume events from Redis Stream named supermq.bootstrap.
Configuration create event
Whenever configuration is created, bootstrap service will generate and publish new create event. This event will have the following format:
-
In Redis Streams
1) "1693313286544-0"
2) 1) "state"
2) "0"
3) "operation"
4) "config.create"
5) "name"
6) "demo"
7) "channels"
8) "[8d77099e-4911-4140-8555-7d3be65a1694]"
9) "client_cert"
10) "-----BEGIN ENCRYPTED PRIVATE KEY-----MIIFHDBOBgkqhkiG9w0BBQ0wQTApBgkqhkiG9w0BBQwwHAQIc+VAU9JPnIkCAggAMAwGCCqGSIb3DQIJBQAwFAYIKoZIhvcNAwcECImSB+9qZ8dmBIIEyBW/rZlECWnEcMuTXhfJFe+3HP4rV+TXEEuigwCbtVPHWXoZj7KqGiOFgFaDL5Ne/GRwVD6geaTeQVl3aoHzo8mY0yuX2L36Ho2yHF/Bw89WT3hgP0lZ1lVO7O7n8DwybOaoJ+1S3akyb6OPbqcxJou1IGzKV1kz77R8V8nOFSd1BOepNbanGxVG8Jkgc37dQnICXwwaYkTx9PQBtSux1j3KgX0p+VAUNoUFi7N6b0MeO8iEuLU1dUiVwlH/jtitg0W3AvSV+5gezTT2VQW3CVlz6IBTPI1Rfl/3ss18Tao0NiPUmXMIgreBCamXvb0aJm8JxVbhoFYqWVNVocBD+n1+NwhCRlZM5Kgaes5S2JuFnjTAqEYytlQqEySbaN57XYCDNVmQz2iViz/+npuR9SCGwnNvV/TNsKRwav+0NC0pbf3LNk/KL9/X5ccmPhB5Rl7IS/v1BBLYX/jYWVN0dJiSA7fVIr9Acr7IbxWEQ2Y2qh1wdhayi4FBUHY3weivYSU3uGZizsSGJP/N6DutBgS1aXd5X/CqfF7VzRaKF4cfLO4XxTYUEjOztUNMN2XmW0o+ULjQmbouRPs/PIFmh6rc+h42m6p4SkjcsIKOy+mPTeJqhOVmYoMzO8+7mmXDOjFwvi/w97sdmbjII8Zn2iR/N8GuY23vv5h6LQ3tQ5kTA4IuPbYCVLeggd4iMM6TgpuJn0aG7yo4tDFqMeadCVhP2Bp3JQa8r3B2IJstTTF1OtZCrInjSus9ViOiM02Iz3ZmyglsMonJDlWeJL5jKBgqPbLR82IDhIY4IO6SqoVsWu4iWuLW5/TM3fdfYG3Wdvu7Suz7/anLAaMQEzKhObwgDdKmv4PkF75frex969CB1pQqSVnXmz4GrtxVUzWtlflaTSdSegpUXWLhG+jUNKTu+ptxDNM/JBxRNLSzdvsGbkI0qycOCliVpKkkvuiBGtiDWNax6KhV4/oRjkEkTRks9Xeko+q3uY4B//AGxsotsVhF5vhUDTOl5IX7a7wCPtbTGiaR79eprRzGnP9yP38djVrvXprJFU8P7GUr/f2qJt2jDYuCkaqAMsfjdu6YHitjj3ty4vrASgxJ0vsroWhjgiCwgASqM7GnweHSHy5/OZK8jCZX+g+B63Mu4ec+/nNnjvuLqBBZN/FSzXU5fVmYznfPaqW+1Xep+Aj1yGk3L3tvnKLc3sZ1HAJQEjud5dbME6e0JGxh5xOCnzWUR+YL/96KJAcgkxDJ1DxxHv0Uu/5kO5InOsPjs4YKuzqD4nUmGsFsJzTxG626wdGXJMO4YCRKkKtnNeWqMaslM3paN19/tTWyEbaDqc5mVzYLIb3Mzju+OV4GniDeVIvSIsXK5aFGj1PEhfCprQCqUzdNhFU8hF4kUVhn9dp0ExveT7btHSMlEZAWHRkDuLqaImpQkjYmwt90cxtdZwQvjTDtsFmQrvcSp8n1K3P5PwZpVtIw2UHpx+NjE8ZYwOozpXl/oOMzVTB8mi1dQGFkpac9cwnzCZof0ub4iutBeKc4WeEOytvY+CY7hc+/ncCprZ08nlkQarQV7jhfJj658GfBMLGzJtYkCrHwi/AoseIXa5W7eX+lz7O92H2M5QnEkPStQ9lsz2VkYA==-----END ENCRYPTED PRIVATE KEY-----"
11) "ca_cert"
12) "-----BEGIN ENCRYPTED PRIVATE KEY-----MIIFHDBOBgkqhkiG9w0BBQ0wQTApBgkqhkiG9w0BBQwwHAQIc+VAU9JPnIkCAggAMAwGCCqGSIb3DQIJBQAwFAYIKoZIhvcNAwcECImSB+9qZ8dmBIIEyBW/rZlECWnEcMuTXhfJFe+3HP4rV+TXEEuigwCbtVPHWXoZj7KqGiOFgFaDL5Ne/GRwVD6geaTeQVl3aoHzo8mY0yuX2L36Ho2yHF/Bw89WT3hgP0lZ1lVO7O7n8DwybOaoJ+1S3akyb6OPbqcxJou1IGzKV1kz77R8V8nOFSd1BOepNbanGxVG8Jkgc37dQnICXwwaYkTx9PQBtSux1j3KgX0p+VAUNoUFi7N6b0MeO8iEuLU1dUiVwlH/jtitg0W3AvSV+5gezTT2VQW3CVlz6IBTPI1Rfl/3ss18Tao0NiPUmXMIgreBCamXvb0aJm8JxVbhoFYqWVNVocBD+n1+NwhCRlZM5Kgaes5S2JuFnjTAqEYytlQqEySbaN57XYCDNVmQz2iViz/+npuR9SCGwnNvV/TNsKRwav+0NC0pbf3LNk/KL9/X5ccmPhB5Rl7IS/v1BBLYX/jYWVN0dJiSA7fVIr9Acr7IbxWEQ2Y2qh1wdhayi4FBUHY3weivYSU3uGZizsSGJP/N6DutBgS1aXd5X/CqfF7VzRaKF4cfLO4XxTYUEjOztUNMN2XmW0o+ULjQmbouRPs/PIFmh6rc+h42m6p4SkjcsIKOy+mPTeJqhOVmYoMzO8+7mmXDOjFwvi/w97sdmbjII8Zn2iR/N8GuY23vv5h6LQ3tQ5kTA4IuPbYCVLeggd4iMM6TgpuJn0aG7yo4tDFqMeadCVhP2Bp3JQa8r3B2IJstTTF1OtZCrInjSus9ViOiM02Iz3ZmyglsMonJDlWeJL5jKBgqPbLR82IDhIY4IO6SqoVsWu4iWuLW5/TM3fdfYG3Wdvu7Suz7/anLAaMQEzKhObwgDdKmv4PkF75frex969CB1pQqSVnXmz4GrtxVUzWtlflaTSdSegpUXWLhG+jUNKTu+ptxDNM/JBxRNLSzdvsGbkI0qycOCliVpKkkvuiBGtiDWNax6KhV4/oRjkEkTRks9Xeko+q3uY4B//AGxsotsVhF5vhUDTOl5IX7a7wCPtbTGiaR79eprRzGnP9yP38djVrvXprJFU8P7GUr/f2qJt2jDYuCkaqAMsfjdu6YHitjj3ty4vrASgxJ0vsroWhjgiCwgASqM7GnweHSHy5/OZK8jCZX+g+B63Mu4ec+/nNnjvuLqBBZN/FSzXU5fVmYznfPaqW+1Xep+Aj1yGk3L3tvnKLc3sZ1HAJQEjud5dbME6e0JGxh5xOCnzWUR+YL/96KJAcgkxDJ1DxxHv0Uu/5kO5InOsPjs4YKuzqD4nUmGsFsJzTxG626wdGXJMO4YCRKkKtnNeWqMaslM3paN19/tTWyEbaDqc5mVzYLIb3Mzju+OV4GniDeVIvSIsXK5aFGj1PEhfCprQCqUzdNhFU8hF4kUVhn9dp0ExveT7btHSMlEZAWHRkDuLqaImpQkjYmwt90cxtdZwQvjTDtsFmQrvcSp8n1K3P5PwZpVtIw2UHpx+NjE8ZYwOozpXl/oOMzVTB8mi1dQGFkpac9cwnzCZof0ub4iutBeKc4WeEOytvY+CY7hc+/ncCprZ08nlkQarQV7jhfJj658GfBMLGzJtYkCrHwi/AoseIXa5W7eX+lz7O92H2M5QnEkPStQ9lsz2VkYA==-----END ENCRYPTED PRIVATE KEY-----"
13) "occurred_at"
14) "1693313286544243035"
15) "client_id"
16) "dc82d6bf-973b-4582-9806-0230cee11c20"
17) "content"
18) "{ \"server\": { \"address\": \"127.0.0.1\", \"port\": 8080 }, \"database\": { \"host\": \"localhost\", \"port\": 5432, \"username\": \"user\", \"password\": \"password\", \"dbname\": \"mydb\" }, \"logging\": { \"level\": \"info\", \"file\": \"app.log\" } }"
19) "owner"
20) "64fd20bf-e8fb-46bf-9b64-2a6572eda21b"
21) "external_id"
22) "209327A2FA2D47E3B05F118D769DC521"
23) "client_key"
24) "-----BEGIN ENCRYPTED PRIVATE KEY-----MIIFHDBOBgkqhkiG9w0BBQ0wQTApBgkqhkiG9w0BBQwwHAQIc+VAU9JPnIkCAggAMAwGCCqGSIb3DQIJBQAwFAYIKoZIhvcNAwcECImSB+9qZ8dmBIIEyBW/rZlECWnEcMuTXhfJFe+3HP4rV+TXEEuigwCbtVPHWXoZj7KqGiOFgFaDL5Ne/GRwVD6geaTeQVl3aoHzo8mY0yuX2L36Ho2yHF/Bw89WT3hgP0lZ1lVO7O7n8DwybOaoJ+1S3akyb6OPbqcxJou1IGzKV1kz77R8V8nOFSd1BOepNbanGxVG8Jkgc37dQnICXwwaYkTx9PQBtSux1j3KgX0p+VAUNoUFi7N6b0MeO8iEuLU1dUiVwlH/jtitg0W3AvSV+5gezTT2VQW3CVlz6IBTPI1Rfl/3ss18Tao0NiPUmXMIgreBCamXvb0aJm8JxVbhoFYqWVNVocBD+n1+NwhCRlZM5Kgaes5S2JuFnjTAqEYytlQqEySbaN57XYCDNVmQz2iViz/+npuR9SCGwnNvV/TNsKRwav+0NC0pbf3LNk/KL9/X5ccmPhB5Rl7IS/v1BBLYX/jYWVN0dJiSA7fVIr9Acr7IbxWEQ2Y2qh1wdhayi4FBUHY3weivYSU3uGZizsSGJP/N6DutBgS1aXd5X/CqfF7VzRaKF4cfLO4XxTYUEjOztUNMN2XmW0o+ULjQmbouRPs/PIFmh6rc+h42m6p4SkjcsIKOy+mPTeJqhOVmYoMzO8+7mmXDOjFwvi/w97sdmbjII8Zn2iR/N8GuY23vv5h6LQ3tQ5kTA4IuPbYCVLeggd4iMM6TgpuJn0aG7yo4tDFqMeadCVhP2Bp3JQa8r3B2IJstTTF1OtZCrInjSus9ViOiM02Iz3ZmyglsMonJDlWeJL5jKBgqPbLR82IDhIY4IO6SqoVsWu4iWuLW5/TM3fdfYG3Wdvu7Suz7/anLAaMQEzKhObwgDdKmv4PkF75frex969CB1pQqSVnXmz4GrtxVUzWtlflaTSdSegpUXWLhG+jUNKTu+ptxDNM/JBxRNLSzdvsGbkI0qycOCliVpKkkvuiBGtiDWNax6KhV4/oRjkEkTRks9Xeko+q3uY4B//AGxsotsVhF5vhUDTOl5IX7a7wCPtbTGiaR79eprRzGnP9yP38djVrvXprJFU8P7GUr/f2qJt2jDYuCkaqAMsfjdu6YHitjj3ty4vrASgxJ0vsroWhjgiCwgASqM7GnweHSHy5/OZK8jCZX+g+B63Mu4ec+/nNnjvuLqBBZN/FSzXU5fVmYznfPaqW+1Xep+Aj1yGk3L3tvnKLc3sZ1HAJQEjud5dbME6e0JGxh5xOCnzWUR+YL/96KJAcgkxDJ1DxxHv0Uu/5kO5InOsPjs4YKuzqD4nUmGsFsJzTxG626wdGXJMO4YCRKkKtnNeWqMaslM3paN19/tTWyEbaDqc5mVzYLIb3Mzju+OV4GniDeVIvSIsXK5aFGj1PEhfCprQCqUzdNhFU8hF4kUVhn9dp0ExveT7btHSMlEZAWHRkDuLqaImpQkjYmwt90cxtdZwQvjTDtsFmQrvcSp8n1K3P5PwZpVtIw2UHpx+NjE8ZYwOozpXl/oOMzVTB8mi1dQGFkpac9cwnzCZof0ub4iutBeKc4WeEOytvY+CY7hc+/ncCprZ08nlkQarQV7jhfJj658GfBMLGzJtYkCrHwi/AoseIXa5W7eX+lz7O92H2M5QnEkPStQ9lsz2VkYA==-----END ENCRYPTED PRIVATE KEY-----" -
In Nats Jet Streams
Subject: events.supermq.bootstrap Received: 2023-10-11T19:17:46+03:00
{"client_cert":"-----BEGIN CERTIFICATE-----\nMIIEATCCAumgAwIBAgIUNl+p3eaPJsZRFvW/u5AGBLgx7YMwDQYJKoZIhvcNAQEL\nBQAwLjEsMCoGA1UEAxMjbWFpbmZsdXguY29tIEludGVybWVkaWF0ZSBBdXRob3Jp\ndHkwHhcNMjMxMDExMTYwMDQ0WhcNMjMxMTEwMTYwMTE0WjAvMS0wKwYDVQQDEyQ1\nNmRhNGU5NC0zZDFjLTRhMGQtYTNmNC1hNTdkZDBhNTVkN2IwggEiMA0GCSqGSIb3\nDQEBAQUAA4IBDwAwggEKAoIBAQCt3dFuSvEtihmHKBNCe8AUI/xTJn+JCUF90+ZY\njoz8hWVwd/UhJQKTblBhWL/osGOrr3PItcCVZ1JDaGQMQzhtaPYnBbwJDwMTbcey\nlb/E6O/DD4UCqWpjQjYhc0/z98oM70E+Szs6yp+68qYIGQDH669P91TaURtuGGMr\n8nLN6fQTb9mVZX1L3ps8zHoxb+i7oVhLmjGeGXjf3HP4U+L/hwYhZ/gqqXYZJli6\nR1j5BxJuk1aVKqwrm2qbuFYhWI7Wl6ZEoEk2Q3FV1onzxcVHB5xBacDcNHhyQmoE\nhIg4lt1DTaUKRxlZqbhJQtLrrCeI8NCvEpC/dh1eBwddIxKbAgMBAAGjggEUMIIB\nEDAOBgNVHQ8BAf8EBAMCA6gwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMC\nMB0GA1UdDgQWBBTcmEIW7knfrwBTyBu6WwycgGqzwTAfBgNVHSMEGDAWgBQMxD1V\nt+J/aShmUQJJHmdmmZ/fXDA7BggrBgEFBQcBAQQvMC0wKwYIKwYBBQUHMAKGH2h0\ndHA6Ly92YXVsdDo4MjAwL3YxL3BraV9pbnQvY2EwLwYDVR0RBCgwJoIkNTZkYTRl\nOTQtM2QxYy00YTBkLWEzZjQtYTU3ZGQwYTU1ZDdiMDEGA1UdHwQqMCgwJqAkoCKG\nIGh0dHA6Ly92YXVsdDo4MjAwL3YxL3BraV9pbnQvY3JsMA0GCSqGSIb3DQEBCwUA\nA4IBAQCiCS+dPhXS/upfMieFbt8+QmYQFZ82Ct2oTsDTBaDczE7MiLxrl5iKbynk\nT47y+hyvWFIb31BhrIrS6mRR+9IoJdmje3KxyvNr/TtSw7T4spbfRo30uk2flnA0\nDhJv3bzcYRwjaLdBcZTUS0GETqztdqMThJIY2EAfhfKDM0ecM4tF2c8/RT14BpPO\nEVCUX69A0k6p80xTfmyhvKIfiMsJIcqsHuOiEsiXwgNNUqc332bIV+fQW+vXK8eS\nstp7N2v6axo016wf3qgEUPdPC0sPMHlwIc3s6ddZOoatk6LKH1nW2gIguUH4Ws7s\nAN5Cs0h2D+AWi+IJpDuUzvgrd4/3\n-----END CERTIFICATE-----","client_key":"-----BEGIN RSA PRIVATE KEY-----\nMIIEpQIBAAKCAQEArd3RbkrxLYoZhygTQnvAFCP8UyZ/iQlBfdPmWI6M/IVlcHf1\nISUCk25QYVi/6LBjq69zyLXAlWdSQ2hkDEM4bWj2JwW8CQ8DE23HspW/xOjvww+F\nAqlqY0I2IXNP8/fKDO9BPks7OsqfuvKmCBkAx+uvT/dU2lEbbhhjK/Jyzen0E2/Z\nlWV9S96bPMx6MW/ou6FYS5oxnhl439xz+FPi/4cGIWf4Kql2GSZYukdY+QcSbpNW\nlSqsK5tqm7hWIViO1pemRKBJNkNxVdaJ88XFRwecQWnA3DR4ckJqBISIOJbdQ02l\nCkcZWam4SULS66wniPDQrxKQv3YdXgcHXSMSmwIDAQABAoIBAGFvWKmdd/EUXl/+\n1mRAo5Dl5cbXYUtzk28nbAQexuXQ/9r6brYHXp0uif8z1EBbcU/KgHFvYaCYiWJb\nQw4YMawm0SNnNExDTG7765iqERERlSPUM68dMBC2D03JqHnJWELNZdu6H1RALyl+\nSAtrr6NZ8iI3MicyotOc+R6svSelUigaTKYGadWKNQJjOpLpFhu0D87iTdQ2dJyU\nJKGuB1YCp3rTNXTLuq/omMDyqJYPCNXbKW78bM9UExz0suYJi6URW/aQIK/A8CUh\nXAm40C2aQ8d5tHONsIGB9BlzOkHrXB2CvHKkQWl/TEfo6qcFI6qhx1Gx72SOK7F1\nAE0dDQkCgYEA5Vqq4/LrY/uzjTN918IYrcSi3gr0NoUY/KuZverBZdSR/fS0vMHX\nQ/X7XGE2gOGrzqWN2dtEAmMrisfo9zUlimU+7SWeetOKa5JTtmSZGFWvCrvsnWkH\narZT59t3yJ7YqwbjRmaSC3Uq7veFBsIEKbszm0eeMCtNcSLuykmBM/8CgYEAwhDd\nS3OLj4J62PlSjyBHSDP2Zv5sG6jXDDRPo8HQWcWoOq2stnwgrblkEXpsSpaRaUP8\nQabEtkobckYx3OK6/0Q4c0A6I4lHQpm2m6K2o+8lsG/OwwNplXA+kpYuqUYEjgBl\nFiGblZCtyDPdd4PnHDBjKLUzOYxgRDxfVLLKcWUCgYEAm4+ypyellswqzZPmQAhL\nOtlLanVdjPkbqI0vmwv2Hv5eAzUNvZVwT40w70iUcjgekuvhWamJ6GChMOFE1x96\nFfN0Cd9hLYf7s9is5OI4oLPFJO+vnliVikCein1mMnHjHaVvU9nQJutSsoC5/opr\nzm5Fo4Wg+qT0Qs9hzVyrwLsCgYEAoTk9f6d4dDskMAnByuI4FgYFWL9ZtQjpz1vO\nJe+oVkxdXJJYgCpTQ8BXICYivTylhVxTv376wa6DasZiOm2qiNN2Slk7c7ZimzP0\nfwwIy9yr5Q6eKWk2WE4tzb4y+bIPqqEtWduF1BWkKkTcYqQUZljUqEcRTWgPueCm\nGkmG4fkCgYEAk1rI1pAdfdxLrKTGu2WRfr0UgNx/eUjVuL5GT3Bu092QLXwFc3Py\nsIu7vHRQY1ASGRDvlyx76Uc+mtmXhowwBL1fTiKcfgD3SbqRTw8rwJbF6MNB7fOH\nSWlA4wuzpwVvg0j2DoY5LbwMN7AbrGS451E14xUwpEWdIDChWw14qag=\n-----END RSA PRIVATE KEY-----","external_id":"889","name":"ariadne","occurred_at":1697041066438195084,"operation":"config.create","owner":"1058552c-3f6a-4bfe-827e-ecbcdc95d344","state":"0","client_id":"bb569875-a268-4ed4-b382-b88b181c61f3"}
Configuration update event
Whenever configuration is updated, bootstrap service will generate and publish new update event. This event will have the following format:
1) "1693313985263-0"
2) 1) "state"
2) "0"
3) "operation"
4) "config.update"
5) "client_id"
6) "dc82d6bf-973b-4582-9806-0230cee11c20"
7) "content"
8) "{ \"server\": { \"address\": \"127.0.0.1\", \"port\": 8080 }, \"database\": { \"host\": \"localhost\", \"port\": 5432, \"username\": \"user\", \"password\": \"password\", \"dbname\": \"mydb\" } }"
9) "name"
10) "demo"
11) "occurred_at"
12) "1693313985263381501"
Certificate update event
Whenever certificate is updated, bootstrap service will generate and publish new update event. This event will have the following format:
1) "1693313759203-0"
2) 1) "client_key"
2) "dc82d6bf-973b-4582-9806-0230cee11c20"
3) "client_cert"
4) "-----BEGIN ENCRYPTED PRIVATE KEY-----MIIFHDBOBgkqhkiG9w0BBQ0wQTApBgkqhkiG9w0BBQwwHAQIc+VAU9JPnIkCAggAMAwGCCqGSIb3DQIJBQAwFAYIKoZIhvcNAwcECImSB+9qZ8dmBIIEyBW/rZlECWnEcMuTXhfJFe+3HP4rV+TXEEuigwCbtVPHWXoZj7KqGiOFgFaDL5Ne/GRwVD6geaTeQVl3aoHzo8mY0yuX2L36Ho2yHF/Bw89WT3hgP0lZ1lVO7O7n8DwybOaoJ+1S3akyb6OPbqcxJou1IGzKV1kz77R8V8nOFSd1BOepNbanGxVG8Jkgc37dQnICXwwaYkTx9PQBtSux1j3KgX0p+VAUNoUFi7N6b0MeO8iEuLU1dUiVwlH/jtitg0W3AvSV+5gezTT2VQW3CVlz6IBTPI1Rfl/3ss18Tao0NiPUmXMIgreBCamXvb0aJm8JxVbhoFYqWVNVocBD+n1+NwhCRlZM5Kgaes5S2JuFnjTAqEYytlQqEySbaN57XYCDNVmQz2iViz/+npuR9SCGwnNvV/TNsKRwav+0NC0pbf3LNk/KL9/X5ccmPhB5Rl7IS/v1BBLYX/jYWVN0dJiSA7fVIr9Acr7IbxWEQ2Y2qh1wdhayi4FBUHY3weivYSU3uGZizsSGJP/N6DutBgS1aXd5X/CqfF7VzRaKF4cfLO4XxTYUEjOztUNMN2XmW0o+ULjQmbouRPs/PIFmh6rc+h42m6p4SkjcsIKOy+mPTeJqhOVmYoMzO8+7mmXDOjFwvi/w97sdmbjII8Zn2iR/N8GuY23vv5h6LQ3tQ5kTA4IuPbYCVLeggd4iMM6TgpuJn0aG7yo4tDFqMeadCVhP2Bp3JQa8r3B2IJstTTF1OtZCrInjSus9ViOiM02Iz3ZmyglsMonJDlWeJL5jKBgqPbLR82IDhIY4IO6SqoVsWu4iWuLW5/TM3fdfYG3Wdvu7Suz7/anLAaMQEzKhObwgDdKmv4PkF75frex969CB1pQqSVnXmz4GrtxVUzWtlflaTSdSegpUXWLhG+jUNKTu+ptxDNM/JBxRNLSzdvsGbkI0qycOCliVpKkkvuiBGtiDWNax6KhV4/oRjkEkTRks9Xeko+q3uY4B//AGxsotsVhF5vhUDTOl5IX7a7wCPtbTGiaR79eprRzGnP9yP38djVrvXprJFU8P7GUr/f2qJt2jDYuCkaqAMsfjdu6YHitjj3ty4vrASgxJ0vsroWhjgiCwgASqM7GnweHSHy5/OZK8jCZX+g+B63Mu4ec+/nNnjvuLqBBZN/FSzXU5fVmYznfPaqW+1Xep+Aj1yGk3L3tvnKLc3sZ1HAJQEjud5dbME6e0JGxh5xOCnzWUR+YL/96KJAcgkxDJ1DxxHv0Uu/5kO5InOsPjs4YKuzqD4nUmGsFsJzTxG626wdGXJMO4YCRKkKtnNeWqMaslM3paN19/tTWyEbaDqc5mVzYLIb3Mzju+OV4GniDeVIvSIsXK5aFGj1PEhfCprQCqUzdNhFU8hF4kUVhn9dp0ExveT7btHSMlEZAWHRkDuLqaImpQkjYmwt90cxtdZwQvjTDtsFmQrvcSp8n1K3P5PwZpVtIw2UHpx+NjE8ZYwOozpXl/oOMzVTB8mi1dQGFkpac9cwnzCZof0ub4iutBeKc4WeEOytvY+CY7hc+/ncCprZ08nlkQarQV7jhfJj658GfBMLGzJtYkCrHwi/AoseIXa5W7eX+lz7O92H2M5QnEkPStQ9lsz2VkYA==-----END ENCRYPTED PRIVATE KEY-----"
5) "client_key"
6) "-----BEGIN ENCRYPTED PRIVATE KEY-----MIIFHDBOBgkqhkiG9w0BBQ0wQTApBgkqhkiG9w0BBQwwHAQIc+VAU9JPnIkCAggAMAwGCCqGSIb3DQIJBQAwFAYIKoZIhvcNAwcECImSB+9qZ8dmBIIEyBW/rZlECWnEcMuTXhfJFe+3HP4rV+TXEEuigwCbtVPHWXoZj7KqGiOFgFaDL5Ne/GRwVD6geaTeQVl3aoHzo8mY0yuX2L36Ho2yHF/Bw89WT3hgP0lZ1lVO7O7n8DwybOaoJ+1S3akyb6OPbqcxJou1IGzKV1kz77R8V8nOFSd1BOepNbanGxVG8Jkgc37dQnICXwwaYkTx9PQBtSux1j3KgX0p+VAUNoUFi7N6b0MeO8iEuLU1dUiVwlH/jtitg0W3AvSV+5gezTT2VQW3CVlz6IBTPI1Rfl/3ss18Tao0NiPUmXMIgreBCamXvb0aJm8JxVbhoFYqWVNVocBD+n1+NwhCRlZM5Kgaes5S2JuFnjTAqEYytlQqEySbaN57XYCDNVmQz2iViz/+npuR9SCGwnNvV/TNsKRwav+0NC0pbf3LNk/KL9/X5ccmPhB5Rl7IS/v1BBLYX/jYWVN0dJiSA7fVIr9Acr7IbxWEQ2Y2qh1wdhayi4FBUHY3weivYSU3uGZizsSGJP/N6DutBgS1aXd5X/CqfF7VzRaKF4cfLO4XxTYUEjOztUNMN2XmW0o+ULjQmbouRPs/PIFmh6rc+h42m6p4SkjcsIKOy+mPTeJqhOVmYoMzO8+7mmXDOjFwvi/w97sdmbjII8Zn2iR/N8GuY23vv5h6LQ3tQ5kTA4IuPbYCVLeggd4iMM6TgpuJn0aG7yo4tDFqMeadCVhP2Bp3JQa8r3B2IJstTTF1OtZCrInjSus9ViOiM02Iz3ZmyglsMonJDlWeJL5jKBgqPbLR82IDhIY4IO6SqoVsWu4iWuLW5/TM3fdfYG3Wdvu7Suz7/anLAaMQEzKhObwgDdKmv4PkF75frex969CB1pQqSVnXmz4GrtxVUzWtlflaTSdSegpUXWLhG+jUNKTu+ptxDNM/JBxRNLSzdvsGbkI0qycOCliVpKkkvuiBGtiDWNax6KhV4/oRjkEkTRks9Xeko+q3uY4B//AGxsotsVhF5vhUDTOl5IX7a7wCPtbTGiaR79eprRzGnP9yP38djVrvXprJFU8P7GUr/f2qJt2jDYuCkaqAMsfjdu6YHitjj3ty4vrASgxJ0vsroWhjgiCwgASqM7GnweHSHy5/OZK8jCZX+g+B63Mu4ec+/nNnjvuLqBBZN/FSzXU5fVmYznfPaqW+1Xep+Aj1yGk3L3tvnKLc3sZ1HAJQEjud5dbME6e0JGxh5xOCnzWUR+YL/96KJAcgkxDJ1DxxHv0Uu/5kO5InOsPjs4YKuzqD4nUmGsFsJzTxG626wdGXJMO4YCRKkKtnNeWqMaslM3paN19/tTWyEbaDqc5mVzYLIb3Mzju+OV4GniDeVIvSIsXK5aFGj1PEhfCprQCqUzdNhFU8hF4kUVhn9dp0ExveT7btHSMlEZAWHRkDuLqaImpQkjYmwt90cxtdZwQvjTDtsFmQrvcSp8n1K3P5PwZpVtIw2UHpx+NjE8ZYwOozpXl/oOMzVTB8mi1dQGFkpac9cwnzCZof0ub4iutBeKc4WeEOytvY+CY7hc+/ncCprZ08nlkQarQV7jhfJj658GfBMLGzJtYkCrHwi/AoseIXa5W7eX+lz7O92H2M5QnEkPStQ9lsz2VkYA==-----END ENCRYPTED PRIVATE KEY-----"
7) "ca_cert"
8) "-----BEGIN ENCRYPTED PRIVATE KEY-----MIIFHDBOBgkqhkiG9w0BBQ0wQTApBgkqhkiG9w0BBQwwHAQIc+VAU9JPnIkCAggAMAwGCCqGSIb3DQIJBQAwFAYIKoZIhvcNAwcECImSB+9qZ8dmBIIEyBW/rZlECWnEcMuTXhfJFe+3HP4rV+TXEEuigwCbtVPHWXoZj7KqGiOFgFaDL5Ne/GRwVD6geaTeQVl3aoHzo8mY0yuX2L36Ho2yHF/Bw89WT3hgP0lZ1lVO7O7n8DwybOaoJ+1S3akyb6OPbqcxJou1IGzKV1kz77R8V8nOFSd1BOepNbanGxVG8Jkgc37dQnICXwwaYkTx9PQBtSux1j3KgX0p+VAUNoUFi7N6b0MeO8iEuLU1dUiVwlH/jtitg0W3AvSV+5gezTT2VQW3CVlz6IBTPI1Rfl/3ss18Tao0NiPUmXMIgreBCamXvb0aJm8JxVbhoFYqWVNVocBD+n1+NwhCRlZM5Kgaes5S2JuFnjTAqEYytlQqEySbaN57XYCDNVmQz2iViz/+npuR9SCGwnNvV/TNsKRwav+0NC0pbf3LNk/KL9/X5ccmPhB5Rl7IS/v1BBLYX/jYWVN0dJiSA7fVIr9Acr7IbxWEQ2Y2qh1wdhayi4FBUHY3weivYSU3uGZizsSGJP/N6DutBgS1aXd5X/CqfF7VzRaKF4cfLO4XxTYUEjOztUNMN2XmW0o+ULjQmbouRPs/PIFmh6rc+h42m6p4SkjcsIKOy+mPTeJqhOVmYoMzO8+7mmXDOjFwvi/w97sdmbjII8Zn2iR/N8GuY23vv5h6LQ3tQ5kTA4IuPbYCVLeggd4iMM6TgpuJn0aG7yo4tDFqMeadCVhP2Bp3JQa8r3B2IJstTTF1OtZCrInjSus9ViOiM02Iz3ZmyglsMonJDlWeJL5jKBgqPbLR82IDhIY4IO6SqoVsWu4iWuLW5/TM3fdfYG3Wdvu7Suz7/anLAaMQEzKhObwgDdKmv4PkF75frex969CB1pQqSVnXmz4GrtxVUzWtlflaTSdSegpUXWLhG+jUNKTu+ptxDNM/JBxRNLSzdvsGbkI0qycOCliVpKkkvuiBGtiDWNax6KhV4/oRjkEkTRks9Xeko+q3uY4B//AGxsotsVhF5vhUDTOl5IX7a7wCPtbTGiaR79eprRzGnP9yP38djVrvXprJFU8P7GUr/f2qJt2jDYuCkaqAMsfjdu6YHitjj3ty4vrASgxJ0vsroWhjgiCwgASqM7GnweHSHy5/OZK8jCZX+g+B63Mu4ec+/nNnjvuLqBBZN/FSzXU5fVmYznfPaqW+1Xep+Aj1yGk3L3tvnKLc3sZ1HAJQEjud5dbME6e0JGxh5xOCnzWUR+YL/96KJAcgkxDJ1DxxHv0Uu/5kO5InOsPjs4YKuzqD4nUmGsFsJzTxG626wdGXJMO4YCRKkKtnNeWqMaslM3paN19/tTWyEbaDqc5mVzYLIb3Mzju+OV4GniDeVIvSIsXK5aFGj1PEhfCprQCqUzdNhFU8hF4kUVhn9dp0ExveT7btHSMlEZAWHRkDuLqaImpQkjYmwt90cxtdZwQvjTDtsFmQrvcSp8n1K3P5PwZpVtIw2UHpx+NjE8ZYwOozpXl/oOMzVTB8mi1dQGFkpac9cwnzCZof0ub4iutBeKc4WeEOytvY+CY7hc+/ncCprZ08nlkQarQV7jhfJj658GfBMLGzJtYkCrHwi/AoseIXa5W7eX+lz7O92H2M5QnEkPStQ9lsz2VkYA==-----END ENCRYPTED PRIVATE KEY-----"
9) "operation"
10) "cert.update"
11) "occurred_at"
12) "1693313759203076553"
Configuration list event
Whenever configuration list is fetched, bootstrap service will generate new list event. This event will have the following format:
-
In Redis Streams
1) "1693339274766-0"
2) 1) "occurred_at"
2) "1693339274766130265"
3) "offset"
4) "0"
5) "limit"
6) "10"
7) "operation"
8) "config.list" -
In Nats JetStreams
Subject: events.supermq.bootstrap Received: 2023-10-11T19:23:05+03:00
{"external_id":"879","name":"aphrodite","occurred_at":1697042445469239430,"operation":"config.list","owner":"1058552c-3f6a-4bfe-827e-ecbcdc95d344","state":"0","client_id":"1f9c0d1d-0d6b-4a83-83b9-50845e557a85"}
Configuration view event
Whenever configuration is viewed, bootstrap service will generate new view event. This event will have the following format:
1) 1) "1693339152105-0"
2) 1) "client_id"
2) "74f00d13-d370-42c0-b528-04fff995275c"
3) "name"
4) "demo"
5) "external_id"
6) "FF-41-EF-BC-90-BC"
7) "channels"
8) "[90aae157-d47f-4d71-9a68-b000c0025ae8]"
9) "client_cert"
10) "-----BEGIN PRIVATE KEY-----MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDVYaZsyd76aSWZexY/OyX8hVdE+ruT3OZrE6gFSjDiaAA2Uf5/eHT1BJdR4LviooXix8vfc/g5CAN/z98zmUmAzx9lk5T4sRhJfqYQ2yDEt1tVDwD3RzL9RHXRWiZu4thk253jOpT15VFvOf5wE6mhVozFl9OetVJb4eqKbHx9RY0rMXwiBiCC2LcUtcp6rVjp4pK6VGjehA8siVX9bnRsIY776jDb/pm2n+y5G+bd1CifSdgTrr7QLKFlx0//5lyslmfUbf76kg9bZ8Qe2NdFKvcpEZ4ENxtwMrqW2i1pTExVHNpka8rhA5936qpDKu1ce+kccIbFsPRAHU5PyXfNAgMBAAECggEAAtBt4c4WcGuwlkHxp4B/3hZix0Md9DOb9QTmWLjYxN5QRRHMbyFHPEVaOuHhjc9M6r0YgD2cTsw/QjvwmqfxOI9YFP6JnsS0faD7pF9EzbNes1QmVByOnJkpi0r1aiL4baQZL0+sz+1n/IqMQ4LO4D+ETcV/LKmsM2VbCDD+wfwsVkTmgaqKtXIFQ3bOU5LjRcxCZFs81z3mYDyP4hfnlmTWOOXcf8yLqx5LGH8erCGXgrhZiN5/mhkzUpkF75Eo4qt3jVZEt+d48RnPsk0TO0rqs4j5F3d/6Dboi3UpRlHZ4vEM7MeDGoMuXTh59MzbV1e/03sY2jTtB2NVQ51pFQKBgQD0kjYorDqu5e82Orp5rRkS58nUDgq3vaxNKJq+32LuuTuNjRrM57XoyBAVnBlfTP5IOQaxjYPNxHkZhYdYREyZKx96g6FZUWLQxKO+vP+E25MXSsnP8FMkQNfgSvMCxfIyFO3aVbDUme6bIScPNCTzKVWSWTj5Zyyig9VQpoRJ5wKBgQDfWlF7krUefQEvdJFxd9IGBvlkWkGi942Hh0H6vJCzhMQO8DeHZjO4oiiCEpRmBdkLDlZs81mykmyFEpjcmv4JD23HQ9IPi0/4Bsuu3SDXF4HC5/QYldaG0behBmMmDYuaQ0NHY5rpCnpZBteYT6V6lcBm/AIKwvz+N8fY2fDCKwKBgQDfBCjQw+SrMc8FI16Br7+KhsR7UuahEBt7LIiXfvom98//TuleafhuMWjBW9ujFIFXeHDLHWFQFFXdWO7HJVi33yPQQxGxcc5q0rUCLDPQga1Kcw8+R0Z5a4uu4olgQQKOepk+HB+obkmvOfb1HTaIaWu3jRawDk4cT50H8x/0hwKBgB63eB9LhNclj+Ur3djCBsNHcELp2r8D1pX99wf5qNjXeHMpfCmF17UbsAB7d6c0RK4tkZs4OGzDkGMYtKcaNbefRJSz8g6rNRtCK/7ncF3EYNciOUKsUK2H5/4gN8CC+mEDwRvvSd2k0ECwHTRYN8TNFYHURJ+gQ1Te7QAYsPCzAoGBAMZnbAY1Q/gK11JaPE2orFb1IltDRKB2IXh5Ton0ZCqhmOhMLQ+4t7DLPUKdXlsBZa/IIm5XehBg6VajbG0zulKLzO4YHuWEduwYON+4DNQxLWhBCBauOZ7+dcGUvYkeKoySYs6hznV9mlMHe1TuhCO8zHjpvBXOrlAR8VX5BXKz-----END PRIVATE KEY-----"
11) "state"
12) "0"
13) "operation"
14) "config.view"
15) "content"
16) "{\"device_id\": \"12345\",\"secure_connection\": true,\"sensor_config\": {\"temperature\": true,\"humidity\": true,\"pressure\": false}}"
17) "owner"
18) "b2972472-c93c-408f-9b77-0f8a81ee47af"
19) "occurred_at"
20) "1693339152105496336"
Configuration remove event
Whenever configuration is removed, bootstrap service will generate and publish new remove event. This event will have the following format:
-
In Redis Streams
1) "1693339203771-0"
2) 1) "occurred_at"
2) "1693339203771705590"
3) "client_id"
4) "853f37b9-513a-41a2-a575-bbaa746961a6"
5) "operation"
6) "config.remove" -
In Nats JetStreams
Subject: events.supermq.bootstrap Received: 2023-10-11T19:24:50+03:00
{"occurred_at":1697041490458439515,"operation":"config.remove","client_id":"6a08150a-cd19-460f-99c9-a760ee50aed3"}
Configuration remove handler
Whenever a client is removed, bootstrap service will generate and publish new config.remove_handler event. This event will have the following format:
1) 1) "1693337955655-0"
2) 1) "config_id"
2) "0198b458-573e-415a-aa05-052ddab9709d"
3) "operation"
4) "config.remove_handler"
5) "occurred_at"
6) "1693337955654969489"
client bootstrap event
Whenever client is bootstrapped, bootstrap service will generate and publish new bootstrap event. This event will have the following format:
1) 1) "1693339161600-0"
2) 1) "occurred_at"
2) "1693339161600369325"
3) "external_id"
4) "FF-41-EF-BC-90-BC"
5) "success"
6) "1"
7) "operation"
8) "client.bootstrap"
9) "client_id"
10) "74f00d13-d370-42c0-b528-04fff995275c"
11) "content"
12) "{\"device_id\": \"12345\",\"secure_connection\": true,\"sensor_config\": {\"temperature\": true,\"humidity\": true,\"pressure\": false}}"
13) "owner"
14) "b2972472-c93c-408f-9b77-0f8a81ee47af"
15) "name"
16) "demo"
17) "channels"
18) "[90aae157-d47f-4d71-9a68-b000c0025ae8]"
19) "ca_cert"
20) "-----BEGIN PRIVATE KEY-----MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDVYaZsyd76aSWZexY/OyX8hVdE+ruT3OZrE6gFSjDiaAA2Uf5/eHT1BJdR4LviooXix8vfc/g5CAN/z98zmUmAzx9lk5T4sRhJfqYQ2yDEt1tVDwD3RzL9RHXRWiZu4thk253jOpT15VFvOf5wE6mhVozFl9OetVJb4eqKbHx9RY0rMXwiBiCC2LcUtcp6rVjp4pK6VGjehA8siVX9bnRsIY776jDb/pm2n+y5G+bd1CifSdgTrr7QLKFlx0//5lyslmfUbf76kg9bZ8Qe2NdFKvcpEZ4ENxtwMrqW2i1pTExVHNpka8rhA5936qpDKu1ce+kccIbFsPRAHU5PyXfNAgMBAAECggEAAtBt4c4WcGuwlkHxp4B/3hZix0Md9DOb9QTmWLjYxN5QRRHMbyFHPEVaOuHhjc9M6r0YgD2cTsw/QjvwmqfxOI9YFP6JnsS0faD7pF9EzbNes1QmVByOnJkpi0r1aiL4baQZL0+sz+1n/IqMQ4LO4D+ETcV/LKmsM2VbCDD+wfwsVkTmgaqKtXIFQ3bOU5LjRcxCZFs81z3mYDyP4hfnlmTWOOXcf8yLqx5LGH8erCGXgrhZiN5/mhkzUpkF75Eo4qt3jVZEt+d48RnPsk0TO0rqs4j5F3d/6Dboi3UpRlHZ4vEM7MeDGoMuXTh59MzbV1e/03sY2jTtB2NVQ51pFQKBgQD0kjYorDqu5e82Orp5rRkS58nUDgq3vaxNKJq+32LuuTuNjRrM57XoyBAVnBlfTP5IOQaxjYPNxHkZhYdYREyZKx96g6FZUWLQxKO+vP+E25MXSsnP8FMkQNfgSvMCxfIyFO3aVbDUme6bIScPNCTzKVWSWTj5Zyyig9VQpoRJ5wKBgQDfWlF7krUefQEvdJFxd9IGBvlkWkGi942Hh0H6vJCzhMQO8DeHZjO4oiiCEpRmBdkLDlZs81mykmyFEpjcmv4JD23HQ9IPi0/4Bsuu3SDXF4HC5/QYldaG0behBmMmDYuaQ0NHY5rpCnpZBteYT6V6lcBm/AIKwvz+N8fY2fDCKwKBgQDfBCjQw+SrMc8FI16Br7+KhsR7UuahEBt7LIiXfvom98//TuleafhuMWjBW9ujFIFXeHDLHWFQFFXdWO7HJVi33yPQQxGxcc5q0rUCLDPQga1Kcw8+R0Z5a4uu4olgQQKOepk+HB+obkmvOfb1HTaIaWu3jRawDk4cT50H8x/0hwKBgB63eB9LhNclj+Ur3djCBsNHcELp2r8D1pX99wf5qNjXeHMpfCmF17UbsAB7d6c0RK4tkZs4OGzDkGMYtKcaNbefRJSz8g6rNRtCK/7ncF3EYNciOUKsUK2H5/4gN8CC+mEDwRvvSd2k0ECwHTRYN8TNFYHURJ+gQ1Te7QAYsPCzAoGBAMZnbAY1Q/gK11JaPE2orFb1IltDRKB2IXh5Ton0ZCqhmOhMLQ+4t7DLPUKdXlsBZa/IIm5XehBg6VajbG0zulKLzO4YHuWEduwYON+4DNQxLWhBCBauOZ7+dcGUvYkeKoySYs6hznV9mlMHe1TuhCO8zHjpvBXOrlAR8VX5BXKz-----END PRIVATE KEY-----"
client change state event
Whenever client's state changes, bootstrap service will generate and publish new change state event. This event will have the following format:
-
In Redis Streams
1) "1555405294806-0"
2) 1) "client_id"
2) "63a110d4-2b77-48d2-aa46-2582681eeb82"
3) "state"
4) "0"
5) "timestamp"
6) "1555405294"
7) "operation"
8) "client.state_change" -
In Nats JetStreams
Subject: events.supermq.bootstrap Received: 2023-10-11T19:26:31+03:00
{"occurred_at":1697041591648042067,"operation":"client.change_state","state":"0","client_id":"1f9c0d1d-0d6b-4a83-83b9-50845e557a85"}
client update connections event
Whenever client's list of connections is updated, bootstrap service will generate and publish new update connections event. This event will have the following format:
1) "1555405373360-0"
2) 1) "operation"
2) "client.update_connections"
3) "client_id"
4) "63a110d4-2b77-48d2-aa46-2582681eeb82"
5) "channels"
6) "ff13ca9c-7322-4c28-a25c-4fe5c7b753fc, 925461e6-edfb-4755-9242-8a57199b90a5, c3642289-501d-4974-82f2-ecccc71b2d82"
7) "timestamp"
8) "1555405373"
Channel update handler event
Whenever channel is updated, bootstrap service will generate and publish new update handler event. This event will have the following format:
1) "1693339403536-0"
2) 1) "operation"
2) "channel.update_handler"
3) "channel_id"
4) "0e602731-36ba-4a29-adba-e5761f356158"
5) "name"
6) "dry-sky"
7) "metadata"
8) "{\"log\":\"info\"}"
9) "occurred_at"
10) "1693339403536636387"
Channel remove handler event
Whenever channel is removed, bootstrap service will generate and publish new remove handler event. This event will have the following format:
1) "1693339468719-0"
2) 1) "config_id"
2) "0198b458-573e-415a-aa05-052ddab9709d"
3) "operation"
4) "config.remove_handler"
5) "occurred_at"
6) "1693339468719177463"
MQTT Adapter
Instead of using heartbeat to know when client is connected through MQTT adapter one can fetch events from Redis Streams that MQTT adapter publishes. MQTT adapter publishes events every time client connects and disconnects to stream named supermq.mqtt.
Events that are coming from MQTT adapter have following fields:
client_idID of a client that has connected to MQTT adapter,event_typecan have two possible values, connect and disconnect,instancerepresents MQTT adapter instance.occurred_atis in Epoch UNIX Time Stamp format.
If you want to integrate through docker-compose.yml you can use supermq-es-redis service. Just connect to it and consume events from Redis Stream named supermq.mqtt.
Examples of connect event:
-
In Redis Streams
1) 1) "1693312937469-0"
2) 1) "client_id"
1) "76a58221-e319-492a-be3e-b3d15631e92a"
2) "event_type"
3) "connect"
4) "instance"
5) ""
6) "occurred_at"
7) "1693312937469719069" -
In Nats JetStreams
Subject: events.supermq.mqtt Received: 2023-10-09T14:57:36+03:00
{"event_type":"connect","instance":"","occurred_at":1696852656381976408,"client_id":"9b23fec0-41a2-44ed-af13-7c54706b3291"}
Example of disconnect event:
-
In Redis Streams
1) 1) "1693312937471-0"
2) 1) "client_id"
2) "76a58221-e319-492a-be3e-b3d15631e92a"
3) "event_type"
4) "disconnect"
5) "instance"
6) ""
7) "occurred_at"
8) "1693312937471064150" -
In Nats JetStreams
Subject: events.supermq.mqtt Received: 2023-10-09T14:57:36+03:00
{"event_type":"disconnect","instance":"","occurred_at":1696852656435238414,"client_id":"9b23fec0-41a2-44ed-af13-7c54706b3291"}