Lorawan-stack: рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд╕рд╣рд╕рдВрдмрдВрдз ID

рдХреЛ рдирд┐рд░реНрдорд┐рдд 10 рдордИ 2019  ┬╖  8рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: TheThingsNetwork/lorawan-stack

рд╕рд╛рд░рд╛рдВрд╢

рдХреБрдЫ рдШрдЯрдирд╛рдУрдВ рдореЗрдВ рд╕рд╣рд╕рдВрдмрдВрдз рдЖрдИрдбреА (рдпрд╛рдиреА gs.up.receive рдФрд░ as.up.receive ) рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд╣реИрдВред

рдкреНрд░рдЬрдирди рдХрд░рдиреЗ рдХрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛

  1. рдШрдЯрдирд╛рдУрдВ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдВ, рдпрд╛рдиреА 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 рдореЗрдВ рдХреЛрдИ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдирд╣реАрдВ

рдЖрдк рдЗрд╕реЗ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рджреЗрддреЗ рд╣реИрдВ?

рд╕рд╣рд╕рдВрдмрдВрдз рдЖрдИрдбреА рд╢рд╛рдпрдж рджреЛ рдмрд╛рд░ рдЬреБрдбрд╝ рдЬрд╛рддреА рд╣реИрдВред рдпрд╣ рдЙрди рдШрдЯрдирд╛рдУрдВ рдкреИрдХреЗрдЬ рдореЗрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╣реЛрдиреЗ рдкрд░ рд╕рд╣рд╕рдВрдмрдВрдз рдЖрдИрдбреА рдЬреЛрдбрд╝реЗ рдЬрд╛рддреЗ рд╣реИрдВред

рдХреНрдпрд╛ рдЖрдк рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рд╕рдмрдорд┐рдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

рд╣рд╛рдБ

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдореИрдВ @rvolosatovs рдорд░реНрдЬ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо (рдореЗрд░реА рдЯрд┐рдкреНрдкрдгреА рджреЗрдЦреЗрдВ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛ред рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рд╣рд╕рдВрдмрдВрдз рдЖрдИрдбреА рдХреЗ рд╡рд┐рд▓рдп рдХреЗ рд▓рд┐рдП рдПрдХ рдХреБрд╢рд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд░рдиреЗ рдореЗрдВ рд╕рдордп рдмрд┐рддрд╛рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╢рд░реНрдо рдХреА рдмрд╛рдд рд╣реЛрдЧреА рдпрджрд┐ рд╣рдо @ pgalic96 рдХреЗ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдорд╛рдирдЪрд┐рддреНрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рд╡рд┐рд▓рдп / рдХрдЯреМрддреА рдХрд░реЗрдВрдЧреЗ рдЬреЛ рдХрд┐ рдмрд╣реБрдд рдХрдо рдХреБрд╢рд▓ рд╣реИ рдФрд░ рд╕рд╛рде рд╣реА

рд╕рднреА 8 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

@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 рдХреА рдЖрдкреВрд░реНрддрд┐ рдХрд░реЗрдЧрд╛, рдФрд░ рдлрд┐рд░ рдЬрд╛рдБрдЪ рдХрд░реЗрдЧрд╛ рдХрд┐ рд╕рдВрджреЗрд╢ рдХреЗ рд╕рд╣рд╕рдВрдмрдВрдз рдХреА рд▓рдВрдмрд╛рдИ рдХреНрдпрд╛ рд╣реИ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ 1 рдФрд░ 2 рдирд╣реАрдВред

рдЪрд░ рдирд╛рдо рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдпрд╣ рдЖрдо рддреМрд░ рдкрд░ рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ evt.innerEvent.CorrelationIDs рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд╛рдЯреЗ рдирд╣реАрдВ рдЬрд╛рддреЗ рд╣реИрдВ

рдореИрдВ @rvolosatovs рдорд░реНрдЬ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо (рдореЗрд░реА рдЯрд┐рдкреНрдкрдгреА рджреЗрдЦреЗрдВ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛ред рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рд╣рд╕рдВрдмрдВрдз рдЖрдИрдбреА рдХреЗ рд╡рд┐рд▓рдп рдХреЗ рд▓рд┐рдП рдПрдХ рдХреБрд╢рд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд░рдиреЗ рдореЗрдВ рд╕рдордп рдмрд┐рддрд╛рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╢рд░реНрдо рдХреА рдмрд╛рдд рд╣реЛрдЧреА рдпрджрд┐ рд╣рдо @ pgalic96 рдХреЗ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдорд╛рдирдЪрд┐рддреНрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рд╡рд┐рд▓рдп / рдХрдЯреМрддреА рдХрд░реЗрдВрдЧреЗ рдЬреЛ рдХрд┐ рдмрд╣реБрдд рдХрдо рдХреБрд╢рд▓ рд╣реИ рдФрд░ рд╕рд╛рде рд╣реА

@ pgalic96 рдХреНрдпрд╛ рдЖрдк рд╕реНрдЯреЗрдЯрд╕ рдЕрдкрдбреЗрдЯ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ?

рдореИрдВ рдЗрд╕ рд╕рдкреНрддрд╛рд╣ рдЕрднреА рддрдХ рдЗрд╕ рдкрд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдкрд░реАрдХреНрд╖рд╛ рдХреЗ рдмрд╛рдж рдХрд▓ рдХрд╛рд░реНрдпрд╛рд▓рдп рдЖ рд░рд╣рд╛ рд╣реВрдВред рдХрд▓ рдЗрд╕реЗ рдЕрдВрддрд┐рдо рд░реВрдк рджреЗрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВрдЧреЗред

рдореИрдВ @htdvisser рд╕реБрдЭрд╛рд╡ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХреЛрдб рдмрджрд▓

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

johanstokking picture johanstokking  ┬╖  8рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

w4tsn picture w4tsn  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ZeroSum24 picture ZeroSum24  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

htdvisser picture htdvisser  ┬╖  9рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

johanstokking picture johanstokking  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