Skip to content

Commit

Permalink
Added reflection metadata to aws-cloudwatch-logging module (#1860)
Browse files Browse the repository at this point in the history
* Added reflection metadata to aws-cloudwatch-logging module

* Added reflection metadata to aws-cloudwatch-logging module

* Added reflection metadata to aws-cloudwatch-logging module
  • Loading branch information
msupic committed Aug 31, 2023
1 parent 32e4747 commit db708fe
Show file tree
Hide file tree
Showing 6 changed files with 287 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,127 @@
[
{
"name": "io.micronaut.aws.cloudwatch.logging.CloudWatchLoggingAppender",
"queryAllPublicMethods": true,
"methods": [
{
"name": "<init>",
"parameterTypes": [

]
},
{
"name": "addBlackListLoggerName",
"parameterTypes": [
"java.lang.String"
]
},
{
"name": "setCreateGroupAndStream",
"parameterTypes": [
"boolean"
]
},
{
"name": "setDispatchOnStart",
"parameterTypes": [
"boolean"
]
},
{
"name": "setEncoder",
"parameterTypes": [
"ch.qos.logback.core.encoder.Encoder"
]
},
{
"name": "setGroupName",
"parameterTypes": [
"java.lang.String"
]
},
{
"name": "setMaxBatchSize",
"parameterTypes": [
"int"
]
},
{
"name": "setPublishPeriod",
"parameterTypes": [
"long"
]
},
{
"name": "setQueueSize",
"parameterTypes": [
"int"
]
},
{
"name": "setStreamName",
"parameterTypes": [
"java.lang.String"
]
}
]
},
{
"name": "io.micronaut.aws.cloudwatch.logging.CloudWatchJsonFormatter",
"queryAllPublicMethods": true,
"methods": [
{
"name": "<init>",
"parameterTypes": [

]
}
]
},
{
"name": "ch.qos.logback.core.encoder.LayoutWrappingEncoder",
"queryAllPublicMethods": true,
"methods": [
{
"name": "<init>",
"parameterTypes": [

]
},
{
"name": "setLayout",
"parameterTypes": [
"ch.qos.logback.core.Layout"
]
},
{
"name": "setParent",
"parameterTypes": [
"ch.qos.logback.core.spi.ContextAware"
]
}
]
},
{
"name": "ch.qos.logback.contrib.json.JsonLayoutBase",
"methods": [
{
"name": "setJsonFormatter",
"parameterTypes": [
"ch.qos.logback.contrib.json.JsonFormatter"
]
}
]
},
{
"name": "ch.qos.logback.contrib.json.classic.JsonLayout",
"queryAllPublicMethods": true,
"methods": [
{
"name": "<init>",
"parameterTypes": [

]
}
]
}
]
1 change: 1 addition & 0 deletions settings.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ include("function-client-aws")
include("test-suite")
include("test-suite-aws-sdk-v2")
include("test-suite-graal")
include("test-suite-graal-logging")
include("test-suite-groovy")
include("test-suite-http-server-tck-function-aws-api-gateway-proxy-alb")
include("test-suite-http-server-tck-function-aws-api-gateway-proxy-payloadv1")
Expand Down
14 changes: 14 additions & 0 deletions test-suite-graal-logging/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
plugins {
id("io.micronaut.application")
}

dependencies {
implementation(projects.micronautAwsCloudwatchLogging)
testImplementation(mnTest.micronaut.test.junit5)
}

micronaut {
importMicronautPlatform = false
runtime("netty")
testRuntime("junit5")
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
package example;

import io.micronaut.context.annotation.Replaces;
import jakarta.inject.Singleton;
import software.amazon.awssdk.awscore.exception.AwsServiceException;
import software.amazon.awssdk.core.exception.SdkClientException;
import software.amazon.awssdk.services.cloudwatchlogs.CloudWatchLogsClient;
import software.amazon.awssdk.services.cloudwatchlogs.model.DescribeLogStreamsRequest;
import software.amazon.awssdk.services.cloudwatchlogs.model.DescribeLogStreamsResponse;
import software.amazon.awssdk.services.cloudwatchlogs.model.InputLogEvent;
import software.amazon.awssdk.services.cloudwatchlogs.model.LogStream;
import software.amazon.awssdk.services.cloudwatchlogs.model.PutLogEventsRequest;
import software.amazon.awssdk.services.cloudwatchlogs.model.PutLogEventsResponse;

import java.util.ArrayList;
import java.util.List;

@Singleton
@Replaces(CloudWatchLogsClient.class)
public class CustomLogsClient implements CloudWatchLogsClient {

private final List<String> loggedMessages = new ArrayList<>();

@Override
public String serviceName() {
return null;
}

@Override
public void close() {

}

@Override
public DescribeLogStreamsResponse describeLogStreams(DescribeLogStreamsRequest describeLogStreamsRequest)
throws AwsServiceException, SdkClientException {
LogStream logStream = LogStream.builder()
.logStreamName("testStreamName")
.uploadSequenceToken("testSequenceToken")
.build();
return DescribeLogStreamsResponse.builder()
.logStreams(logStream)
.build();
}

@Override
public PutLogEventsResponse putLogEvents(PutLogEventsRequest putLogEventsRequest)
throws AwsServiceException, SdkClientException {
for (InputLogEvent inputLogEvent : putLogEventsRequest.logEvents()) {
loggedMessages.add(inputLogEvent.message());
}
return PutLogEventsResponse.builder()
.nextSequenceToken("testNextSequenceToken")
.build();
}

public List<String> getLoggedMessages() {
return loggedMessages;
}
}
30 changes: 30 additions & 0 deletions test-suite-graal-logging/src/main/resources/logback.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
<configuration>

<appender name='STDOUT' class='ch.qos.logback.core.ConsoleAppender'>
<encoder>
<pattern>%msg%n</pattern>
</encoder>
</appender>

<appender name="CLOUDWATCH" class="io.micronaut.aws.cloudwatch.logging.CloudWatchLoggingAppender">
<appender-ref ref="STDOUT"/>
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<layout class="ch.qos.logback.contrib.json.classic.JsonLayout">
<jsonFormatter class="io.micronaut.aws.cloudwatch.logging.CloudWatchJsonFormatter" />
</layout>
</encoder>
<blackListLoggerName>testLogger1</blackListLoggerName>
<blackListLoggerName>testLogger2</blackListLoggerName>
<createGroupAndStream>false</createGroupAndStream>
<groupName>testGroupName</groupName>
<streamName>testStreamName</streamName>
<dispatchOnStart>false</dispatchOnStart>
<queueSize>50</queueSize>
<publishPeriod>200</publishPeriod>
<maxBatchSize>15</maxBatchSize>
</appender>

<root level="INFO">
<appender-ref ref="CLOUDWATCH" />
</root>
</configuration>
55 changes: 55 additions & 0 deletions test-suite-graal-logging/src/test/java/example/LoggingTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
package example;

import io.micronaut.test.extensions.junit5.annotation.MicronautTest;
import jakarta.inject.Inject;
import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.List;
import java.util.concurrent.Callable;

import static org.junit.jupiter.api.Assertions.assertTrue;

@MicronautTest
public class LoggingTest {

public static final Logger log = LoggerFactory.getLogger("LoggingTest");

@Inject
CustomLogsClient customLogsClient;

@Test
void test() {
log.info("test message");

List<String> loggedMessages = customLogsClient.getLoggedMessages();

waitUntil(() -> !loggedMessages.isEmpty(), 10, 1);

String lastMessage = loggedMessages.get(loggedMessages.size() - 1);
assertTrue(lastMessage.contains("\"message\":\"test message\""));
}

private void waitUntil(Callable<Boolean> conditionEvaluator, int timeoutSeconds, int sleepTimeSeconds) {
Exception lastException = null;

long end = System.currentTimeMillis() + timeoutSeconds * 1000L;
while (System.currentTimeMillis() < end) {
try {
Thread.sleep(sleepTimeSeconds * 1000L);
} catch (InterruptedException e) {
// continue
}
try {
if (conditionEvaluator.call()) {
return;
}
} catch (Exception e) {
lastException = e;
}
}
String errorMessage = "Condition was not fulfilled within " + timeoutSeconds + " seconds";
throw lastException == null ? new IllegalStateException(errorMessage) : new IllegalStateException(errorMessage, lastException);
}
}

0 comments on commit db708fe

Please sign in to comment.