All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.opensearch.migrations.replay.tracing.IReplayContexts Maven / Gradle / Ivy

There is a newer version: 0.2.1.3
Show newest version
package org.opensearch.migrations.replay.tracing;

import java.time.Instant;

import io.opentelemetry.api.common.AttributeKey;
import io.opentelemetry.api.common.AttributesBuilder;

import org.opensearch.migrations.replay.datatypes.ISourceTrafficChannelKey;
import org.opensearch.migrations.replay.datatypes.ITrafficStreamKey;
import org.opensearch.migrations.replay.datatypes.UniqueReplayerRequestKey;
import org.opensearch.migrations.tracing.IScopedInstrumentationAttributes;
import org.opensearch.migrations.tracing.IWithTypedEnclosingScope;

public abstract class IReplayContexts {

    public static class ActivityNames {
        private ActivityNames() {}

        public static final String CHANNEL = "channel";
        public static final String TCP_CONNECTION = "tcpConnection";
        public static final String RECORD_LIFETIME = "recordLifetime";
        public static final String TRAFFIC_STREAM_LIFETIME = "trafficStreamLifetime";
        public static final String HTTP_TRANSACTION = "httpTransaction";
        public static final String ACCUMULATING_REQUEST = "accumulatingRequest";
        public static final String ACCUMULATING_RESPONSE = "accumulatingResponse";
        public static final String TRANSFORMATION = "transformation";
        public static final String SCHEDULED = "scheduled";
        public static final String TARGET_TRANSACTION = "targetTransaction";
        public static final String REQUEST_CONNECTING = "requestConnecting";
        public static final String REQUEST_SENDING = "requestSending";
        public static final String WAITING_FOR_RESPONSE = "waitingForResponse";
        public static final String RECEIVING_RESPONSE = "receivingResponse";
        public static final String TUPLE_COMPARISON = "comparingResults";
    }

    public static class MetricNames {
        private MetricNames() {}

        public static final String KAFKA_RECORD_READ = "kafkaRecordsRead";
        public static final String KAFKA_BYTES_READ = "kafkaBytesRead";
        public static final String TRAFFIC_STREAMS_READ = "trafficStreamsRead";
        public static final String TRANSFORM_HEADER_PARSE = "parsedHeader";
        public static final String TRANSFORM_PAYLOAD_PARSE_REQUIRED = "parsedPayload";
        public static final String TRANSFORM_PAYLOAD_PARSE_SUCCESS = "parsedPayloadSuccess";
        public static final String TRANSFORM_JSON_REQUIRED = "transformedJsonRequired";
        public static final String TRANSFORM_JSON_SUCCEEDED = "transformedJsonSucceeded";
        public static final String TRANSFORM_PAYLOAD_BYTES_IN = "originalPayloadBytesIn";
        public static final String TRANSFORM_UNCOMPRESSED_BYTES_IN = "uncompressedBytesIn";
        public static final String TRANSFORM_UNCOMPRESSED_BYTES_OUT = "uncompressedBytesOut";
        public static final String TRANSFORM_FINAL_PAYLOAD_BYTES_OUT = "finalPayloadBytesOut";
        public static final String TRANSFORM_SUCCESS = "transformSuccess";
        public static final String TRANSFORM_SKIPPED = "transformSkipped";
        public static final String TRANSFORM_ERROR = "transformError";
        public static final String TRANSFORM_BYTES_IN = "transformBytesIn";
        public static final String TRANSFORM_BYTES_OUT = "transformBytesOut";
        public static final String TRANSFORM_CHUNKS_IN = "transformChunksIn";
        public static final String TRANSFORM_CHUNKS_OUT = "transformChunksOut";
        public static final String NETTY_SCHEDULE_LAG = "scheduleLag";
        public static final String NUM_REQUEST_RETRIES = "numRetriedRequests";
        public static final String SOURCE_TO_TARGET_REQUEST_LAG = "lagBetweenSourceAndTargetRequests";
        public static final String ACTIVE_CHANNELS_YET_TO_BE_FULLY_DISCARDED = "activeReplayerChannels";
        public static final String NONRETRYABLE_CONNECTION_FAILURES = "nonRetryableConnectionFailures";
        public static final String ACTIVE_TARGET_CONNECTIONS = "activeTargetConnections";
        public static final String CONNECTIONS_OPENED = "connectionsOpened";
        public static final String CONNECTIONS_CLOSED = "connectionsClosedCount";
        public static final String BYTES_WRITTEN_TO_TARGET = "bytesWrittenToTarget";
        public static final String BYTES_READ_FROM_TARGET = "bytesReadFromTarget";
        public static final String TUPLE_COMPARISON = "tupleComparison";
    }

