Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.
 
 
 

68 lignes
1.8 KiB

  1. // Copyright 2017, OpenCensus Authors
  2. //
  3. // Licensed under the Apache License, Version 2.0 (the "License");
  4. // you may not use this file except in compliance with the License.
  5. // You may obtain a copy of the License at
  6. //
  7. // http://www.apache.org/licenses/LICENSE-2.0
  8. //
  9. // Unless required by applicable law or agreed to in writing, software
  10. // distributed under the License is distributed on an "AS IS" BASIS,
  11. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. // See the License for the specific language governing permissions and
  13. // limitations under the License.
  14. //
  15. package tag
  16. import (
  17. "context"
  18. "go.opencensus.io/exemplar"
  19. )
  20. // FromContext returns the tag map stored in the context.
  21. func FromContext(ctx context.Context) *Map {
  22. // The returned tag map shouldn't be mutated.
  23. ts := ctx.Value(mapCtxKey)
  24. if ts == nil {
  25. return nil
  26. }
  27. return ts.(*Map)
  28. }
  29. // NewContext creates a new context with the given tag map.
  30. // To propagate a tag map to downstream methods and downstream RPCs, add a tag map
  31. // to the current context. NewContext will return a copy of the current context,
  32. // and put the tag map into the returned one.
  33. // If there is already a tag map in the current context, it will be replaced with m.
  34. func NewContext(ctx context.Context, m *Map) context.Context {
  35. return context.WithValue(ctx, mapCtxKey, m)
  36. }
  37. type ctxKey struct{}
  38. var mapCtxKey = ctxKey{}
  39. func init() {
  40. exemplar.RegisterAttachmentExtractor(extractTagsAttachments)
  41. }
  42. func extractTagsAttachments(ctx context.Context, a exemplar.Attachments) exemplar.Attachments {
  43. m := FromContext(ctx)
  44. if m == nil {
  45. return a
  46. }
  47. if len(m.m) == 0 {
  48. return a
  49. }
  50. if a == nil {
  51. a = make(map[string]string)
  52. }
  53. for k, v := range m.m {
  54. a[exemplar.KeyPrefixTag+k.Name()] = v
  55. }
  56. return a
  57. }