instruments.go 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412
  1. // Copyright The OpenTelemetry Authors
  2. // SPDX-License-Identifier: Apache-2.0
  3. package global // import "go.opentelemetry.io/otel/internal/global"
  4. import (
  5. "context"
  6. "sync/atomic"
  7. "go.opentelemetry.io/otel/metric"
  8. "go.opentelemetry.io/otel/metric/embedded"
  9. )
  10. // unwrapper unwraps to return the underlying instrument implementation.
  11. type unwrapper interface {
  12. unwrap() metric.Observable
  13. }
  14. type afCounter struct {
  15. embedded.Float64ObservableCounter
  16. metric.Float64Observable
  17. name string
  18. opts []metric.Float64ObservableCounterOption
  19. delegate atomic.Value // metric.Float64ObservableCounter
  20. }
  21. var (
  22. _ unwrapper = (*afCounter)(nil)
  23. _ metric.Float64ObservableCounter = (*afCounter)(nil)
  24. )
  25. func (i *afCounter) setDelegate(m metric.Meter) {
  26. ctr, err := m.Float64ObservableCounter(i.name, i.opts...)
  27. if err != nil {
  28. GetErrorHandler().Handle(err)
  29. return
  30. }
  31. i.delegate.Store(ctr)
  32. }
  33. func (i *afCounter) unwrap() metric.Observable {
  34. if ctr := i.delegate.Load(); ctr != nil {
  35. return ctr.(metric.Float64ObservableCounter)
  36. }
  37. return nil
  38. }
  39. type afUpDownCounter struct {
  40. embedded.Float64ObservableUpDownCounter
  41. metric.Float64Observable
  42. name string
  43. opts []metric.Float64ObservableUpDownCounterOption
  44. delegate atomic.Value // metric.Float64ObservableUpDownCounter
  45. }
  46. var (
  47. _ unwrapper = (*afUpDownCounter)(nil)
  48. _ metric.Float64ObservableUpDownCounter = (*afUpDownCounter)(nil)
  49. )
  50. func (i *afUpDownCounter) setDelegate(m metric.Meter) {
  51. ctr, err := m.Float64ObservableUpDownCounter(i.name, i.opts...)
  52. if err != nil {
  53. GetErrorHandler().Handle(err)
  54. return
  55. }
  56. i.delegate.Store(ctr)
  57. }
  58. func (i *afUpDownCounter) unwrap() metric.Observable {
  59. if ctr := i.delegate.Load(); ctr != nil {
  60. return ctr.(metric.Float64ObservableUpDownCounter)
  61. }
  62. return nil
  63. }
  64. type afGauge struct {
  65. embedded.Float64ObservableGauge
  66. metric.Float64Observable
  67. name string
  68. opts []metric.Float64ObservableGaugeOption
  69. delegate atomic.Value // metric.Float64ObservableGauge
  70. }
  71. var (
  72. _ unwrapper = (*afGauge)(nil)
  73. _ metric.Float64ObservableGauge = (*afGauge)(nil)
  74. )
  75. func (i *afGauge) setDelegate(m metric.Meter) {
  76. ctr, err := m.Float64ObservableGauge(i.name, i.opts...)
  77. if err != nil {
  78. GetErrorHandler().Handle(err)
  79. return
  80. }
  81. i.delegate.Store(ctr)
  82. }
  83. func (i *afGauge) unwrap() metric.Observable {
  84. if ctr := i.delegate.Load(); ctr != nil {
  85. return ctr.(metric.Float64ObservableGauge)
  86. }
  87. return nil
  88. }
  89. type aiCounter struct {
  90. embedded.Int64ObservableCounter
  91. metric.Int64Observable
  92. name string
  93. opts []metric.Int64ObservableCounterOption
  94. delegate atomic.Value // metric.Int64ObservableCounter
  95. }
  96. var (
  97. _ unwrapper = (*aiCounter)(nil)
  98. _ metric.Int64ObservableCounter = (*aiCounter)(nil)
  99. )
  100. func (i *aiCounter) setDelegate(m metric.Meter) {
  101. ctr, err := m.Int64ObservableCounter(i.name, i.opts...)
  102. if err != nil {
  103. GetErrorHandler().Handle(err)
  104. return
  105. }
  106. i.delegate.Store(ctr)
  107. }
  108. func (i *aiCounter) unwrap() metric.Observable {
  109. if ctr := i.delegate.Load(); ctr != nil {
  110. return ctr.(metric.Int64ObservableCounter)
  111. }
  112. return nil
  113. }
  114. type aiUpDownCounter struct {
  115. embedded.Int64ObservableUpDownCounter
  116. metric.Int64Observable
  117. name string
  118. opts []metric.Int64ObservableUpDownCounterOption
  119. delegate atomic.Value // metric.Int64ObservableUpDownCounter
  120. }
  121. var (
  122. _ unwrapper = (*aiUpDownCounter)(nil)
  123. _ metric.Int64ObservableUpDownCounter = (*aiUpDownCounter)(nil)
  124. )
  125. func (i *aiUpDownCounter) setDelegate(m metric.Meter) {
  126. ctr, err := m.Int64ObservableUpDownCounter(i.name, i.opts...)
  127. if err != nil {
  128. GetErrorHandler().Handle(err)
  129. return
  130. }
  131. i.delegate.Store(ctr)
  132. }
  133. func (i *aiUpDownCounter) unwrap() metric.Observable {
  134. if ctr := i.delegate.Load(); ctr != nil {
  135. return ctr.(metric.Int64ObservableUpDownCounter)
  136. }
  137. return nil
  138. }
  139. type aiGauge struct {
  140. embedded.Int64ObservableGauge
  141. metric.Int64Observable
  142. name string
  143. opts []metric.Int64ObservableGaugeOption
  144. delegate atomic.Value // metric.Int64ObservableGauge
  145. }
  146. var (
  147. _ unwrapper = (*aiGauge)(nil)
  148. _ metric.Int64ObservableGauge = (*aiGauge)(nil)
  149. )
  150. func (i *aiGauge) setDelegate(m metric.Meter) {
  151. ctr, err := m.Int64ObservableGauge(i.name, i.opts...)
  152. if err != nil {
  153. GetErrorHandler().Handle(err)
  154. return
  155. }
  156. i.delegate.Store(ctr)
  157. }
  158. func (i *aiGauge) unwrap() metric.Observable {
  159. if ctr := i.delegate.Load(); ctr != nil {
  160. return ctr.(metric.Int64ObservableGauge)
  161. }
  162. return nil
  163. }
  164. // Sync Instruments.
  165. type sfCounter struct {
  166. embedded.Float64Counter
  167. name string
  168. opts []metric.Float64CounterOption
  169. delegate atomic.Value // metric.Float64Counter
  170. }
  171. var _ metric.Float64Counter = (*sfCounter)(nil)
  172. func (i *sfCounter) setDelegate(m metric.Meter) {
  173. ctr, err := m.Float64Counter(i.name, i.opts...)
  174. if err != nil {
  175. GetErrorHandler().Handle(err)
  176. return
  177. }
  178. i.delegate.Store(ctr)
  179. }
  180. func (i *sfCounter) Add(ctx context.Context, incr float64, opts ...metric.AddOption) {
  181. if ctr := i.delegate.Load(); ctr != nil {
  182. ctr.(metric.Float64Counter).Add(ctx, incr, opts...)
  183. }
  184. }
  185. type sfUpDownCounter struct {
  186. embedded.Float64UpDownCounter
  187. name string
  188. opts []metric.Float64UpDownCounterOption
  189. delegate atomic.Value // metric.Float64UpDownCounter
  190. }
  191. var _ metric.Float64UpDownCounter = (*sfUpDownCounter)(nil)
  192. func (i *sfUpDownCounter) setDelegate(m metric.Meter) {
  193. ctr, err := m.Float64UpDownCounter(i.name, i.opts...)
  194. if err != nil {
  195. GetErrorHandler().Handle(err)
  196. return
  197. }
  198. i.delegate.Store(ctr)
  199. }
  200. func (i *sfUpDownCounter) Add(ctx context.Context, incr float64, opts ...metric.AddOption) {
  201. if ctr := i.delegate.Load(); ctr != nil {
  202. ctr.(metric.Float64UpDownCounter).Add(ctx, incr, opts...)
  203. }
  204. }
  205. type sfHistogram struct {
  206. embedded.Float64Histogram
  207. name string
  208. opts []metric.Float64HistogramOption
  209. delegate atomic.Value // metric.Float64Histogram
  210. }
  211. var _ metric.Float64Histogram = (*sfHistogram)(nil)
  212. func (i *sfHistogram) setDelegate(m metric.Meter) {
  213. ctr, err := m.Float64Histogram(i.name, i.opts...)
  214. if err != nil {
  215. GetErrorHandler().Handle(err)
  216. return
  217. }
  218. i.delegate.Store(ctr)
  219. }
  220. func (i *sfHistogram) Record(ctx context.Context, x float64, opts ...metric.RecordOption) {
  221. if ctr := i.delegate.Load(); ctr != nil {
  222. ctr.(metric.Float64Histogram).Record(ctx, x, opts...)
  223. }
  224. }
  225. type sfGauge struct {
  226. embedded.Float64Gauge
  227. name string
  228. opts []metric.Float64GaugeOption
  229. delegate atomic.Value // metric.Float64Gauge
  230. }
  231. var _ metric.Float64Gauge = (*sfGauge)(nil)
  232. func (i *sfGauge) setDelegate(m metric.Meter) {
  233. ctr, err := m.Float64Gauge(i.name, i.opts...)
  234. if err != nil {
  235. GetErrorHandler().Handle(err)
  236. return
  237. }
  238. i.delegate.Store(ctr)
  239. }
  240. func (i *sfGauge) Record(ctx context.Context, x float64, opts ...metric.RecordOption) {
  241. if ctr := i.delegate.Load(); ctr != nil {
  242. ctr.(metric.Float64Gauge).Record(ctx, x, opts...)
  243. }
  244. }
  245. type siCounter struct {
  246. embedded.Int64Counter
  247. name string
  248. opts []metric.Int64CounterOption
  249. delegate atomic.Value // metric.Int64Counter
  250. }
  251. var _ metric.Int64Counter = (*siCounter)(nil)
  252. func (i *siCounter) setDelegate(m metric.Meter) {
  253. ctr, err := m.Int64Counter(i.name, i.opts...)
  254. if err != nil {
  255. GetErrorHandler().Handle(err)
  256. return
  257. }
  258. i.delegate.Store(ctr)
  259. }
  260. func (i *siCounter) Add(ctx context.Context, x int64, opts ...metric.AddOption) {
  261. if ctr := i.delegate.Load(); ctr != nil {
  262. ctr.(metric.Int64Counter).Add(ctx, x, opts...)
  263. }
  264. }
  265. type siUpDownCounter struct {
  266. embedded.Int64UpDownCounter
  267. name string
  268. opts []metric.Int64UpDownCounterOption
  269. delegate atomic.Value // metric.Int64UpDownCounter
  270. }
  271. var _ metric.Int64UpDownCounter = (*siUpDownCounter)(nil)
  272. func (i *siUpDownCounter) setDelegate(m metric.Meter) {
  273. ctr, err := m.Int64UpDownCounter(i.name, i.opts...)
  274. if err != nil {
  275. GetErrorHandler().Handle(err)
  276. return
  277. }
  278. i.delegate.Store(ctr)
  279. }
  280. func (i *siUpDownCounter) Add(ctx context.Context, x int64, opts ...metric.AddOption) {
  281. if ctr := i.delegate.Load(); ctr != nil {
  282. ctr.(metric.Int64UpDownCounter).Add(ctx, x, opts...)
  283. }
  284. }
  285. type siHistogram struct {
  286. embedded.Int64Histogram
  287. name string
  288. opts []metric.Int64HistogramOption
  289. delegate atomic.Value // metric.Int64Histogram
  290. }
  291. var _ metric.Int64Histogram = (*siHistogram)(nil)
  292. func (i *siHistogram) setDelegate(m metric.Meter) {
  293. ctr, err := m.Int64Histogram(i.name, i.opts...)
  294. if err != nil {
  295. GetErrorHandler().Handle(err)
  296. return
  297. }
  298. i.delegate.Store(ctr)
  299. }
  300. func (i *siHistogram) Record(ctx context.Context, x int64, opts ...metric.RecordOption) {
  301. if ctr := i.delegate.Load(); ctr != nil {
  302. ctr.(metric.Int64Histogram).Record(ctx, x, opts...)
  303. }
  304. }
  305. type siGauge struct {
  306. embedded.Int64Gauge
  307. name string
  308. opts []metric.Int64GaugeOption
  309. delegate atomic.Value // metric.Int64Gauge
  310. }
  311. var _ metric.Int64Gauge = (*siGauge)(nil)
  312. func (i *siGauge) setDelegate(m metric.Meter) {
  313. ctr, err := m.Int64Gauge(i.name, i.opts...)
  314. if err != nil {
  315. GetErrorHandler().Handle(err)
  316. return
  317. }
  318. i.delegate.Store(ctr)
  319. }
  320. func (i *siGauge) Record(ctx context.Context, x int64, opts ...metric.RecordOption) {
  321. if ctr := i.delegate.Load(); ctr != nil {
  322. ctr.(metric.Int64Gauge).Record(ctx, x, opts...)
  323. }
  324. }