    public interface IAccumulationScope extends IScopedInstrumentationAttributes {}

    public interface IChannelKeyContext
        extends
            IAccumulationScope,
            org.opensearch.migrations.tracing.commoncontexts.IConnectionContext {
        String ACTIVITY_NAME = ActivityNames.CHANNEL;

        @Override
        default String getActivityName() {
            return ACTIVITY_NAME;
        }

        // do not add this as a property
        // because its components are already being added in the IConnectionContext implementation
        ISourceTrafficChannelKey getChannelKey();

        default String getConnectionId() {
            return getChannelKey().getConnectionId();
        }

        default String getNodeId() {
            return getChannelKey().getNodeId();
        }

        ISocketContext createSocketContext();

        void addFailedChannelCreation();
    }

    public interface ISocketContext extends IAccumulationScope, IWithTypedEnclosingScope {
        public static final String ACTIVITY_NAME = ActivityNames.TCP_CONNECTION;

        @Override
        default String getActivityName() {
            return ACTIVITY_NAME;
        }
    }

    public interface IKafkaRecordContext extends IAccumulationScope, IWithTypedEnclosingScope {
        String ACTIVITY_NAME = ActivityNames.RECORD_LIFETIME;

        @Override
        default String getActivityName() {
            return ACTIVITY_NAME;
        }

        static final AttributeKey RECORD_ID_KEY = AttributeKey.stringKey("recordId");

        String getRecordId();

        @Override
        default AttributesBuilder fillAttributesForSpansBelow(AttributesBuilder builder) {
            return IAccumulationScope.super.fillAttributesForSpansBelow(builder.put(RECORD_ID_KEY, getRecordId()));
        }

        ITrafficStreamsLifecycleContext createTrafficLifecyleContext(ITrafficStreamKey tsk);
    }

    public interface ITrafficStreamsLifecycleContext
        extends
            IAccumulationScope,
            IWithTypedEnclosingScope {
        String ACTIVITY_NAME = ActivityNames.TRAFFIC_STREAM_LIFETIME;

        @Override
        default String getActivityName() {
            return ACTIVITY_NAME;
        }

        ITrafficStreamKey getTrafficStreamKey();

        IChannelKeyContext getChannelKeyContext();

        default String getConnectionId() {
            return getChannelKey().getConnectionId();
        }

        default ISourceTrafficChannelKey getChannelKey() {
            return getChannelKeyContext().getChannelKey();
        }

        IReplayerHttpTransactionContext createHttpTransactionContext(
            UniqueReplayerRequestKey requestKey,
            Instant sourceTimestamp
        );
    }

    public interface IReplayerHttpTransactionContext
        extends
            org.opensearch.migrations.tracing.commoncontexts.IHttpTransactionContext,
            IAccumulationScope,
            IWithTypedEnclosingScope {
        AttributeKey REPLAYER_REQUEST_INDEX_KEY = AttributeKey.longKey("replayerRequestIndex");

        String ACTIVITY_NAME = ActivityNames.HTTP_TRANSACTION;

        @Override
        default String getActivityName() {
            return ACTIVITY_NAME;
        }

        UniqueReplayerRequestKey getReplayerRequestKey();

        IChannelKeyContext getChannelKeyContext();

        Instant getTimeOfOriginalRequest();

        default String getConnectionId() {
            return getChannelKey().getConnectionId();
        }

        default ISourceTrafficChannelKey getChannelKey() {
            return getChannelKeyContext().getChannelKey();
        }

        default long getSourceRequestIndex() {
            return getReplayerRequestKey().getSourceRequestIndex();
        }

        default long replayerRequestIndex() {
            return getReplayerRequestKey().getReplayerRequestIndex();
        }

        @Override
        default AttributesBuilder fillAttributesForSpansBelow(AttributesBuilder builder) {
            return org.opensearch.migrations.tracing.commoncontexts.IHttpTransactionContext.super.fillAttributesForSpansBelow(
                builder
            ).put(REPLAYER_REQUEST_INDEX_KEY, replayerRequestIndex());
        }

        IRequestAccumulationContext createRequestAccumulationContext();

        IResponseAccumulationContext createResponseAccumulationContext();

        IRequestTransformationContext createTransformationContext();

        IScheduledContext createScheduledContext(Instant timestamp);

        ITargetRequestContext createTargetRequestContext();

        ITupleHandlingContext createTupleContext();
    }

    public interface IRequestAccumulationContext
        extends
            IAccumulationScope,
            IWithTypedEnclosingScope {
        String ACTIVITY_NAME = ActivityNames.ACCUMULATING_REQUEST;

        @Override
        default String getActivityName() {
            return ACTIVITY_NAME;
        }
    }

    public interface IResponseAccumulationContext
        extends
            IAccumulationScope,
            IWithTypedEnclosingScope {
        String ACTIVITY_NAME = ActivityNames.ACCUMULATING_RESPONSE;

        @Override
        default String getActivityName() {
            return ACTIVITY_NAME;
        }
    }

    public interface IRequestTransformationContext
        extends
            IAccumulationScope,
            IWithTypedEnclosingScope {
        String ACTIVITY_NAME = ActivityNames.TRANSFORMATION;

        @Override
        default String getActivityName() {
            return ACTIVITY_NAME;
        }

        void onHeaderParse();

        void onPayloadParse();

        void onPayloadParseSuccess();

        void onJsonPayloadParseRequired();

        void onJsonPayloadParseSucceeded();

        void onPayloadBytesIn(int inputSize);

        void onUncompressedBytesIn(int inputSize);

        void onUncompressedBytesOut(int inputSize);

        void onFinalBytesOut(int outputSize);

        void onTransformSuccess();

        void onTransformSkip();

        void onTransformFailure();

        void aggregateInputChunk(int sizeInBytes);

        void aggregateOutputChunk(int sizeInBytes);
    }

    public interface IScheduledContext
        extends
            IAccumulationScope,
            IWithTypedEnclosingScope {
        String ACTIVITY_NAME = ActivityNames.SCHEDULED;

        @Override
        default String getActivityName() {
            return ACTIVITY_NAME;
        }
    }

    public interface ITargetRequestContext
        extends
            IAccumulationScope,
            IWithTypedEnclosingScope {
        String ACTIVITY_NAME = ActivityNames.TARGET_TRANSACTION;

        @Override
        default String getActivityName() {
            return ACTIVITY_NAME;
        }

        void onBytesSent(int size);

        void onBytesReceived(int size);

        IRequestConnectingContext createHttpConnectingContext();

        IRequestSendingContext createHttpSendingContext();

        IWaitingForHttpResponseContext createWaitingForResponseContext();

        IReceivingHttpResponseContext createHttpReceivingContext();
    }

    public interface IRequestConnectingContext
        extends
        IAccumulationScope,
        IWithTypedEnclosingScope {
        String ACTIVITY_NAME = ActivityNames.REQUEST_CONNECTING;

        @Override
        default String getActivityName() {
            return ACTIVITY_NAME;
        }
    }

    public interface IRequestSendingContext
        extends
        IAccumulationScope,
        IWithTypedEnclosingScope {
        String ACTIVITY_NAME = ActivityNames.REQUEST_SENDING;

        @Override
        default String getActivityName() {
            return ACTIVITY_NAME;
        }
    }

    public interface IWaitingForHttpResponseContext
        extends
            IAccumulationScope,
            IWithTypedEnclosingScope {
        String ACTIVITY_NAME = ActivityNames.WAITING_FOR_RESPONSE;

        @Override
        default String getActivityName() {
            return ACTIVITY_NAME;
        }
    }

    public interface IReceivingHttpResponseContext
        extends
            IAccumulationScope,
            IWithTypedEnclosingScope {
        String ACTIVITY_NAME = ActivityNames.RECEIVING_RESPONSE;

        @Override
        default String getActivityName() {
            return ACTIVITY_NAME;
        }
    }

    public interface ITupleHandlingContext
        extends
            IAccumulationScope,
            IWithTypedEnclosingScope {
        String ACTIVITY_NAME = ActivityNames.TUPLE_COMPARISON;
        AttributeKey SOURCE_STATUS_CODE_KEY = AttributeKey.longKey("sourceStatusCode");
        AttributeKey TARGET_STATUS_CODE_KEY = AttributeKey.longKey("targetStatusCode");
        AttributeKey STATUS_CODE_MATCH_KEY = AttributeKey.booleanKey("statusCodesMatch");
        AttributeKey METHOD_KEY = AttributeKey.stringKey("method");
        AttributeKey HTTP_VERSION_KEY = AttributeKey.stringKey("version"); // for the span, not metric
        AttributeKey ENDPOINT_KEY = AttributeKey.stringKey("endpoint"); // for the span, not metric

        @Override
        default String getActivityName() {
            return ACTIVITY_NAME;
        }

        void setSourceStatus(Integer sourceStatus);

        void setTargetStatus(Integer targetStatus);

        void setMethod(String method);

        void setEndpoint(String endpointUrl);

        void setHttpVersion(String string);

        default UniqueReplayerRequestKey getReplayerRequestKey() {
            return getLogicalEnclosingScope().getReplayerRequestKey();
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy