Skip to content

Commit 0711350

Browse files
committed
Initial cut at moving Entity SDK to have correpsonding API.
- Creates an API matching EntityProvider OTEP - Updates EntityDetector to be ResourceDetector - Creates synchronous "update resource with this entity" method. - Adds wiring for incubating API + incubating SDK Note: Still have some thoughts and ideas about a formal API, this may still change.
1 parent 34b6f60 commit 0711350

File tree

23 files changed

+394
-216
lines changed

23 files changed

+394
-216
lines changed

sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/entities/Entity.java renamed to api/incubator/src/main/java/io/opentelemetry/api/incubator/entities/Entity.java

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
* SPDX-License-Identifier: Apache-2.0
44
*/
55

6-
package io.opentelemetry.sdk.extension.incubator.entities;
6+
package io.opentelemetry.api.incubator.entities;
77

88
import io.opentelemetry.api.common.Attributes;
99
import javax.annotation.Nullable;
@@ -59,13 +59,4 @@ public interface Entity {
5959
* Returns a new {@link EntityBuilder} instance populated with the data of this {@link Entity}.
6060
*/
6161
EntityBuilder toBuilder();
62-
63-
/**
64-
* Returns a new {@link EntityBuilder} instance for creating arbitrary {@link Entity}.
65-
*
66-
* @param entityType the entity type string of this entity.
67-
*/
68-
public static EntityBuilder builder(String entityType) {
69-
return PassthroughEntity.builder(entityType);
70-
}
7162
}

sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/entities/EntityBuilder.java renamed to api/incubator/src/main/java/io/opentelemetry/api/incubator/entities/EntityBuilder.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
* SPDX-License-Identifier: Apache-2.0
44
*/
55

6-
package io.opentelemetry.sdk.extension.incubator.entities;
6+
package io.opentelemetry.api.incubator.entities;
77

88
import io.opentelemetry.api.common.Attributes;
99
import io.opentelemetry.api.common.AttributesBuilder;
@@ -25,15 +25,15 @@ public interface EntityBuilder {
2525
/**
2626
* Modify the descriptive attributes of this Entity.
2727
*
28-
* @param f A thunk which manipulates descriptive attributes.
28+
* @param f A {@link Consumer} which builds the descriptive attributes.
2929
* @return this
3030
*/
3131
EntityBuilder withDescription(Consumer<AttributesBuilder> f);
3232

3333
/**
3434
* Modify the identifying attributes of this Entity.
3535
*
36-
* @param f A thunk which manipulates identifying attributes.
36+
* @param f A {@link Consumer} which builds the identifying attributes.
3737
* @return this
3838
*/
3939
EntityBuilder withId(Consumer<AttributesBuilder> f);
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.api.incubator.entities;
7+
8+
import io.opentelemetry.api.OpenTelemetry;
9+
10+
/** Extension to {@link OpenTelemetry} that adds {@link ResourceProvider}. */
11+
public interface ExtendedOpenTelemetry extends OpenTelemetry {
12+
/** Returns the {@link ResourceProvider} for this {@link OpenTelemetry}. */
13+
default ResourceProvider getResourceProvider() {
14+
return ResourceProvider.noop();
15+
}
16+
17+
/** Returns the {@link Resource} that telemetry from this {@link OpenTelemetry} uses. */
18+
default Resource getResource() {
19+
return getResourceProvider().getResource();
20+
}
21+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.api.incubator.entities;
7+
8+
import io.opentelemetry.api.common.Attributes;
9+
10+
final class NoopEntity implements Entity {
11+
12+
@Override
13+
public String getType() {
14+
return "";
15+
}
16+
17+
@Override
18+
public Attributes getId() {
19+
return Attributes.empty();
20+
}
21+
22+
@Override
23+
public Attributes getDescription() {
24+
return Attributes.empty();
25+
}
26+
27+
@Override
28+
public String getSchemaUrl() {
29+
return "";
30+
}
31+
32+
@Override
33+
public EntityBuilder toBuilder() {
34+
return new NoopEntityBuilder();
35+
}
36+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.api.incubator.entities;
7+
8+
import io.opentelemetry.api.common.AttributesBuilder;
9+
import java.util.function.Consumer;
10+
11+
final class NoopEntityBuilder implements EntityBuilder {
12+
@Override
13+
public EntityBuilder setSchemaUrl(String schemaUrl) {
14+
return this;
15+
}
16+
17+
@Override
18+
public EntityBuilder withDescription(Consumer<AttributesBuilder> f) {
19+
return this;
20+
}
21+
22+
@Override
23+
public EntityBuilder withId(Consumer<AttributesBuilder> f) {
24+
return this;
25+
}
26+
27+
@Override
28+
public Entity build() {
29+
return new NoopEntity();
30+
}
31+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.api.incubator.entities;
7+
8+
final class NoopResource implements Resource {
9+
10+
@Override
11+
public boolean addOrUpdate(Entity e) {
12+
return false;
13+
}
14+
15+
@Override
16+
public boolean removeEntity(Entity e) {
17+
return false;
18+
}
19+
20+
@Override
21+
public EntityBuilder createEntity(String entityType) {
22+
return new NoopEntityBuilder();
23+
}
24+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.api.incubator.entities;
7+
8+
final class NoopResourceProvider implements ResourceProvider {
9+
10+
@Override
11+
public Resource getResource() {
12+
return new NoopResource();
13+
}
14+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.api.incubator.entities;
7+
8+
/** The active resource for which Telemetry is being generated. */
9+
public interface Resource {
10+
/**
11+
* Adds an {@link Entity} to this resource.
12+
*
13+
* <p>If the entity already exists, this updates the description.
14+
*
15+
* @param e The entity
16+
* @return true if the entity was added or updated, false if there was a conflict.
17+
*/
18+
public boolean addOrUpdate(Entity e);
19+
20+
/**
21+
* Removes an {@link Entity} from this resource.
22+
*
23+
* @param e The entity
24+
* @return true if entity was found and removed.
25+
*/
26+
public boolean removeEntity(Entity e);
27+
28+
/**
29+
* Returns a builder that can construct an {@link Entity}.
30+
*
31+
* @param entityType The type of the entity.
32+
* @return A builder that can construct an entity.
33+
*/
34+
public EntityBuilder createEntity(String entityType);
35+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.api.incubator.entities;
7+
8+
/**
9+
* A registry for interacting with {@link Resource}s. The name <i>Provider</i> is for consistency
10+
* with other languages and it is <b>NOT</b> loaded using reflection.
11+
*
12+
* @see Resource
13+
*/
14+
public interface ResourceProvider {
15+
/**
16+
* Returns a no-op {@link ResourceProvider} which only creates no-op {@link Resource}s which do
17+
* not record nor are emitted.
18+
*/
19+
static ResourceProvider noop() {
20+
return new NoopResourceProvider();
21+
}
22+
23+
/** Returns the active {@link Resource} for which Telemetry is reported. */
24+
Resource getResource();
25+
}

sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/entities/EntityDetector.java

Lines changed: 0 additions & 22 deletions
This file was deleted.

0 commit comments

Comments
 (0)