From 1b8ab2e36e849dbbc5edbfc71292faaa0e58c2ca Mon Sep 17 00:00:00 2001 From: Steffan Westcott Date: Fri, 8 Dec 2023 22:47:14 +0000 Subject: [PATCH] Add missing typehints --- .../clj_otel/api/attributes.clj | 2 +- .../steffan_westcott/clj_otel/api/baggage.clj | 11 +++--- .../clj_otel/api/metrics/instrument.clj | 7 ++-- .../steffan_westcott/clj_otel/api/otel.clj | 8 ++-- .../clj_otel/api/trace/span.clj | 15 +++---- .../src/steffan_westcott/clj_otel/context.clj | 11 +++--- .../clj_otel/propagator/w3c_baggage.clj | 2 +- .../clj_otel/propagator/w3c_trace_context.clj | 2 +- .../src/steffan_westcott/clj_otel/util.clj | 6 +-- .../clj_otel/resource/aws.clj | 13 ++++--- .../clj_otel/propagator/aws_xray.clj | 2 +- .../clj_otel/exporter/jaeger_grpc.clj | 5 ++- .../clj_otel/exporter/jaeger_thrift.clj | 4 +- .../clj_otel/exporter/logging_otlp.clj | 8 ++-- .../clj_otel/exporter/logging.clj | 7 ++-- .../clj_otel/exporter/otlp/grpc/metrics.clj | 5 ++- .../clj_otel/exporter/otlp/grpc/trace.clj | 5 ++- .../clj_otel/exporter/otlp/http/metrics.clj | 5 ++- .../clj_otel/exporter/otlp/http/trace.clj | 5 ++- .../clj_otel/exporter/prometheus.clj | 4 +- .../clj_otel/exporter/zipkin.clj | 5 ++- .../clj_otel/propagator/b3.clj | 5 ++- .../clj_otel/propagator/jaeger.clj | 2 +- .../clj_otel/propagator/open_tracing.clj | 2 +- .../clj_otel/resource/resources.clj | 13 ++++--- .../runtime_telemetry_java17.clj | 4 +- .../runtime_telemetry_java8.clj | 39 ++++++++++--------- .../clj_otel/sdk/autoconfigure.clj | 8 ++-- .../clj_otel/sdk/jaeger_remote_sampler.clj | 1 + .../clj_otel/sdk/meter_provider.clj | 6 +-- .../clj_otel/sdk/otel_sdk.clj | 1 + .../clj_otel/sdk/propagators.clj | 2 +- .../clj_otel/sdk/resources.clj | 5 +-- .../clj_otel/sdk/tracer_provider.clj | 10 +++-- 34 files changed, 125 insertions(+), 105 deletions(-) diff --git a/clj-otel-api/src/steffan_westcott/clj_otel/api/attributes.clj b/clj-otel-api/src/steffan_westcott/clj_otel/api/attributes.clj index 03f36af3..d5bd310f 100644 --- a/clj-otel-api/src/steffan_westcott/clj_otel/api/attributes.clj +++ b/clj-otel-api/src/steffan_westcott/clj_otel/api/attributes.clj @@ -26,7 +26,7 @@ (defn- attribute-type-of "Returns `AttributeType` inferred from type of `x`." - [x] + ^AttributeType [x] (cond (map? x) AttributeType/STRING (coll? x) (cond (every? boolean? x) AttributeType/BOOLEAN_ARRAY (every? integer? x) AttributeType/LONG_ARRAY diff --git a/clj-otel-api/src/steffan_westcott/clj_otel/api/baggage.clj b/clj-otel-api/src/steffan_westcott/clj_otel/api/baggage.clj index 66e59a07..a57dcd1c 100644 --- a/clj-otel-api/src/steffan_westcott/clj_otel/api/baggage.clj +++ b/clj-otel-api/src/steffan_westcott/clj_otel/api/baggage.clj @@ -2,19 +2,20 @@ "Conversion and manipulation functions for `io.opentelemetry.api.baggage.Baggage` objects." (:require [steffan-westcott.clj-otel.context :as context]) - (:import (io.opentelemetry.api.baggage Baggage BaggageBuilder BaggageEntry BaggageEntryMetadata))) + (:import (io.opentelemetry.api.baggage Baggage BaggageBuilder BaggageEntry BaggageEntryMetadata) + (io.opentelemetry.context Context))) (defn get-baggage "Gets the baggage from a given context, or the bound ot current context if none is given. If no baggage is found in the context, empty baggage is returned." - ([] + (^Baggage [] (get-baggage (context/dyn))) - ([context] + (^Baggage [context] (Baggage/fromContext context))) (defn assoc-baggage "Associates baggage with a context and returns the new context." - [context baggage] + ^Context [context baggage] (context/assoc-value context baggage)) (defn- BaggageEntry->value @@ -47,5 +48,5 @@ "Converts a map to a `Baggage` instance. Each key in the map is either a string or keyword. Each value in the map is either `value` or a vector `[value metadata]`, where `value` and `metadata` are strings." - [m] + ^Baggage [m] (.build ^BaggageBuilder (reduce-kv put-entry (Baggage/builder) m))) diff --git a/clj-otel-api/src/steffan_westcott/clj_otel/api/metrics/instrument.clj b/clj-otel-api/src/steffan_westcott/clj_otel/api/metrics/instrument.clj index b36e3b83..fb1428f5 100644 --- a/clj-otel-api/src/steffan_westcott/clj_otel/api/metrics/instrument.clj +++ b/clj-otel-api/src/steffan_westcott/clj_otel/api/metrics/instrument.clj @@ -37,9 +37,10 @@ |`:version` | Instrumentation library version e.g. `\"1.0.0\"` (default: See `config.edn` resource file). |`:schema-url` | URL of OpenTelemetry schema used by this instrumentation library (default: See `config.edn` resource file). |`:open-telemetry`| `OpenTelemetry` instance to get meter from (default: global `OpenTelemetry` instance)." - ([] + (^Meter [] (get-meter {})) - ([{:keys [name version schema-url open-telemetry] + (^Meter + [{:keys [name version schema-url open-telemetry] :or {name (:name default-library) version (:version default-library) schema-url (:schema-url default-library)}}] @@ -55,7 +56,7 @@ (defn set-default-meter! "Sets the default `io.opentelemetry.api.metrics.Meter` instance used when creating instruments. Returns `meter`. See also [[get-meter]]." - [meter] + ^Meter [meter] (reset! default-meter meter)) (defn get-default-meter! diff --git a/clj-otel-api/src/steffan_westcott/clj_otel/api/otel.clj b/clj-otel-api/src/steffan_westcott/clj_otel/api/otel.clj index 28a4f4ba..c484b868 100644 --- a/clj-otel-api/src/steffan_westcott/clj_otel/api/otel.clj +++ b/clj-otel-api/src/steffan_westcott/clj_otel/api/otel.clj @@ -9,7 +9,7 @@ (defn get-noop "Gets a no-op `OpenTelemetry` instance." - [] + ^OpenTelemetry [] (OpenTelemetry/noop)) (defn get-global-otel! @@ -20,7 +20,7 @@ autoconfiguration failed or otherwise did not occur) will also be set as the global instance i.e. this function is side-effecting if no instance was previously set." - [] + ^OpenTelemetry [] (GlobalOpenTelemetry/get)) (defn set-global-otel! @@ -33,14 +33,14 @@ (defn set-default-otel! "Sets the default `OpenTelemetry` instance declared and used by `clj-otel`. Returns `otel`." - [otel] + ^OpenTelemetry [otel] (reset! default-otel otel)) (defn get-default-otel! "Gets the default `OpenTelemetry` instance declared and used by `clj-otel`. If no instance has been previously set, this falls back to the global instance declared by OpenTelemetry Java." - [] + ^OpenTelemetry [] (if-let [otel @default-otel] otel (set-default-otel! (get-global-otel!)))) diff --git a/clj-otel-api/src/steffan_westcott/clj_otel/api/trace/span.clj b/clj-otel-api/src/steffan_westcott/clj_otel/api/trace/span.clj index 126de4f4..7483cb0a 100644 --- a/clj-otel-api/src/steffan_westcott/clj_otel/api/trace/span.clj +++ b/clj-otel-api/src/steffan_westcott/clj_otel/api/trace/span.clj @@ -25,9 +25,10 @@ |`:version` | Instrumentation library version e.g. `\"1.0.0\"` (default: See `config.edn` resource file). |`:schema-url` | URL of OpenTelemetry schema used by this instrumentation library (default: See `config.edn` resource file). |`:open-telemetry`| `OpenTelemetry` instance to get tracer from (default: global `OpenTelemetry` instance)." - ([] + (^Tracer [] (get-tracer {})) - ([{:keys [name version schema-url open-telemetry] + (^Tracer + [{:keys [name version schema-url open-telemetry] :or {name (:name default-library) version (:version default-library) schema-url (:schema-url default-library)}}] @@ -39,7 +40,7 @@ (defn noop-tracer "Gets a no-op tracer." - [] + ^Tracer [] (get-tracer {:open-telemetry (otel/get-noop)})) (defonce ^:private default-tracer @@ -48,7 +49,7 @@ (defn set-default-tracer! "Sets the default `io.opentelemetry.api.trace.Tracer` instance used when creating spans. Returns `tracer`. See also [[get-tracer]]." - [tracer] + ^Tracer [tracer] (reset! default-tracer tracer)) (defn- get-default-tracer! @@ -81,7 +82,7 @@ (Span/fromContext context))) (defprotocol ^:private AsSpanContext - (^:no-doc span-context [x])) + (^:no-doc ^SpanContext span-context [x])) (extend-protocol AsSpanContext SpanContext @@ -97,9 +98,9 @@ (defn get-span-context "Returns the given `SpanContext`, or extracts it from the given span or context. If no argument is given, extract from the bound or current context." - ([] + (^SpanContext [] (get-span-context (get-span))) - ([x] + (^SpanContext [x] (span-context x))) (defn- add-link diff --git a/clj-otel-api/src/steffan_westcott/clj_otel/context.clj b/clj-otel-api/src/steffan_westcott/clj_otel/context.clj index 4e4142b8..18bc002c 100644 --- a/clj-otel-api/src/steffan_westcott/clj_otel/context.clj +++ b/clj-otel-api/src/steffan_westcott/clj_otel/context.clj @@ -11,13 +11,13 @@ (defn root "Returns the root context that all other contexts are derived from." - [] + ^Context [] (Context/root)) (defn current "Returns the current context, which is stored in a thread local `Context` object. If no such context exists, the root context is returned instead." - [] + ^Context [] (Context/current)) (defn set-current! @@ -36,7 +36,7 @@ (defn dyn "Returns the bound context, which is stored in a Clojure dynamic var. If no context is bound, the current context is returned instead." - [] + ^Context [] (or *bound-context* (current))) (defmacro bind-context! @@ -61,8 +61,7 @@ (ContextKey/named (name k))))) (defprotocol AsContextKey - (context-key [k] - "Coerces k to a `ContextKey`.")) + (^ContextKey context-key [k] "Coerces k to a `ContextKey`.")) (extend-protocol AsContextKey ContextKey @@ -178,7 +177,7 @@ |----------------------|-------------| |`:context` | Context to merge with (default: bound or current context). |`:text-map-propagator`| Propagator used to extract data from the headers map (default: propagator set in global `OpenTelemetry` instance)." - ([headers] + (^Context [headers] (headers->merged-context headers {})) (^Context [headers diff --git a/clj-otel-api/src/steffan_westcott/clj_otel/propagator/w3c_baggage.clj b/clj-otel-api/src/steffan_westcott/clj_otel/propagator/w3c_baggage.clj index 596185fa..3b917301 100644 --- a/clj-otel-api/src/steffan_westcott/clj_otel/propagator/w3c_baggage.clj +++ b/clj-otel-api/src/steffan_westcott/clj_otel/propagator/w3c_baggage.clj @@ -6,5 +6,5 @@ (defn w3c-baggage-propagator "Returns an implementation of the [W3C specification for baggage header propagation](https://www.w3.org/TR/baggage/)." - [] + ^W3CBaggagePropagator [] (W3CBaggagePropagator/getInstance)) \ No newline at end of file diff --git a/clj-otel-api/src/steffan_westcott/clj_otel/propagator/w3c_trace_context.clj b/clj-otel-api/src/steffan_westcott/clj_otel/propagator/w3c_trace_context.clj index 81f73387..290c1c4d 100644 --- a/clj-otel-api/src/steffan_westcott/clj_otel/propagator/w3c_trace_context.clj +++ b/clj-otel-api/src/steffan_westcott/clj_otel/propagator/w3c_trace_context.clj @@ -6,5 +6,5 @@ (defn w3c-trace-context-propagator "Returns an implementation of the [W3C Trace Context propagation protocol](https://www.w3.org/TR/trace-context/)." - [] + ^W3CTraceContextPropagator [] (W3CTraceContextPropagator/getInstance)) \ No newline at end of file diff --git a/clj-otel-api/src/steffan_westcott/clj_otel/util.clj b/clj-otel-api/src/steffan_westcott/clj_otel/util.clj index 4121735b..75a4bff3 100644 --- a/clj-otel-api/src/steffan_westcott/clj_otel/util.clj +++ b/clj-otel-api/src/steffan_westcott/clj_otel/util.clj @@ -6,8 +6,7 @@ (java.util.concurrent TimeUnit))) (defprotocol AsDuration - (duration [d] - "Coerce to a `Duration` instance.")) + (^Duration duration [d] "Coerce to a `Duration` instance.")) (extend-protocol AsDuration Duration @@ -33,7 +32,8 @@ t)) (defprotocol AsQualifiedName - (qualified-name [x] + (^String qualified-name + [x] "Given a keyword or symbol, returns the name converted to follow OpenTelemetry conventions for attribute names; the name is converted to a snake_case string, where namespace and name are separated by `.`. Given any diff --git a/clj-otel-contrib-aws-resources/src/steffan_westcott/clj_otel/resource/aws.clj b/clj-otel-contrib-aws-resources/src/steffan_westcott/clj_otel/resource/aws.clj index a7ac1fc7..bd43ab2b 100644 --- a/clj-otel-contrib-aws-resources/src/steffan_westcott/clj_otel/resource/aws.clj +++ b/clj-otel-contrib-aws-resources/src/steffan_westcott/clj_otel/resource/aws.clj @@ -5,34 +5,35 @@ Ec2Resource EcsResource EksResource - LambdaResource))) + LambdaResource) + (io.opentelemetry.sdk.resources Resource))) (defn beanstalk-resource "Returns a `Resource` which provides information about the current EC2 instance if running on AWS Elastic Beanstalk." - [] + ^Resource [] (BeanstalkResource/get)) (defn ec2-resource "Returns a `Resource` which provides information about the current EC2 instance if running on AWS EC2." - [] + ^Resource [] (Ec2Resource/get)) (defn ecs-resource "Returns a `Resource` which provides information about the current ECS container if running on AWS ECS." - [] + ^Resource [] (EcsResource/get)) (defn eks-resource "Returns a `Resource` which provides information about the current ECS container if running on AWS EKS." - [] + ^Resource [] (EksResource/get)) (defn lambda-resource "Returns a `Resource` which provides information about the AWS Lambda function." - [] + ^Resource [] (LambdaResource/get)) \ No newline at end of file diff --git a/clj-otel-contrib-aws-xray-propagator/src/steffan_westcott/clj_otel/propagator/aws_xray.clj b/clj-otel-contrib-aws-xray-propagator/src/steffan_westcott/clj_otel/propagator/aws_xray.clj index dd0a57b9..a36d78ae 100644 --- a/clj-otel-contrib-aws-xray-propagator/src/steffan_westcott/clj_otel/propagator/aws_xray.clj +++ b/clj-otel-contrib-aws-xray-propagator/src/steffan_westcott/clj_otel/propagator/aws_xray.clj @@ -6,5 +6,5 @@ (defn aws-xray-propagator "Returns an implementation of the [AWS X-Ray Trace header propagation protocol](https://docs.aws.amazon.com/xray/latest/devguide/xray-concepts.html#xray-concepts-tracingheader)." - [] + ^AwsXrayPropagator [] (AwsXrayPropagator/getInstance)) diff --git a/clj-otel-exporter-jaeger-grpc/src/steffan_westcott/clj_otel/exporter/jaeger_grpc.clj b/clj-otel-exporter-jaeger-grpc/src/steffan_westcott/clj_otel/exporter/jaeger_grpc.clj index 0531ed14..4f7ae5a5 100644 --- a/clj-otel-exporter-jaeger-grpc/src/steffan_westcott/clj_otel/exporter/jaeger_grpc.clj +++ b/clj-otel-exporter-jaeger-grpc/src/steffan_westcott/clj_otel/exporter/jaeger_grpc.clj @@ -19,9 +19,10 @@ |`:x509-trust-manager` | `^X509TrustManager` \"bring your own SSLContext\" alternative to setting certificate bytes when using TLS. |`:timeout` | Maximum time to wait for export of a batch of spans. Value is either a `Duration` or a vector `[amount ^TimeUnit unit]` (default: 10s). |`:compression` | Method used to compress payloads. Value is string `\"gzip\"` or `\"none\"` (default: `\"none\"`)." - ([] + (^JaegerGrpcSpanExporter [] (span-exporter {})) - ([{:keys [endpoint trusted-certificates-pem client-private-key-pem client-certificates-pem + (^JaegerGrpcSpanExporter + [{:keys [endpoint trusted-certificates-pem client-private-key-pem client-certificates-pem ssl-context x509-trust-manager timeout compression]}] (let [builder (cond-> (JaegerGrpcSpanExporter/builder) endpoint (.setEndpoint endpoint) diff --git a/clj-otel-exporter-jaeger-thrift/src/steffan_westcott/clj_otel/exporter/jaeger_thrift.clj b/clj-otel-exporter-jaeger-thrift/src/steffan_westcott/clj_otel/exporter/jaeger_thrift.clj index b48233e5..606ab6b6 100644 --- a/clj-otel-exporter-jaeger-thrift/src/steffan_westcott/clj_otel/exporter/jaeger_thrift.clj +++ b/clj-otel-exporter-jaeger-thrift/src/steffan_westcott/clj_otel/exporter/jaeger_thrift.clj @@ -12,9 +12,9 @@ |-----------|-------------| |`:endpoint`| Jaeger endpoint, used with the default sender (default: `\"http://localhost:14268/api/traces\"`). |`:sender` | `ThriftSender` instance to use for communication with the backend (default: `ThriftSender` instance configured to use `:endpoint`)." - ([] + (^JaegerThriftSpanExporter [] (span-exporter {})) - ([{:keys [endpoint thrift-sender]}] + (^JaegerThriftSpanExporter [{:keys [endpoint thrift-sender]}] (let [builder (cond-> (JaegerThriftSpanExporter/builder) endpoint (.setEndpoint endpoint) thrift-sender (.setThriftSender thrift-sender))] diff --git a/clj-otel-exporter-logging-otlp/src/steffan_westcott/clj_otel/exporter/logging_otlp.clj b/clj-otel-exporter-logging-otlp/src/steffan_westcott/clj_otel/exporter/logging_otlp.clj index 4a54c39e..d004c7a0 100644 --- a/clj-otel-exporter-logging-otlp/src/steffan_westcott/clj_otel/exporter/logging_otlp.clj +++ b/clj-otel-exporter-logging-otlp/src/steffan_westcott/clj_otel/exporter/logging_otlp.clj @@ -2,16 +2,18 @@ "Exporters that log telemetry data in OTLP JSON format using `java.util.logging`. Intended for debugging only." (:import (io.opentelemetry.exporter.logging.otlp OtlpJsonLoggingMetricExporter - OtlpJsonLoggingSpanExporter))) + OtlpJsonLoggingSpanExporter) + (io.opentelemetry.sdk.metrics.export MetricExporter) + (io.opentelemetry.sdk.trace.export SpanExporter))) (defn span-exporter "Returns a span exporter that logs every span in OTLP JSON format using `java.util.logging`." - [] + ^SpanExporter [] (OtlpJsonLoggingSpanExporter/create)) (defn metric-exporter "Returns a metric exporter that logs every metric in OTLP JSON format using `java.util.logging`." - [] + ^MetricExporter [] (OtlpJsonLoggingMetricExporter/create)) diff --git a/clj-otel-exporter-logging/src/steffan_westcott/clj_otel/exporter/logging.clj b/clj-otel-exporter-logging/src/steffan_westcott/clj_otel/exporter/logging.clj index 7f53995c..d5570358 100644 --- a/clj-otel-exporter-logging/src/steffan_westcott/clj_otel/exporter/logging.clj +++ b/clj-otel-exporter-logging/src/steffan_westcott/clj_otel/exporter/logging.clj @@ -6,7 +6,7 @@ (defn span-exporter "Returns a span exporter that logs every span using `java.util.logging`." - [] + ^LoggingSpanExporter [] (LoggingSpanExporter/create)) (defn metric-exporter @@ -16,8 +16,9 @@ | key | description | |--------------------------|-------------| |`:aggregation-temporality`| ^AggregationTemporality Time period over which metrics should be aggregated (default: `CUMULATIVE`)." - ([] + (^LoggingMetricExporter [] (LoggingMetricExporter/create)) - ([{:keys [aggregation-temporality] + (^LoggingMetricExporter + [{:keys [aggregation-temporality] :or {aggregation-temporality AggregationTemporality/CUMULATIVE}}] (LoggingMetricExporter/create aggregation-temporality))) \ No newline at end of file diff --git a/clj-otel-exporter-otlp/src/steffan_westcott/clj_otel/exporter/otlp/grpc/metrics.clj b/clj-otel-exporter-otlp/src/steffan_westcott/clj_otel/exporter/otlp/grpc/metrics.clj index 49f77505..bc5134ca 100644 --- a/clj-otel-exporter-otlp/src/steffan_westcott/clj_otel/exporter/otlp/grpc/metrics.clj +++ b/clj-otel-exporter-otlp/src/steffan_westcott/clj_otel/exporter/otlp/grpc/metrics.clj @@ -27,9 +27,10 @@ |`:timeout` | Maximum time to wait for export of a batch of spans. Value is either a `Duration` or a vector `[amount ^TimeUnit unit]` (default: 10s). |`:aggregation-temporality-selector`| Function which takes an `InstrumentType` and returns an `AggregationTemporality` (default: same as constantly `AggregationTemporality/CUMULATIVE`). |`:default-aggregation-selector` | Function which takes an `InstrumentType` and returns default `Aggregation` (default: same as `DefaultAggregationSelector/getDefault`)." - ([] + (^OtlpGrpcMetricExporter [] (metric-exporter {})) - ([{:keys [endpoint headers trusted-certificates-pem client-private-key-pem client-certificates-pem + (^OtlpGrpcMetricExporter + [{:keys [endpoint headers trusted-certificates-pem client-private-key-pem client-certificates-pem ssl-context x509-trust-manager compression-method timeout aggregation-temporality-selector default-aggregation-selector]}] (let [builder diff --git a/clj-otel-exporter-otlp/src/steffan_westcott/clj_otel/exporter/otlp/grpc/trace.clj b/clj-otel-exporter-otlp/src/steffan_westcott/clj_otel/exporter/otlp/grpc/trace.clj index 570c68dc..13a5961d 100644 --- a/clj-otel-exporter-otlp/src/steffan_westcott/clj_otel/exporter/otlp/grpc/trace.clj +++ b/clj-otel-exporter-otlp/src/steffan_westcott/clj_otel/exporter/otlp/grpc/trace.clj @@ -23,9 +23,10 @@ |`:compression-method` | Method used to compress payloads, `\"gzip\"` or `\"none\"` (default: `\"none\"`). |`:timeout` | Maximum time to wait for export of a batch of spans. Value is either a `Duration` or a vector `[amount ^TimeUnit unit]` (default: 10s). |`:meter-provider` | ^MeterProvider to collect metrics related to export (default: metrics not collected)." - ([] + (^OtlpGrpcSpanExporter [] (span-exporter {})) - ([{:keys [endpoint headers trusted-certificates-pem client-private-key-pem client-certificates-pem + (^OtlpGrpcSpanExporter + [{:keys [endpoint headers trusted-certificates-pem client-private-key-pem client-certificates-pem ssl-context x509-trust-manager compression-method timeout meter-provider]}] (let [builder (cond-> (OtlpGrpcSpanExporter/builder) endpoint (.setEndpoint endpoint) diff --git a/clj-otel-exporter-otlp/src/steffan_westcott/clj_otel/exporter/otlp/http/metrics.clj b/clj-otel-exporter-otlp/src/steffan_westcott/clj_otel/exporter/otlp/http/metrics.clj index 156426e5..6d2f7def 100644 --- a/clj-otel-exporter-otlp/src/steffan_westcott/clj_otel/exporter/otlp/http/metrics.clj +++ b/clj-otel-exporter-otlp/src/steffan_westcott/clj_otel/exporter/otlp/http/metrics.clj @@ -23,9 +23,10 @@ |`:compression-method` | Method used to compress payloads, `\"gzip\"` or `\"none\"` (default: `\"none\"`). |`:timeout` | Maximum time to wait for export of a batch of spans. Value is either a `Duration` or a vector `[amount ^TimeUnit unit]` (default: 10s). |`:aggregation-temporality-selector`| Function which takes an `InstrumentType` and returns an `AggregationTemporality` (default: constantly `AggregationTemporality/CUMULATIVE`)." - ([] + (^OtlpHttpMetricExporter [] (metric-exporter {})) - ([{:keys [endpoint headers trusted-certificates-pem client-private-key-pem client-certificates-pem + (^OtlpHttpMetricExporter + [{:keys [endpoint headers trusted-certificates-pem client-private-key-pem client-certificates-pem compression-method timeout aggregation-temporality-selector]}] (let [builder (cond-> (OtlpHttpMetricExporter/builder) endpoint (.setEndpoint endpoint) diff --git a/clj-otel-exporter-otlp/src/steffan_westcott/clj_otel/exporter/otlp/http/trace.clj b/clj-otel-exporter-otlp/src/steffan_westcott/clj_otel/exporter/otlp/http/trace.clj index cf0af64b..a9808738 100644 --- a/clj-otel-exporter-otlp/src/steffan_westcott/clj_otel/exporter/otlp/http/trace.clj +++ b/clj-otel-exporter-otlp/src/steffan_westcott/clj_otel/exporter/otlp/http/trace.clj @@ -22,9 +22,10 @@ |`:compression-method` | Method used to compress payloads, `\"gzip\"` or `\"none\"` (default: `\"none\"`). |`:timeout` | Maximum time to wait for export of a batch of spans. Value is either a `Duration` or a vector `[amount ^TimeUnit unit]` (default: 10s). |`:meter-provider` | ^MeterProvider to collect metrics related to export (default: metrics not collected)." - ([] + (^OtlpHttpSpanExporter [] (span-exporter {})) - ([{:keys [endpoint headers trusted-certificates-pem client-private-key-pem client-certificates-pem + (^OtlpHttpSpanExporter + [{:keys [endpoint headers trusted-certificates-pem client-private-key-pem client-certificates-pem compression-method timeout meter-provider]}] (let [builder (cond-> (OtlpHttpSpanExporter/builder) endpoint (.setEndpoint endpoint) diff --git a/clj-otel-exporter-prometheus/src/steffan_westcott/clj_otel/exporter/prometheus.clj b/clj-otel-exporter-prometheus/src/steffan_westcott/clj_otel/exporter/prometheus.clj index 31e70d43..b0b54da5 100644 --- a/clj-otel-exporter-prometheus/src/steffan_westcott/clj_otel/exporter/prometheus.clj +++ b/clj-otel-exporter-prometheus/src/steffan_westcott/clj_otel/exporter/prometheus.clj @@ -11,9 +11,9 @@ |`:host` | The host to bind to (default: `\"0.0.0.0\"`). |`:port` | The port to bind to (default: `9464`). |`:executor`| `ExecutorService` to use for the Prometheus HTTP server (default: a fixed pool of 5 daemon threads)." - ([] + (^PrometheusHttpServer [] (http-server {})) - ([{:keys [host port executor]}] + (^PrometheusHttpServer [{:keys [host port executor]}] (let [builder (cond-> (PrometheusHttpServer/builder) host (.setHost host) port (.setPort port) diff --git a/clj-otel-exporter-zipkin/src/steffan_westcott/clj_otel/exporter/zipkin.clj b/clj-otel-exporter-zipkin/src/steffan_westcott/clj_otel/exporter/zipkin.clj index 889f284a..662bb959 100644 --- a/clj-otel-exporter-zipkin/src/steffan_westcott/clj_otel/exporter/zipkin.clj +++ b/clj-otel-exporter-zipkin/src/steffan_westcott/clj_otel/exporter/zipkin.clj @@ -18,9 +18,10 @@ |`:local-ip-address-fn` | 0-arg function that returns `nil` or `InetAddress` of local Zipkin endpoint (default: fn that returns local IP address captured when exporter created). |`:compression` | Method used to compress payloads. Value is string `\"gzip\"` or `\"none\"` (default: `\"gzip\"`). |`:meter-provider` | ^MeterProvider to collect metrics related to export (default: metrics not collected)." - ([] + (^ZipkinSpanExporter [] (span-exporter {})) - ([{:keys [endpoint read-timeout sender encoder local-ip-address-fn compression meter-provider]}] + (^ZipkinSpanExporter + [{:keys [endpoint read-timeout sender encoder local-ip-address-fn compression meter-provider]}] (let [builder (cond-> (ZipkinSpanExporter/builder) endpoint (.setEndpoint endpoint) read-timeout (.setReadTimeout (util/duration read-timeout)) diff --git a/clj-otel-extension-trace-propagators/src/steffan_westcott/clj_otel/propagator/b3.clj b/clj-otel-extension-trace-propagators/src/steffan_westcott/clj_otel/propagator/b3.clj index 6ecb951f..f52dda2e 100644 --- a/clj-otel-extension-trace-propagators/src/steffan_westcott/clj_otel/propagator/b3.clj +++ b/clj-otel-extension-trace-propagators/src/steffan_westcott/clj_otel/propagator/b3.clj @@ -10,9 +10,10 @@ | key | description | |----------------|-------------| |`:inject-format`| Header injection format, one of `:single-header` or `:multi-headers` (default: `:single-header`)." - ([] + (^B3Propagator [] (b3-propagator {})) - ([{:keys [inject-format] + (^B3Propagator + [{:keys [inject-format] :or {inject-format :single-header}}] (case inject-format :single-header (B3Propagator/injectingSingleHeader) diff --git a/clj-otel-extension-trace-propagators/src/steffan_westcott/clj_otel/propagator/jaeger.clj b/clj-otel-extension-trace-propagators/src/steffan_westcott/clj_otel/propagator/jaeger.clj index cb1107c6..66a841b4 100644 --- a/clj-otel-extension-trace-propagators/src/steffan_westcott/clj_otel/propagator/jaeger.clj +++ b/clj-otel-extension-trace-propagators/src/steffan_westcott/clj_otel/propagator/jaeger.clj @@ -4,5 +4,5 @@ (defn jaeger-propagator "Returns an implementation of the Jaeger propagation protocol." - [] + ^JaegerPropagator [] (JaegerPropagator/getInstance)) \ No newline at end of file diff --git a/clj-otel-extension-trace-propagators/src/steffan_westcott/clj_otel/propagator/open_tracing.clj b/clj-otel-extension-trace-propagators/src/steffan_westcott/clj_otel/propagator/open_tracing.clj index 5c704b67..dd947110 100644 --- a/clj-otel-extension-trace-propagators/src/steffan_westcott/clj_otel/propagator/open_tracing.clj +++ b/clj-otel-extension-trace-propagators/src/steffan_westcott/clj_otel/propagator/open_tracing.clj @@ -4,5 +4,5 @@ (defn trace-propagator "Returns an implementation of the protocol used by OpenTracing Basic Tracers." - [] + ^OtTracePropagator [] (OtTracePropagator/getInstance)) \ No newline at end of file diff --git a/clj-otel-instrumentation-resources/src/steffan_westcott/clj_otel/resource/resources.clj b/clj-otel-instrumentation-resources/src/steffan_westcott/clj_otel/resource/resources.clj index 0d10a45b..6add2b1c 100644 --- a/clj-otel-instrumentation-resources/src/steffan_westcott/clj_otel/resource/resources.clj +++ b/clj-otel-instrumentation-resources/src/steffan_westcott/clj_otel/resource/resources.clj @@ -4,30 +4,31 @@ HostResource OsResource ProcessResource - ProcessRuntimeResource))) + ProcessRuntimeResource) + (io.opentelemetry.sdk.resources Resource))) (defn container-resource "Returns a `Resource` with information about the container being run on if any." - [] + ^Resource [] (ContainerResource/get)) (defn host-resource "Returns a `Resource` with information about the current host." - [] + ^Resource [] (HostResource/get)) (defn os-resource "Returns a `Resource` with information about the current operating system." - [] + ^Resource [] (OsResource/get)) (defn process-resource "Returns a `Resource` with information about the current running process." - [] + ^Resource [] (ProcessResource/get)) (defn process-runtime-resource "Returns a `Resource` with information about the Java runtime." - [] + ^Resource [] (ProcessRuntimeResource/get)) \ No newline at end of file diff --git a/clj-otel-instrumentation-runtime-telemetry-java17/src/steffan_westcott/clj_otel/instrumentation/runtime_telemetry_java17.clj b/clj-otel-instrumentation-runtime-telemetry-java17/src/steffan_westcott/clj_otel/instrumentation/runtime_telemetry_java17.clj index cbdd492c..038f358f 100644 --- a/clj-otel-instrumentation-runtime-telemetry-java17/src/steffan_westcott/clj_otel/instrumentation/runtime_telemetry_java17.clj +++ b/clj-otel-instrumentation-runtime-telemetry-java17/src/steffan_westcott/clj_otel/instrumentation/runtime_telemetry_java17.clj @@ -33,9 +33,9 @@ |------|-------------| |`:jmx`| If true, include all JMX measurements, otherwise do not include any JMX measurements (default: true) |`:jfr`| Either a map or boolean value. If a map, the map keys are `JfrFeature` enum values, and the map boolean values determine if the feature should be enabled (true) or disabled (false). If not a map, the value determines if all JFR features should be enabled (true) or disabled (false) (default: See JfrFeature for each JFR feature default)." - ([] + (^RuntimeMetrics [] (register! {})) - ([opts] + (^RuntimeMetrics [opts] (register! (otel/get-default-otel!) opts)) ([open-telemetry {:keys [jmx jfr] diff --git a/clj-otel-instrumentation-runtime-telemetry-java8/src/steffan_westcott/clj_otel/instrumentation/runtime_telemetry_java8.clj b/clj-otel-instrumentation-runtime-telemetry-java8/src/steffan_westcott/clj_otel/instrumentation/runtime_telemetry_java8.clj index c61751a5..5dbd20f4 100644 --- a/clj-otel-instrumentation-runtime-telemetry-java8/src/steffan_westcott/clj_otel/instrumentation/runtime_telemetry_java8.clj +++ b/clj-otel-instrumentation-runtime-telemetry-java8/src/steffan_westcott/clj_otel/instrumentation/runtime_telemetry_java8.clj @@ -7,54 +7,55 @@ GarbageCollector MemoryPools Threads) - (java.lang AutoCloseable))) + (java.lang AutoCloseable) + (java.util List))) (defn register-buffer-pools! "Registers measurements that generate metrics about buffer pools and returns - a collection of AutoCloseable." - ([] + a list of AutoCloseable." + (^List [] (register-buffer-pools! (otel/get-default-otel!))) - ([open-telemetry] + (^List [open-telemetry] (BufferPools/registerObservers open-telemetry))) (defn register-classes! "Registers measurements that generate metrics about JVM classes and returns a - collection of AutoCloseable." - ([] + list of AutoCloseable." + (^List [] (register-classes! (otel/get-default-otel!))) - ([open-telemetry] + (^List [open-telemetry] (Classes/registerObservers open-telemetry))) (defn register-cpu! "Registers measurements that generate metrics about the CPU and returns a - collection of AutoCloseable." - ([] + list of AutoCloseable." + (^List [] (register-cpu! (otel/get-default-otel!))) - ([open-telemetry] + (^List [open-telemetry] (Cpu/registerObservers open-telemetry))) (defn register-garbage-collector! "Registers measurements that generate metrics about the garbage collector and - returns a collection of AutoCloseable." - ([] + list a collection of AutoCloseable." + (^List [] (register-garbage-collector! (otel/get-default-otel!))) - ([open-telemetry] + (^List [open-telemetry] (GarbageCollector/registerObservers open-telemetry))) (defn register-memory-pools! "Registers measurements that generate metrics about JVM memory pools and - returns a collection of AutoCloseable." - ([] + returns a list of AutoCloseable." + (^List [] (register-memory-pools! (otel/get-default-otel!))) - ([open-telemetry] + (^List [open-telemetry] (MemoryPools/registerObservers open-telemetry))) (defn register-threads! "Registers measurements that generate metrics about JVM threads and returns a - collection of AutoCloseable." - ([] + list of AutoCloseable." + (^List [] (register-threads! (otel/get-default-otel!))) - ([open-telemetry] + (^List [open-telemetry] (Threads/registerObservers open-telemetry))) (defn register! diff --git a/clj-otel-sdk-extension-autoconfigure/src/steffan_westcott/clj_otel/sdk/autoconfigure.clj b/clj-otel-sdk-extension-autoconfigure/src/steffan_westcott/clj_otel/sdk/autoconfigure.clj index 6382f858..9675db6d 100644 --- a/clj-otel-sdk-extension-autoconfigure/src/steffan_westcott/clj_otel/sdk/autoconfigure.clj +++ b/clj-otel-sdk-extension-autoconfigure/src/steffan_westcott/clj_otel/sdk/autoconfigure.clj @@ -3,7 +3,8 @@ properties. See https://github.com/open-telemetry/opentelemetry-java/tree/main/sdk-extensions/autoconfigure for configuration options." (:require [steffan-westcott.clj-otel.api.otel :as otel]) - (:import (io.opentelemetry.sdk.autoconfigure AutoConfiguredOpenTelemetrySdk))) + (:import (io.opentelemetry.sdk OpenTelemetrySdk) + (io.opentelemetry.sdk.autoconfigure AutoConfiguredOpenTelemetrySdk))) (defn init-otel-sdk! "Returns an `OpenTelemetrySdk` instance, configured by the OpenTelemetry Java @@ -21,8 +22,9 @@ |`:set-as-default` | If true, sets the configured SDK instance as the default `OpenTelemetry` instance declared and used by `clj-otel` (default: `true`). |`:set-as-global` | If true, sets the configured SDK instance as the global `OpenTelemetry` instance declared by Java OpenTelemetry (default: `false`). |`:register-shutdown-hook`| If true, registers a JVM shutdown hook to close the configured SDK instance (default: `true`)." - ([] (init-otel-sdk! {})) - ([{:keys [set-as-default set-as-global register-shutdown-hook] + (^OpenTelemetrySdk [] (init-otel-sdk! {})) + (^OpenTelemetrySdk + [{:keys [set-as-default set-as-global register-shutdown-hook] :or {set-as-default true set-as-global false register-shutdown-hook true}}] diff --git a/clj-otel-sdk-extension-jaeger-remote-sampler/src/steffan_westcott/clj_otel/sdk/jaeger_remote_sampler.clj b/clj-otel-sdk-extension-jaeger-remote-sampler/src/steffan_westcott/clj_otel/sdk/jaeger_remote_sampler.clj index 7bec06c7..82e92b74 100644 --- a/clj-otel-sdk-extension-jaeger-remote-sampler/src/steffan_westcott/clj_otel/sdk/jaeger_remote_sampler.clj +++ b/clj-otel-sdk-extension-jaeger-remote-sampler/src/steffan_westcott/clj_otel/sdk/jaeger_remote_sampler.clj @@ -19,6 +19,7 @@ |`:x509-trust-manager` | `^X509TrustManager` \"bring your own SSLContext\" alternative to setting certificate bytes when using TLS. |`:polling-interval` | Polling interval for configuration updates. Value is either a `Duration` or a vector `[amount ^TimeUnit unit]` (default: 60s). |`:initial-sampler` | Initial sampler that is used before sampling configuration is obtained (default: `{:parent-based {:root {:ratio 0.001}}}`)." + ^JaegerRemoteSampler [{:keys [service-name endpoint trusted-certificates-pem client-private-key-pem client-certificates-pem ssl-context x509-trust-manager polling-interval initial-sampler]}] diff --git a/clj-otel-sdk/src/steffan_westcott/clj_otel/sdk/meter_provider.clj b/clj-otel-sdk/src/steffan_westcott/clj_otel/sdk/meter_provider.clj index b3b270ee..bb06bf17 100644 --- a/clj-otel-sdk/src/steffan_westcott/clj_otel/sdk/meter_provider.clj +++ b/clj-otel-sdk/src/steffan_westcott/clj_otel/sdk/meter_provider.clj @@ -20,7 +20,7 @@ |`:metric-exporter`| `MetricExporter` instance (required). |`:interval` | Interval between each export. Value is either a `Duration` or a vector `[amount ^TimeUnit unit]` (default: 60s). |`:executor` | `ScheduledExecutorService` instance for executing exports (default: thread pool with one daemon thread)." - [{:keys [metric-exporter interval executor]}] + ^PeriodicMetricReader [{:keys [metric-exporter interval executor]}] (let [builder (cond-> (PeriodicMetricReader/builder metric-exporter) interval (.setInterval (util/duration interval)) executor (.setExecutor executor))] @@ -55,7 +55,7 @@ (Aggregation/defaultAggregation)))) (defn- predicate - [pred] + ^Predicate [pred] (reify Predicate (test [_this x] @@ -105,7 +105,7 @@ (defn ^:no-doc sdk-meter-provider "Internal function that returns a `SdkMeterProvider`. See namespace `steffan-westcott.clj-otel.sdk.otel-sdk`" - [{:keys [readers views resource clock]}] + ^SdkMeterProvider [{:keys [readers views resource clock]}] (let [builder (cond-> (SdkMeterProvider/builder) readers (register-metric-readers readers) views (register-views views) diff --git a/clj-otel-sdk/src/steffan_westcott/clj_otel/sdk/otel_sdk.clj b/clj-otel-sdk/src/steffan_westcott/clj_otel/sdk/otel_sdk.clj index d84edc66..6c4d1cc0 100644 --- a/clj-otel-sdk/src/steffan_westcott/clj_otel/sdk/otel_sdk.clj +++ b/clj-otel-sdk/src/steffan_westcott/clj_otel/sdk/otel_sdk.clj @@ -169,6 +169,7 @@ |--------------------|-------------| |`:max-buckets` | Maximum number of positive and negative buckets (default: implementation defined) |`:max-scale` | Maximum and initial scale (required if `:max-buckets` is specified)." + ^OpenTelemetrySdk [service-name {:keys [set-as-default set-as-global register-shutdown-hook resources propagators tracer-provider meter-provider] diff --git a/clj-otel-sdk/src/steffan_westcott/clj_otel/sdk/propagators.clj b/clj-otel-sdk/src/steffan_westcott/clj_otel/sdk/propagators.clj index 11be8f4c..68325dd6 100644 --- a/clj-otel-sdk/src/steffan_westcott/clj_otel/sdk/propagators.clj +++ b/clj-otel-sdk/src/steffan_westcott/clj_otel/sdk/propagators.clj @@ -12,6 +12,6 @@ (defn context-propagators "Returns a `ContextPropagators` instance containing the given ordered collection of `TextMapPropagator`s." - [text-map-propagators] + ^ContextPropagators [text-map-propagators] (let [^Iterable props (vec text-map-propagators)] (ContextPropagators/create (TextMapPropagator/composite props)))) diff --git a/clj-otel-sdk/src/steffan_westcott/clj_otel/sdk/resources.clj b/clj-otel-sdk/src/steffan_westcott/clj_otel/sdk/resources.clj index 8c1a244d..a412f9b1 100644 --- a/clj-otel-sdk/src/steffan_westcott/clj_otel/sdk/resources.clj +++ b/clj-otel-sdk/src/steffan_westcott/clj_otel/sdk/resources.clj @@ -6,8 +6,7 @@ (io.opentelemetry.sdk.resources Resource))) (defprotocol ^:private AsResource - (as-Resource [resource] - "Coerce to a `Resource` instance.")) + (^Resource as-Resource [resource] "Coerce to a `Resource` instance.")) (extend-protocol AsResource Resource @@ -21,7 +20,7 @@ "Given the service name and a collection of `Resource` instances, returns the merge of these with the default SDK resource as a single `Resource` object." - [service-name resources] + ^Resource [service-name resources] (let [service-resource {:attributes {ResourceAttributes/SERVICE_NAME service-name}} resources' (cons service-resource resources)] (reduce #(.merge ^Resource %1 (as-Resource %2)) (Resource/getDefault) resources'))) diff --git a/clj-otel-sdk/src/steffan_westcott/clj_otel/sdk/tracer_provider.clj b/clj-otel-sdk/src/steffan_westcott/clj_otel/sdk/tracer_provider.clj index ab90d6fc..ddab55ee 100644 --- a/clj-otel-sdk/src/steffan_westcott/clj_otel/sdk/tracer_provider.clj +++ b/clj-otel-sdk/src/steffan_westcott/clj_otel/sdk/tracer_provider.clj @@ -12,7 +12,7 @@ (io.opentelemetry.sdk.trace.samplers Sampler))) (defprotocol ^:private AsSpanLimits - (as-SpanLimits [span-limits])) + (^SpanLimits as-SpanLimits [span-limits])) (extend-protocol AsSpanLimits SpanLimits @@ -31,7 +31,7 @@ (.build builder)))) (defprotocol ^:private AsSpanLimitsSupplier - (as-SpanLimits-Supplier [supplier])) + (^Supplier as-SpanLimits-Supplier [supplier])) (extend-protocol AsSpanLimitsSupplier Supplier @@ -45,7 +45,8 @@ (as-SpanLimits (supplier)))))) (defprotocol AsSampler - (as-Sampler [sampler] + (^Sampler as-Sampler + [sampler] "Coerce to `Sampler`. May be given a `:sampler` option map, see `steffan-westcott.clj-otel.sdk.otel-sdk/init-otel-sdk!`.")) @@ -76,7 +77,7 @@ parent-based (map->ParentBasedSampler parent-based)))) (defprotocol ^:private AsSpanProcessor - (as-SpanProcessor [span-processor])) + (^SpanProcessor as-SpanProcessor [span-processor])) (defn- set-span-limits ^SdkTracerProviderBuilder [^SdkTracerProviderBuilder builder span-limits] @@ -115,6 +116,7 @@ (defn sdk-tracer-provider "Internal function that returns a `SdkTracerProvider`. See namespace `steffan-westcott.clj-otel.sdk.otel-sdk`" + ^SdkTracerProvider [{:keys [span-processors span-limits sampler resource id-generator clock] :or {span-processors []}}] (let [builder (cond-> (add-span-processors (SdkTracerProvider/builder) span-processors)