ΠΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ ΠΊΠΎΡΡΠ΅Π»ΡΡΠΈΠΈ Π² Π½Π΅ΠΊΠΎΡΠΎΡΡΡ
ΡΠΎΠ±ΡΡΠΈΡΡ
(Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, gs.up.receive
ΠΈ as.up.receive
) Π΄ΡΠ±Π»ΠΈΡΡΡΡΡΡ.
ttn-lw-cli events subscribe --gateway-id ...
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ:
{
"name": "gs.up.receive",
"time": "2019-05-10T08:48:36.397803Z",
"identifiers": [
{
"gateway_ids": {
"gateway_id": "tektelic-micro",
"eui": "647FDAFFFE0059AB"
}
}
],
"data": {
"@type": "type.googleapis.com/ttn.lorawan.v3.UplinkMessage",
"raw_payload": "QKogASYAkdgBU2NToyoatD/C",
"settings": {
"data_rate": {
"lora": {
"bandwidth": 125000,
"spreading_factor": 7
}
},
"coding_rate": "4/5",
"frequency": "867900000",
"timestamp": 3375161699
},
"rx_metadata": [
{
"gateway_ids": {
"gateway_id": "tektelic-micro",
"eui": "647FDAFFFE0059AB"
},
"timestamp": 3375161699,
"rssi": 2,
"snr": 10,
"uplink_token": "ChwKGgoOdGVrdGVsaWMtbWljcm8SCGR/2v/+AFmrEOPCs8kM"
}
],
"received_at": "2019-05-10T08:48:36.397329Z",
"correlation_ids": [
"gs:conn:01DAGEFV4TBH5K9AVAX86NPDXM",
"gs:uplink:01DAGEW31DQZQNSCQPJ28KGFMF"
],
"gateway_channel_index": 4
},
"correlation_ids": [
"gs:conn:01DAGEFV4TBH5K9AVAX86NPDXM",
"gs:uplink:01DAGEW31DQZQNSCQPJ28KGFMF",
"gs:conn:01DAGEFV4TBH5K9AVAX86NPDXM",
"gs:uplink:01DAGEW31DQZQNSCQPJ28KGFMF"
],
"origin": "Johans-MacBook-Pro.local"
}
ΠΠ΅Ρ Π΄ΡΠ±Π»ΠΈΠΊΠ°ΡΠΎΠ² Π² correlation_ids
ΠΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ ΠΊΠΎΡΡΠ΅Π»ΡΡΠΈΠΈ, Π²Π΅ΡΠΎΡΡΠ½ΠΎ, Π΄ΠΎΠ±Π°Π²Π»ΡΡΡΡΡ Π΄Π²Π°ΠΆΠ΄Ρ. ΠΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π² ΠΏΠ°ΠΊΠ΅ΡΠ΅ ΡΠΎΠ±ΡΡΠΈΠΉ, ΠΊΡΠ΄Π° Π΄ΠΎΠ±Π°Π²Π»ΡΡΡΡΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ ΠΊΠΎΡΡΠ΅Π»ΡΡΠΈΠΈ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΈ Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ Π² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅.
Π΄Π°
@htdvisser ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°
ctx := events.ContextWithCorrelationID(ctx, fmt.Sprintf("gs:uplink:%s", events.NewCorrelationID()))
msg.CorrelationIDs = append(msg.CorrelationIDs, events.CorrelationIDsFromContext(ctx)...)
registerReceiveUplink(ctx, conn.Gateway(), msg)
ΠΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ ΠΊΠΎΡΡΠ΅Π»ΡΡΠΈΠΈ Π΄ΡΠ±Π»ΠΈΡΡΡΡΡΡ Π² ΡΠΎΠ±ΡΡΠΈΠΈ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½ΠΈ ΠΎΠ±Π° Π½Π°Ρ
ΠΎΠ΄ΡΡΡΡ Π² ctx
ΠΈ Π² msg
(ΡΠ΅ΡΠ΅Π· GetCorrelationIDs()
).
Π‘ΡΠΎΠΈΡ Π»ΠΈ Π·Π΄Π΅ΡΡ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΠΎΡΡΡ?
https://github.com/TheThingsNetwork/lorawan-stack/blob/master/pkg/events/events.go#L148
ΠΠ°, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌ ΡΠ»ΠΈΡΠ½ΠΈΡ Π² pkg/events/correlation_context.go
Π² Π΅Π³ΠΎ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ ( mergeCorrelationIDs
) ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ Π² pkg/events/events.go
:
if cids := data.GetCorrelationIDs(); len(cids) > 0 {
cids = append(cids[:0:0], cids...)
sort.Strings(cids)
evt.innerEvent.CorrelationIDs = mergeCorrelationIDs(evt.innerEvent.CorrelationIDs, cids)
}
ΠΠ΅ΡΠΎΡΡΠ½ΠΎ, Π½Π°ΠΌ ΡΠ»Π΅Π΄ΡΠ΅Ρ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ evt.innerEvent.CorrelationIDs
Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ (ΡΠ°ΠΊ ΠΎΠ½ΠΎ ΠΈ Π΅ΡΡΡ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ ΠΊΠΎΡΡΠ΅Π»ΡΡΠΈΠΈ Π² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ ΡΠΎΡΡΠΈΡΡΡΡΡΡ).
ΠΠ°ΠΊΠΎΠΉ ΡΡΠ°ΡΡΡ Ρ @ pgalic96 ?
Π·Π°Π½ΡΠ»ΡΡ Π²ΡΡΠΊΠΎΠΉ Π²ΡΡΡΠΈΠ½ΠΎΠΉ, ΡΠ΄Π΅Π»Π°Π» ΠΏΡΠΎΠ²Π΅ΡΠΊΡ Π½Π° ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΠΎΡΡΡ, ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ°ΠΊ:
if data, ok := data.(interface{ GetCorrelationIDs() []string }); ok {
mapCorrelationIds := make(map[string]struct{})
for _, correlationID := range evt.innerEvent.CorrelationIDs {
mapCorrelationIds[correlationID] = struct{}{}
}
for _, correlationID := range data.GetCorrelationIDs() {
if _, ok := mapCorrelationIds[correlationID]; !ok {
evt.innerEvent.CorrelationIDs = append(evt.innerEvent.CorrelationIDs, correlationID)
}
}
}
Π΅ΡΠ΅ Π½Π΅ Π½Π°ΠΏΠΈΡΠ°Π» ΡΠ΅ΡΡ, Π½ΠΎ ΠΎΠ½ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΡΠΎΠ±ΡΡΠΈΠ΅ Ρ TestCorrelationID
Π° Π·Π°ΡΠ΅ΠΌ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ ΡΠΎΡ ΠΆΠ΅ TestCorrelationID
Π² ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ Π½Π°Π³ΡΡΠ·ΠΊΠ΅, Π° Π·Π°ΡΠ΅ΠΌ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ, ΡΡΠΎ Π΄Π»ΠΈΠ½Π° CorrelationIDs ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΡΠ°Π²Π½Π° Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ 1, Π° Π½Π΅ 2.
ΠΠΎΠΌΠΈΠΌΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΡΡΠΎ ΠΎΠ±ΡΡΠ½ΠΎ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ Ρ
ΠΎΡΠΎΡΠΎ, Ρ
ΠΎΡΡ evt.innerEvent.CorrelationIDs
Π½Π΅ Π΄Π΅Π΄ΡΠΏΠ»ΠΈΡΠΈΡΡΡΡΡΡ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ
Π― Π±Ρ ΠΏΡΠ΅Π΄ΠΏΠΎΡΠ΅Π» ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌ ΡΠ»ΠΈΡΠ½ΠΈΡ @rvolosatovs (ΡΠΌ. ΠΠΎΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ). ΠΡ ΡΠΆΠ΅ ΠΏΠΎΡΡΠ°ΡΠΈΠ»ΠΈ Π²ΡΠ΅ΠΌΡ Π½Π° ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π΄Π»Ρ ΡΠ»ΠΈΡΠ½ΠΈΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠ² ΠΊΠΎΡΡΠ΅Π»ΡΡΠΈΠΈ, ΠΏΠΎΡΡΠΎΠΌΡ Π±ΡΠ»ΠΎ Π±Ρ ΠΎΠ±ΠΈΠ΄Π½ΠΎ, Π΅ΡΠ»ΠΈ Π±Ρ ΠΌΡ ΡΠ»ΠΈΠ»ΠΈ / Π΄Π΅Π΄ΡΠΏΠ»ΠΈΡΠΈΡΠΎΠ²Π°Π»ΠΈ Ρ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ ΠΊΠ°ΡΡΡ @ pgalic96, ΠΊΠΎΡΠΎΡΠ°Ρ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠ΅Π½Π΅Π΅ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½Π° ΠΈ ΡΠ°ΠΊΠΆΠ΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π½Π΅ΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ.
@ pgalic96 ΠΌΠΎΠΆΠ΅ΡΡ Π΄Π°ΡΡ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΡΡΠ°ΡΡΡΠ°?
Π― Π΅ΡΠ΅ Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Π» Π½Π°Π΄ ΡΡΠΈΠΌ Π½Π° ΡΡΠΎΠΉ Π½Π΅Π΄Π΅Π»Π΅, ΠΏΡΠΈΠ΄Ρ Π² ΠΎΡΠΈΡ Π·Π°Π²ΡΡΠ° ΠΏΠΎΡΠ»Π΅ ΡΠΊΠ·Π°ΠΌΠ΅Π½Π°. Π·Π°Π²ΡΡΠ° ΠΏΠΎΡΡΠ°ΡΠ°ΡΡΡ Π΄ΠΎΡΠ°Π±ΠΎΡΠ°ΡΡ.
Π― ΠΈΠ·ΠΌΠ΅Π½Ρ ΠΊΠΎΠ΄ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ @htdvisser .
Π‘Π°ΠΌΡΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ
Π― Π±Ρ ΠΏΡΠ΅Π΄ΠΏΠΎΡΠ΅Π» ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌ ΡΠ»ΠΈΡΠ½ΠΈΡ @rvolosatovs (ΡΠΌ. ΠΠΎΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ). ΠΡ ΡΠΆΠ΅ ΠΏΠΎΡΡΠ°ΡΠΈΠ»ΠΈ Π²ΡΠ΅ΠΌΡ Π½Π° ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π΄Π»Ρ ΡΠ»ΠΈΡΠ½ΠΈΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠ² ΠΊΠΎΡΡΠ΅Π»ΡΡΠΈΠΈ, ΠΏΠΎΡΡΠΎΠΌΡ Π±ΡΠ»ΠΎ Π±Ρ ΠΎΠ±ΠΈΠ΄Π½ΠΎ, Π΅ΡΠ»ΠΈ Π±Ρ ΠΌΡ ΡΠ»ΠΈΠ»ΠΈ / Π΄Π΅Π΄ΡΠΏΠ»ΠΈΡΠΈΡΠΎΠ²Π°Π»ΠΈ Ρ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ ΠΊΠ°ΡΡΡ @ pgalic96, ΠΊΠΎΡΠΎΡΠ°Ρ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠ΅Π½Π΅Π΅ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½Π° ΠΈ ΡΠ°ΠΊΠΆΠ΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π½Π΅ΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ.