noop.go 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264
  1. // Copyright The OpenTelemetry 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. // Package noop provides an implementation of the OpenTelemetry metric API that
  15. // produces no telemetry and minimizes used computation resources.
  16. //
  17. // Using this package to implement the OpenTelemetry metric API will
  18. // effectively disable OpenTelemetry.
  19. //
  20. // This implementation can be embedded in other implementations of the
  21. // OpenTelemetry metric API. Doing so will mean the implementation defaults to
  22. // no operation for methods it does not implement.
  23. package noop // import "go.opentelemetry.io/otel/metric/noop"
  24. import (
  25. "context"
  26. "go.opentelemetry.io/otel/metric"
  27. "go.opentelemetry.io/otel/metric/embedded"
  28. )
  29. var (
  30. // Compile-time check this implements the OpenTelemetry API.
  31. _ metric.MeterProvider = MeterProvider{}
  32. _ metric.Meter = Meter{}
  33. _ metric.Observer = Observer{}
  34. _ metric.Registration = Registration{}
  35. _ metric.Int64Counter = Int64Counter{}
  36. _ metric.Float64Counter = Float64Counter{}
  37. _ metric.Int64UpDownCounter = Int64UpDownCounter{}
  38. _ metric.Float64UpDownCounter = Float64UpDownCounter{}
  39. _ metric.Int64Histogram = Int64Histogram{}
  40. _ metric.Float64Histogram = Float64Histogram{}
  41. _ metric.Int64ObservableCounter = Int64ObservableCounter{}
  42. _ metric.Float64ObservableCounter = Float64ObservableCounter{}
  43. _ metric.Int64ObservableGauge = Int64ObservableGauge{}
  44. _ metric.Float64ObservableGauge = Float64ObservableGauge{}
  45. _ metric.Int64ObservableUpDownCounter = Int64ObservableUpDownCounter{}
  46. _ metric.Float64ObservableUpDownCounter = Float64ObservableUpDownCounter{}
  47. _ metric.Int64Observer = Int64Observer{}
  48. _ metric.Float64Observer = Float64Observer{}
  49. )
  50. // MeterProvider is an OpenTelemetry No-Op MeterProvider.
  51. type MeterProvider struct{ embedded.MeterProvider }
  52. // NewMeterProvider returns a MeterProvider that does not record any telemetry.
  53. func NewMeterProvider() MeterProvider {
  54. return MeterProvider{}
  55. }
  56. // Meter returns an OpenTelemetry Meter that does not record any telemetry.
  57. func (MeterProvider) Meter(string, ...metric.MeterOption) metric.Meter {
  58. return Meter{}
  59. }
  60. // Meter is an OpenTelemetry No-Op Meter.
  61. type Meter struct{ embedded.Meter }
  62. // Int64Counter returns a Counter used to record int64 measurements that
  63. // produces no telemetry.
  64. func (Meter) Int64Counter(string, ...metric.Int64CounterOption) (metric.Int64Counter, error) {
  65. return Int64Counter{}, nil
  66. }
  67. // Int64UpDownCounter returns an UpDownCounter used to record int64
  68. // measurements that produces no telemetry.
  69. func (Meter) Int64UpDownCounter(string, ...metric.Int64UpDownCounterOption) (metric.Int64UpDownCounter, error) {
  70. return Int64UpDownCounter{}, nil
  71. }
  72. // Int64Histogram returns a Histogram used to record int64 measurements that
  73. // produces no telemetry.
  74. func (Meter) Int64Histogram(string, ...metric.Int64HistogramOption) (metric.Int64Histogram, error) {
  75. return Int64Histogram{}, nil
  76. }
  77. // Int64ObservableCounter returns an ObservableCounter used to record int64
  78. // measurements that produces no telemetry.
  79. func (Meter) Int64ObservableCounter(string, ...metric.Int64ObservableCounterOption) (metric.Int64ObservableCounter, error) {
  80. return Int64ObservableCounter{}, nil
  81. }
  82. // Int64ObservableUpDownCounter returns an ObservableUpDownCounter used to
  83. // record int64 measurements that produces no telemetry.
  84. func (Meter) Int64ObservableUpDownCounter(string, ...metric.Int64ObservableUpDownCounterOption) (metric.Int64ObservableUpDownCounter, error) {
  85. return Int64ObservableUpDownCounter{}, nil
  86. }
  87. // Int64ObservableGauge returns an ObservableGauge used to record int64
  88. // measurements that produces no telemetry.
  89. func (Meter) Int64ObservableGauge(string, ...metric.Int64ObservableGaugeOption) (metric.Int64ObservableGauge, error) {
  90. return Int64ObservableGauge{}, nil
  91. }
  92. // Float64Counter returns a Counter used to record int64 measurements that
  93. // produces no telemetry.
  94. func (Meter) Float64Counter(string, ...metric.Float64CounterOption) (metric.Float64Counter, error) {
  95. return Float64Counter{}, nil
  96. }
  97. // Float64UpDownCounter returns an UpDownCounter used to record int64
  98. // measurements that produces no telemetry.
  99. func (Meter) Float64UpDownCounter(string, ...metric.Float64UpDownCounterOption) (metric.Float64UpDownCounter, error) {
  100. return Float64UpDownCounter{}, nil
  101. }
  102. // Float64Histogram returns a Histogram used to record int64 measurements that
  103. // produces no telemetry.
  104. func (Meter) Float64Histogram(string, ...metric.Float64HistogramOption) (metric.Float64Histogram, error) {
  105. return Float64Histogram{}, nil
  106. }
  107. // Float64ObservableCounter returns an ObservableCounter used to record int64
  108. // measurements that produces no telemetry.
  109. func (Meter) Float64ObservableCounter(string, ...metric.Float64ObservableCounterOption) (metric.Float64ObservableCounter, error) {
  110. return Float64ObservableCounter{}, nil
  111. }
  112. // Float64ObservableUpDownCounter returns an ObservableUpDownCounter used to
  113. // record int64 measurements that produces no telemetry.
  114. func (Meter) Float64ObservableUpDownCounter(string, ...metric.Float64ObservableUpDownCounterOption) (metric.Float64ObservableUpDownCounter, error) {
  115. return Float64ObservableUpDownCounter{}, nil
  116. }
  117. // Float64ObservableGauge returns an ObservableGauge used to record int64
  118. // measurements that produces no telemetry.
  119. func (Meter) Float64ObservableGauge(string, ...metric.Float64ObservableGaugeOption) (metric.Float64ObservableGauge, error) {
  120. return Float64ObservableGauge{}, nil
  121. }
  122. // RegisterCallback performs no operation.
  123. func (Meter) RegisterCallback(metric.Callback, ...metric.Observable) (metric.Registration, error) {
  124. return Registration{}, nil
  125. }
  126. // Observer acts as a recorder of measurements for multiple instruments in a
  127. // Callback, it performing no operation.
  128. type Observer struct{ embedded.Observer }
  129. // ObserveFloat64 performs no operation.
  130. func (Observer) ObserveFloat64(metric.Float64Observable, float64, ...metric.ObserveOption) {
  131. }
  132. // ObserveInt64 performs no operation.
  133. func (Observer) ObserveInt64(metric.Int64Observable, int64, ...metric.ObserveOption) {
  134. }
  135. // Registration is the registration of a Callback with a No-Op Meter.
  136. type Registration struct{ embedded.Registration }
  137. // Unregister unregisters the Callback the Registration represents with the
  138. // No-Op Meter. This will always return nil because the No-Op Meter performs no
  139. // operation, including hold any record of registrations.
  140. func (Registration) Unregister() error { return nil }
  141. // Int64Counter is an OpenTelemetry Counter used to record int64 measurements.
  142. // It produces no telemetry.
  143. type Int64Counter struct{ embedded.Int64Counter }
  144. // Add performs no operation.
  145. func (Int64Counter) Add(context.Context, int64, ...metric.AddOption) {}
  146. // Float64Counter is an OpenTelemetry Counter used to record float64
  147. // measurements. It produces no telemetry.
  148. type Float64Counter struct{ embedded.Float64Counter }
  149. // Add performs no operation.
  150. func (Float64Counter) Add(context.Context, float64, ...metric.AddOption) {}
  151. // Int64UpDownCounter is an OpenTelemetry UpDownCounter used to record int64
  152. // measurements. It produces no telemetry.
  153. type Int64UpDownCounter struct{ embedded.Int64UpDownCounter }
  154. // Add performs no operation.
  155. func (Int64UpDownCounter) Add(context.Context, int64, ...metric.AddOption) {}
  156. // Float64UpDownCounter is an OpenTelemetry UpDownCounter used to record
  157. // float64 measurements. It produces no telemetry.
  158. type Float64UpDownCounter struct{ embedded.Float64UpDownCounter }
  159. // Add performs no operation.
  160. func (Float64UpDownCounter) Add(context.Context, float64, ...metric.AddOption) {}
  161. // Int64Histogram is an OpenTelemetry Histogram used to record int64
  162. // measurements. It produces no telemetry.
  163. type Int64Histogram struct{ embedded.Int64Histogram }
  164. // Record performs no operation.
  165. func (Int64Histogram) Record(context.Context, int64, ...metric.RecordOption) {}
  166. // Float64Histogram is an OpenTelemetry Histogram used to record float64
  167. // measurements. It produces no telemetry.
  168. type Float64Histogram struct{ embedded.Float64Histogram }
  169. // Record performs no operation.
  170. func (Float64Histogram) Record(context.Context, float64, ...metric.RecordOption) {}
  171. // Int64ObservableCounter is an OpenTelemetry ObservableCounter used to record
  172. // int64 measurements. It produces no telemetry.
  173. type Int64ObservableCounter struct {
  174. metric.Int64Observable
  175. embedded.Int64ObservableCounter
  176. }
  177. // Float64ObservableCounter is an OpenTelemetry ObservableCounter used to record
  178. // float64 measurements. It produces no telemetry.
  179. type Float64ObservableCounter struct {
  180. metric.Float64Observable
  181. embedded.Float64ObservableCounter
  182. }
  183. // Int64ObservableGauge is an OpenTelemetry ObservableGauge used to record
  184. // int64 measurements. It produces no telemetry.
  185. type Int64ObservableGauge struct {
  186. metric.Int64Observable
  187. embedded.Int64ObservableGauge
  188. }
  189. // Float64ObservableGauge is an OpenTelemetry ObservableGauge used to record
  190. // float64 measurements. It produces no telemetry.
  191. type Float64ObservableGauge struct {
  192. metric.Float64Observable
  193. embedded.Float64ObservableGauge
  194. }
  195. // Int64ObservableUpDownCounter is an OpenTelemetry ObservableUpDownCounter
  196. // used to record int64 measurements. It produces no telemetry.
  197. type Int64ObservableUpDownCounter struct {
  198. metric.Int64Observable
  199. embedded.Int64ObservableUpDownCounter
  200. }
  201. // Float64ObservableUpDownCounter is an OpenTelemetry ObservableUpDownCounter
  202. // used to record float64 measurements. It produces no telemetry.
  203. type Float64ObservableUpDownCounter struct {
  204. metric.Float64Observable
  205. embedded.Float64ObservableUpDownCounter
  206. }
  207. // Int64Observer is a recorder of int64 measurements that performs no operation.
  208. type Int64Observer struct{ embedded.Int64Observer }
  209. // Observe performs no operation.
  210. func (Int64Observer) Observe(int64, ...metric.ObserveOption) {}
  211. // Float64Observer is a recorder of float64 measurements that performs no
  212. // operation.
  213. type Float64Observer struct{ embedded.Float64Observer }
  214. // Observe performs no operation.
  215. func (Float64Observer) Observe(float64, ...metric.ObserveOption) {}